GTK区域化语言的一些整理
来源:互联网 发布:实体店和淘宝买家具 编辑:程序博客网 时间:2024/06/16 08:39
在linux系统下,以c语言程序为例来实现程序的国际化,即让程序根据Linux系统不同的语言环境的不同来显示出对应该语言的文字,即先让c程序支持国际化然后再进行本地化翻译。
Linux上实现这个过程需要用到xgettext和msgfmt这两个工具:
Xgettext 是国际化的工具,用来提取程序中的字符串,生成*.po或是*.pot的文件,
msgfmt 是本地化的工具,用来编译翻译后的.po文件为.mo文件,这样系统在启动时候会扫描系统环境提取对应名字的.mo文件中的字符串替代原来的英文,实现本地化。在加载不同的言语环境变量(LANG)时,可以出翻译相应的语言。
1、 实际操作:
1) 在有需要进行翻译的文件中加入头文件:
#include <glib/gi18n.h>
2) 并添加如下定义:
#define PACKAGE "name" //name为相应翻译包name.mo的名称
#define LOCALEDIR"/usr/share/locale/" //此行不变
3) 在要翻译的位置之前添加此内容:
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
4) 对要进行翻译的内容加上:_()
例如要将button =gtk_button_new_with_label ("Hello World!");中的Hello World! 翻译为:你好,世界!则改为:button= gtk_button_new_with_label (_("Hello World!"));
5)命令行输入:xgettext –k_ name.c -o name.pot
或xgettext–k--keyword =_ name.c -o name.pot
生成name.pot 文件
6) 改变当前shell的语言环境为要翻译的语言环境:exportLANG=target
并命令行输入:msginit -l target -i name.pot
生成target.po
并对其进行翻译。
生成的.po文件内容如下:
# Chinese translations forPACKAGE package
# PACKAGE 软件包的简体中文翻译.
# Copyright (C) 2011 THEPACKAGE'S COPYRIGHT HOLDER
# This file is distributed underthe same license as the PACKAGE package.
# <rj@server>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGEVERSION/n"
"Report-Msgid-Bugs-To:/n"
"POT-Creation-Date:2011-04-02 16:21+0800/n"
"PO-Revision-Date:2011-04-02 16:21+0800/n"
"Last-Translator: JieRen<renjiedona@hotmail.com>/n"
"Language-Team: Chinese(simplified)/n"
"MIME-Version: 1.0/n"
"Content-Type: text/plain;charset=UTF-8/n"
"Content-Transfer-Encoding:8bit/n"
"Language: zh_CN/n"
#: hello.c:67
#: hello.c:76
#: hello.c:126
msgid "Hello World!"
msgstr "你好世界!"//此处为要翻译的内容,在此翻译后保存即可。
7)命令行:msgfmt target.po -o target.mo
生成最终要的翻译包,再复制到usr/share/locale/**/LC_MESSAGES/
**为对应的语言,如简体中文为:zh_CN
8) 完成本地化工作。
9) 第6条以后的内容可以用工具(poedit)等完成。
10) 相关头文件:
#include<glib/gi18n.h>//包含了locale 所需的(#include <libintl.h>、#include <locale.h>)
2、
3、 相关头文件:
#include<glib/gi18n.h>//包含了locale 所需的(#include <libintl.h>、#include <locale.h> 及_()的定义)
//与文件读写相关的头文件
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
4、生成各文件用途:
.pot 该文件是从代码中生成的原始翻译文件,它是生成所有其它 .po 文件的源文件。
.po 由.po 文件生成,该文件是翻译人员进行翻译的文档,即直接在该文件中翻译,保存。
.mo该文件是最后要得到的翻译文件。里面包含要翻译的内容和相关语言参数。
5、 步骤(以hello.c翻译中文为例)
l 创建pot文件,pot是Portable Object Template的首字母缩写,与po对应的是mo,mo是Machine Object的首字母缩写。前者意指原始的字符串文件,一般用于给翻译人员去修改的,后者则是与机器相关的,一般是供程序读取。可以手工创建pot文件,也可以通过xgettext从代码中抽取字符串来产生。这里是用xgettext来产生的:
xgettext–k_ hello.c -o hello.pot
*注意:-k_ 是查找关键字:“_”
l 根据pot产生不同语言的po文件,这里我们先产生一个简体中文的po文件:
exportLANG=zh_CN.UTF-8
msginit-l zh_CN.UTF-8 -i hello.pot
生成文件名会自动和语言一致:zh_CN.po
l 翻译zh_CN.po里对应的字符串为中文:
msgid"Hello, World!/n"
msgstr"你好,世界!/n"
保存
l 根据po文件生成mo文件。
msgfmtzh_CN.po -o zh_CN.mo
l 安装mo文件到系统中:
cp -fzh_CN.mo /usr/share/locale/zh_CN/LC_MESSAGES/foonly.mo
*注:可以自定义路径,但该目录最后几个路径是固定的即.mo文件应该放在该目录之下:…/zh_CN/LC_MESSAGES/
在程序中定义LOCALEDIR的路径就是以上路径“/zh_CN/”的上一个目录。
l 设置环境变量:export LANG=……
通过不同环境变量,显示不同语言。
详细请参考《语言国际化.pdf》
建立多语言翻译时,要建立对应语言的文件目录:例如台语:…/zh_TW/LC_MESSAGES/
参考资料:
http://www.gnu.org/software/gettext/manual/gettext.html#Top
http://l10n.gnome.org/languages/
http://www.ibm.com/developerworks/cn/opensource/os-unicode/
- GTK区域化语言的一些整理
- 有关GTK开发的笔记[整理中]
- 学习GTK+的一些好地方
- 有关Anjuta和gtk的一些资源
- gtk+安装与遇到的一些问题
- C语言一些基本知识整理
- [整理] 关于易语言论坛的一些考证
- 本人整理的一些排序算法(c语言实现)
- 整理的一些面试常问语言知识
- 整理的一些前端后端开发语言简介
- C语言------关于系统内存分配机制的一些整理
- c 语言中一些特殊函数的整理
- 一些简单知识的整理—C语言(一)
- 如何获得本机的一些设置?(比如语言, 区域格式等)
- IOS 如何获得本机的一些设置?(比如语言, 区域格式等)
- C语言+GTK编写的访问数据库
- 区域生长算法的思路整理
- 转载!有关GTK开发的笔记[整理中]
- while() for()和i--,--i的详解
- poj1065 Wooden Sticks
- 三十分钟掌握STL
- Linux core 文件介绍
- 内核调试选项
- GTK区域化语言的一些整理
- Bcastr4.0Beta-flashimagesildeshow图片轮换播放
- The C10K problem
- DBHelper
- JsonConvert.js
- linux设备驱动开发------牛人
- ~~~新人报道
- 知名大学硕博论文及英文期刊全文资源集合
- C类型表达式一例