Skip to main content

Python library for loading localizations with dot access and pluralization.

Project description

doti18n PyPI version License

Simple and intuitive Python library for loading localizations from YAML, JSON, XML files and accessing them easily using dot notation, with powerful support for plural forms and nested data structures.

Description

doti18n provides a convenient way to manage your application's localization strings. By loading data from files, the library allows you to access nested translations using a simple dot syntax (messages.status.online) for dictionary keys and index syntax (items[0]) for list elements. You can combine these for intuitive navigation through complex nested structures (pages[0].title).

Special attention is given to pluralization support using the Babel library, which is critical for correct localization across different languages. An automatic fallback mechanism to the default locale's value is also implemented if a key or path is missing in the requested locale.

The library offers both a forgiving non-strict mode (returning a special wrapper and logging warnings) and a strict mode (raising exceptions) for handling missing paths.

It's designed for ease of use and performance (data is loaded once during initialization and translator objects are cached).

Features

  • Loading localization data from YAML, JSON, XML files.
  • Intuitive access to nested data structures (dictionaries and lists) using dot notation (.) for dictionary keys and index notation ([]) for list elements.
  • Support for combined access paths (data.list[0].nested_key).
  • Strict mode (strict=True) to raise exceptions on missing paths or incorrect usage.
  • Non-strict mode (default) to return a special NoneWrapper object and log a warning on missing paths or incorrect usage.
  • Pluralization support for count-dependent strings (requires Babel).
  • Automatic fallback to the default locale if a key/path is missing in the current locale.
  • Caching of loaded data and translator objects for efficient access.

Installation

doti18n is available on PyPI.

Instaling:

pip install doti18n

Usage

Here's a basic example of how to use doti18n:

Let's say you have a YAML file like this:

# locales/en.yaml
greeting: "Hello {}!"
farewell: "Goodbye $name!"
items:
    - name: "Item 1"
    - name: "Item 2"
notifications:
    one: "You have {count} new notification."
    other: "You have {count} new notifications."

You can load and use it as follows:

# Import main class
from doti18n import LocaleData

# Create a LocaleData instance
i18n = LocaleData("locales")

# Access translations
print(i18n["en"].greeting("John"))  # Output: Hello John!
print(i18n["en"].farewell(name="Alice"))  # Output: Goodbye Alice!
print(i18n["en"].farewell)  # Output: Goodbye $name!
print(i18n["en"].farewell())  # Output: Goodbye !
print(i18n["en"].items[0].name)  # Output: Item 1
print(i18n["en"].notifications(1))  # Output: You have 1 new notification.
print(i18n["en"].notifications(5))  # Output: You have 5 new notifications.

Project Status

This project is in an early stage of development (Alpha). The API may change in future versions before reaching a stable (1.0.0) release. Any feedback and suggestions are welcome!

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contact

If you have questions, feel free to open an issue on GitHub. Or you can message me on Telegram

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

doti18n-0.3.3.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

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

doti18n-0.3.3-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file doti18n-0.3.3.tar.gz.

File metadata

  • Download URL: doti18n-0.3.3.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for doti18n-0.3.3.tar.gz
Algorithm Hash digest
SHA256 f6f55ded766222e881af72b293f31d6d8d3c3c3bcb8e25fe83124521006a6e6e
MD5 83d43585246109448b802f6894bfdb1e
BLAKE2b-256 eb64f04038418c9563e0e5e29b6b5d1dc37e1d4568549ea3351aea451784da24

See more details on using hashes here.

Provenance

The following attestation bundles were made for doti18n-0.3.3.tar.gz:

Publisher: python-publish.yml on darkj3suss/doti18n

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file doti18n-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: doti18n-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for doti18n-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f37bc2fd5944830d0b95f76b8d056b218b2b9669fd89fc7e3a9188e130d04e79
MD5 29042b33dbf5a353f26f3d516fb5a16e
BLAKE2b-256 f3caf9bc1d6fa8a86ceda2b3b8c30b13346849ccdf37f64c3df181662fbe710c

See more details on using hashes here.

Provenance

The following attestation bundles were made for doti18n-0.3.3-py3-none-any.whl:

Publisher: python-publish.yml on darkj3suss/doti18n

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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