如何在Qt中使用翻译?

时间:2015-11-26 16:10:02

标签: c++ qt

我正在尝试使用 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.tsmyapp_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.qmmyapp_es.qm

然后我在代码中使用tr()

button->setText(tr("Good night"));

Q_OBJECT类的构造函数中。

但是文字仍以英文显示(“晚安”),而不是西班牙语。

我做错了什么?

修改

Putting the *.qm files in the correct directory解决了这个问题。只需要确保它在Release目录中而不是Debug。

3 个答案:

答案 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之后你正在安装翻译,所以你可以做以下两件事之一:

  1. 在创建用户界面之前安装翻译器,对我来说就是:

     translator.load(someTranslation)
     a.installTranslator(&translator)
     MainWindow w;
    
  2. 在创建用户界面后安装翻译器,如果您提供多语言支持,则很可能是您需要的地方。 Qt提供retranslateUi()函数,调用时将更新用户界面。这里有一个问题,更深入地展示了这一点:How to translate language in Qt on the fly。处理语言更改事件需要更多代码,但它确实允许动态语言更新。