QT中多国语言的编码问题

在给Moto E6做抓屏软件的时候想练习一下多国语言的实现,QT版本是2.3.8。关于“QT国际化”网上已经有很多介绍了。

我这里说说我遇到的编码问题,我的程序源代码文件,注意是.cpp/.h文件的编码是GBK的,这个很重要,因为如果是UTF-8编码的或许不会有这样的问题。没办法,我的IDE的编辑器对U码不支持。按照一般的步骤进行,首先在源代码里建立一个QTranslator Language(0),然后Language.load("zh-cn",".")你的qm文件,再就是转载语言对象 app.installTranslator( &Language),在需要进行多国语言的字符串的地方使用tr()。使用lupdate提取.ts文件,这里你的.pro文件里必须有 TRANSLATIONS条目,里面的值是你对于的.ts的文件名。然后就可以打开ts文件使用编辑器进行翻译了。最后使用lrelease生产.qm文件,放到你的程序目录对应Language.load("zh-cn",".")。但是在做中文包的时候发现乱码了。

就这个问题,困扰了我很久。其实应该是这样解决的,要知道.ts文件其实就是一个标准的XML文件,除了QT自己的标签外你最好也要遵循XML的规则。默认使用lupdate提取的文件格式一般都是这样的:

<!DOCTYPE TS><TS>
<context>
    <name>CapDialog</name>
      ……
    <message>
        <source>About...</source>
        <translation type="unfinished">关于...</translation>
    </message>
</context>
</TS>

但是这个文件并没有指定XML的版本、字符集以及TS的版本、语言等信息,这也是造成上面问题的主要原因。

我们添加一些信息到.ts文件里面

<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE TS><TS version="1.1" language="zh_CN">
<context>
    <name>CapDialog</name>
      ……
    <message>
        <source>About...</source>
        <translation type="unfinished">关于...</translation>
    </message>
</context>
</TS>

这样再进行lrelease命令生成qm文件就不会出现乱码了。

标签: , , ,

留下回复