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 4.2 (LTS), 5.2 (LTS) and 6.0 series.
Installation
- Use your favorite Python packaging tool to install
django-statici18n
_, 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.contextprocessors.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
.. 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:
{% load statici18n %}
- Or inline the JavaScript directly in your template:
{% load statici18n %}
.. _PyPI: http://pypi.python.org/pypi/django-statici18n .. _translated: https://docs.djangoproject.com/en/5.2/topics/i18n/translation/#message-files .. _compiled: https://docs.djangoproject.com/en/5.2/topics/i18n/translation/#compiling-message-files .. django.core.contextprocessors.i18n: https://docs.djangoproject.com/en/5.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/5.2/topics/i18n/translation/#using-the-javascript-translation-catalog .. _django.contrib.staticfiles: https://docs.djangoproject.com/en/5.2/ref/contrib/staticfiles/