Skip to main content

Automatically compile po files to mo ones at build time using msgfmt.py

Project description

hatch-msgfmt-s-ball

PyPI - Version PyPI - Python Version


Automatically compile po files to mo ones at build time using msgfmt.py

Table of Contents

Goal

This package is a hatchling plugin that helps to automatically compile translation sources at build time. It internally uses a patched version of the msgfmt.py script from the Tools folder of the CPython source. Because of that it has no dependency and does not require any external tools.

Current Status

This package is currently at a beta level. It works and has a test coverage above 90%. But it lacks documentation and real world tests. Nevertheless, I already use it for (the development version of) another project of mine i18nparse

Releases use a semantic major.minor.patch versioning. The full source code is available on GitHub.

Usage

As it is only a hatchling hook plugin, this package has no direct interface. It uses the Application object provided by hatchling for its messages, so it is possible to increase its verbosity when the behaviour is unexpected by just passing -v params to the hatch build command.

.po files

The source .po are expected to be in a folder under the root source directory. The default directory is messages but it can be changed through the configuration file. It can even be . if the files are directly in the root directory.

They are expected to be named LANG.po or domain-LANG.po. When no domain is present in the file name, the default domain is the last component of the source folder, or the package name if the source folder is . or messages.

LANG folders organization

Alternatively the source directory can contain LANG folders (e.g. fr_CA or es) that in turn contain domain.po files, possibly under a hierarchy of subfolders. The goal is to mimic a classical locale hierarchy: LANG/LC_MESSAGES/domain.po

It is even possible (but not recommended) to mix both organizations.

.mo files

For every .po file found, a corresponding compiled file is generated as locale/LANG/LC_MESSAGES/domain.mo under the project root directory. The default locale name can be changed through the builder configuration.

Configuration

The hatch-msgfmt-s-ball plugin can be configured as any other plugin through the pyproject.toml file. You must first declare it with:

[build-system]
requires = ["hatchling", "hatch-msgfmt-s-ball"]
build-backend = "hatchling.build"

Then you have to tell the builder that it must be called for the wheel target:

[tool.hatch.build.targets.wheel.hooks.msgfmt]

That section can be left empty if you accept the defaults. It is equivalent to:

[tool.hatch.build.targets.wheel.hooks.msgfmt]
locale = "locale"
messages = "messages"

In addition to the locale and messages options to respectively declare the source folder containing the po files and the generated locale folder, it is possible to declare a default domain with the domain directive:

[tool.hatch.build.targets.wheel.hooks.msgfmt]
domain = "my_app"
messages = "src"

As the messages folder is not named messages the default domain would have been src without the domain directive.

Installation

For normal usage, no installation is required. Any Python installer using the pyproject.toml file will be able to automatically download and install it at build time.

Developer installation

If you want to use the source of hatch-msgfmt-s-ball, you can download a source package form PyPI, or better clone it from GitHub:

git clone https://github.com/s-ball/hatch-msgfmt-s-ball.git

You will benefit from git for you own changes.

Contributing

As I am the only developer, I cannot guarantee very fast feedbacks. Anyway, I shall be glad to receive issues or pull requests on GitHUB.

License

hatch-msgfmt-s-ball is distributed under the terms of the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hatch_msgfmt_s_ball-1.1.0.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hatch_msgfmt_s_ball-1.1.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file hatch_msgfmt_s_ball-1.1.0.tar.gz.

File metadata

  • Download URL: hatch_msgfmt_s_ball-1.1.0.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for hatch_msgfmt_s_ball-1.1.0.tar.gz
Algorithm Hash digest
SHA256 57c733ca7bdcc78de4b50a4c7cc0e576274496a897ebf9443a24704275233ec6
MD5 df88288c30b0d591bd79c02b2585ebef
BLAKE2b-256 ebe8f397a4eb8a5e50f7d643fe5344ba7fa8712a9dab9c72a03326e80ef9762c

See more details on using hashes here.

File details

Details for the file hatch_msgfmt_s_ball-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hatch_msgfmt_s_ball-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b3869e3ba2f33c716e91a4929aca5291cf3d5d391226056e9e6941929160cd16
MD5 903b94941f4376d2a416e8be3ca01f18
BLAKE2b-256 74813285ae58fc24d36c5b758d3de968fb55a9527daab2f65d637b4a4b22bc8c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page