采购订单文件支持

PO文件支持可以读写PO和POT文件。它会把它们读入 Catalog 对象,并且还写出目录。

babel.messages.pofile.read_po(fileobj: IO[AnyStr], locale: str | Locale | None = None, domain: str | None = None, ignore_obsolete: bool = False, charset: str | None = None, abort_invalid: bool = False) Catalog

读取来自 gettext PO(便携对象)文件,并从给定的类似文件的对象中返回 Catalog .

>>> from datetime import datetime
>>> from io import StringIO
>>> buf = StringIO('''
... #: main.py:1
... #, fuzzy, python-format
... msgid "foo %(name)s"
... msgstr "quux %(name)s"
...
... # A user comment
... #. An auto comment
... #: main.py:3
... msgid "bar"
... msgid_plural "baz"
... msgstr[0] "bar"
... msgstr[1] "baaz"
... ''')
>>> catalog = read_po(buf)
>>> catalog.revision_date = datetime(2007, 4, 1)
>>> for message in catalog:
...     if message.id:
...         print((message.id, message.string))
...         print(' ', (message.locations, sorted(list(message.flags))))
...         print(' ', (message.user_comments, message.auto_comments))
(u'foo %(name)s', u'quux %(name)s')
  ([(u'main.py', 1)], [u'fuzzy', u'python-format'])
  ([], [])
((u'bar', u'baz'), (u'bar', u'baaz'))
  ([(u'main.py', 3)], [])
  ([u'A user comment'], [u'An auto comment'])

在 1.0 版本加入: 添加了对显式字符集参数的支持。

参数:
  • fileobj -- 要从中读取PO文件的类似文件的对象

  • locale -- 区域设置标识符或 Locale 对象,或 None 如果目录没有绑定到区域设置(这基本上意味着它是一个模板)

  • domain -- 消息域

  • ignore_obsolete -- 是否忽略输入中的过时消息

  • charset -- 目录的字符集。

  • abort_invalid -- 如果po文件无效,则中止读取

babel.messages.pofile.write_po(fileobj: SupportsWrite[bytes], catalog: Catalog, width: int = 76, no_location: bool = False, omit_header: bool = False, sort_output: bool = False, sort_by_file: bool = False, ignore_obsolete: bool = False, include_previous: bool = False, include_lineno: bool = True) None

写一篇 gettext 将给定消息目录的PO(便携对象)模板文件添加到所提供的类似文件的对象。

>>> catalog = Catalog()
>>> catalog.add(u'foo %(name)s', locations=[('main.py', 1)],
...             flags=('fuzzy',))
<Message...>
>>> catalog.add((u'bar', u'baz'), locations=[('main.py', 3)])
<Message...>
>>> from io import BytesIO
>>> buf = BytesIO()
>>> write_po(buf, catalog, omit_header=True)
>>> print(buf.getvalue().decode("utf8"))
#: main.py:1
#, fuzzy, python-format
msgid "foo %(name)s"
msgstr ""

#: main.py:3
msgid "bar"
msgid_plural "baz"
msgstr[0] ""
msgstr[1] ""

参数:
  • fileobj -- 要写入的类似文件的对象

  • catalog -- 这个 Catalog 实例

  • width -- 生成的输出的最大行宽;使用 None 、0或负数以完全禁用换行

  • no_location -- 不要为每条消息都发出位置注释

  • omit_header -- 请不要将 msgid "" 输出顶部的条目

  • sort_output -- 是否按msgid对输出中的消息进行排序

  • sort_by_file -- 是否按位置对输出中的消息进行排序

  • ignore_obsolete -- 是否忽略过时消息并不将其包括在输出中;默认情况下,它们将作为注释包含在输出中

  • include_previous -- 更新目录时包括旧的msgid作为注释

  • include_lineno -- 在位置注释中包括行号