让QT/Embedded支持国际化

环境配置:
Qt/Embedded  ,在主机和目标板上存放路径都为:/root/qt-embedded-free-
Qt/X11      3.3   (主要用到其中的lupdate,lrelease和lingust工具)

、修改并重新编译应用程序,使之支持I18N
编辑程序入口文件,在QApplication对象声明之后添加:
QTranslator translator;
 translator.load("pro_zh"); //假设你的qm文件名为pro_zh.qm
 app.installTranslator(&translator);

  如果希望程序根据locale设置自动查找qm文件,可将第二行改为:translator.load(QString("pro_") + QTextCodec::locale());
接着给所有需要国际化的文本加上tr方法调用,如: QLabel label = new QLabel(tr("Call")),这里tr中的参数相当于英文键,值为国际化后的各国文本,后面用到的lupdate等工具就是通过这个标志来搜索 源文件需要翻译的字符串的。

交叉编译程序

、生成qm文件
首选在上一步中生成的pro文件中加入TRANSLATIONS的定义,内容为:TRANSLATIONS += lang_zh.ts
接着使用lupdate生成ts文件,该命令根据这个TRANSLATIONS定义将当前目录下所有源文件中的需要翻译的文本提取出来放在lang_zh.ts文件中。具体执行命令是:lupdate lang.pro
此时目录中会生成一个lang_zh.ts的XML格式的文件,内容类似于:
<!DOCTYPE TS><TS>
 <context>
 <name>QObject</name>
 <message>
 <source>Call</source>
 <translation type="unfinished"></translation>
 </message>
 </context>
 </TS>

文件中source标签中Call及时之前定义的需要翻译的文本,下面要做的就是翻译,你可以用lingust工具实现,也可以自己翻译。Linugst 是Qt自带的翻译工具,一般RedHat .0安装Qt后都有该工具,在QT/Embedded源码目录的tools中也有该工具。自己翻译就是在lang_zh.ts文件中直接修改,针对 "Call",我们只要在相应的<translation></translation>中加入翻译的内容即可。翻译后的文件内 容类似如下:
<!DOCTYPE TS><TS>
 <context>
 <name>QObject</name>
 <message>
 <source>Call</source>
 <translation type="unfinished">呼叫</translation>
 </message>
 </context>
 </TS>

最后生成相应.qm文件,执行:lrelease lang.pro

、将编译后的二进制文件和qm文件拷贝到目标板上,执行二进制文件即可。此时你看到的应该没有中文而是tr函数中的要翻译的文本,这是local没设置的缘故,目标板中执行"export LANG=zh",然后执行: ./app -qws -font unifont,记住:如果没有-font选项你看到的汉字将是方框,这是因为程序默认采用不支持中文的Helvetica字体。

如果你对默认的unifont字体不满意,可以自己添加喜欢的字体
附:往Qte中添加字体方法
字体简介:
默认情况下Qt/Embedded在lib/fonts目录下已经提供了一种可以显示中文的字体库"uniFont",包含以下几个文件: unifont_160_50.qpf unifont_160_50_t10.qpf unifont_160_50_t15.qpf unifont_160_50_t5.qpf unifont.bdf。 qpf文件是Qt/Embedded专用的一种适合嵌入式位图字体,每个文件只包含一种尺寸的字体,不能缩放,优点是占用的磁盘空间很小,一般只有 600K到1M。QTE对字体的管理通过一个配置文件"fontdir"进行的,位于$QTDIR/lib/fonts下面,内容如下:
    ...
    # Unifont is available in source form from http://czyborra.com/unifont/
    unifont unifont.bdf BDF n   u
    ...
每一行是关于一种字体的设置,对应列的定义为:<字体名称> <字体文件名> <字体渲染类型> <是否斜体> <是否粗体> <尺寸> <字体标志> [尺寸列表],每列解释如下:
<字体渲染类型>:可以为TTF,BDF,QPF三种类型;
<是否斜体>:y表示为斜体,n表示正常体;
<是否粗体>:50表示正常体,75表示粗体;
<标志>:a使用ASCII字符集,u使用unicode字符集,s使用锯齿平滑(anti-aliased);
<尺寸>:,则系统从[尺寸列表]中提取可以转换的字体尺寸;
以windows下的提供的华文细黑字体为例,将stxihei.ttf拷贝到$QTDIR/lib/fonts/目录中,然后编辑该目录中的fontdir文件,在文件最后加入:   stxihei stxihei.ttf FT n   su
注意:字体标志一定要加上u,说明使用unicode字符集,不然显示出现"方块"显示, 如果你想使用TrueType字体,那么不用进行下面的qpf格式转换就可以使用字体了。

转换字体为QPF格式:
Qt/Embedded提供了一个十分方便的工具来完成这项工作makeqpf,该工具放在$QTDIR/tools/makeqpf中。makeqpf 通过读取$QTDIR/lib/fonts/fontdir来获取需要转换的字体信息,然后生成相应的QPF字体。要使用makeqpf,在目标板中直接 运行:makeqpf,然后点击你要转换的字体,转换成功之后,你会在屏幕上看见转后的字体的显示效果。或者你可以运行:makeqpf <font_name> [charset range](例如makeqpf stxihei -ff,4e00-fa29)

注册字体:
在fontdir文件中加上字体信息即可。以上述的"stxihei stxihei.ttf FT n 50 140 su"为例,通过在makeqpf中点击stxihei来生成一个华文细黑的QPF文件,文件名称为"stxihei_140_50.qpf",编辑 fontdir文件,注释掉原有的关于stxihei配置,加入新的字体信息:
    #stxihei stxihei.ttf FT n   su
    stxihei stxihei_140_50.qpf QPF n   su

最后,确认下目标板文件系统中有以下内容:
)$QTDIR/lib/fonts/stxihei_140_50.qpf
)$QTDIR/lib/fonts/fontdir中应该有以下的配置:stxihei stxihei_140_50.qpf QPF n   su(或者stxihei stxihei.ttf FT n   su);
)应用程序目录下应该有lang_zh.qm文件。

一切无误后,运行: ./app -qws -font stxihei可看到字体已经应用到程序中了。

让QT/Embedded支持国际化的更多相关文章

  1. QT Embedded二三事之QObject的元对象

    一.元对象  元对象被称做是meta object.在运行时刻(runtime),能够提供对象的运行时信息.        在C++语言发展的早期,C++语言本身没有定义对象的运行时信息,如输出类的名 ...

  2. Spring使用拦截器支持国际化(转)

    Spring使用拦截器支持国际化很方便,使用时只需要两个步骤: 一.spring配置 具体配置方式如下: <!-- 资源文件绑定器,文件名称:messages.properties(没有找到时的 ...

  3. I.MX6 linux Qt 同时支持Touch、mouse

    /***************************************************************************** * I.MX6 linux Qt 同时支持 ...

  4. Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2

    This tutorial shows how to cross-compile the Embedded build of Qt 5.5 for Raspberry Pi 2. The Embedd ...

  5. Qt 打印机支持模块

    Qt 打印支持 Qt为打印提供广泛的跨平台支持.使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机,并通过网络打印到远程打印机.Qt的打印系统还支持PDF文件生成,为基本的报告生成设施奠定了 ...

  6. 让Qt Creator支持Windows Phone 8开发

    让Qt Creator支持Windows Phone 8开发 近期QtCreator3.2出了.修复了一些Bug.比上一个版本号3.1.2要好了一些. 因为在上一个版本号(Qt for WinRT自带 ...

  7. Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或PowerPC Mac二进制文件)

            Nokia的开源Qt开发工具正式发布了4.5版.如前所述,Qt 4.5最大的变动是换用LGPL许可证,目前采用的三个许可证分别为LGPL/GPL和商业许可证.           新版 ...

  8. 【Linux开发】【Qt开发】QT 同时支持鼠标和触摸屏

    QT 同时支持鼠标和触摸屏 现在 如果我要使用鼠标 导入环境变量 export QWS_MOUSE_PROTO=MouseMan:/dev/input/mice 使用触摸屏,导入环境变量 export ...

  9. SpringBoot 快速支持国际化i18n

    学习目标 快速学会如何在工程中支持国际化语言. 快速查阅 专题阅读:<SpringBoot 布道系列> 源码下载:springboot-locale-i18n — Hey Man,Don' ...

随机推荐

  1. Python全栈开发之16、jquery

    一.查找元素 1.选择器 1.1 基本选择器      $("*")  $("#id")  $(".class")  $("ele ...

  2. 使用apache的ab命令进行压测

    1. 背景:互联网发达的今天,大大小小的网站如雨后春笋,不断出现,但是想要做出一个网站很简单,但是想要做好一个网站,非常非常难,首先:网站做好之后的功能怎么样这都是次要的,主要的是你的网站能承受怎么样 ...

  3. 深度学习常用数据集 API(包括 Fashion MNIST)

    基准数据集 深度学习中经常会使用一些基准数据集进行一些测试.其中 MNIST, Cifar 10, cifar100, Fashion-MNIST 数据集常常被人们拿来当作练手的数据集.为了方便,诸如 ...

  4. MXNet——symbol

    参考资料:有基础(Pytorch/TensorFlow基础)mxnet+gluon快速入门 symbol symbol 是一个重要的概念,可以理解为符号,就像我们平时使用的代数符号 x,y,z 一样. ...

  5. React Native踩坑之FlatList组件中的onEndReached

    最近在做一个RN项目,有使用到FlatList这样一个RN封装的组件去做上拉加载更多功能,在iOS和Android平台上,总结了以下几个遇到的问题及解决方案 1. 进入页面onReached开始就被触 ...

  6. Vue图片懒加载插件

    图片懒加载是一个很常用的功能,特别是一些电商平台,这对性能优化至关重要.今天就用vue来实现一个图片懒加载的插件. 这篇博客采用"三步走"战略--Vue.use().Vue.dir ...

  7. android无后缀二进制执行文件替代apk实现程序功能

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha android无后缀二进制执行文件替代apk实现程序功能 实现将data/Android ...

  8. OI刷题记录(Updating)

    [Counter] [AGC]:0/96 [ARC]:0/70 [2016年省选]:0/69 [2017年省选]:22/75 [2018年省选]:0/63 [ZROI2018]:0/30 [ZROI2 ...

  9. HTTPClient实现免登陆请求(带cookie请求)

    背景: 使用httpClient请求某登录型网站,模拟一个操作,一般步骤一个httpclient模式登录->httpClient模拟操作: 此时发现,每次操作都需要进行一次登录,极其浪费时间,是 ...

  10. bzoj 3669 lct维护最小生成树

    大概题意:给一个无向图,有a,b两种边权,找一条从1到n的路径,使得max(a[i])+max(b[i])最小a[i],b[i]表示该路径上的边的对应权. 如果用类似最短路的DP来做,显然每个点的状态 ...