Кажется, что большая часть документации по QTranslator
и установка их для QApplication
предполагать упрощенные случаи за QLocale
,
В реальном мире языковой стандарт пользователя должен учитывать язык и страну, что обычно достигается при наличии файлов перевода сначала для языка (en
), а затем дополнительные файлы перевода для каждой страны, использующей этот язык (en_US
).
Использование по умолчанию QLocale()
Какой самый элегантный способ загрузить соответствующие файлы перевода (один, два или ни одного, в зависимости от того, какие существуют)?
Вот некоторый код это правильно, но это слишком громоздко.
bool Application::installTranslator(QString localeName)
{
QTranslator* translator = new QTranslator(this);
QString fileToLoad = ":/translators/translation_" + localeName + ".qm";
if (!QFile::exists(fileToLoad))
return;
if (translator->load(fileToLoad)) // Caution this will perform stripping of '_' heuristic
QApplication::installTranslator(translator);
}
void Application::installTranslator()
{
QLocale locale;
boost::optional<QString> optLanguage = m_commandLineParser->getLanguage();
if (optLanguage)
locale = QLocale(optLanguage.get());
// Load language (en, de, etc.) translator first
QString language = locale.name().left(2);
installTranslator(language);
// Load country translator (en_US, de_CH, etc.) translator second
installTranslator(locale.name());
}
Других решений пока нет …