[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
Qt 多国语言支持
Wu Zhangjin 创作于 2014/07/03
问题描述
很多软件在全球各地广泛使用,有众多不同国籍和语言的用户。用Qt开发的软件同样受众广泛,跨越多个国家。如果某个软件最早源自英语国家,要想推广到中国,如何支持中文呢?
问题分析
Qt对多国语言的支持非常有好。所有用
QObject::tr()
包含的字符串都可以翻译成多个不同国家的语言,如果要翻译成多国语言,只需要在.pro
中添加TRANSLATIONS指定某个国家的语言,然后可以用lupdate
把所有这样的字符串dump出来并生成一个.ts
文件,该文件可以用linguist翻译工具编辑,翻译完成后,可以用lrelease生.qm
格式的Qt message files,这个文件可以被Qt加载,加载不同国家语言的这种文件就可以让该软件呈现出不同国家的语言。解决方案
这里以qtcreator快速创建一个Qt例子,并从头开始介绍如何添加中文支持。
快速创建一个Qt例子,先启动qtcreator:
$ qtcreator
然后,依次:
New File or Project --> Applications --> Qt Gui Application --> Next --> Name: test --> Class: test --> Finis
这样会创建一个默认的只支持英文的Qt程序。通过Build, Run启动后,发现标题是英文test。
如果要支持中文,让标题显示为“多国语言测试”,相关改动如下:
diff --git a/main.cpp b/main.cpp index 0980f59..976e320 100644 --- a/main.cpp +++ b/main.cpp @@ -1,9 +1,20 @@ #include <QApplication> +#include <QTextCodec> +#include <QTranslator> #include "test.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); + + QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); + QFont font1("unifont", 16, 50, FALSE); + a.setFont(font1); + + QTranslator *t = new QTranslator(0); + t->load(QString("test_zh_CN.qm"), "."); + a.installTranslator(t); + test w; w.show(); diff --git a/test.pro b/test.pro index ceeb973..6282570 100644 --- a/test.pro +++ b/test.pro @@ -18,3 +18,5 @@ SOURCES += main.cpp\ HEADERS += test.h FORMS += test.ui + +TRANSLATIONS += test_zh_CN.ts
然后,咱们可以通过lupdate生成test_zh_CN.ts这个中文翻译文件,这个文件主要给语言学家用:
$ lupdate test.pro
生成的test_zh_CN.ts可以用linguist打开:
$ linguist test_zh_CN.ts
打开以后填充Chinese Translation部分的内容为“多国语言测试”,并选择那个对钩按钮,设置翻译完成,然后保存退出即可。
之后通过lrelease生成Qt message file:test_zh_CN.qm:
$ lrelease test_zh_CN.ts
翻译完成后,咱们重新编译并启动:
$ qmake && make $ ./test
会发现标题已经变成了“多国语言测试”。
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |