【问题标题】:Qt5 Loading .qm translation fileQt5 加载 .qm 翻译文件
【发布时间】:2015-11-24 21:59:16
【问题描述】:

我正在尝试将我的 Qt5.5 应用程序翻译成英文。我制作了 .ts 文件并翻译了字符串 -> 制作了 English.qm 文件。 我已将其放在资源中:

translations.qrc:

<RCC>
    <qresource prefix="/translations">
        <file>Resources/Languages/English.qm</file>
    </qresource>
</RCC>

当我尝试加载它时,我无法...您能帮我以正确的方式加载 .qm 并用从 .qm 翻译的字符串替换原始字符串吗? 另一个问题,加载翻译时如何加载原始字符串?

main.cpp 文件的片段:

QtSingleApplication a(argc, argv);

QTranslator tra;
if (tra.load(":/translations/Resources/Languages/English.qm"))
{
    a.installTranslator(&tra);
}
else 
{
    qWarning() << "File not loaded"
}

我总是收到“文件未加载”的信息。

【问题讨论】:

  • 尝试没有“*.qm”的路径,这至少在我的应用程序中有效:tra.load(":/translations/Resources/Languages/English"

标签: c++ qt translation


【解决方案1】:

这应该可以,我自己试过了:

<RCC>
    <qresource prefix="/translations">
        <file>resources/languages/english.qm</file>
    </qresource>
</RCC>

QApplication a(argc, argv);
QTranslator tra;
if (tra.load(":translations/resources/languages/english.qm")) {
    a.installTranslator(&tra);
    qDebug() << "File loaded";
} else {
    qWarning() << "File not loaded";
}
return a.exec();

RESOURCES += \
    resources.qrc

TRANSLATIONS += resources/languages/english.ts

创建 ts 文件: lupdate Test.pro

创建 qm 文件: lrease Test.pro

【讨论】:

  • 我仍然得到“文件未加载”:(
  • 好的,当我更改一行时:if (tra.load(":/translations/Resources/Languages/English.qm")),您的代码有效。还有一个问题,我可以在不重新启动应用程序的情况下删除翻译器并恢复正常字符串吗?
  • QApplication 具有removeTranslator(QTranslator *translator) 的功能,您可以将其删除。之后,您可以再次“重新翻译”应用程序,所有字符串都应保持原样。这就像改变语言一样。只要您的所有文本都设置在自己的函数中并在(卸载)安装翻译器后调用,则无需重新启动即可使用。在 Qt 中,这个函数被称为 retranslateUi();
  • 感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2013-07-21
  • 2019-03-03
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多