Qt国际化之翻译(VS2013+Qt5.4.1)
来源:互联网 发布:linux mv 覆盖目录 编辑:程序博客网 时间:2024/06/06 15:52
代码里写的是中文,乱码问题是在源文件最前面加#pragma execution_character_set(“utf-8”)解决的。
要出英文版,了解了下,做法是,把要翻译的文字用tr()包起来,VS装了Qt插件后,项目右键有Create new Tranlation File,生成.ts文件,生成过有增改代码的话,项目右键lupdate一下,用Qt语言家打开,配上英语,改好后,项目右键lrelease发布为.qm文件,然后 就是QTranslator qtTranslator;
qtTranslator.load(*.qm);app.installTranslator(&qtTranslator);。
然而过程并不顺利。
首先乱码问题。找了个中文加了tr(),Create了.ts后,Qt Linguist打开竟然是乱码。想到应是编码问题,虽然对字符集、编码方式早有理论储备,然而问题面前还得靠实践。各种试验后,发现utf-8带bom的编码能兼顾VS里显示和Qt语言家里的显示。如何转换呢,网上说,VS里编码使用的是操作系统代码页,中国就默认编码GB2312,而且VS并不能改默认,有个插件ForceUTF8 (with BOM),测试了下,看起来只有新编辑的文本里出现了中文才会保存为utf-8+bom的编码。并不能满足我转换大量代码的需求。VS的高级保存选项也不能批量,最后找到了UltraCodingSwitch,批量转换了下。
然后是找中文。代码里的中文基本都没加tr(),一个个扒工作量太大。于是想到能不能用正则表达式,据说,基本汉字的Unicode编码范围是4E00-9FA5,一番折腾后弄出来了个不怎么健壮的正则表达式:
1. 去掉原来有tr()的
查找内容:([\( =])(QObject::|)tr\(("[^"]*[\u4E00-\u9FA5]+[^"]*")\)
替换为:$1$3
2. 统一加上tr()
查找内容:("[^"]*[\u4E00-\u9FA5]+[^"]*")
替换为:tr($1)
设置下查找文件类型,.ui文件不需要替换排除掉,替换后没发现有遗留的中文,但还是得人工过一遍,主要是把一些无家可归的tr收编为QObject::tr,或者给所在非QObject子类加QT_TR_NOOP()宏,这个自行了解,还有就是纠正一些乱七八糟让人怀疑科学的替换结果,比如最后包含的#include”PubFun.h”会变成#include “PubFun.htr(“,有些”“会被替换为”tr(“,还有一些嵌套引号的需要调一下。
这样生成/更新.ts后,中文就归在所在类里,方便分析翻译,但语言家界面里是写汉语译文,这个在语言家 编辑=》翻译文件设置… 改下源语言和目标语言就可以,这个变更除了感觉界面上看着不别扭之外,并没发现有什么用,.ts文件多嫌设置麻烦时可以设置一个,其他的以文本打开,替换一下开头的内容:
<TS version="2.1" language="zh_CN">
<TS version="2.1" language="en" sourcelanguage="zh_CN">
.ts和.ui一样,也是xml格式的,这样最后改好时可以合并一下.ts,只发布一个.qm,显得更专业一点。。
其他,只加tr(),.ts里是把字符串归入所在类的,当然也可以改为QObject::tr()指定让它归入QObject来统一一些字符串,或者归入其他类方便管理。
- Qt国际化之翻译(VS2013+Qt5.4.1)
- Qt 更新翻译(国际化)
- qt国际化翻译
- QT开发(一)Vs2013集成 QT5.3.1
- vs2013+Qt5.4.1
- QT国际化翻译的使用
- Qt国际化翻译文件不起作用
- Qt国际化翻译小Demo
- [Qt]Qt5.3.0+VS2013+Win32平台搭建
- Qt QWebEngineView的使用(VS2013+Qt5.6.0)
- vs2013+qt5.5.0创建qt窗口工程
- QT5.5.0+VS2013(X64)+hidapi的USB继续深究之 QT的汉字显示
- QT5新手教程(1)QT5+VS2013
- qt 之 国际化(中英文切换)
- Qt之国际化
- Qt之国际化
- Qt之国际化
- Qt学习(六) VS2013编译Qt5.3.1的静态库
- 浅谈Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
- (C语言)高精度除法
- 用matlab求有约束条件函数的极值
- Python 异常处理 (四)
- JQuery干货篇之处理元素
- Qt国际化之翻译(VS2013+Qt5.4.1)
- 数据库设计
- 【C++学习笔记】枚举
- yaml语言简介
- C#DynamicObject和ExpandoObject
- 设计模式学习之组合模式
- SAS中常见的数组函数
- Java读写XML文件(DOM4J包)
- Machine Learning第五讲[神经网络: 学习] --(一)代价函数和BP算法