Skip to main content

Lightweight i18n for Python

Project description

I18n for Python

pypi version Build status Test Coverage Buy me a beer

Lightweight i18n for Python.

Install

pip install i18nx

Usage

from i18nx import I18n

i18n = I18n(
  locale = 'en',
  fallback = 'fr',
  translations = {
    'en': { 'message': { 'hello': 'Hello World!' } },
    'fr': { 'message': { 'hello': 'Bonjour le monde !' } },
  },
)

print(i18n.tr("message.hello")) # Hello World!

Message Format Syntax

Interpolation

i18nx use the Mustache like placeholders {} syntax for interpolation.

from i18nx import I18n

i18n = I18n(
  locale = 'en',
  fallback = 'fr',
  translations = {
    'en': { 'message': { 'hello': 'Hello {name}!' } },
    'fr': { 'message': { 'hello': 'Bonjour {name} !' } },
  },
)

print(i18n.tr("message.hello", name = 'Mario')) # Hello Mario!

Pluralization

Use a pipe | separator in combination with the param count to define plurals on the locale translations.

from i18nx import I18n

i18n = I18n(
  locale = 'en',
  fallback = 'fr',
  translations = {
    'en': {
      'car': 'car | cars',
      'apple': 'no apples | one apple | {count} apples',
    },
  },
)

print(i18n.tr("car")) # 'car'
print(i18n.tr("car", count = 0)) # 'car'
print(i18n.tr("car", count = 1)) # 'car'
print(i18n.tr("car", count = 2)) # 'cars'
print(i18n.tr("apple", count = 0)) # 'no apples'
print(i18n.tr("apple", count = 1)) # 'one apple'
print(i18n.tr("apple", count = 15)) # '15 apples'

List of Messages

from i18nx import I18n

i18n = I18n(
  locale = 'en',
  fallback_locale = 'fr',
  translations = {
    'en': {
      "greetings": [
        "Hey {firtname}!",
        "Hi {firtname}!",
      ],
    },
  },
)

print(i18n.tr("greetings.0", firtname = 'Mario')) # 'Hey Mario!'
print(i18n.tr("greetings.1", firtname = 'Mario')) # 'Hi Mario!'

I18n API

interface class I18n:
  constructor(locale: str, fallback_locale: str, translations: Dict[str, Dict[str, Any]], show_warning = False)

  # Active locale
  @property locale: str

  # Fallback locale
  @property fallback_locale: str

  # Available locales
  @getter available_locales: List[str]

  # Raw translations object for the active locale
  @getter raw: dict

  # Get translated text for the given dot path
  @method tr(path: str, **params) -> str

  # Get the raw message for the given dot path
  @method get_raw_message(path: str) -> Union[str, None]

  # Format the given raw message with the given params
  @method format_raw_message(message: str, **params) -> str

Development Setup

  1. Install Nix Package Manager

  2. Install direnv with your OS package manager

  3. Hook it direnv into your shell

  4. At the top-level of your project run:

    direnv allow
    

    The next time your launch your terminal and enter the top-level of your project, direnv will check for changes.

Scripts

# run tests
make test

# run tests with coverage
make coverage

# run linter
make lint

# run build process
make dist

# publish
make publish

License

Under the MIT license. See LICENSE file for more details.

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

i18nx-1.3.0.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

i18nx-1.3.0-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file i18nx-1.3.0.tar.gz.

File metadata

  • Download URL: i18nx-1.3.0.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for i18nx-1.3.0.tar.gz
Algorithm Hash digest
SHA256 c1b40379773cb48f4ad57aa35aae42783f8001f866287dfbbe0357abc8b284da
MD5 3d4484c4af8c6c1311ac43cc2daf7b16
BLAKE2b-256 4f49f49c6e39a51fcfaa200f21195ad94b70c6ff691ecdaae02aa6027c710a76

See more details on using hashes here.

File details

Details for the file i18nx-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: i18nx-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 4.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for i18nx-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a5afe786f5ff36a5a75a0ca6edc404b670bdacc071b7a3adf63cb917fb9b2b9f
MD5 248255a8674cc1db62e6cc2df65b35af
BLAKE2b-256 1577cb8d78a845d48fdd624bc9741337c2e59a95af8d5e8e5efbb937ae0bf261

See more details on using hashes here.

Supported by

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