1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C++Qt开发——Linguist语言家

C++Qt开发——Linguist语言家

时间:2020-10-07 23:57:51

相关推荐

C++Qt开发——Linguist语言家

Qt Linguist

简介

Qt提供了一款优秀的支持Qt C++和Qt Quick应用程序的翻译工具。发布者、翻译者和开发者可以使用这款工具来完成他们的任务。

发布者:承担了全面发布应用程序的责任。通常,他们协调开发者和翻译者的工作,可以使用lupdate工具同步源代码,进行翻译,使用lrelease同步工具为发布应用程序创建运行时使用的翻译文件。

翻译者:可以使用Qt Linguist工具翻译应用程序的文本。当然,这必须要有专业的翻译知识。

开发者:必须创建Qt应用程序能够使用的翻译文本。也应该帮助翻译者识别短语出现的场景。

以上有三种角色-发布者、翻译者、开发者,当然很多情况下,其实就是一种,那就是程序猿自己,大家都懂的。

使用流程

1,使用tr包裹字符串

如果想让你的程序实现国际化,那么就在用户所有可见的字符串处都使用QObject::tr()。

[static] QString QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)

2,修改pro文件

在.pro文件中添加翻译文件名称。

TRANSLATIONS += translations/zh_CN.ts \ /*中文翻译文件*/translations/en.ts /*英文翻译文件*/

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

3,生成翻译文件

点击 菜单栏->工具->外部->Qt语言家->更新翻译(lupdae),此时会在translations目录下面生成zh_CN.ts和en.ts两个文件。

4,打开翻译文件,并翻译

4.1 修改xml,翻译

ts文件实际上是一个xml文件,直接可以用文本编辑器打开。

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS version="2.1" language="en"> <!-- 版本和语言 --><context><name>MainWindow</name><message><location filename="../mainwindow.ui" line="14"/> <!-- 文本位置--><source>MainWindow</source><!-- 源文本--><translatorcomment>title</translatorcomment> <!-- 注释 --><translation>Maye</translation> <!-- 翻译文本 --></message><message><location filename="../mainwindow.ui" line="27"/><source>用户名</source><translation>username</translation></message><message><location filename="../mainwindow.ui" line="40"/><source>密码</source><translation>password</translation></message><message><location filename="../mainwindow.ui" line="73"/><source>登录</source><translation>login</translation></message><message><location filename="../mainwindow.ui" line="86"/><source>注册</source><translation>register</translation></message><message><location filename="../mainwindow.ui" line="100"/><source>中文</source><translation>chinese</translation></message><message><location filename="../mainwindow.ui" line="105"/><source>英文</source><translation type="unfinished">English</translation></message><message><location filename="../mainwindow.ui" line="119"/><source>语言</source><translation type="unfinished">language</translation></message></context></TS>​

4.1 使用语言家翻译

找到Linguist预言家打开,点击菜单栏->文件->打开,选择上面生成的.ts文件,并打开。

打开之后可以看到如下界面,主要就是对语言进行翻译。

翻译前面的图标及含义:

4.2 使用短语书让翻译变得更快捷

短语书就是一个提前写好的翻译对照文件,在翻译ts文件的时候,可以打开短语书,很方便的就可以看到翻译。

1. 新建短语书

然后把需要的翻译提前写好,以后也可以重复使用。选择源语言和目标语言。

2. 编辑短语书

短语书创建完成之后,就可以开始编辑短语书了。

如下:先新建条目,再写上源文、译文、以及准确度(可以不写,也可以随便写点东西),最后点击保存,就可以关掉窗口了

3. 使用短语书

如果使用已经写好的短语书,而不是刚刚创建的,那么需要先打开短语书。如果是刚在预言家上创建的,则是打开状态的。

5,发布翻译

翻译完成之后,就可以发布翻译了,为什么要发布呢?发布是什么意思?

ts文件是文本文件,占用内存比较大,发布之后会生成对应的二进制文件,内存较小

通过发布就可以把ts文件转换成二进制文件

发布的方式有两种:

通过语言家发布

点击 菜单栏->文件->发布全部即可发布所有ts文件

通过Qt Creator发布

点击 菜单栏->工具->外部->Qt语言家->发布翻译(lrelease),会在translations目录中生成zc_CN.qm和en.qm两个文件。

6,加载语言文件

QTranslator类为文本输出提供国际化支持。

该类的对象包含一组从源语言到目标语言的翻译。 QTranslator提供了在翻译文件中查找翻译的功能。 翻译文件使用Qt Linguist创建。

QTranslator translator;if(translator.load("linguist_en.qm","F:\\MyCode\\QtCode\\Lingguist\\translate")){qApp->installTranslator(&translator);ui->retranslateUi(this);}

注意:翻译文件加载的位置必须在界面实例化之前完成,否则是没有效果的.

7,动态切换语言

如果界面是通过Ui生成的,切换语言之后,可以通过调用函数retranslateUi翻译界面,否则需要重启程序.

下拉框切换语言

void MainWindow::on_comboBox_currentIndexChanged(int index){QString filename;switch (index){case 0:filename = "linguist_zh_CN.qm"; break;case 1:filename = "linguist_en.qm";break;}QTranslator translator;if(!translator.load(filename,"F:\\MyCode\\QtCode\\Lingguist\\translate")){qDebug()<<"翻译文件加载失败";return;}if(qApp->installTranslator(&translator)){qDebug()<<"安装成功";}else{qDebug()<<"安装失败";}ui->retranslateUi(this);}

保存语言选择和恢复语言

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

保存

void MainWindow::on_comboBox_currentIndexChanged(int index){QString filename;switch (index){case 0:filename = "linguist_zh_CN.qm";break;case 1:filename = "linguist_en.qm";break;}//保存配置QSettings setting("config.ini",QSettings::Format::IniFormat);setting.setValue("ts",filename);...}

恢复

int main(int argc, char *argv[]){QApplication a(argc, argv);​QSettings setting("config.ini",QSettings::Format::IniFormat);QString filename = setting.value("ts").toString();​QTranslator translator;if(!translator.load(filename,"F:\\MyCode\\QtCode\\Lingguist\\translate")){qDebug()<<"翻译文件加载失败";}if(qApp->installTranslator(&translator)){qDebug()<<"安装成功";}else{qDebug()<<"安装失败";}​MainWindow w;w.show();return a.exec();}

重启程序

//重启程序才能生效,是否重启auto ret = QMessageBox::information(this,"hit","是否重启",QMessageBox::StandardButton::Ok,QMessageBox::No);if(ret == QMessageBox::Ok){QString exe = QApplication::applicationDirPath()+"/"+qAppName()+".exe";QProcess::startDetached(exe);qApp->quit();}

在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人:

(1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr

(2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种:

(2a) 用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包)

(2b) 用tr包住中文(源码用中文,然后提供中文到其他语言的翻译包)

注意哦,如果你正在用tr包裹中文字符,却不属于(2b),那么:

你在误用tr

你需要的是QString,而不是tr

如果你确实属于(2b),请做好心理准备,你可能还会遇到很多困难,

tr 是做什么的?下面二者的区别是什么?

QString text1 = QObject::tr("hello"); QString text2 = QString("hello");

tr是用来实现国际化,如果你为这个程序提供了中文翻译包(其中hello被翻译成中文"你好"),那么text1的内容将是中文"你好";如果你为程序提供且使用日文翻译包,那么text1的内容将是日文。

tr是经过多级函数调用才实现了翻译操作,是有代价的,所以不该用的时候最好不要用。

各国语言代码和名称表

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。