QT国际化翻译的使用

1 首先所有需要翻译的文本都必须用tr包裹。


如果是在继承了某个QOjbect类里面使用比如 QWidget 等。可以直接使用tr。例如setText(tr("StopCapture"));


如果没有继承自QObject就必须带上QObject 例如    setText(QObject::tr("StopCapture"));


这里的 StopCapture就是 SourceText


2

生成一个TS文件 

在VS当中,点击QT->Create NewTranslate File 选择语言 (假设中文 )会生成一个zh.ts文件。

在QCreator中 linux下要先安装一些tools。sudo apt-get install qttools5-dev-tools


xxx.pro文件中 

添加 

TRANSLATIONS = hm_en.ts hm_zh.ts

填几个最后就有几个

然后点击tools->external->linguist->update translation files 产生ts文件

命令行中输入linguist 打开ts文件进行编辑




TS文件描述了 这个需要被翻译的SourceText的位置,信息 等等。并不是真正编译时需要的文件。

双击这个Ts文件会用Qt语言家打开这个文件。


可以看到上下文 原文以及位置

下面的输入框可以输入你的 译文。输入完毕后。字符串原文前面带有的疑问号会 变色 表明已经有译文了。可以为空也没关系


3将ts文件生成程序需要的 qm文件。qm文件是真正编译时需要的文件资源

QT语言家中点击文件->发布  会在当前目录中生成zh.qm文件。这个文件就是我们需要的资源文件。通过qrc可以导入这个资源文件。


如果需要产生多个语言。可以再生成一个ts文件。按照前面的步骤生成qm文件。再用qrc导入。


4在代码中需要实现的语句。


QApplication app(argc, argv);


QTranslator tr; 产生一个翻译对象

加载翻译文件

tr.load(":/xxx/zh.qm");

整个程序加载翻译文件。

app.installTranslator(&tr)


加载后再调用包含tr的语句。每次动态切换或者Load的时候都需要调用 包含tr的地方。使其生效。

setText(QObject::tr("StopCapture"));





installTranslator可以调用多次。安装多个翻译文件。翻译的时候查找是按照安装的逆顺序。就是先安装的后查找。只要一找到某个符合的翻译就返回


要保证指针的有效性。installTranslator不会复制这个数据。而是只使用指针。所以创建完毕不要删除这个指针。。如果删除了,不会崩溃。只是app就没有这个翻译文件了。

QTranslator析构时会调用app的removeTranslator移除自己哟


installTranslator(zhtr);

installTranslator(entr);

先安装 zhtr 再entr 查找时先查找entr 如果没有找到再查找zhtr.在没有就使用sourceText.


假设 sourceText 也就是源码中的是 SSS    zh翻译是ZZZ en翻译是 EEE

查找的顺序是 EEE--->ZZZZ---->SSSS 找到任意一个符合的就返回,不再继续查找。


zh    AAA  0          BBB  0

en   0        CCC   0        0

src   0        0         0        DDD


那么最终翻译结果是 AAA CCC BBB DDD


removeTranslator会移除某个翻译文件。但是不从系统中删除他。也就是指针不删除,你要自己删除。













你可能感兴趣的:(QT一些理解)