Канонический пример QTranslator с реальным QLocale

Кажется, что большая часть документации по QTranslator и установка их для QApplication принять упрощенные случаи для QLocale,

В реальном мире языковой стандарт пользователя должен учитывать язык и страну, что обычно достигается при наличии файлов перевода сначала для языка (en), а затем дополнительные файлы перевода для каждой страны, использующей этот язык (en_US).

Использование по умолчанию QLocale()Какой самый элегантный способ загрузить соответствующие файлы перевода (один, два или ни одного, в зависимости от того, какие существуют)?

Вот некоторый код, который понимает, что это правильно, но немного слишком громоздко.

1 ответ

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());
}
Другие вопросы по тегам