Finding local translations?
Boudewijn Rempt
boud at valdyas.org
Thu Apr 7 09:56:59 UTC 2016
I'm trying to make translations work for Krita. On starting the
application, I want to check what the user's system language is
and what the override language from the language selection dialog
is.
The problem is that the translations are located here:
Windows
The translations are in bin/../share/locale
Linux
The translations are in bin/../share/locale
OSX
The translations are in krita.app/Contents/MacOS/../share/locale
In other words, the translations are located relative to the
application binary. I add these locations to the XDG_DATA_DIRS
environment variable in my main.
However, KCatalog::catalogLocaleDir is run before the main runs,
and uses QStandardPaths to find the location of the translations.
That's before the XDG_DATA_DIRS environment variable is set.
Starting krita from a shell script or a batch file or a second
executable that starts the real executable is not an acceptable
hack; we did that before, and it gives loads of problems.
I'm now trying this, in my main, before any widgets are created:
// Get the override language from the langu8age selection dialog
const QString configPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
QSettings languageoverride(configPath + QStringLiteral("/klanguageoverridesrc"), QSettings::IniFormat);
languageoverride.beginGroup(QStringLiteral("Language"));
QString language = languageoverride.value(qAppName(), "").toString();
if (!language.isEmpty()) {
KLocalizedString::setLanguages(language.split(":"));
}
else {
// And if there isn't one, check the one set by the system
QLocale locale = QLocale::system();
if (locale.bcp47Name() != QStringLiteral("en")) {
KLocalizedString::setLanguages(QStringList() << locale.bcp47Name());
}
}
The first part works, the language from the override file is used.
The second part doesn't work. If I start krita like
LANGUAGE=ja krita
Then the setLanguages call is made, but the application is
still in English. I've tried to debug klocalizedstring, but
I cannot even figure out why the first setLanguages call works,
let alone why the second one doesn't work.
I've also tried to force a change of the languages variable, like:
KLocalizedString::setLanguages(QStringList() << "en);
KLocalizedString::setLanguages(QStringList() << locale.bcp47Name());
And that also didn't work.
See also https://quickgit.kde.org/?p=krita.git&a=commit&h=5015920f2b24d63b04c82cbf69c674de06ab8abc
Is there any way to make this work?
--
Boudewijn Rempt | http://www.krita.org, http://www.valdyas.org
More information about the Kde-frameworks-devel
mailing list