我没有看到编译步骤增加了任何价值。
3 回答
快速阅读.mo
文件,很明显:
- 它是机器可读的表示
- 它是一个哈希表
给定 gettext 的功能,在运行时通过键查找字符串,这种查找有效实现是合理的。
此外,gettext 的性能影响需要忽略不计;否则,对于说英语的黑客(来自所有国家,我们都说英语,编程语言是英语),与国际社会打交道的兴趣会更低。
使 .mo 文件成为已处理的表示是很好的,因为
- 该格式非常适合快速查找(哈希表)
- 该格式在应用程序启动时几乎不需要处理(自定义表示二进制)
因为 Python 中的 gettext 模块遵循 GNU gettext 标准,该标准要求人们使用 PO 文件进行翻译,而应用程序在运行时使用 MO 文件。当您使用 gettext 模块时,您实际上是在使用 GNUTranslations 类,这表明它是 GNU gettext 的实现。
但是您可以提供自己的 Translations 类并从 PO 文件加载翻译,这并没有什么特别之处。在标准 Python 发行版中甚至还有一些 PO 文件阅读器的实现,请参见 Tools 目录中的脚本 msgfmt.py。
我认为编译是 .po -> .mo
.po 文件中的字母 PO 表示可移植对象,以区别于 .mo 文件,其中 MO 代表机器对象。
MO 文件旨在由程序读取,并且本质上是二进制文件。一些系统已经提供了用于创建和处理 MO 文件的工具,作为系统附带的本地语言支持的一部分,但是这些 MO 文件的格式通常因系统而异,并且不可移植。