zoukankan      html  css  js  c++  java
  • QML基础——QML国际化(中文示例)

    在Qt程序中如何使用多国语言已经在《Qt的国际化和本地化》 这篇文章中有所介绍,本文则针对如何对出现在QML中的字符串进行国际化进行专门介绍。
    本本将通过一个很小的中文例子程序,向大家一步步讲解如何使得出现在QML代码中的字符串显示成中文。示例程序可通过本文末尾所附链接下载。更多阅读可以参照“QML的国际化

    修改pro

    在Qt的pro文件中首先加入以下几行:

    CONFIG += localize_deployment
    SYMBIAN_SUPPORTED_LANGUAGES += zh_CN
    SYMBIAN_LANG.zh_CN = 31

    TRANSLATIONS = displayChinese_zh_CN.ts

    其中CONFIG += localize_deployment是为了可以为应用程序添加中文名称。

    然后加入以下几行:

    symbian {
    addFiles.sources = qml/displayChinese/displayChinese_zh_CN.qm
    addFiles.path = .
    DEPLOYMENT += addFiles
    }

    这是为了程序在手机上能够找到需要的qm文件

    标记字符串

    出现在QML 中的字符串如果需要翻译则可以通过使用 qsTr(), qsTranslate(), QT_TR_NOOP(), 或QT_TRANSLATE_NOOP() 来进行标记。例如在本例程中:

    Text {
    text: qsTr("display Chinese character.")
    anchors.centerIn: parent
    }

    使用了 qsTr()。 只有这样做过标记之后,translator才知道“display Chinese character”。是需要被翻译的,以便于后面进行处理

    生成中文目标语言的ts文件

    首先需要启动命令行,例如如果我们安装的是QtSDK 1.1 beta 则启动下图所示command prompt:

    在命令行中进入我们项目的根目录,然后输入以下命令:

    lupdate qml/displayChinese/main.qml -ts qml.ts

    这样就会生成一个名为qml.ts的文件了.

    然后我们在命令行中继续输入:

    lupdate displayChinese.pro -ts app.ts

    从而生成app.ts文件

    翻译

    用Qt Linguist打开上一步生成的qml.ts 和 app.ts,将我们翻译的文字输入进去即可,最后保存文件,完成。 然后在命令行中输入:

    lconvert app.ts qml.ts -o displayChinese_zh_CN.ts

    这是为了将两个ts文件合并起来。最后的效果如图:

    其中QtApplicationCaptions就是指的程序呈现在用户面前的名称(我们这里起名叫QML中文应用程序),而QtPackageNames是指的安装sis时给用户的提示信息中的名称。

    生成运行时所需的qm文件

    上一步做完之后,我们点选择File 菜单中的release就可以生成qm文件了。

    加载翻译文件

    要想使得翻译起作用,还需要在Qt程序的main函数中进行设定,例如:

    QString locale = QLocale::system().name();
    QTranslator translator;
    bool success = translator.load( QString("displayChinese_") + locale);
    app.installTranslator(&translator);

    至此,整个示例程序就完成了,下面我们看一下效果。

    程序截图

    本程序对QML中的字符串进行了多语言处理,并且给应用程序起了一个中文名字,只是没有处理软键,不过原理都是一样的,具体可以参阅《Qt的国际化和本地化》 。

    下面是示例程序在N8上截图,当我们的N8语言设置为中文的时候就是第一幅图,当我们的N8语言设置为英文的时候就是第二副图。

    当手机语言设定为中文时:

  • 相关阅读:
    python中__init__和__call__的区别
    scrapy在start_requests中传入参数给parser
    crawl: error: Unrecognized output format 'json''
    判断一个点是否在多边形区域内部 / 判断一个给定位置是否位于某个城市内部
    scrapy爬取页面不完全的解决办法
    module 'tensorflow._api.v2.train' has no attribute 'rmspropoptimizer'
    tf.image.resize处理后的图片无法使用plt.imshow正常显示
    如何将tensor大于某个值为1,小于某个值为0
    Blas GEMV launch failed: m=3, n=10000
    sql 批量插入 insert
  • 原文地址:https://www.cnblogs.com/hicjiajia/p/2332250.html
Copyright © 2011-2022 走看看