Load language translations only when matching the primary language

This commit is contained in:
Bill Somerville 2020-05-25 15:02:16 +01:00
parent 5f1aa8d52e
commit 9de87fb137
No known key found for this signature in database
GPG Key ID: D864B06D1E81618F

View File

@ -10,6 +10,7 @@
#include <QTemporaryFile> #include <QTemporaryFile>
#include <QDateTime> #include <QDateTime>
#include <QApplication> #include <QApplication>
#include <QLocale>
#include <QTranslator> #include <QTranslator>
#include <QRegularExpression> #include <QRegularExpression>
#include <QObject> #include <QObject>
@ -107,9 +108,14 @@ int main(int argc, char *argv[])
ExceptionCatchingApplication a(argc, argv); ExceptionCatchingApplication a(argc, argv);
try try
{ {
QLocale locale; // get the current system locale std::unique_ptr<QStringList> early_messages {new QStringList};
qDebug () << "locale: language:" << locale.language () << "script:" << locale.script ()
<< "country:" << locale.country () << "ui-languages:" << locale.uiLanguages (); QLocale locale; // get the current system locale
*early_messages << QString {"locale: language: %1 script: %2 country: %3 ui-languages: %4"}
.arg (QLocale::languageToString (locale.language ()))
.arg (QLocale::scriptToString (locale.script ()))
.arg (QLocale::countryToString (locale.country ()))
.arg (locale.uiLanguages ().join (", "));
setlocale (LC_NUMERIC, "C"); // ensure number forms are in setlocale (LC_NUMERIC, "C"); // ensure number forms are in
// consistent format, do this after // consistent format, do this after
// instantiating QApplication so // instantiating QApplication so
@ -139,18 +145,22 @@ int main(int argc, char *argv[])
for (QString locale_name : locale.uiLanguages ()) for (QString locale_name : locale.uiLanguages ())
{ {
auto language = locale_name.left (2); auto language = locale_name.left (2);
if (base_translator_from_resources.load ("wsjtx_" + language, ":/Translations")) if (locale.uiLanguages ().front ().left (2) == language)
{ {
qDebug () << QString {"Loaded base translation file from :/Translations based on language %1"}.arg (language); *early_messages << QString {"Trying %1"}.arg (language);
a.installTranslator (&base_translator_from_resources); if (base_translator_from_resources.load ("wsjtx_" + language, ":/Translations"))
break; {
*early_messages << QString {"Loaded base translation file from :/Translations based on language %1"}.arg (language);
a.installTranslator (&base_translator_from_resources);
break;
}
} }
} }
// now try and load the most specific translations (may be a // now try and load the most specific translations (may be a
// duplicate but we shouldn't care) // duplicate but we shouldn't care)
if (translator_from_resources.load (locale, "wsjtx", "_", ":/Translations")) if (translator_from_resources.load (locale, "wsjtx", "_", ":/Translations"))
{ {
qDebug () << "Loaded translations for current locale from resources"; *early_messages << "Loaded translations for current locale from resources";
a.installTranslator (&translator_from_resources); a.installTranslator (&translator_from_resources);
} }
@ -219,14 +229,14 @@ int main(int argc, char *argv[])
auto base_language = language.left (2); auto base_language = language.left (2);
if (base_translation_override_from_resources.load ("wsjtx_" + base_language, ":/Translations")) if (base_translation_override_from_resources.load ("wsjtx_" + base_language, ":/Translations"))
{ {
qDebug () << QString {"Loaded base translation file from :/Translations based on language %1"}.arg (base_language); *early_messages << QString {"Loaded base translation file from :/Translations based on language %1"}.arg (base_language);
a.installTranslator (&base_translation_override_from_resources); a.installTranslator (&base_translation_override_from_resources);
} }
// now load the requested translations (may be a duplicate // now load the requested translations (may be a duplicate
// but we shouldn't care) // but we shouldn't care)
if (translation_override_from_resources.load ("wsjtx_" + language , ":/Translations")) if (translation_override_from_resources.load ("wsjtx_" + language , ":/Translations"))
{ {
qDebug () << QString {"Loaded translation file from :/Translations based on language %1"}.arg (language); *early_messages << QString {"Loaded translation file from :/Translations based on language %1"}.arg (language);
a.installTranslator (&translation_override_from_resources); a.installTranslator (&translation_override_from_resources);
} }
} }
@ -246,18 +256,22 @@ int main(int argc, char *argv[])
for (QString locale_name : locale.uiLanguages ()) for (QString locale_name : locale.uiLanguages ())
{ {
auto language = locale_name.left (2); auto language = locale_name.left (2);
if (base_translator_from_cwd.load ("wsjtx_" + language)) if (locale.uiLanguages ().front ().left (2) == language)
{ {
qDebug () << QString {"Loaded base translation file from $cwd based on language %1"}.arg (language); *early_messages << QString {"Trying %1"}.arg (language);
a.installTranslator (&base_translator_from_cwd); if (base_translator_from_cwd.load ("wsjtx_" + language))
break; {
*early_messages << QString {"Loaded base translation file from $cwd based on language %1"}.arg (language);
a.installTranslator (&base_translator_from_cwd);
break;
}
} }
} }
// now try and load the most specific translations (may be a // now try and load the most specific translations (may be a
// duplicate but we shouldn't care) // duplicate but we shouldn't care)
if (translator_from_cwd.load (locale, "wsjtx", "_")) if (translator_from_cwd.load (locale, "wsjtx", "_"))
{ {
qDebug () << "loaded translations for current locale from a file"; *early_messages << "loaded translations for current locale from a file";
a.installTranslator (&translator_from_cwd); a.installTranslator (&translator_from_cwd);
} }
@ -276,14 +290,14 @@ int main(int argc, char *argv[])
auto base_language = language.left (2); auto base_language = language.left (2);
if (base_translation_override_from_cwd.load ("wsjtx_" + base_language)) if (base_translation_override_from_cwd.load ("wsjtx_" + base_language))
{ {
qDebug () << QString {"Loaded base translation file from $cwd based on language %1"}.arg (base_language); *early_messages << QString {"Loaded base translation file from $cwd based on language %1"}.arg (base_language);
a.installTranslator (&base_translation_override_from_cwd); a.installTranslator (&base_translation_override_from_cwd);
} }
// now load the requested translations (may be a duplicate // now load the requested translations (may be a duplicate
// but we shouldn't care) // but we shouldn't care)
if (translation_override_from_cwd.load ("wsjtx_" + language)) if (translation_override_from_cwd.load ("wsjtx_" + language))
{ {
qDebug () << QString {"loaded translation file from $cwd based on language %1"}.arg (language); *early_messages << QString {"loaded translation file from $cwd based on language %1"}.arg (language);
a.installTranslator (&translation_override_from_cwd); a.installTranslator (&translation_override_from_cwd);
} }
} }
@ -357,6 +371,13 @@ int main(int argc, char *argv[])
qDebug () << program_title (revision ()) + " - Program startup"; qDebug () << program_title (revision ()) + " - Program startup";
#endif #endif
// trace early messages now we have a trace file
for (auto const& message : *early_messages)
{
qDebug () << message;
}
early_messages.reset (); // free memory
// Create a unique writeable temporary directory in a suitable location // Create a unique writeable temporary directory in a suitable location
bool temp_ok {false}; bool temp_ok {false};
QString unique_directory {QApplication::applicationName ()}; QString unique_directory {QApplication::applicationName ()};