将GNU gettext的.po
(便携式对象)文件编译成.mo
(机器对象)文件的好处和主要原因是什么?
我看到很多程序直接读取/解析.po
。
我没有使用WordPress,但在他们的文档中说:
https://codex.wordpress.org/I18n_for_WordPress_Developers
PO文件被编译为二进制MO文件,这样在运行时可以更快地访问字符串。
更快的访问是真的吗?PO文件只能读取一次并缓存在某些哈希表中,MO文件也可能是如此。
将GNU gettext的.po
(便携式对象)文件编译成.mo
(机器对象)文件的好处和主要原因是什么?
我看到很多程序直接读取/解析.po
。
我没有使用WordPress,但在他们的文档中说:
https://codex.wordpress.org/I18n_for_WordPress_Developers
PO文件被编译为二进制MO文件,这样在运行时可以更快地访问字符串。
更快的访问是真的吗?PO文件只能读取一次并缓存在某些哈希表中,MO文件也可能是如此。
有几个原因:
msgfmt --check
编译 PO 文件,它会对 PO 文件执行几个重要的检查,而不仅仅是语法检查。例如,如果你正在使用 printf 格式字符串,它将检查翻译中的 %-expansions 是否与原始字符串匹配。如果未能这样做,则可能导致运行时崩溃。根据(编程)语言的不同,还有更多的检查。/usr/share/locale/LOCALE/LC_MESSAGES/TEXTDOMAIN.mo
下,并且应该使用 MO 格式,而不是 PO 格式。当然,这并不适用于无数只实现了 gettext API 子集的库。