3.2 KiB
Internationalisation
REST framework ships with translatable error messages. You can make these appear in your language enabling Django's standard translation mechanisms and by translating the messages into your language.
How to translate REST Framework errors
This guide assumes you are already familiar with how to translate a Django app. If you're not, start by reading Django's translation docs.
To translate REST framework error messages:
- Make a new folder where you want to store the translated errors. Add this
path to your
LOCALE_PATHS
setting.
Note: For the rest of
this document we will assume the path you created was
/home/www/project/conf/locale/
, and that you have updated your settings.py
to include the setting:
LOCALE_PATHS = (
'/home/www/project/conf/locale/',
)
- Now create a subfolder for the language you want to translate. The folder should be named using locale
name notation. E.g.
de
,pt_BR
,es_AR
, etc.
mkdir /home/www/project/conf/locale/pt_BR/LC_MESSAGES
- Now copy the base translations file from the REST framework source code into your translations folder
cp /home/user/.virtualenvs/myproject/lib/python2.7/site-packages/rest_framework/locale/en_US/LC_MESSAGES/django.po
/home/www/project/conf/locale/pt_BR/LC_MESSAGES
This should create the file
/home/www/project/conf/locale/pt_BR/LC_MESSAGES/django.po
Note: To find out where rest_framework
is installed, run
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
-
Edit
/home/www/project/conf/locale/pt_BR/LC_MESSAGES/django.po
and translate all the error messages. -
Run
manage.py compilemessages -l pt_BR
to make the translations available for Django to use. You should see a messageprocessing file django.po in /home/www/project/conf/locale/pt_BR/LC_MESSAGES
-
Restart your server.
How Django chooses which language to use
REST framework will use the same preferences to select which language to display as Django does. You can find more info in the Django docs on discovering language preferences. For reference, these are
- First, it looks for the language prefix in the requested URL
- Failing that, it looks for the
LANGUAGE_SESSION_KEY
key in the current user’s session. - Failing that, it looks for a cookie
- Failing that, it looks at the
Accept-Language
HTTP header. - Failing that, it uses the global
LANGUAGE_CODE
setting.
Note: You'll need to include the django.middleware.locale.LocaleMiddleware
to enable any of the per-request language preferences.