I18NAPI¶
- sphinx.locale.init(locale_dirs: Iterable[str | None], language: str | None, catalog: str = 'sphinx', namespace: str = 'general') tuple[NullTranslations, bool] [源代码]¶
在中查找邮件目录 locale_dirs 和 确保 中至少设置了NullTranslations目录 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] [源代码]¶
获取一个基于 目录 和 命名空间 .
扩展可以使用此API转换扩展上的消息:
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从
${{package_dir}}/locales/${{language}}/LC_MESSAGES/myextension.mo
. 这个language
用于搜索。Added in version 1.8.
外延国际化 (i18n
)和本地化 (l10n
)使用I18N API¶
Added in version 1.8.
一个扩展自然会伴随着消息翻译而来。这在 sphinx.locale.get_translation()
帮助。
实际上,你必须:
请为邮件目录选择一个名称,该名称必须是唯一的。通常,扩展名用于消息目录的名称。
在扩展源中将所有消息标记为可翻译,通过
sphinx.locale.get_translation()
函数,通常重命名_()
,例如:src/__init__.py¶from sphinx.locale import get_translation MESSAGE_CATALOG_NAME = 'myextension' _ = get_translation(MESSAGE_CATALOG_NAME) translated_text = _('Hello Sphinx!')
设置扩展名以了解其专用翻译:
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)
生成消息目录模板
*.pot
文件,通常在locale/
源目录,例如via Babel :$ pybabel extract --output=src/locale/myextension.pot src/
创建邮件目录 (
*.po
)对于您的扩展将提供本地化的每种语言,例如通过 Babel :$ pybabel init --input-file=src/locale/myextension.pot --domain=myextension --output-dir=src/locale --locale=fr_FR
手动翻译每种语言的邮件目录
将消息目录编译为
*.mo
文件,例如通过 Babel :$ pybabel compile --directory=src/locale --domain=myextension
通过在扩展名中添加等效行,确保在安装包时分发消息目录文件。
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