pydantic-translations

Translations for pydantic errors.


Keywords
mypy, typing, annotations, type, gettext, i18n, l10n, languages, locales, pydantic, python, python3, translation, translations
License
MIT
Install
pip install pydantic-translations==0.2.2

Documentation

pydantic-translations

Translations for pydantic errors.

Languages

Currently, we have translated pydantic v1.10.2 errors to the following languages:

  • de: German. 87/87.
  • es: Spanish. 87/87.
  • fr: French. 87/87.
  • it: Italian. 87/87.
  • nl: Dutch. 87/87.
  • ru: Russian. 82/87.

Need more languages? Contributions are welcome!

Installation

python3 -m pip install pydantic-translations

Usage

Let's say you have a pydantic model User:

from pydantic import BaseModel

class User(BaseModel):
    age: int

The translations are managed by the Translator class that is instantiated with the locale (language) you want the messages to be translated to:

from pydantic_translations import Translator

tr = Translator('ru')

You can use translator as a context manager to translate pydantic exceptions raised from the context:

with tr:
    User.parse_obj({'age': 'idk'})
# ValidationError: 1 validation error for User
# age
#   значение должно быть целым числом (type=type_error.integer)

Or use the translate_exception method to directly translate an exception instance:

from pydantic import ValidationError

try:
    User.parse_obj({'age': 'idk'})
except ValidationError as exc:
    exc = tr.translate_exception(exc)
    raise exc

Or use the translate_error method to translate a specific error:

try:
    User.parse_obj({'age': 'idk'})
except ValidationError as exc:
    err = exc.errors()[0]
    err = tr.translate_error(err)
    print(err)
# {'loc': ('age',), 'msg': 'значение должно быть целым числом', 'type': 'type_error.integer'}

Custom translations

If you have translated the errors to a new language, the best you can do is contribute it back here. If, for some (legal?) reason, you can't, you may pass into the Translated as a locale a l10n locale with your translations:

from l10n import Locales

locales = Locales()
locale = locales['ua']
tr = Translator(locale)

Contributors

  1. The original error messages provided by @samuelcolvin and pydantic contributors.
  2. The Russian translation is provided by @orsinium.
  3. The German, Spanish, French, Italian, and Dutch translations are provided by Andovar translation agency.

Minor corrections and improvements are provided by the project contributors.