【麒麟在线讲堂】浅谈 KF5 国际化

引言基于增加与软件产品交互的良好性,以及更便于软件产品的使用及推广,国际化成为了满足以上条件的基本要素之一。今日,笔者角度,以己拙见,简要介绍一下KF5框架下国际化 KI18n的实现。KF5为 KDE Framework 5 的简体缩写,是开源桌面KDE发行的第五版框架,其中KI18n作为其国际化模块封装其中。i18n为英文 internationalization 取首位字母i与n,以18代替中间被省略的18个字符,用以代表国际化的意思,与之类似的,l10n代表localization,即本地化的含义
摘要由CSDN通过智能技术生成

引言

基于增加与软件产品交互的良好性,以及更便于软件产品的使用及推广,国际化成为了满足以上条件的基本要素之一。今日,笔者角度,以己拙见,简要介绍一下KF5框架下国际化 KI18n的实现。

KF5为 KDE Framework 5 的简体缩写,是开源桌面KDE发行的第五版框架,其中KI18n作为其国际化模块封装其中。i18n为英文 internationalization 取首位字母i与n,以18代替中间被省略的18个字符,用以代表国际化的意思,与之类似的,l10n代表localization,即本地化的含义。而 KI18n 国际话的实现其实就是依托于Linux 系统下基于GUN gettext的本地化实现。

本文以cmake 软件工程为例,浅谈下如何在自己的软件产品中使用KI18n 国际化,以及如何使用Linux本地化替代KI18n国际化的实现方法。

本地化介绍

本地化通常为将翻译文件(.po)文件编译为供软件程序加载的二进制文件(.mo),实现根据本地语言自动调用翻译的二进制文件,进而翻译软件中文字。

Linux下,GUN利用gettext命令生成翻译文件的模板(.pot)文件,可通过复制模板或msginit命令等方法生成翻译文件,其中msginit命令会对模板通用部分进行补充后在本地生成翻译文件。自动填充内容对比下图:
在这里插入图片描述

图:本地化模板文件(图左) 对比 本地化翻译文件(图右)
我们可以看到,翻译(.po)文件是msgid 与msgstr 一一对应的,其中msgid为翻译的标识文本,msgstr为翻译后的文本,软件产品中通过对标识文本的读取,根据语言码、国家码及编码获取对应翻译文件中的msgstr,进而实现本地化语言的展示输出。

但是,由于翻译文件属于源文本文件,软件产品如何实现对翻译文件的读取呢?当然不可能利用文本IO方法读取了,所以最后,利用msgfmt命令将翻译(.po)文件编译为二进制(.mo)文件,供软件产品调用,软件产品根据本地语言码,国家码及编码调用对应的二进制文件,实现本地化语言翻译的实现。

KI18n的使用

软件产品若希望使用KI18n国际化框架,需要在cmake列表中添加find_package(KF5I18n NO_MODULE)找到KI18n包,并利用语句target_link_libraries(yourAPP KF5::I18n)将KI18n动态库引入到自己的软件工程中。若使用qt工程研发,在工程.pro文件中需要添加 QT += KI18n。

在编码中,需要在程序中需要被翻译前的位置,利用如下语句引入自己的翻译文件:

KLocalizedString::setApplicationDomain("yourPO");

其具体使用方法可参考用户手册,地址为:

https://api.kde.org/frameworks/ki18n/html/prg_guide.html#link_prog

其中头文件包含具体翻译实现方法

inline QString i18n(const char *text)

等等,其深层次都是对KF5中KI18n等翻译函数的封装,由此,在生成对应翻译模板(.pot)文件时,关键key的选择可包含如下信息:

i18n,i18nc, i18np, i18ncp, tr2i18n, I18N_NOOP,I18N_NOOP2, aliasLocale, ki18n,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值