mirror of
https://github.com/pretix/pretix.git
synced 2025-12-06 21:42:49 +00:00
45 lines
2.1 KiB
ReStructuredText
45 lines
2.1 KiB
ReStructuredText
Internationalization
|
|
====================
|
|
|
|
One of pretix's major selling points is its multi-language capability. We make heavy use of Django's
|
|
`translation features`_ that are built upon `GNU gettext`_. However, Django does not provide a standard
|
|
way to translate *user-generated content*. In our case, we need to translate strings like product names
|
|
or event descriptions, so we need event organizers to be able to fill in all fields in multiple languages.
|
|
|
|
For this purpose, we use ``django-i18nfield`` which started out as part of pretix and then got refactored into
|
|
its own library. It has comprehensive documentation on how to work with its `strings`_, `database fields`_ and
|
|
`forms`_.
|
|
|
|
|
|
Forms
|
|
-----
|
|
|
|
For backwards-compatibility with older parts of pretix' code base and older plugins, ``pretix.base.forms`` still
|
|
contains a number of forms that are equivalent in name and usage to their counterparts in ``i18nfield.forms`` with
|
|
the difference that they take an ``event`` keyword argument and then set the ``locales`` argument based on
|
|
``event.settings.get('locales')``.
|
|
|
|
Useful utilities
|
|
----------------
|
|
|
|
The ``i18n`` module contains a few more useful utilities, starting with simple lazy-evaluation wrappers for formatted
|
|
numbers and dates, ``LazyDate`` and ``LazyNumber``. There also is a ``LazyLocaleException`` base class that provides
|
|
exceptions with gettext-localized exception messages.
|
|
|
|
Last, but definitely not least, we have the ``language`` context manager (``pretix.base.i18n.language``) that allows
|
|
you to execute a piece of code with a different locale:
|
|
|
|
.. code-block:: python
|
|
|
|
with language('de'):
|
|
render_mail_template()
|
|
|
|
This is very useful e.g. when sending an email to a user that has a different language than the user performing the
|
|
action that causes the mail to be sent.
|
|
|
|
.. _translation features: https://docs.djangoproject.com/en/1.9/topics/i18n/translation/
|
|
.. _GNU gettext: https://www.gnu.org/software/gettext/
|
|
.. _strings: https://django-i18nfield.readthedocs.io/en/latest/strings.html
|
|
.. _database fields: https://django-i18nfield.readthedocs.io/en/latest/quickstart.html
|
|
.. _forms: https://django-i18nfield.readthedocs.io/en/latest/forms.html
|