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

为什么Python gettext模块需要编译步骤(.po->;mo)?,python,gettext,Python,Gettext,我看不出编译步骤增加了任何价值。我认为编译是.po->.mo .PO文件中的字母PO表示可移植对象,以区别于.mo文件,其中mo代表机器对象 MO文件是由程序读取的,本质上是二进制文件。一些系统已经提供了创建和处理MO文件的工具,作为系统自带的本地语言支持的一部分,但这些MO文件的格式通常因系统而异,并且不可移植 我认为编译是.po->.mo .PO文件中的字母PO表示可移植对象,以区别于.mo文件,其中mo代表机器对象 MO文件是由程序读取的,本质上是二进制文件。一些系统已经提供了创建和处理M

我看不出编译步骤增加了任何价值。

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

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

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


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

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

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


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

  • 它是一种机器可读的表示
  • 这是一个哈希表
给定gettext的函数,在运行时按键查找字符串,高效实现此查找是合理的

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

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

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

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

  • 它是一种机器可读的表示
  • 这是一个哈希表
给定gettext的函数,在运行时按键查找字符串,高效实现此查找是合理的

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

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

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

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


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

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


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

另外:我拒绝这个答案。它没有说明编译后的文件增加了什么值,只是说gettext有一个系统需要它们。它并没有说编译后的文件增加了什么价值,只是说gettext有一个需要它们的系统。编译看起来不太像Python——似乎有点不对劲。好吧,gettext最初并没有绑定到Python。它跨越了许多编程语言。编译看起来并不太像Python——似乎有些地方出了问题。gettext最初并不与Python绑定。它跨越了许多编程语言。