Gettext
| 本条目没有列出任何参考或来源。(2009年9月19日) |
| 開發者 | The GNU 项目 |
|---|---|
| 穩定版本 | 0.18/ 2010年5月9日 |
| 作業系統 | 跨平台 |
| 類型 | 软件开发, 翻译 |
| 許可協議 | LGPL(函数库),GPL(工具),GFDL/GPL(文档) |
| 網站 | http://www.gnu.org/software/gettext/ |
gettext 是GNU国际化与本地化(i18n)函数库。它常被用于编写多语言程序。
目录 |
开发 [编辑]
程序源代码需要进行修改以响应 GNU gettext 请求。多数编程语言均已通过字符封装的方式实现了对其的支持。为了减少输入量和代码量,此功能通常以标记别名 _ 的形式使用,所以例如以下C语言代码:
printf(gettext("My name is %s.\n"), my_name);
应当写作:
printf(_("My name is %s.\n"), my_name);
gettext使用其中的字符串寻找对应的其他语言翻译,若没有可用翻译则返回原始内容。
除C语言外, GNU gettext 还支持 C++, Objective-C,Pascal/Object Pascal,sh 脚本,bash 脚本,Python,GNU CLISP,Emacs Lisp,librep,GNU Smalltalk,Java,GNU awk,wxWidgets(通过 wxLocale类),YCP (YaST2语言),Tcl,Perl,PHP,Pike,Ruby以及R。用法均与在C语言上类似。
xgettext程序从源代码生成 .pot 文件,作为源代码中需翻译内容的模板。一个典型的 .pot 文件条目应当是这样的:
#: src/name.c:36 msgid "My name is %s.\n" msgstr ""
注释被直接放置在字符串前,用于帮助翻译者理解待翻译内容:
/// TRANSLATORS: Please leave %s as it is, because it is needed by the program. /// Thank you for contributing to this project. printf(_("My name is %s.\n"), my_name);
本例中的注释是以 /// 开头的,其作用是用于 xgettext 程序生成 .pot 模板文件。
xgettext --add-comments=///
在 .pot文件中的注释应为以下形式:
#. TRANSLATORS: Please leave %s as it is, because it is needed by the program. #. Thank you for contributing to this project. #: src/name.c:36 msgid "My name is %s.\n" msgstr ""
翻译 [编辑]
翻译者需要工作的对象是 .po文件,它是由msginit程序从 .pot 模板文件生成的。例如使用msginit初始化法语翻译文件时,我们运行以下命令:
msginit --locale=fr --input=name.pot
这将会使用指定的 name.pot 在当前目录创建一个 fr.po,其中的一个条目应该是以下形式的:
#: src/name.c:36 msgid "My name is %s.\n" msgstr ""
翻译者需要手工或使用类似 Poedit、gtranslator或Emacs等工具的相应模式编辑该文件。翻译完成后,文件应为如下的样子:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "Je m'appelle %s.\n"
最后 .po 文件需要使用msgfmt编译为.mo文件以用作发布。
运行 [编辑]
使用Unix类型操作系统的用户只需设置环境变量中的LC_MESSAGES,程序将自动从相应的.mo 文件中读取语言信息。
参考 [编辑]
另见 [编辑]
外部链接 [编辑]
- Gettext 主页
- 使用 gettext 本地化 PHP 网站 - 解些和示例。
- Gettext Commons - Java gettext 工具集
- Autotools 教程
- gted - GetText EDitor 和工具集成
- Gorm PO 文件编辑器
|
|||||||||||||||||||