Skip to main content

i18n + pluralization library with multi-plural form support and thread safe for web apps

Project description

Pluralize

Pluralize is a Python library for Internationalization (i18n) and Pluralization.

The library assumes a folder (for exaple "translations") that contains files like:

it.json
it-IT.json
fr.json
fr-FR.json
(etc)

Each file has the following structure, for example for Italian (it.json):

{"dog": {"0": "no cane", "1": "un cane", "2": "{n} cani", "10": "tantissimi cani"}}

The top level keys are the expressions to be translated and the associated value/dictionary maps a number to a translation. Different translations correspond to different plural forms of the expression,

Here is another example for the word "bed" in Czech

{"bed": {"0": "no postel", "1": "postel", "2": "postele", "5": "postelí"}}

To translate and pluralize a string "dog" one simply wraps the string in the T operator as follows:

>>> from pluralize import Translator
>>> T = Translator('translations')
>>> dog = T("dog")
>>> print(dog)
dog
>>> T.select('it')
>>> print(dog)
un cane
>>> print(dog.format(n=0))
no cane
>>> print(dog.format(n=1))
un cane
>>> print(dog.format(n=5))
5 cani
>>> print(dog.format(n=20))
tantissimi cani

The string can contain multiple placeholders but the {n} placeholder is special because the variable called "n" is used to determine the pluralization by best match (max dict key <= n).

T(...) objects can be added together with each other and with string, like regular strings.

T.select(s) can parse a string s following the HTTP accept language format.

Update the translation files

Find all strings wrapped in T(...) in .py, .html, and .js files:

matches = T.find_matches('path/to/app/folder')

Add newly discovered entries in all supported languages

T.update_languages(matches)

Add a new supported language (for example german, "de")

T.languages['de'] = {}

Make sure all languages contain the same origin expressions

known_expressions = set()
for language in T.languages.values():
    for expression in language:
        known_expressions.add(expression)
T.update_languages(known_expressions))

Finally save the changes:

T.save('translations')

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

pluralize-20240515.1.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

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

pluralize-20240515.1-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file pluralize-20240515.1.tar.gz.

File metadata

  • Download URL: pluralize-20240515.1.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for pluralize-20240515.1.tar.gz
Algorithm Hash digest
SHA256 4ef39356860434fc2d5b6caa3ca6caaaeab51958f34cbb3d4ec8ea78fb5d7360
MD5 e3ba0f838a632586cd341dfb3e5389af
BLAKE2b-256 38024abf55e8e9a2fe99645f7fdc0280e8f3999f12d7fbf2f3c66610aa19cd73

See more details on using hashes here.

File details

Details for the file pluralize-20240515.1-py3-none-any.whl.

File metadata

  • Download URL: pluralize-20240515.1-py3-none-any.whl
  • Upload date:
  • Size: 4.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for pluralize-20240515.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c7890c4a2e1bf49310cb7905679a7ad5cd4bb8de69b5c81da97a42ec7894cd70
MD5 65171c16907ad842eb1cf0e59247c5a5
BLAKE2b-256 9a2f78bbdcebc8180b221c443cb67e5cdb443b06743933672e5a202e0cf315f6

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