4

アプリ用にいくつかのqmファイルがあります。(pr_en.qm、pr_ru.qm)。私はそれらをロードすることができます

translator.load(fileName, '.');
qApp->installTranslator(translator);

言語を選択する動的メニュー (英語、ロシア語) を作成したい。しかし、qmファイルから名前(pr_en.qm、pr_ru.qm)の代わりにそのような定数(英語、ロシア語)を抽出するにはどうすればよいですか。ありがとう。

4

1 に答える 1

8

私はそれを行う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メソッドで言語名を取得します。

于 2012-05-14T15:20:55.270 に答える