首页 > 代码库 > 在Ubuntu OS上怎么本地化一个QML应用
在Ubuntu OS上怎么本地化一个QML应用
在这篇文章中,我们来介绍怎么在Ubuntu OS上本地化一个应用。本地化对很多的应用很重要。我们重点介绍怎么把应用本地化为中文。
1)创建一个最基本的应用
首先打开我们的Ubuntu SDK,并选择“App with Simple UI and localization”的模版。
然后接下来:
我们完成后我们的项目后,我们发现在项目的“LocalizeQml/po”目录中有生产一个文件“CMakeLists.txt”。当我们第一次运行我们的应用(无论在任何的architecture下),SDK会帮我们生产另外一个文件“com.ubuntu.developer.liu-xiao-guo.localizeqml.pot”。这个文件就是我们需要本地化的文件。我们在当前的文件目录下,复制这个文件,并重新命名为“zh_CN.po”。注意这里“zh_CN”是为中国地区简体中文的国际语言代码。我们打开该文件,并同时翻译该文件:
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-20 12:05+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../app/ui/HelloTab.qml:6 msgid "Hello.." msgstr "您好" #: ../app/ui/HelloTab.qml:18 msgid "Hello World" msgstr "您好,世界" #: ../app/ui/HelloTab.qml:26 msgid "You can change the Tab from Page title above." msgstr "您可以从页面的标题上改变标签" #: ../app/ui/WorldTab.qml:6 msgid "..World!" msgstr "..世界!" #: ../app/ui/WorldTab.qml:18 msgid "WorldTab" msgstr "世界标签" #: /home/liuxg/release/build-localizedqml-Desktop-Default/po/localizedqml.desktop.in.h:1 msgid "LocalizeQml" msgstr "本地化QML"
这里必须注意的是,必须设置charset为UTF-8才可以正常显示中文。我们可以在手机或模拟器中输入一下的命令来查看当前的手机的语言:
我们再重新运行我们的应用。在手机上看到的界面如下:
我们看见我们的UI现在都是显示的是中文。我们现在来回顾一下我的QML文件的内容:
Tab { title: i18n.tr("Hello..") page: Page { Column { spacing: units.gu(2) anchors.centerIn: parent HelloComponent { objectName: "helloTab_HelloComponent" anchors.horizontalCenter: parent.horizontalCenter text: i18n.tr("Hello World") } Label { objectName: "helloTab_label" anchors.horizontalCenter: parent.horizontalCenter text: i18n.tr("You can change the Tab from Page title above.") } } } }
我们可以看到所有的字符串是以“i18n.tr”来输出的。它可以帮我们进行本地化。当然我们可以把我们的应用本地化到任何一个其它的语言。
为了说明问题,我们把我们的应用改为:
Tab { title: i18n.tr("Hello..") page: Page { Column { spacing: units.gu(2) anchors.centerIn: parent HelloComponent { objectName: "helloTab_HelloComponent" anchors.horizontalCenter: parent.horizontalCenter text: i18n.tr("Hello World") } Label { objectName: "helloTab_label" anchors.horizontalCenter: parent.horizontalCenter text: i18n.tr("You can change the Tab from Page title above.") } Button { text: i18n.tr("Press me") } } } }
重新运行我们的应用,我们看到的是英文的界面。我们也同时查看一下我们在“po”目录下的“com.ubuntu.developer.liu-xiao-guo.localizeqml.pot”,我们看见我们新添加的“Press me”在这个文件中。我们需要重新把它添加到我们的“zh_CN.po”文件中去。
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-20 12:05+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../app/ui/HelloTab.qml:6 msgid "Hello.." msgstr "您好" #: ../app/ui/HelloTab.qml:18 msgid "Hello World" msgstr "您好,世界" #: ../app/ui/HelloTab.qml:26 msgid "You can change the Tab from Page title above." msgstr "您可以从页面的标题上改变标签" #: ../app/ui/WorldTab.qml:6 msgid "..World!" msgstr "..世界!" #: ../app/ui/WorldTab.qml:18 msgid "WorldTab" msgstr "世界标签" #: /home/liuxg/release/build-localizedqml-Desktop-Default/po/localizedqml.desktop.in.h:1 msgid "LocalizeQml" msgstr "本地化QML" #: ../app/ui/HelloTab.qml:30 msgid "Press me" msgstr "按一下我"
重新运行我们的应用:
我们看到新的字符串已经被翻译了。我们可以在我们的shell中输入如下的命名:
我们可以看见一个.mo的本地化文件被打入包中,并存于“zh_CN”下的文件目录中。整个应用的源码在如下的地址找到:
bzr branch lp:~liu-xiao-guo/debiantrial/localizeqml
在Ubuntu OS上怎么本地化一个QML应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。