【问题标题】:Benefits of compiling po files to mo将po文件编译成mo的好处
【发布时间】:2019-05-13 13:39:29
【问题描述】:

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

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

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

https://codex.wordpress.org/I18n_for_WordPress_Developers

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

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

【问题讨论】:

    标签: gettext po mo


    【解决方案1】:

    有几个原因:

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

    【讨论】:

    • 许多程序在启动时只加载一次翻译。我认为性能并不重要,除非每次都加载它。
    • 在执行二进制文件之前即时编译 C 源代码也只会增加它们的启动时间,而且这仍然是一种习惯做法。
    • 另见我刚刚添加的原因 #5。
    • @Konrad 我认为您只是在查看桌面应用程序或长时间运行的守护程序/服务。但对于 CLI 程序,启动性能很重要,因为它们经常从 shell 脚本调用,甚至可能在循环中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多