API i18n¶
- sphinx.locale.init(locale_dirs: Iterable[str | os.PathLike[str] | None], language: str | None, catalog: str = 'sphinx', namespace: str = 'general') tuple[NullTranslations, bool] [fuente]¶
Look for message catalogs in locale_dirs and ensure that there is at least a NullTranslations catalog set in translators. If called multiple times or if several
.mo
files are found, their contents are merged together (thus makinginit
reentrant).
- sphinx.locale.init_console(locale_dir: str | os.PathLike[str] | None = None, catalog: str = 'sphinx') tuple[NullTranslations, bool] [fuente]¶
Inicializar locale para consola.
Added in version 1.8.
- sphinx.locale.get_translation(catalog: str, namespace: str = 'general') Callable[[str], str] [fuente]¶
Obtenga una función de traducción basada en catalog y namespace.
La extensión puede usar esta API para traducir los mensajes en la extensión:
from pathlib import Path 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 = Path(__file__).resolve().parent locale_dir = package_dir / 'locales' app.add_message_catalog(MESSAGE_CATALOG_NAME, locale_dir)
With this code, sphinx searches a message catalog from
${package_dir}/locales/${language}/LC_MESSAGES/myextension.mo
. Thelanguage
is used for the searching.Added in version 1.8.
- sphinx.locale._(message: str) str ¶
Función de traducción para mensajes en la documentación (menú, etiquetas, temas, etc.). Esta función sigue la configuración
language
.
- sphinx.locale.__(message: str) str ¶
Función de traducción para mensajes de consola, esta función sigue la configuración regional (LC_ALL, LC_MESSAGES, etc.).
Extension internationalization (i18n
) and localization (l10n
) using i18n API¶
Added in version 1.8.
An extension may naturally come with message translations. This is briefly
summarized in sphinx.locale.get_translation()
help.
In practice, you have to:
Choose a name for your message catalog, which must be unique. Usually the name of your extension is used for the name of message catalog.
Mark in your extension sources all messages as translatable, via
sphinx.locale.get_translation()
function, usually renamed_()
, e.g.:src/__init__.py¶from sphinx.locale import get_translation MESSAGE_CATALOG_NAME = 'myextension' _ = get_translation(MESSAGE_CATALOG_NAME) translated_text = _('Hello Sphinx!')
Set up your extension to be aware of its dedicated translations:
src/__init__.py¶def setup(app): package_dir = Path(__file__).resolve().parent locale_dir = package_dir / 'locales' app.add_message_catalog(MESSAGE_CATALOG_NAME, locale_dir)
Generate message catalog template
*.pot
file, usually inlocale/
source directory, for example via Babel:$ pybabel extract --output=src/locale/myextension.pot src/
Create message catalogs (
*.po
) for each language which your extension will provide localization, for example via Babel:$ pybabel init --input-file=src/locale/myextension.pot --domain=myextension --output-dir=src/locale --locale=fr_FR
Translate message catalogs for each language manually
Compile message catalogs into
*.mo
files, for example via Babel:$ pybabel compile --directory=src/locale --domain=myextension
Ensure that message catalog files are distributed when your package will be installed, by adding equivalent line in your extension
MANIFEST.in
:MANIFEST.in¶recursive-include src *.pot *.po *.mo
When the messages on your extension has been changed, you need to also update message catalog template and message catalogs, for example via Babel:
$ pybabel extract --output=src/locale/myextension.pot src/
$ pybabel update --input-file=src/locale/myextension.pot --domain=myextension --output-dir=src/locale