转 Qt 翻译

 
相信大家对软件的国际化问题,应该很清楚了,这里我主要谈论的是QT应用程序的国际化的问题,仅供大家参考。


QT应用程序的国际化问题,应该总的来说还是比较容易的,如果你源码中没有使用汉字,直接使用英文,这个问题就不大,下面我讲的是通过在源码中直接使用中文(就是本地化了的),然后把中文翻译成别的文字而言的(例如加密文字),大致分这么几个步骤,基本与对英文进行国际化的步骤差不多(这里是针对Windows平台的,我使用的是Qt4.5.3版本):

前期准备,首先在main.cpp中指明你的编码格式:
我在main.cpp指明的字符串的编码格式都是GBK(windows下基本都用这个)的,代码如下:
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

下面是翻译资源的步骤:

1。在你工程的.pro文件中加上:
TRANSLATIONS = xxx.ts(xxx你工程的名字,或其它名字,以下类似)
如果是中文系统的话还要加上
CODECFORTR = GBK(指明你源代码里tr里使用的编码格式)
CODECFORSRC = GBK(指明你源代码文件使用的编码格式,不过在
linguist仍旧是显示乱码)
在QT的assistant帮助文档里特别指明了,如果使用Visual Studio开发工具的话,必须加上CODECFORSRC = 编码格式。

2。运行cmd命令,然后进入到你源代码目录下,使用lupdate xxx.pro命令提取你源代码里tr里的资源;

3。使用linguist.exe打开,第2步骤中生成的xxx.ts文件进行翻译。
这里需要注意的是,当你在linguist翻译的时候,当翻译完一个字符的时候,别忘了点工具栏按钮上那个带有对勾并有一个向右箭头的按钮,表示你完成了翻译,如果在linguist的右下角的警告出窗口中有提示的话,那表示你翻译的资源字符要与原资源字符的结尾标点是一样的,翻译好之后,然后保存(当你进行翻译的时候可能源码的位置把汉字显示成了乱码,这个不必关心,只要提取的tr中的字符时正确的就可以了);

4。使用lrelease xxx.ts就可以生成xxx.qm文件,这就是我们想要的,放到你xxx.exe所在目录下就可以了。
如果直接在linguist的File菜单下release的话,通过本人的实践证明

直接在linguist的File菜单下release与直接在命令行里面生成的.qm文件是不一样的,命令行里的是正确的,能被.exe加载并且翻译也是正确的,而linguist的File下release生成的.qm文件就不行,原因是linguist里使用了自己预定义好的编码集,即使你在linguist刚打开时选择了chinese-china也不行 ,这个应该算是linguist的bug吧,

呵呵。

注意:
据我网上搜集到的资料来看,有时候还可能与整个程序加载的字体有关,这个需要你在main.cpp中加载正确的字体。

然后在main.cpp中使用:
QTranslator translator;
translator.load(QObject::tr("xxx.qm"));
app.installTranslator(&translator);
这样就可以了,这里说明一点,你的源码.h,.cpp文件的编码格式需要是"ANSI"的格式,这个可以先用记事本打开,然后在另存为里保存成ANSI格式就可以了。

最后一点就是,如果你的Qt程序是编译成了动态链接库(.dll)的形式,里面涉及到ui等文字信息的话,那么先用以上的方法生成.qm文件,然后在调用该.dll程序的main.cpp里同样使用QTranslator加载.qm文件(可以使用QTranslator加载多个.qm文件的),这样就能正确翻译了。

最关键的就是下面这两个命令:

lupdate PRS6000OfflineTool.pro

lrelease PRS6000offlineTool_EN.ts

原文地址:https://www.cnblogs.com/happy-pm/p/3801109.html