当前位置: 首页 > 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, 并且在麒麟统一认证指纹仪操作过程中英文被翻译成了我指定的中文了。

http://www.lryc.cn/news/411166.html

相关文章:

  • C语言进阶 13. 文件
  • LinuxCentos中ELK日志分析系统的部署(详细教程8K字)附图片
  • Vscode ssh Could not establish connection to
  • 数字陷波器的设计和仿真(Matlab+C)
  • [玄机]流量特征分析-常见攻击事件 tomcat
  • 【TOOLS】Project 2 Maven Central
  • 【Opencv】模糊
  • 函数式编程范式
  • 特征缩放的秘籍:sklearn中的数据标准化技术
  • hdfs文件系统
  • 基于STM32设计的个人健康检测仪(华为云IOT)(191)
  • 面试:CUDA Tiling 和 CPU tiling 技术详解
  • SQL语句中,`TRUNCATE` 和 `DELETE`的区别
  • 【Git】.gitignore全局配置与忽略匹配规则详解
  • 基于 YOLO V10 Fine-Tuning 训练自定义的目标检测模型
  • Java学习2
  • CSS、less、 Sass、
  • 北京大学:利用好不确定性,8B小模型也能超越GPT-4
  • ​​​​​​​哪些云服务商已通过了等保2.0合规性评估?​​​​​​​
  • PHP在线加密系统源码
  • OpenCV学习笔记 比较基于RANSAC、最小二乘算法的拟合
  • 前端JS特效第53集:带声音的烟花模拟绽放特效插件
  • 好展位,抢先订!2025浙江(玉环)机械展
  • Java面试八股之Spring如何解决循环依赖
  • 如何为 SQL Server 设置强密码以增强安全性?
  • C语言实现三子棋
  • 昇思25天学习打卡营第XX天|RNN实现情感分类
  • linux深度学习环境配置(cuda,pytorch)
  • SpringBoot教程(十九) | SpringBoot集成Slf4j日志门面
  • 科普文:深入理解ElasticSearch体系结构