msgfmt - 翻译汉化
说明
- 目前大部分自由软件实现国际化使用的是gettext。
- 国际化就是让程序可以使用多国语言来显示程序里的字符串。
- 程序里一般都有很多字符串,菜单名也好,错误信息也好,都是字符串。假设字符串为string,非国际化的程序里都是直接写"string"。如果用了 gettext 来实现国际化的话,就要写成 gettext("string")。有时也会看到_("string"),那实际上也是 gettext,只不过通过宏的定义把 gettext 改头换面了。
- 这个string就是msgid。然后使用xgettext来从程序源代码文件产生po文件。
- 然后交给专门的翻译人员来翻译 po。
- 翻译完毕后,使用 msgfmt 来把po转化成 mo 文件,并安装到系统里合适的位置。
- 程序运行时,到底显示什么字符串就是 由 gettext 函数来决定的了。
- 主要有两个决定因素,一个是系统的locale及相关环境变量(LANGUAGE,LC_ALL,LC_MESSAGES和LANG), 一个是相关的mo文件。
安装使用
# 安装软件
yum install gettext -y
# 编码 po 文件为 mo 文件:
msgfmt -o test.mo test.po
# mo 文件反编码成 po 文件:
msgunfmt test.mo -o test.po
Q & A
- 如果有重复内容提示,删掉重复内容即可:
# msgfmt -o messages.mo messages.po
messages.po: 4622: duplicate message definition...
messages.po: 4590: ...this is the location of the first definition
msgfmt - 翻译汉化的更多相关文章
- JVM 参数翻译汉化解释
博客搬家,新地址:http://www.zicheng.net/article/38.htm Behavioral Options(行为参数) Option and Default Value Des ...
- pfSense用户界面汉化翻译教程
pfSense用户界面汉化翻译教程 来源 https://blog.51cto.com/fxn2025/2087182 为了记录自己的汉化过程,同时也为了方便网友自己制作汉化版本,我把自己汉化pfSe ...
- zabbix 汉化
zabbix2.x的版本自带汉化,3.x的版本也可以通过修改配置文件强制使用自带的汉化,但是不管哪种,翻译的精准度令人费解:偶然发现一个专门翻译zabbix的网站https://www.zabbix. ...
- 真正的汉化-PowerDesigner 16.5 汉化
一.背景 经常使用PowerDesigner,之前使用15版本,后来16出来后,就一直在使用16,不过一直是英文.一些同事对使用英文版总显示有些吃力. 遍寻百度.必应,都没有找到真正的针对版本16的汉 ...
- ENGLISH抠脚童鞋的福利--GitHub汉化插件
今天在某前端群看到一个插件,激动万分啊!我就把插件使用实现的步骤分享一下! 打开chrome浏览器输入地址:chrome://extensions/ : 跳转到其他页面,点击左上角--扩展程序: 将T ...
- 如何汉化XAF应用
这是一个入门级的问题,应网友请求,总结一下XAF汉化过程的几个关键点. 一.所有Dev的控件的汉化,Dev官方有汉化文件.点击下载15.2版本. 正版用户登陆至官网是有专门的下载界面的,并且可以参与汉 ...
- Crowd 2.7汉化中文包(原创首发)
介绍:Crowd是用来集成Atlassian各类产品用户集成系统,如Jira,Confluence等的集中用户管理平台.可对组.成员关系.用户.目录.应用程序及权限进行综合管理,并可实现其他程序的单点 ...
- ISTool5.3.1汉化版使用教程
ISTool是帮助你创建由Jordan Russell制作的Inno Setup编译器脚本的工具.Inno是一个出色的编译器,即使对于某些专业的安装制作程序,它唯一的缺点就是它的脚本必须手动编写. 这 ...
- Aptana Studio 3 汉化简体中文版
最近开始学习ruby on rails了,同事推荐我用aptana这个编辑器,它对ror的支持比较好,所以安装了这个软件,但是发现都是英文的,所以在网上看汉化教程,幸亏有高手写过这个文章了,这里我只是 ...
随机推荐
- 19 01 16 jquery 的 属性操作 循环 jquery 事件 和事件的绑定 解绑
jquery属性操作 1.html() 取出或设置html内容 // 取出html内容 var $htm = $('#div1').html(); // 设置html内容 $('#div1').htm ...
- MySQL新增数据,存在就更新,不存在就添加
1.插入一条数据,存在就更新,不存在就更新(必须现有唯一键)使用insert ignore语句: insert ignore into table(col1,col2) values ('a','b' ...
- [题解] Luogu P4245 [模板]任意模数NTT
三模NTT 不会... 都0202年了,还有人写三模NTT啊... 讲一个好写点的做法吧: 首先取一个阀值\(w\),然后把多项式的每个系数写成\(aw + c(c < w)\)的形式,换句话说 ...
- Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch
今天向大家介绍的是多线程开发中的一些辅助类,他们的作用无非就是帮助我们让多个线程按照我们想要的执行顺序来执行.如果我们按照文字来理解Semaphore.CyclicBarrier.CountDownL ...
- [DDCTF 2019]homebrew event loop
0x00 知识点 逻辑漏洞: 异步处理导致可以先调用增加钻石,再调用计算价钱的.也就是先货后款. eval函数存在注入,可以通过#注释,我们可以传入路由action:eval#;arg1#arg2#a ...
- Java8集合框架——ArrayList源码分析
java.util.ArrayList 以下为主要介绍要点,从 Java 8 出发: 一.ArrayList的特点概述 二.ArrayList的内部实现:从内部属性和构造函数说起 三.ArrayLis ...
- Vue-router(5)之 路由的before家族
beforeEach方法 import Vue from 'vue' import Router from 'vue-router' import Son1 from '@/view/New/son1 ...
- linux tar/ tar.gz文件解压
1.tar 压缩 tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成 ...
- Opencv中的轮廓(不全)
1.初识轮廓 为了准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化处理,或者Canny边界检测. 查找轮廓的函数会修改原始图像.如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他 ...
- STM32F407的Modbus做为主站与从站通讯
在调试STM32F407的串口Modbus通讯之前,也使用过Modbus通讯,只不过都是在PLC或则昆仑通态的触摸屏上使用直接调用现成的库里面的模块,驱动就可以,相对于STM32来,使用PLC库里面的 ...