cookiecutter-django/{{cookiecutter.project_slug}}/locale
Bruno Alla 2e561ed6c4
Fix missing compilemessages step before deploying to prod (#4363)
* Update readme on internationalization

* Run compilemessages when building production image

* Run compilemessages when deploying to Heroku

* Always keep Heroku post-compile hooks

* Add empty po file for en-US language

* Update instructions for Docker

* Update default po file

* Convert locale readme to markdown and expand a bit the instructions

* Don't compile translations for 3rd party packages

* Use simplified settings & set env variables for compiling translations

* Update README for translations

* Improve metadata for Brazilian Portuguese translations

* Fix condition for django compressor on Heroku

* Fix condition for Django Compressor
2023-06-09 11:12:44 +01:00
..
en_US/LC_MESSAGES Fix missing compilemessages step before deploying to prod (#4363) 2023-06-09 11:12:44 +01:00
pt_BR/LC_MESSAGES Fix missing compilemessages step before deploying to prod (#4363) 2023-06-09 11:12:44 +01:00
README.md Fix missing compilemessages step before deploying to prod (#4363) 2023-06-09 11:12:44 +01:00

Translations

Start by configuring the LANGUAGES settings in base.py, by uncommenting languages you are willing to support. Then, translations strings will be placed in this folder when running:

{% if cookiecutter.use_docker == 'y' %}docker-compose -f local.yml run --rm django {% endif %}python manage.py makemessages -all --no-location

This should generate django.po (stands for Portable Object) files under each locale <locale name>/LC_MESSAGES/django.po. Each translatable string in the codebase is collected with its msgid and need to be translated as msgstr, for example:

msgid "users"
msgstr "utilisateurs"

Once all translations are done, they need to be compiled into .mo files (stands for Machine Object), which are the actual binary files used by the application:

{% if cookiecutter.use_docker == 'y' %}docker-compose -f local.yml run --rm django {% endif %}python manage.py compilemessages

Note that the .po files are NOT used by the application directly, so if the .mo files are out of dates, the content won't appear as translated even if the .po files are up-to-date.

Production

The production image runs compilemessages automatically at build time, so as long as your translated source files (PO) are up-to-date, you're good to go.

Add a new language

  1. Update the LANGUAGES setting to your project's base settings.
  2. Create the locale folder for the language next to this file, e.g. fr_FR for French. Make sure the case is correct.
  3. Run makemessages (as instructed above) to generate the PO files for the new language.