1 #include "localization.h"
3 #include <QApplication>
7 #include <QLibraryInfo>
11 #include <QStringList>
12 #include "plugins/engineplugin.h"
13 #include "plugins/pluginloader.h"
14 #include "datapaths.h"
17 const QString DEFINITION_FILE_PATTERN =
"*.def";
18 const QString TRANSLATIONS_LOCATION_SUBDIR =
"translations";
19 const int NUM_VALID_VERSION_TOKENS = 2;
20 const int NUM_VALID_TOKENS = 3;
22 QList<QTranslator*> Localization::currentlyLoadedTranslations;
24 class Localization::LocalizationLoader
27 LocalizationLoader() {};
29 QList<LocalizationInfo> loadLocalizationsList(
const QStringList& definitionsFileSearchDirs);
32 QList<LocalizationInfo> localizations;
34 void loadLocalizationsListFile(
const QString& definitionsFilePath);
35 void loadLocalizationsListFile(QIODevice& io);
43 int obtainVersion(QIODevice& io);
53 QList<LocalizationInfo> Localization::loadLocalizationsList(
const QStringList& definitionsFileSearchDirs)
56 return l.loadLocalizationsList(definitionsFileSearchDirs);
59 bool Localization::loadTranslation(
const QString& localeName)
62 qDeleteAll(currentlyLoadedTranslations);
63 currentlyLoadedTranslations.clear();
66 TRANSLATIONS_LOCATION_SUBDIR);
70 QTranslator* qtTranslator = loadTranslationFile(
"qt_" + localeName, searchPaths);
71 if (qtTranslator == NULL)
75 qtTranslator =
new QTranslator();
76 qtTranslator->load(
"qt_" + localeName,
77 QLibraryInfo::location(QLibraryInfo::TranslationsPath));
78 QCoreApplication::installTranslator(qtTranslator);
80 currentlyLoadedTranslations.append(qtTranslator);
83 QTranslator* myappTranslator = loadTranslationFile(localeName, searchPaths);
84 if (myappTranslator != NULL)
86 currentlyLoadedTranslations.append(myappTranslator);
93 QTranslator *pluginTranslator = loadTranslationFile(
94 QString(
"%1_%2").arg(name, localeName),
98 gLog << QString(
"Loaded translation for plugin %1").arg(name);
99 currentlyLoadedTranslations.append(pluginTranslator);
102 return myappTranslator != NULL;
105 QTranslator* Localization::loadTranslationFile(
const QString& localeName,
const QStringList& searchPaths)
107 QTranslator* pTranslator =
new QTranslator();
108 bool bLoaded =
false;
109 foreach (
const QString& dir, searchPaths)
111 if (pTranslator->load(localeName, dir))
113 QCoreApplication::installTranslator(pTranslator);
126 QList<LocalizationInfo> Localization::LocalizationLoader::loadLocalizationsList(
const QStringList& definitionsFileSearchDirs)
128 foreach (
const QString& dirPath, definitionsFileSearchDirs)
130 loadLocalizationsListFile(dirPath);
133 return localizations;
136 void Localization::LocalizationLoader::loadLocalizationsListFile(
const QString& definitionsFilePath)
138 QDir dir(definitionsFilePath);
139 QStringList defFiles = dir.entryList(QStringList(DEFINITION_FILE_PATTERN), QDir::Files);
140 foreach (
const QString& defFileName, defFiles)
144 gLog << QString(
"Reading localizations definitions file: %1").arg(defFileName);
145 QString filePath = dir.absoluteFilePath(defFileName);
146 QFile file(filePath);
147 if (file.open(QIODevice::ReadOnly))
149 loadLocalizationsListFile(file);
154 gLog << QString(
"Failed to open localizations definitions file: %1").arg(definitionsFilePath);
159 void Localization::LocalizationLoader::loadLocalizationsListFile(QIODevice& io)
161 int version = obtainVersion(io);
164 gLog << QString(
"Translation definition file doesn't contain valid protocol version information.");
168 QString line = io.readLine();
169 while (!line.isEmpty())
171 line = line.trimmed();
173 if (!line.isEmpty() && !line.startsWith(
"#"))
175 QStringList tokens = line.split(
";");
176 if (tokens.size() == NUM_VALID_TOKENS)
181 info.
niceName = tokens[2].trimmed();
182 if (!localizations.contains(info))
184 localizations.append(info);
189 gLog << QString(
"Invalid localization definition: %1").arg(line);
192 line = io.readLine();
196 int Localization::LocalizationLoader::obtainVersion(QIODevice& io)
198 QString line = io.readLine();
203 QStringList tokens = line.split(
"=");
204 if (tokens.size() == NUM_VALID_VERSION_TOKENS)
206 QString versionToken = tokens[1];
208 version = versionToken.toInt(&bOk);
218 void Localization::LocalizationLoader::sort()
220 qSort(localizations.begin(), localizations.end(), localizationInfoLessThan);
QString localeName
Compliant with language_country standard. See QLocale::name()
QString niceName
Name that will be displayed to user.
EnginePlugin * info() const
Main plugin interface.
QString countryCodeName
The same as code used for country flags in IP2C.
QString nameCanonical() const
Derived from actual plugin name.
static QStringList staticDataSearchDirs(const QString &subdir=QString())
Paths to directories where program should search for its static data.