A lightweight and developer-friendly Python translation library designed for simplicity and flexibility.
Project description
yet another i18n
A lightweight and developer-friendly Python translation library designed for simplicity and flexibility.
Features
- 🌐 json-based translation: easy-to-use translations powered by simple JSON files.
- 🔄 fallback language support: automatically provides translations in a fallback language when a specific translation is unavailable.
- 🧩 nested values and placeholders: fully supports nested structures and dynamic placeholders within translations.
- 🎛️ flexible translation styles: offers both preconfigured translations and on-the-fly translation generation.
- 🛠️ developer experience focused api: designed with developers in mind, drawing inspiration from other projects.
- ⚡ lightweight and simple: under 150 lines of code with no dependencies beyond Python's standard library.
Usage
0. Installation
Install the package via pip:
pip install yet-another-i18n
1. Initialization
Create a Translator instance by specifying at least the fallback locale.
from yai18n import Translator
translator = Translator(
fallback_locale="en",
)
- fallback_locale (required): The locale to use if the requested key is not found in any other locale.
- default_locale (optional): The primary locale used when none is explicitly provided.
- locale_folder_path (optional): Directory containing your JSON locale files. (default:
"locales") - debug (optional): If
True, locale files are reloaded before each translation (useful for development).
2. Locale Files
Each locale file should be a JSON file named <locale>.json within the specified locale_folder_path. Example:
en.json:
{
"greeting": {
"hello": "Hello, {name}!"
}
}
3. Translation
To translate a key, simply call the Translator instance:
message = translator("greeting.hello", locale="en", args={"name": "Alice"})
print(message) # Outputs: "Hello, Alice!"
- key: A string path (e.g.,
"section.subsection.key") to the translated text. - locale (optional): Override the default locale for this translation.
- args (optional): A dictionary to format dynamic placeholders in the translated text.
4. Fallback Behavior
If a key does not exist in the requested locale, the translator automatically uses the fallback_locale.
If the key is not found there either, a KeyError is raised.
5. Error Handling
- ValueError: Raised if a requested locale or default locale is not found.
- TypeError: Raised if arguments to methods are of incorrect types.
- KeyError: Raised if a translation key cannot be found in both the given and fallback locales.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
2mal3 💻 📖 📦 |
Luis Schuimer 🐛 📓 |
This project follows the all-contributors specification. Contributions of any kind welcome!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yet_another_i18n-0.2.0.tar.gz.
File metadata
- Download URL: yet_another_i18n-0.2.0.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f36fe5665c8e219de7825bf5662b65ed74ec5bfc8bc0799bcc00af7e8f12fbb
|
|
| MD5 |
49f52afe595a20369bb33b4a758198e8
|
|
| BLAKE2b-256 |
8987f9337ceaf98f5181425f7e3a2bc4d3465a143deb63416152128dd6a72c6d
|
File details
Details for the file yet_another_i18n-0.2.0-py3-none-any.whl.
File metadata
- Download URL: yet_another_i18n-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3e86d66ffcb4084cf429ab3a6a560e9210d292765d68de20fdba1e991cb939b
|
|
| MD5 |
31e09acddf5ae0f7198f50239bea8926
|
|
| BLAKE2b-256 |
57e18cf7864c17236e27a409b920b1c4123031e330cb2a4f6d61e93ca2538f0a
|