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

C++Qt开发——Linguist语言家Qt Linguist 简介 Qt 提供了一款优秀的支持 Qt C 和 Qt Quick 应用程序的翻译工具 发布者 翻译者和开发者可以使用这款工具来完成他们的任务 发布者 承担了全面发布应用程序的责任

欢迎大家来到IT世界,在知识的湖畔探索吧!

Qt Linguist

简介

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

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

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

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

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

【领QT开发教程学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

点击→领取「链接」

使用流程

1,使用tr包裹字符串

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

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

欢迎大家来到IT世界,在知识的湖畔探索吧!

2,修改pro文件

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

欢迎大家来到IT世界,在知识的湖畔探索吧!TRANSLATIONS += translations/zh_CN.ts \ /*中文翻译文件*/ translations/en.ts /*英文翻译文件*/

3,生成翻译文件

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

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



欢迎大家来到IT世界,在知识的湖畔探索吧!

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文件,并打开。

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

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

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

翻译前面的图标及含义:

图标

含义

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

未翻译

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

已翻译,未标记完成

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

已翻译,且已标记完成

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

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

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

【领QT开发教程学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

点击→领取「链接」

1. 新建短语书

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

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

2. 编辑短语书

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

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

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

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

3. 使用短语书

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

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

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

5,发布翻译

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

  • ts文件是文本文件,占用内存比较大,发布之后会生成对应的二进制文件,内存较小
  • 通过发布就可以把ts文件转换成二进制文件

发布的方式有两种:

  • 通过语言家发布
    • 点击 菜单栏->文件->发布全部即可发布所有ts文件
  • 通过Qt Creator发布
    • 点击 菜单栏->工具->外部->Qt语言家->发布翻译(lrelease),会在translations目录中生成zc_CN.qm和en.qm两个文件。
C++Qt开发——Linguist语言家

6,加载语言文件

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

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

欢迎大家来到IT世界,在知识的湖畔探索吧!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); }
  • 保存语言选择和恢复语言

保存

欢迎大家来到IT世界,在知识的湖畔探索吧!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(); }
  • 重启程序
欢迎大家来到IT世界,在知识的湖畔探索吧!//重启程序才能生效,是否重启 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),请做好心理准备,你可能还会遇到很多困难,

【领QT开发教程学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

点击→领取「链接」

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

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

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

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

各国语言代码和名称表

语言代码

语言名称

af

南非语

af-ZA

南非语

ar

阿拉伯语

ar-AE

阿拉伯语(阿联酋)

ar-BH

阿拉伯语(巴林)

ar-DZ

阿拉伯语(阿尔及利亚)

ar-EG

阿拉伯语(埃及)

ar-IQ

阿拉伯语(伊拉克)

ar-JO

阿拉伯语(约旦)

ar-KW

阿拉伯语(科威特)

ar-LB

阿拉伯语(黎巴嫩)

ar-LY

阿拉伯语(利比亚)

ar-MA

阿拉伯语(摩洛哥)

ar-OM

阿拉伯语(阿曼)

ar-QA

阿拉伯语(卡塔尔)

ar-SA

阿拉伯语(沙特阿拉伯)

ar-SY

阿拉伯语(叙利亚)

ar-TN

阿拉伯语(突尼斯)

ar-YE

阿拉伯语(也门)

az

阿塞拜疆语

az-AZ

阿塞拜疆语(拉丁文)

az-AZ

阿塞拜疆语(西里尔文)

be

比利时语

be-BY

比利时语

bg

保加利亚语

bg-BG

保加利亚语

bs-BA

波斯尼亚语(拉丁文,波斯尼亚和黑塞哥维那)

ca

加泰隆语

ca-ES

加泰隆语

cs

捷克语

cs-CZ

捷克语

cy

威尔士语

cy-GB

威尔士语

da

丹麦语

da-DK

丹麦语

de

德语

de-AT

德语(奥地利)

de-CH

德语(瑞士)

de-DE

德语(德国)

de-LI

德语(列支敦士登)

de-LU

德语(卢森堡)

dv

第维埃语

dv-MV

第维埃语

el

希腊语

el-GR

希腊语

en

英语

en-AU

英语(澳大利亚)

en-BZ

英语(伯利兹)

en-CA

英语(加拿大)

en-CB

英语(加勒比海)

en-GB

英语(英国)

en-IE

英语(爱尔兰)

en-JM

英语(牙买加)

en-NZ

英语(新西兰)

en-PH

英语(菲律宾)

en-TT

英语(特立尼达)

en-US

英语(美国)

en-ZA

英语(南非)

en-ZW

英语(津巴布韦)

eo

世界语

es

西班牙语

es-AR

西班牙语(阿根廷)

es-BO

西班牙语(玻利维亚)

es-CL

西班牙语(智利)

es-CO

西班牙语(哥伦比亚)

es-CR

西班牙语(哥斯达黎加)

es-DO

西班牙语(多米尼加共和国)

es-EC

西班牙语(厄瓜多尔)

es-ES

西班牙语(传统)

es-ES

西班牙语(国际)

es-GT

西班牙语(危地马拉)

es-HN

西班牙语(洪都拉斯)

es-MX

西班牙语(墨西哥)

es-NI

西班牙语(尼加拉瓜)

es-PA

西班牙语(巴拿马)

es-PE

西班牙语(秘鲁)

es-PR

西班牙语(波多黎各(美))

es-PY

西班牙语(巴拉圭)

es-SV

西班牙语(萨尔瓦多)

es-UY

西班牙语(乌拉圭)

es-VE

西班牙语(委内瑞拉)

et

爱沙尼亚语

et-EE

爱沙尼亚语

eu

巴士克语

eu-ES

巴士克语

fa

法斯语

fa-IR

法斯语

fi

芬兰语

fi-FI

芬兰语

fo

法罗语

fo-FO

法罗语

fr

法语

fr-BE

法语(比利时)

fr-CA

法语(加拿大)

fr-CH

法语(瑞士)

fr-FR

法语(法国)

fr-LU

法语(卢森堡)

fr-MC

法语(摩纳哥)

gl

加里西亚语

gl-ES

加里西亚语

gu

古吉拉特语

gu-IN

古吉拉特语

he

希伯来语

he-IL

希伯来语

hi

印地语

hi-IN

印地语

hr

克罗地亚语

hr-BA

克罗地亚语(波斯尼亚和黑塞哥维那)

hr-HR

克罗地亚语

hu

匈牙利语

hu-HU

匈牙利语

hy

亚美尼亚语

hy-AM

亚美尼亚语

id

印度尼西亚语

id-ID

印度尼西亚语

is

冰岛语

is-IS

冰岛语

it

意大利语

it-CH

意大利语(瑞士)

it-IT

意大利语(意大利)

ja

日语

ja-JP

日语

ka

格鲁吉亚语

ka-GE

格鲁吉亚语

kk

哈萨克语

kk-KZ

哈萨克语

kn

卡纳拉语

kn-IN

卡纳拉语

ko

朝鲜语

ko-KR

朝鲜语

kok

孔卡尼语

kok-IN

孔卡尼语

ky

吉尔吉斯语

ky-KG

吉尔吉斯语(西里尔文)

lt

立陶宛语

lt-LT

立陶宛语

lv

拉脱维亚语

lv-LV

拉脱维亚语

mi

毛利语

mi-NZ

毛利语

mk

马其顿语

mk-MK

马其顿语(FYROM)

mn

蒙古语

mn-MN

蒙古语(西里尔文)

mr

马拉地语

mr-IN

马拉地语

ms

马来语

ms-BN

马来语(文莱达鲁萨兰)

ms-MY

马来语(马来西亚)

mt

马耳他语

mt-MT

马耳他语

nb

挪威语(伯克梅尔)

nb-NO

挪威语(伯克梅尔)(挪威)

nl

荷兰语

nl-BE

荷兰语(比利时)

nl-NL

荷兰语(荷兰)

nn-NO

挪威语(尼诺斯克)(挪威)

ns

北梭托语

ns-ZA

北梭托语

pa

旁遮普语

pa-IN

旁遮普语

pl

波兰语

pl-PL

波兰语

pt

葡萄牙语

pt-BR

葡萄牙语(巴西)

pt-PT

葡萄牙语(葡萄牙)

qu

克丘亚语

qu-BO

克丘亚语(玻利维亚)

qu-EC

克丘亚语(厄瓜多尔)

qu-PE

克丘亚语(秘鲁)

ro

罗马尼亚语

ro-RO

罗马尼亚语

ru

俄语

ru-RU

俄语

sa

梵文

sa-IN

梵文

se

北萨摩斯语

se-FI

北萨摩斯语(芬兰)

se-FI

斯科特萨摩斯语(芬兰)

se-FI

伊那里萨摩斯语(芬兰)

se-NO

北萨摩斯语(挪威)

se-NO

律勒欧萨摩斯语(挪威)

se-NO

南萨摩斯语(挪威)

se-SE

北萨摩斯语(瑞典)

se-SE

律勒欧萨摩斯语(瑞典)

se-SE

南萨摩斯语(瑞典)

sk

斯洛伐克语

sk-SK

斯洛伐克语

sl

斯洛文尼亚语

sl-SI

斯洛文尼亚语

sq

阿尔巴尼亚语

sq-AL

阿尔巴尼亚语

sr-BA

塞尔维亚语(拉丁文,波斯尼亚和黑塞哥维那)

sr-BA

塞尔维亚语(西里尔文,波斯尼亚和黑塞哥维那)

sr-SP

塞尔维亚(拉丁)

sr-SP

塞尔维亚(西里尔文)

sv

瑞典语

sv-FI

瑞典语(芬兰)

sv-SE

瑞典语

sw

斯瓦希里语

sw-KE

斯瓦希里语

syr

叙利亚语

syr-SY

叙利亚语

ta

泰米尔语

ta-IN

泰米尔语

te

泰卢固语

te-IN

泰卢固语

th

泰语

th-TH

泰语

tl

塔加路语

tl-PH

塔加路语(菲律宾)

tn

茨瓦纳语

tn-ZA

茨瓦纳语

tr

土耳其语

tr-TR

土耳其语

ts

宗加语

tt

鞑靼语

tt-RU

鞑靼语

uk

乌克兰语

uk-UA

乌克兰语

ur

乌都语

ur-PK

乌都语

uz

乌兹别克语

uz-UZ

乌兹别克语(拉丁文)

uz-UZ

乌兹别克语(西里尔文)

vi

越南语

vi-VN

越南语

xh

班图语

xh-ZA

班图语

zh

中文

zh-CN

中文(简体)

zh-HK

中文(香港)

zh-MO

中文(澳门)

zh-SG

中文(新加坡)

zh-TW

中文(繁体)

zu

祖鲁语

zu-ZA

祖鲁语

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/128715.html

(0)
上一篇 45分钟前
下一篇 13分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信