Skip to main content

setuptools plugin for gettext

Compile .po files into .mo files.

This plugin adds build_mo, clean_mo and install_mo subcommands for setup.py as well as hooking those into standard commands.

Usage

By default, setuptools_gettext compiles and installs mo files when there is a po directory present that contains .po files. It also supports the standard gettext layout with locale/*/LC_MESSAGES/*.po files. If po is absent and a top-level locale directory contains standard gettext catalogs, that directory is used automatically.

By default, the install_mo command installs compiled catalogs under share/locale to preserve compatibility with earlier releases. Django apps and other packages that load catalogs from package data can opt into package installation with install_layout = "package".

You can override these settings in pyproject.toml:

[build-system]
requires = ["setuptools", "setuptools-gettext"]
...

[tool.setuptools-gettext]
# directory in which the .po files can be found 
source_dir = "po"
# directory in which the generated .mo files are placed when building
build_dir = "breezy/locale"
# compiler to use: "auto", "msgfmt", or "translate-toolkit"
compiler = "auto"
# install compiled catalogs below share/locale or inside a package
install_layout = "share"

For standard gettext layouts, point both directories at the locale tree:

[tool.setuptools-gettext]
source_dir = "breezy/locale"
build_dir = "breezy/locale"

Flat po/de.po files compile to <build_dir>/de/LC_MESSAGES/<project-name>.mo by default. Standard locale/de/LC_MESSAGES/django.po files compile to <build_dir>/de/LC_MESSAGES/django.mo by default. Passing --output-base overrides the output name for both layouts.

For Django apps, keep the locale directory inside the app package and use the package install layout:

[tool.setuptools-gettext]
source_dir = "myapp/locale"
build_dir = "myapp/locale"
install_layout = "package"

With this configuration, myapp/locale/de/LC_MESSAGES/django.po compiles to myapp/locale/de/LC_MESSAGES/django.mo and is included as package data when building the package.

Compilation tool

By default, either msgfmt or the translate-toolkit package is used to compile the .po files into .mo files - whichever is available.

Set compiler = "msgfmt" or compiler = "translate-toolkit" in [tool.setuptools-gettext] to force a compiler from pyproject.toml. Use compiler = "auto" to keep the default automatic detection.

The --msgfmt option can be used to force the use of msgfmt, and the --translate-toolkit option can be used to force the use of the translate-toolkit. Command line options take precedence over the pyproject.toml setting.

At the moment, msgfmt is preferred. In the future, the translate-toolkit will become the default.

You can use the translate-toolkit extra to install the translate-toolkit package.

Metadata

Release files for setuptools-gettext 0.1.20

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for setuptools-gettext 0.1.20
File Size Uploaded Provenance Actions
setuptools_gettext-0.1.20.tar.gz 23.4 kB With provenance Details for setuptools_gettext-0.1.20.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for setuptools-gettext 0.1.20
File Interpreter ABI Platform Actions
setuptools_gettext-0.1.20-py3-none-any.whl Python 3 none any Details for setuptools_gettext-0.1.20-py3-none-any.whl

Total release size: 42.5 kB

Release files / setuptools_gettext-0.1.20.tar.gz

Download URL setuptools_gettext-0.1.20.tar.gz
Size 23.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c82d3748859b83f9dd301ed7f564c5811980ba6ac1ef5cb285cb52d935ec4856
BLAKE2b-256 checksum
How to use checksums
f3e32cd04954149680e8fac9f002bd7a425e4b76495c32b55ae0123d1979282e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.

Transparency log

Release files / setuptools_gettext-0.1.20-py3-none-any.whl

Download URL setuptools_gettext-0.1.20-py3-none-any.whl
Size 19.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e433a6e71a01e657d433e196dc19d4bce1fd12615f01df60f1e4a793658c7a1a
BLAKE2b-256 checksum
How to use checksums
9bd225272a5c1e57254e521a64663413477aa3f2716ccaaa1838a90350c0b335
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.

Transparency log

Security for setuptools-gettext 0.1.20

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for setuptools_gettext-0.1.20.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page