Skip to main content

Python library for loading localizations with dot access and pluralization.

Project description

PyPI version License

doti18n
Type-safe localization library for Python.
Access YAML, JSON, and XML translations using dot-notation.

Overview

doti18n allows you to replace string-based dictionary lookups with intuitive object navigation. Instead of locales['en']['messages']['error'], just write locales.en.messages.error.

It focuses on Developer Experience (DX) by providing a CLI tool to generate .pyi stubs. This enables IDE autocompletion and allows static type checkers (mypy, pyright) to catch missing keys at build time.

Key Features

  • Dot-Notation: Access nested keys via attributes (data.key) and lists via indices (items[0]).
  • Type Safety: Generate stubs to get full IDE support and catch typos instantly.
  • Pluralization: robust support powered by Babel.
  • Format Agnostic: Supports YAML, JSON, and XML out of the box.
  • Safety Modes:
    • Strict: Raises exceptions for missing keys (good for dev/test).
    • Non-strict: Returns a safe wrapper and logs warnings (good for production).
  • Fallback: Automatically falls back to the default locale if a key is missing.

Installation

pip install doti18n

If you use YAML files:

pip install doti18n[yaml]

Usage

1. Create a localization file (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."

2. Access it in Python:

from doti18n import LocaleData

# Initialize (loads and caches data)
i18n = LocaleData("locales")
en = i18n["en"]

# 1. Standard formatting (Python-style)
print(en.greeting("John"))           # Output: Hello John!

# 2. Variable formatting (Shell-style)
print(en.farewell(name="Alice"))     # Output: Goodbye Alice!

# 3. Raw strings and graceful handling
print(en.farewell)                   # Output: Goodbye $name! (Raw string)
print(en.farewell())                 # Output: Goodbye ! (Missing var handled)

# 4. List access
print(en.items[0].name)              # Output: Item 1

# 5. Pluralization
print(en.notifications(1))           # Output: You have 1 new notification.
print(en.notifications(5))           # Output: You have 5 new notifications.

CLI & Type Safety

doti18n comes with a CLI to generate type stubs (.pyi).

Why use it?

  1. Autocompletion: Your IDE will suggest available keys as you type.
  2. Validation: Static analysis tools will flag errors if you try to access a key that doesn't exist.

Commands:

# Generate stubs for all files in 'locales/' (default lang: en)
python -m doti18n stub locales/

# Generate stubs with a specific default language
python -m doti18n stub locales/ -lang fr

# Clean up generated stubs
python -m doti18n stub --clean

Note: Run this inside your virtual environment to ensure stubs are generated for the installed package.

Project Status

Alpha Stage: The API is stable but may evolve before the 1.0.0 release. Feedback and feature requests are highly appreciated!

Documentation

Documentation is available at:
https://darkj3suss.github.io/doti18n/

License

MIT License. See LICENSE for details.

Contact

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.4.4.tar.gz (26.1 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.4.4-py3-none-any.whl (34.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for doti18n-0.4.4.tar.gz
Algorithm Hash digest
SHA256 ffdc2d7db0a6eaaf90c332e8a18e33abb17c437424c463f358fa041cdbd82f3b
MD5 77f0c7d30beb973594d4f70e23b413d1
BLAKE2b-256 9fda8abc85225a86162cc2869ae8f845d9dddfd55830f1b4b6153645d844250b

See more details on using hashes here.

Provenance

The following attestation bundles were made for doti18n-0.4.4.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.4.4-py3-none-any.whl.

File metadata

  • Download URL: doti18n-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 34.3 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.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e0786ff9dbafb4d9513104554b263262163b62b51208a73ad349b76ce68154f5
MD5 b0ab7124206adb105fdfe75d6a3d322a
BLAKE2b-256 c7f594f76ed2b5d0cfd0ebbb6c8b98a0dc1773da81324762245f5038d1c11029

See more details on using hashes here.

Provenance

The following attestation bundles were made for doti18n-0.4.4-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