アプリ用にいくつかのqmファイルがあります。(pr_en.qm、pr_ru.qm)。私はそれらをロードすることができます
translator.load(fileName, '.');
qApp->installTranslator(translator);
言語を選択する動的メニュー (英語、ロシア語) を作成したい。しかし、qmファイルから名前(pr_en.qm、pr_ru.qm)の代わりにそのような定数(英語、ロシア語)を抽出するにはどうすればよいですか。ありがとう。
アプリ用にいくつかのqmファイルがあります。(pr_en.qm、pr_ru.qm)。私はそれらをロードすることができます
translator.load(fileName, '.');
qApp->installTranslator(translator);
言語を選択する動的メニュー (英語、ロシア語) を作成したい。しかし、qmファイルから名前(pr_en.qm、pr_ru.qm)の代わりにそのような定数(英語、ロシア語)を抽出するにはどうすればよいですか。ありがとう。
私はそれを行う2つの方法を提案します:
まず、次のような特別な翻訳者フィールドを宣言します。
tr("__LANGNAME__")
これは、適切な言語名 (ネイティブであっても) で満たされたすべての翻訳ファイルにあります。次に、利用可能なすべての翻訳を一覧表示し、それらを 1 つずつロードしてQTranslator::translate(const char * context, const char * sourceText, const char * disambiguation = 0)
メソッドを使用できます。
例:
QStringList availableLanguages;
QDirIterator qmIt(pathToQm, QStringList() << "*.qm", QDir::Files);
while(qmIt.hasNext())
{
qmIt.next();
QFileInfo finfo = qmIt.fileInfo();
QTranslator translator;
translator.load(finfo.baseName(), pathToQm);
availableLanguages << translator.translate("__LANGNAME__");
}
qDebug() << availableLanguages;
私の 2 番目のアプローチは、QLocale と QLocale::Language を使用することです。qm dir 内のファイルのベース名ごとに QLocale オブジェクトを作成し、QLocale::Language enum を使用してQLocale::languageToString
メソッドで言語名を取得します。