Skip to main content

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
2mal3

💻 📖 📦
Luis Schuimer
Luis Schuimer

🐛 📓

This project follows the all-contributors specification. Contributions of any kind welcome!

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

yet_another_i18n-0.2.0.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

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

yet_another_i18n-0.2.0-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

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

Hashes for yet_another_i18n-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3f36fe5665c8e219de7825bf5662b65ed74ec5bfc8bc0799bcc00af7e8f12fbb
MD5 49f52afe595a20369bb33b4a758198e8
BLAKE2b-256 8987f9337ceaf98f5181425f7e3a2bc4d3465a143deb63416152128dd6a72c6d

See more details on using hashes here.

File details

Details for the file yet_another_i18n-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yet_another_i18n-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b3e86d66ffcb4084cf429ab3a6a560e9210d292765d68de20fdba1e991cb939b
MD5 31e09acddf5ae0f7198f50239bea8926
BLAKE2b-256 57e18cf7864c17236e27a409b920b1c4123031e330cb2a4f6d61e93ca2538f0a

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