A Django app that compiles i18n JavaScript catalogs to static files.
.. image:: https://github.com/zyegfryed/django-statici18n/actions/workflows/build.yml/badge.svg?branch=main :alt: Build Status :target: https://github.com/zyegfryed/django-statici18n/actions
.. image:: https://codecov.io/gh/zyegfryed/django-statici18n/branch/main/graph/badge.svg?token=xiaDYAr30F :target: https://codecov.io/gh/zyegfryed/django-statici18n
When dealing with internationalization in JavaScript code, Django provides
the JSONCatalog view
_ which sends out a JavaScript code library with
functions that mimic the gettext interface, plus an array of translation
strings.
At first glance, it works well and everything is fine. But, because
JSONCatalog view
_ is generating JavaScript catalog dynamically on each
and every request, it's adding an overhead
_ that can be an issue with
site growth.
That's what django-statici18n
is for:
Collecting JavaScript catalogs from each of your Django apps (and any
other place you specify) into a single location that can easily be
served in production.
The main website for django-statici18n
is
github.com/zyegfryed/django-statici18n
_ where you can also file tickets.
.. _JSONCatalog view: https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#the-jsoncatalog-view .. _adding an overhead: https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#note-on-performance .. _github.com/zyegfryed/django-statici18n: https://github.com/zyegfryed/django-statici18n
django-statici18n
works with all the Django versions officially
supported by the Django project. At this time of writing, these are the
3.2 (LTS), 4.1, 4.2 series.
Use your favorite Python packaging tool to install django-statici18n
from PyPI
_, e.g.::
pip install django-statici18n
Add 'statici18n'
to your INSTALLED_APPS
setting::
INSTALLED_APPS = [ # ... 'statici18n', ]
Once you have translated
_ and compiled
_ your messages, use the
compilejsi18n
management command::
python manage.py compilejsi18n
Add the django.core.context_processors.i18n
_ context processor to the
context_processors
section for your backend in the TEMPLATES
setting - it should have already been set by Django::
TEMPLATES = [ { # ... 'OPTIONS': { 'context_processors': { # ... 'django.template.context_processors.i18n', }, }, }, ]
Edit your template(s) and replace the dynamically generated script
_ by the
statically generated one:
.. code-block:: html+django
<script src="{{ STATIC_URL }}jsi18n/{{ LANGUAGE_CODE }}/djangojs.js"></script>
.. note::
By default, the generated catalogs are stored to ``STATIC_ROOT/jsi18n``.
You can modify the output path and more options by tweaking
``django-statici18n`` settings.
(Optional)
The following step assumes you're using django.contrib.staticfiles
_.
.. code-block:: html+django
{% load statici18n %}
<script src="{% statici18n LANGUAGE_CODE %}"></script>
.. code-block:: html+django
{% load statici18n %}
<script>{% inlinei18n LANGUAGE_CODE %}</script>
.. _PyPI: http://pypi.python.org/pypi/django-statici18n .. _translated: https://docs.djangoproject.com/en/4.2/topics/i18n/translation/#message-files .. _compiled: https://docs.djangoproject.com/en/4.2/topics/i18n/translation/#compiling-message-files .. _django.core.context_processors.i18n: https://docs.djangoproject.com/en/4.2/ref/templates/api/#django-template-context-processors-i18n .. _Upgrading templates to Django 1.8: https://docs.djangoproject.com/en/2.2/ref/templates/upgrading/ .. _dynamically generated script: https://docs.djangoproject.com/en/4.2/topics/i18n/translation/#using-the-javascript-translation-catalog .. _django.contrib.staticfiles: https://docs.djangoproject.com/en/4.2/ref/contrib/staticfiles/