当前位置: 首页 > news >正文

麒麟V10系统统一认证子系统国际化

    在适配麒麟V10系统统一认证子系统国际化过程中, 遇到了很多的问题,关键是麒麟官方的文档对这部分也是粗略带过,遇到的问题有:

(1)xgettext无法提取C源文件中目标待翻译的字符串。

(2)使用msgfmt从pot文件生成mo文件后,在运行/usr/lib/biometric-authentication/biometric-authenticationd后,指纹驱动成功无法识别到mo文件。

在查看xgettext官方文档以及百度各位先行者的文章,找到了解决办法。

(1)xgettext无法生成.pot文件,于我当时的情况是在标记待翻译的字符串的时候标记错了,比如:我项目中标记待翻译的字符串为"_(please press your finger!)",  并且我在头文件中定义标记规则如下 :

根据此规则, 正确的标记应该为_("please press your finger!"),如果xgettext在待检测的文件中没有找到符合标记的字符串,那么xgettext指令不会生成pot文件,除非在xgettext命令中增加特定的标记,这样会生成pot文件,不过该文件中是空的, 不会记录任何待翻译的字符串,但是这样做没有必要。生成pot文件的简单指令形如:xgettext --default-domain=yanshenFinger -j  --directory=./  --add-comments --keyword=_ --keyword=N_ --files-from=./src/po/yanshenFinger.ini --from-code=UTF-8 --language=C  -p ./src/po  -o yanshenFinger.pot。 

yanshenFinger.ini: 此文件每行都是项目中某一个文件相对于上述指令执行目录下的相对路径。

-language: 因为我项目中的源文件基本上都是C/C++,所以此处填写值为“C”

./src/po: 为 pot文件的生成路径。

-j: 如果./src/po/文件夹下不存在yanshenFinger.pot 文件,那么就不要加此标记(如果加了,我使用的xgettext的版本将不会生成pot文件,即使在源文件中都正确标记了待), 如果./src/po/yanshenFinger.pot已经存在,那么添加 -j标记将会更新最新的字符串记录到pot文件中,不会修改pot文件已经编辑的内容,总之一句话,加-j就是在已有yanshenFinger.pot的基础上更新yanshenFinger.pot文件。

        正常的pot文件中的内容形如 :

每条记录记录了待翻译字符串所在的文件名及其所在文件中的行数, 文件类型, msgid后面的字符串代表待翻译的字符串, 在xgettext生成pot文件后msgstr默认是空的,,msgstr即是我们需要修改的对应msgid字符串的翻译后的内容。编辑完pot文件后, 就可以使用msgfmt指令生成mo文件了,简单的指令形如:msgfmt  ./src/po/yanshenFinger.pot  -o  ./src/po/yanshenFinger.mo 。

(2)因为我的项目只是编译出指纹仪驱动供/usr/lib/biometric-authentication/biometric-authenticationd调用,所以在项目中不需要像在二进制可执行文件项目中那样设置:

setlocale (LC_ALL, "");

bindtextdomain(BIOMETRIC_DRIVER_DOMAIN_NAME, LOCALEDIR_EX); textdomain(BIOMETRIC_DRIVER_DOMAIN_NAME);

只需要执行bindtextdomain(BIOMETRIC_DRIVER_DOMAIN_NAME, LOCALEDIR_EX)即可,BIOMETRIC_DRIVER_DOMAIN_NAME为当前驱动库使用的mo文件中的domain值,即是前面部分中xgettext中的--default-domain字段的值, LOCALEDIR_EX为“/usr/share/locale”, 至于LOCALEDIR_EX为啥被定义为“/usr/share/locale”,因为我麒麟统一认证biometric-authenticationd中设置的LOCALEDIR就是此值,我编写的指纹仪驱动只是biometric-authenticationd中的驱动模块,之前我一直设置LOCALEDIR_EX为某一我保存mo文件的目录, 执行biometric-authenticationd服务后, 该服务一直找不着我指定的mo文件,无法满足我的既定期望,在设置LOCALEDIR_EX为“/usr/share/locale”后, 我将yanshenFinger.mo文件复制到/usr/share/locale/zh_CN/LC_MESSAGES/中后, 运行biometric-authenticationd就能识别到yanshenFinger.mo, 并且在麒麟统一认证指纹仪操作过程中英文被翻译成了我指定的中文了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大厂linux面试题攻略四之Linux网络服务(二)
  • usb驱动描述符数据结构
  • <数据集>工程机械识别数据集<目标检测>
  • extern关键字在C语言中的作用
  • 【python】三种方式实现将2个3×5数组拼接形成6×5数组
  • 了解消息中间件TongLINK/Q
  • 实验5-1 使用函数计算两点间的距离
  • 以西门子winCC为代表的组态界面,还是有很大提升空间的。
  • 【C++】文件IO流
  • 涨点发论文神器:即插即用多尺度融合模块!
  • web以及nginx
  • 【网络世界】HTTPS协议
  • 《程序猿入职必会(5) · CURD 页面细节规范 》
  • logstash 全接触
  • 深入了解-什么是CUDA编程模型
  • 《深入 React 技术栈》
  • angular组件开发
  • css系列之关于字体的事
  • Docker下部署自己的LNMP工作环境
  • Hibernate最全面试题
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Laravel Mix运行时关于es2015报错解决方案
  • Python学习之路16-使用API
  • Selenium实战教程系列(二)---元素定位
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vue学习第二天
  • 初识 beanstalkd
  • 从伪并行的 Python 多线程说起
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 让你的分享飞起来——极光推出社会化分享组件
  • 人脸识别最新开发经验demo
  • 通过git安装npm私有模块
  • 微信开源mars源码分析1—上层samples分析
  • Python 之网络式编程
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​520就是要宠粉,你的心头书我买单
  • ​补​充​经​纬​恒​润​一​面​
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​水经微图Web1.5.0版即将上线
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (02)Unity使用在线AI大模型(调用Python)
  • (arch)linux 转换文件编码格式
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (备份) esp32 GPIO
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm码农论坛 毕业设计 231126
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十八)SpringBoot之发送QQ邮件
  • (四)汇编语言——简单程序
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net core 管理用户机密
  • .net dataexcel winform控件 更新 日志
  • .NET MVC之AOP
  • .net 提取注释生成API文档 帮助文档