Gettext
- 0.22.5 (2024年2月21日;穩定版本)[1]
- git
.savannah .gnu .org /cgit /gettext .git
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、ibrep、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、OmegaT或Emacs等工具的相应模式编辑该文件。翻译完成后,文件应为如下的样子:
#: src/name.c:36 msgid "My name is %s.\n" msgstr "Je m'appelle %s.\n"
最后.po文件需要使用msgfmt编译为.mo文件以用作发布。
執行
使用Unix类型操作系统的用户只需设置环境变量中的LC_MESSAGES(但是ubuntu linux 是用LANG)
但是ubuntu linux 是用LANG[來源請求],程序将自动从相应的.mo
文件中读取语言信息。
参考
- ^ GNU gettext 0.22.5 released. 2024年2月22日 [2024年3月7日] (英語). 引文格式1维护:未识别语文类型 (link)
另见
- 国际化和本地化
- 翻译工具
外部链接
- Gettext主页(页面存档备份,存于互联网档案馆)
- 使用gettext本地化PHP网站 (页面存档备份,存于互联网档案馆) - 解些和示例。
- Gettext Commons - Java gettext工具集 (页面存档备份,存于互联网档案馆)
- Autotools教程(页面存档备份,存于互联网档案馆)
- gted - GetText EDitor和工具集成
- Gorm PO文件编辑器 (页面存档备份,存于互联网档案馆)
- Windows 下的对应函数为 LoadString,直接读取适合当前 locale/lcid 设置的资源字符串 (页面存档备份,存于互联网档案馆)
- 查
- 论
- 编
- GNU
- Hurd
- Linux-libre
- glibc
- Bash
- Coreutils
- findutils
- 构建系统
- GCC
- binutils
- GDB
- GRUB
- GNOME
- GNUstep
- GIMP
- Jami
- GNU Emacs
- GNU TeXmacs
- GNU Octave
- GNU R
- GSL
- GMP
- GNU Electric(英语:Electric (software))
- GNU Archimedes(英语:GNU Archimedes)
- GNUnet(英语:GNUnet)
- GNU Privacy Guard
- Gnuzilla
- GNU Health
- GNUmed
- GNU LilyPond
- GNU Go
- GNU Chess
- Gnash
- Guix
- Guix系統發行版(英语:Guix System Distribution)
- 更多...