Qt的多语言支持比较方便,这里说一下大概的方案及一个注意点。
首先我们要把语言字符串分为两个部分:Qt内置的字符串(通用对话框和右键菜单) 和 应用自己的字符串。
Qt实现多语言的思路是:
1、在用到字符串的地方,代码中全部使用一个类似索引的固定字符串。
2、这些固定字符串都会被QObject::tr()函数进行处理后,转换为真实显示的字符串。
3、Qt提供工具可以找出代码中的所有被QObject::tr()包围的固定字符串,生成一个待翻译字符串键值表。
4、对于每种要支持的语言,都要生成一个 3 中所述的待翻译字符串键值表。
5、Qt提供工具,用于处理3、4中所述各待翻译的字符串键值表,形成包含翻译的字符串的键值表。
6、Qt提供工具,将包含翻译好的字符串的键值表,转换成进制文件。
7、在程序中,要通过QTranslator将二进制形式的键值表加载起来并安装给QApplication对象。
8、如果用到Qt内置的字符串资源,还要将内置字符串对应的二进制键值表文件加载并安装给QApplication对象。
注意事项:
1、QTranslator对象只能保存一份二进制键值表文件。
试图用一个QTranslator对象先后加载,Qt内置的字符串和程序自己的字符串,然后一起安装给QApplication是不行的。只有后加载的会生效。
所以,需要用两个QTranslator分别加载Qt内置的字符串和程序自己的字符串,然后把两个都安装给QApplication对象。
2、也正是上述特性使得多语言动态切换成为可能。
我们只要保留住上述两个QTranslator对象,并在需要动态切换语言的时候,把新的二进制字符键值表加载给它们两个即可。