django-statici18n
django-statici18n copied to clipboard
A Django app that compiles i18n JavaScript catalogs to static files.
django-statici18n
.. 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
Overview
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
Supported Django Versions
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.0 and 4.1 series.
Installation
-
Use your favorite Python packaging tool to install
django-statici18n
fromPyPI
_, e.g.::pip install django-statici18n
-
Add
'statici18n'
to yourINSTALLED_APPS
setting::INSTALLED_APPS = [ # ... 'statici18n', ]
-
Once you have
translated
_ andcompiled
_ your messages, use thecompilejsi18n
management command::python manage.py compilejsi18n
-
Add the
django.core.context_processors.i18n
_ context processor to thecontext_processors
section for your backend in theTEMPLATES
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
_.
- Edit your template(s) and use the provided template tag:
.. code-block:: html+django
{% load statici18n %}
<script src="{% statici18n LANGUAGE_CODE %}"></script>
- Or inline the JavaScript directly in your template:
.. 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/2.2/topics/i18n/translation/#message-files .. _compiled: https://docs.djangoproject.com/en/2.2/topics/i18n/translation/#compiling-message-files .. _django.core.context_processors.i18n: https://docs.djangoproject.com/en/2.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/2.2/topics/i18n/translation/#using-the-javascript-translation-catalog .. _django.contrib.staticfiles: https://docs.djangoproject.com/en/2.2/ref/contrib/staticfiles/