网站建设怎么设计更加吸引人,网站 报价单,怎么学做电商,有口碑的常州网站优化基本概念
1、使用QString对象表示所有用户可见的文本。由于QString内部使用Unicode编码实现#xff0c;所以它可以用 于表示所有需要向用户呈现的文本。当然#xff0c;对于仅程序员可见的文本并不需要都变为QString对象#xff0c;可利 用Qt提供的QCString或原始的“char …基本概念
1、使用QString对象表示所有用户可见的文本。由于QString内部使用Unicode编码实现所以它可以用 于表示所有需要向用户呈现的文本。当然对于仅程序员可见的文本并不需要都变为QString对象可利 用Qt提供的QCString或原始的“char *”。
2、使用tr()函数获取所有需要翻译的文本。在Qt的翻译机制下QObject::tr()函数可以帮助程序员取得 翻译之后的文本。对于从QObject继承而来的类QObject::tr()函数最终由QMetaObject::tr()实现。在某 些时候如果无法使用QObject::tr()函数则可以直接调用QCoreApplication::translate()取得翻译之后 的字符串。
3、使用QString::arg()方法组织动态文本。有些时候一段文本需要由一些静态文本和动态变量组合起 来如常见的情况“printf(“The value of i is: %d”, i)”。对于这种动态文本的翻译由于语言习惯的问题 如果简单地采用这种连接字符串的方法则可能会带来一些问题如下面的字符串用于表示任务的完成 情况
QString m tr(Mission status: ) x tr(of ) y tr(are completed);其中x和y是动态的变量三个字符串被x和y分隔开它们能够被很好地编译因为“x of y”是英语中分 数的表示方法如4 of 5是分数4/5在不同的语言中分子和分母的位置可能是颠倒的在这种情况 下数字4和5的位置在翻译时无法被正确地放置。由此可见孤立地翻译被分隔开的字符串是不行的 改进的办法是使用QString:: arg()方法
QString m tr(Mission status: %1 of %2 are completed).arg(x).arg(y);4、利用QTranslator::load()和QCoreApplication::installTranslator()函数读取对应的翻译之后的资源文 件。翻译工作者将提供包含翻译之后的字符串的资源文件“*.qm”程序员还需要做的是定义 QTranslator对象并使用load()函数读取相应的“.qm”文件利用QCoreApplication:: installTranslator()函数安装QTranslator对象。
多国语言国际化的实现
多国语言国际化的实现主要是利用Qt提供的工具lupdate、linguist和lrelease它们都可以在Qt安 装目录的“bin”文件夹下找到协助翻译工作并生成最后需要的“.qm”文件它包括以下内容。
1、利用lupdate工具从源代码中扫描并提取需要翻译的字符串生成“.ts”文件。类似编译时用到的 qmake运行lupdate时也需要指定一个“.pro”的文件可以单独创建这个“.pro”文件也可以利用编译 时用到的“.pro”文件只需定义好变量TRANSLATIONS即可。
2、利用linguist工具来协助完成翻译工作即打开前面用lupdate生成的“.ts”文件对其中的字符串逐条 进行翻译并保存。由于“.ts”文件采用了XML格式所以也可以使用其他编辑器来打开“.ts”文件并翻译。
3、利用lrelease工具处理翻译好的“.ts”文件生成格式更为紧凑的“.qm”文件。这便是翻译工作者最终需 要提供的资源文件它所占的空间比“.ts”文件小但基本不具有可读性只有QTranslator能够正确地识 别它。
修改工程文件.pro,添加一下内容
TRANSLATIONS lang_en.ts\
leng_zh.ts\
lang_la.ts
其中.ts文件是将要生成的翻译文件有多少种语言就写多少个文件文件不需要手动创建。
本例中包含三种语言那么lang_en.ts就是英文的翻译文件lang_zh.ts是中文的翻译文件lang_la.ts是 意大利语的翻译文件。
c.编译工程。记住一定要先编译如果没有编译就进行下面的步骤则生成的“.ts”文件只是一个仅有标 题栏的框架。
d.编译完成后打开Qt 5.8 64-bit for Desktop (MSVC 2013)打开命令行窗口执行命令lupdate 工程文件如下图
执行完后在工程目录下会生成.ts文件如下图
e.执行命令lrelease 工程文件,如下图
f.最终生成的.qm文件即我们代码中需要加载的翻译文件。
加载翻译文件的代码如下
/* 修改翻译文件函数 code参数为语言类型*/
void MainWindow::changeTr(const QString code)
{
//定义QTranslator 指针
static QTranslator *translator;
if(translator ! NULL)
{
//删除旧的QTranslator 对象
qApp-removeTranslator(translator);
delete translator;
translator NULL;
}
//创建新的QTranslator 对象
translator new QTranslator;
//设置翻译文件路径
QString qmFileName QString(:/lang_%1.qm).arg(code);
//加载翻译文件
if(translator-load(qmFileName))
{
//应用翻译对象
qApp-installTranslator(translator);
}
//更新UI
ui-retranslateUi(this);
retranslateUi();
}