i18n接口

sphinx.locale.init(locale_dirs: Iterable[str | None], language: str | None, catalog: str = 'sphinx', namespace: str = 'general') tuple[NullTranslations, bool][源代码]

在“locale_dirs”中查找邮件目录,并确保在“translators”中至少设置了一个空翻译目录。如果多次调用或找到多个`.mo``文件,它们的内容将合并在一起(从而使``init``可重入)。

sphinx.locale.init_console(locale_dir: str | None = None, catalog: str = 'sphinx') tuple[NullTranslations, bool][源代码]

初始化控制台的区域设置。

Added in version 1.8.

sphinx.locale.get_translation(catalog: str, namespace: str = 'general') Callable[[str], str][源代码]

获取基于*catalog*和*namespace*的翻译函数。

扩展可以使用此接口转换扩展上的消息:

import os
from sphinx.locale import get_translation

MESSAGE_CATALOG_NAME = 'myextension'  # name of *.pot, *.po and *.mo files
_ = get_translation(MESSAGE_CATALOG_NAME)
text = _('Hello Sphinx!')


def setup(app):
    package_dir = os.path.abspath(os.path.dirname(__file__))
    locale_dir = os.path.join(package_dir, 'locales')
    app.add_message_catalog(MESSAGE_CATALOG_NAME, locale_dir)

使用这段代码,sphinx从`${packageudir}/locales/${language}/LC}MESSAGES中搜索消息目录/我的扩展.mo``. :confval:`language`用于搜索。

Added in version 1.8.

sphinx.locale._(message: str) str

文档信息(菜单、标签、主题等)的翻译功能。此函数遵循:confval:`language`设置。

sphinx.locale.__(message: str) str

控制台消息的翻译函数此函数遵循区域设置(LC`ALL`LC`messages`等)。

Extension internationalization (i18n) and localization (l10n) using i18n API

Added in version 1.8.

插件很自然地会伴随着消息翻译而来。简要总结如下:func:`sphinx.locale.get_翻译`帮助。

实际上,您必须:

  1. 为邮件目录选择一个名称,该名称必须是唯一的。通常,插件名的名称用于消息目录的名称。

  2. 通过:func:sphinx.locale.get_翻译`函数,通常重命名为```uU()`,例如:

    src/__init__.py
    from sphinx.locale import get_translation
    
    MESSAGE_CATALOG_NAME = 'myextension'
    _ = get_translation(MESSAGE_CATALOG_NAME)
    
    translated_text = _('Hello Sphinx!')
    
  3. 设置插件以了解其专用翻译:

    src/__init__.py
    def setup(app):
        package_dir = path.abspath(path.dirname(__file__))
        locale_dir = os.path.join(package_dir, 'locales')
        app.add_message_catalog(MESSAGE_CATALOG_NAME, locale_dir)
    
  4. 生成消息目录模板“*.pot”文件,通常位于“locale/`”源目录中,例如通过“Babel”生成:

    $ pybabel extract --output=src/locale/myextension.pot src/
    
  5. 为您的插件将提供本地化的每种语言创建消息目录(*.po``),例如通过“Babel”`

    $ pybabel init --input-file=src/locale/myextension.pot --domain=myextension --output-dir=src/locale --locale=fr_FR
    
  6. 手动翻译每种语言的邮件目录

  7. 将邮件目录编译为`*.mo``文件,例如通过“Babel”:

    $ pybabel compile --directory=src/locale --domain=myextension
    
  8. 通过在扩展名中添加等效行,确保在安装包时分发了消息目录文件``MANIFEST.in``:

    MANIFEST.in
    recursive-include src *.pot *.po *.mo
    

当您的扩展名上的消息发生更改时,您还需要更新消息目录模板和消息目录,例如通过“Babel”

$ pybabel extract --output=src/locale/myextension.pot src/
$ pybabel update --input-file=src/locale/myextension.pot --domain=myextension --output-dir=src/locale