4

.po将 GNU gettext (Portable Object) 文件编译为.mo(Machine Object)的好处和主要原因是什么?

我看到很多程序.po直接读取/解析。

我没有使用 wordpress,但在他们的文档上说:

https://codex.wordpress.org/I18n_for_WordPress_Developers

PO 文件被编译成二进制 MO 文件,这样可以在运行时更快地访问字符串

更快的访问是真的吗?PO 只能读取一次并缓存在某个哈希表中,MO 可能也是如此

4

1 回答 1

4

有几个原因:

  1. 您应该始终编译 PO 文件,使用msgfmt --check这些文件对 PO 文件执行多项重要检查,而不仅仅是语法检查。例如,如果您使用 printf 格式字符串,它将检查翻译中的 %-expansions 是否与原始字符串匹配。如果不这样做,可能会导致运行时崩溃。取决于(编程)语言,还有更多检查。
  2. 读取二进制 MO 文件通常比解析文本 PO 文件更快、更简单。
  3. PO 文件通常具有不应用于生产的翻译条目,例如模糊或过时的条目。
  4. 许多 PO 解析器有问题或不完整。
  5. 它是 gettext API 的一部分。翻译应位于/usr/share/locale/LOCALE/LC_MESSAGES/TEXTDOMAIN.moMO 格式,而不是 PO 格式。当然,这不适用于仅实现 gettext API 子集的无数库。
于 2018-12-17T16:24:13.770 回答