@@ -41,17 +41,19 @@ Translations::~Translations() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Translations::LoadTranslation(const QString &prefix, const QString &path, const QString &language) {
|
bool Translations::LoadTranslation(const QString &prefix, const QString &path, const QString &language) {
|
||||||
|
|
||||||
const QString basefilename = prefix + u'_' + language;
|
const QString basefilename = prefix + u'_' + language;
|
||||||
QTranslator *t = new QTranslator;
|
QTranslator *t = new QTranslator;
|
||||||
if (t->load(basefilename, path)) {
|
if (!t->load(basefilename, path)) {
|
||||||
qLog(Debug) << "Tranlations loaded from" << basefilename;
|
|
||||||
QCoreApplication::installTranslator(t);
|
|
||||||
translations_ << t;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
delete t;
|
delete t;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qLog(Debug) << "Tranlations loaded from" << basefilename;
|
||||||
|
QCoreApplication::installTranslator(t);
|
||||||
|
translations_ << t;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class Translations {
|
|||||||
public:
|
public:
|
||||||
explicit Translations();
|
explicit Translations();
|
||||||
~Translations();
|
~Translations();
|
||||||
void LoadTranslation(const QString &prefix, const QString &path, const QString &language);
|
bool LoadTranslation(const QString &prefix, const QString &path, const QString &language);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<QTranslator*> translations_;
|
QList<QTranslator*> translations_;
|
||||||
|
|||||||
80
src/main.cpp
80
src/main.cpp
@@ -260,46 +260,76 @@ int main(int argc, char *argv[]) {
|
|||||||
IconLoader::Init();
|
IconLoader::Init();
|
||||||
|
|
||||||
#ifdef HAVE_TRANSLATIONS
|
#ifdef HAVE_TRANSLATIONS
|
||||||
QString language = options.language();
|
|
||||||
if (language.isEmpty()) {
|
QStringList languages;
|
||||||
Settings s;
|
|
||||||
s.beginGroup(BehaviourSettings::kSettingsGroup);
|
// Load language from command line options
|
||||||
language = s.value(BehaviourSettings::kLanguage).toString();
|
if (!options.language().isEmpty()) {
|
||||||
s.endGroup();
|
languages << options.language();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (language.isEmpty()) {
|
// Load language from settings
|
||||||
|
if (languages.isEmpty()) {
|
||||||
|
Settings s;
|
||||||
|
s.beginGroup(BehaviourSettings::kSettingsGroup);
|
||||||
|
const QString language = s.value(BehaviourSettings::kLanguage).toString();
|
||||||
|
s.endGroup();
|
||||||
|
if (!language.isEmpty()) {
|
||||||
|
languages << language;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use system UI languages
|
||||||
|
if (languages.isEmpty()) {
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
||||||
const QStringList system_languages = QLocale::system().uiLanguages(QLocale::TagSeparator::Underscore);
|
languages = QLocale::system().uiLanguages(QLocale::TagSeparator::Underscore);
|
||||||
#else
|
#else
|
||||||
const QStringList system_languages = QLocale::system().uiLanguages();
|
const QStringList system_languages = QLocale::system().uiLanguages();
|
||||||
#endif
|
for (const QString &language : system_languages) {
|
||||||
if (system_languages.isEmpty()) {
|
QString language_underscore = language;
|
||||||
language = QLocale::system().name();
|
language_underscore = language_underscore.replace(u'-', u'_');
|
||||||
|
languages << language_underscore;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
|
||||||
language = system_languages.first();
|
|
||||||
#else
|
|
||||||
language = system_languages.first();
|
|
||||||
language = language.replace(u'-', u'_');
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (languages.isEmpty()) {
|
||||||
|
languages << QLocale::system().name();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScopedPtr<Translations> translations(new Translations);
|
ScopedPtr<Translations> translations(new Translations);
|
||||||
|
|
||||||
translations->LoadTranslation(u"qt"_s, QLibraryInfo::path(QLibraryInfo::TranslationsPath), language);
|
for (const QString &language : std::as_const(languages)) {
|
||||||
translations->LoadTranslation(u"strawberry"_s, u":/i18n"_s, language);
|
if (translations->LoadTranslation(u"qt"_s, QLibraryInfo::path(QLibraryInfo::TranslationsPath), language)) {
|
||||||
translations->LoadTranslation(u"strawberry"_s, QStringLiteral(TRANSLATIONS_DIR), language);
|
break;
|
||||||
translations->LoadTranslation(u"strawberry"_s, QCoreApplication::applicationDirPath(), language);
|
}
|
||||||
translations->LoadTranslation(u"strawberry"_s, QDir::currentPath(), language);
|
}
|
||||||
|
|
||||||
|
static const QStringList language_paths = QStringList() << u":/i18n"_s
|
||||||
|
<< QStringLiteral(TRANSLATIONS_DIR)
|
||||||
|
<< QCoreApplication::applicationDirPath()
|
||||||
|
<< QDir::currentPath();
|
||||||
|
|
||||||
|
for (const QString &language : std::as_const(languages)) {
|
||||||
|
bool language_loaded = false;
|
||||||
|
for (const QString &language_path : language_paths) {
|
||||||
|
if (translations->LoadTranslation(u"strawberry"_s, language_path, language)) {
|
||||||
|
language_loaded = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (language_loaded) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# ifdef HAVE_QTSPARKLE
|
# ifdef HAVE_QTSPARKLE
|
||||||
qtsparkle::LoadTranslations(language);
|
if (!languages.isEmpty()) {
|
||||||
|
qtsparkle::LoadTranslations(languages.first());
|
||||||
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif // HAVE_TRANSLATIONS
|
||||||
|
|
||||||
Application app;
|
Application app;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user