Qt翻译文件(qm)信息

时间:2012-05-14 14:48:18

标签: qt translation

我的应用程序有一些qm文件。 (pr_en.qm,pr_ru.qm)。我可以通过

加载它们
translator.load(fileName, '.');
qApp->installTranslator(translator);

我想要构建动态菜单(英语,俄语)来选择语言。但是,如何从qm文件中提取这些常量(英语,俄语)而不是它的名称(pr_en.qm,pr_ru.qm)。感谢。

1 个答案:

答案 0 :(得分:8)

我建议采用两种方法:

首先会声明特殊的翻译领域,如:

tr("__LANGNAME__")将在每个翻译文件中填充正确的语言名称(甚至是本机名称)。然后,您可以列出所有可用的翻译,逐个加载并使用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;

我的第二个方法是使用QLocale和QLocale :: Language。我将为qm目录中的每个文件基本名称创建QLocale对象,然后使用QLocale :: Language枚举以QLocale::languageToString方法获取语言名称。