我正在尝试使用 Qt 的tr()
函数进行翻译。
在.pro
文件中我有:
TRANSLATIONS += languages/myapp_en.ts \
languages/myapp_es.ts
和main.cpp
:
QTranslator translator;
translator.load("myapp_es"); //espanol
app.installTranslator(&translator);
我运行lupdate
并生成文件myapp_en.ts
,myapp_es.ts
。
我编辑文件myapp_es.ts
,例如:
<context>
<name>Example</name>
<message>
<location filename="../example.cpp" line="24"/>
<source>Good night</source>
<translation>Buenas noches</translation> <!-- THIS IS MY EDIT -->
</message>
</context>
然后我运行lrelease
,以便生成文件myapp_en.qm
,myapp_es.qm
。
然后我在代码中使用tr()
:
button->setText(tr("Good night"));
在Q_OBJECT
类的构造函数中。
但是文字仍以英文显示(“晚安”),而不是西班牙语。
我做错了什么?
修改
Putting the *.qm
files in the correct directory解决了这个问题。只需要确保它在Release目录中而不是Debug。
答案 0 :(得分:1)
您需要在调用.qm
时包含扩展程序translator.load
并更正路径:
QTranslator translator;
translator.load("languages/myapp_es.qm"); //espanol
app.installTranslator(&translator);
答案 1 :(得分:1)
安装翻译后,你必须调用ui生成的类的重新翻译(如果应用)或再次调用tr
答案 2 :(得分:0)
从其他答案中我可以看到您现在正在加载true
,因此它找到了翻译文件。那么它可能是在系统初始化UI之后你正在安装翻译,所以你可以做以下两件事之一:
在创建用户界面之前安装翻译器,对我来说就是:
translator.load(someTranslation)
a.installTranslator(&translator)
MainWindow w;
retranslateUi()
函数,调用时将更新用户界面。这里有一个问题,更深入地展示了这一点:How to translate language in Qt on the fly。处理语言更改事件需要更多代码,但它确实允许动态语言更新。