• 转 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

  • 相关阅读:
    1001. 害死人不偿命的(3n+1)猜想 (15)
    c语言学习习题
    设计模式随笔(四):单例模式
    设计模式随笔(三):建造者模式
    设计模式随笔(二):抽象工厂模式
    设计模式随笔(一):介绍java中常用的设计模式
    idea导入spring5.x源码编译
    使用idea从git上项目后jar包无法加载
    SFTP文件上传下载以及如何处理异常,页面展现
    Java代理模式
  • 原文地址:https://www.cnblogs.com/happy-pm/p/3801109.html
Copyright © 2020-2023  润新知