wordpress本地化技术gettext
wordpress开发者选择使用GNU gettext 本地化框架为wordpress提供本地化架构。gettext是一个成熟的广泛使用的,用于模块化翻译软件的框架,也是开源,免费软件领域的de facto标准。
gettext使用 消息级别(message-level )翻译,--也就是说,每一条展现给用户的“消息”(message)被独立的翻译,无论是一段文字或者单个的词语。在wordpress中,是通过两个PHP函数,来生成,翻译和使用这种“消息”(message)的。
__() 这个函数用于以下情形:当“消息”被当作一个参数传递给另一个函数时。 _e() 这个函数用于以下情形:将“消息”直接输出在页面时。关于这两个函数更详细的介绍:
__($message)
搜索本地化模块查找$message的翻译(translation),将翻译(translation)传递给PHP的return语句。如果没有找到$message的翻译(translation),函数就返回$message本身。
_e($message)
搜索本地化模块,查找$message的翻译,将翻译(translation)传递给PHP的echo 语句。如果没有找到$message 的翻译(translation),函数就输出(echo) $message
注意,如果你想要国际化一个主题(theme)或者插件(plugin),你应该使用“文本域”("Text Domain"). 查看更多信息, Writing a Plugin
gettext框架已经顾及到了wordpress的绝大部分。但是,依然有一些地方gettext不能够起作用。查看更多相关信息:Files For Direct Translation
gettext 文件
有3中类型的文件用于gettext翻译框架。这些文件在翻译过程中被翻译工具使用或者生成。如下:- POT (Portable Object Template) 文件
- 本地化过程的第一步: 通过一个程序(翻译工具)搜索整个wordpress的源代码,查找出所有传递给__() or _e()这两个函数的“消息”(message)。一个英语消息(message)的李彪被放进一个特别格式的模板文件(也就是POT文件),从而形成翻译的基础。通常你可以通过wordpress下载到POT文件,所以,你不必自己生成它。也可以为主题和插件生成独立的的POT文件,前提是主题或者插件的开发者将文本放在函数__() or _e()里。
- PO (Portable Object) 文件
- 本地化过程的第二步: 翻译者将所有POT文件中的消息(message)翻译成目标语言,并且将英语和被翻译的消息保存在一个PO文件中。
- MO (Machine Object) 文件
- 本地化过程的最后一步:通过一个程序将PO文件转换成经过优化的机器可读的二进制文件(MO文件)。将翻译(translation)编译成机器码可以使本地化的程序在读取翻译数据时运行的更快。