为什么 Python gettext 模块需要编译步骤(.po -> .mo)?

发布于 2024-08-04 14:22:00 字数 23 浏览 8 评论 0原文

我没有看到编译步骤增加任何价值。

I don't see that the compilation step is adding any value.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

爱殇璃 2024-08-11 14:22:00

快速阅读 .mo 文件,很明显:

  • 它是一种机器可读的表示形式
  • 它是一个哈希表

给定 gettext 函数,可以在运行时按键查找字符串 ,该查找的高效实现是合理的。

此外,gettext 对性能的影响必须可以忽略不计;否则,对于讲英语的黑客来说,与国际社会友好相处的兴趣会更低(来自所有国家,我们都说英语,编程语言都是英语)。

使 .mo 文件成为已处理的表示形式很好,因为

  • 该格式非常适合快速查找(哈希表)
  • 该格式在应用程序启动时几乎不需要处理(自定义表示二进制)

Reading just quickly about .mo files, it is clear that:

  • It is a machine-readable representation
  • It is a hash table

Given gettext's function, to lookup strings by keys at runtime, it is reasonable for this lookup to be implemented efficiently.

Also, it is needed for gettext's performance impact to be negligible; else interest to play nice with the international community would be even lower for english-speaking hackers (from all countries, we all speak english, programming languages are in english).

Making the .mo file an already processed representation is good since

  • The format is well suited for quick lookup (hash table)
  • The format needs little processing at application launch (custom-representation binary)
青柠芒果 2024-08-11 14:22:00

因为Python中的gettext模块遵循GNU gettext标准,该标准要求人们使用PO文件进行翻译,并在运行时使用MO文件供应用程序使用。当您使用 gettext 模块时,您实际上正在使用 GNUTranslations 类,该类的名称表明它是 GNU gettext 的实现。

但是你可以提供自己的 Translations 类并从 PO 文件加载翻译,这没有什么特别的。标准 Python 发行版中甚至还有一些 PO 文件阅读器的实现,请参阅 Tools 目录中的脚本 msgfmt.py。

Because gettext module in Python follows GNU gettext standards which required to use PO files for do translations by people, and MO files for using by application in runtime. When you're using gettext module you're actually using GNUTranslations class, which name suggests it's implementation of GNU gettext.

But you can provide your own Translations class and load translations from PO files, there is nothing special about it. There is even some implementation of PO files reader in standard Python distribution, see script msgfmt.py in Tools directory.

听风念你 2024-08-11 14:22:00

我认为编译是 .po -> .mo

.po 文件中的字母 PO 表示可移植对象,以区别于 .mo 文件,其中 MO 代表机器对象。

MO 文件旨在由程序读取,并且本质上是二进制的。一些系统已经提供了用于创建和处理 MO 文件的工具,作为系统附带的本机语言支持的一部分,但这些 MO 文件的格式通常因系统而异,并且不可移植。

GNU `gettext' 实用程序 - 1.4 文件传送翻译

I think that the compilation is .po -> .mo

The letters PO in .po files means Portable Object, to distinguish it from .mo files, where MO stands for Machine Object.

MO files are meant to be read by programs, and are binary in nature. A few systems already offer tools for creating and handling MO files as part of the Native Language Support coming with the system, but the format of these MO files is often different from system to system, and non-portable.

GNU `gettext' utilities - 1.4 Files Conveying Translations

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文