The goal of internationalization and localization is to allow a single Web application to offer its content in languages and formats tailored to the audience.
Django has full support for translation of text, formatting of dates, times and numbers, and time zones.
Essentially, Django does two things:
Translation depends on the target language, and formatting usually depends on the target country. This information is provided by browsers in the Accept-Language
header. However, the time zone isn’t readily available.
The words “internationalization” and “localization” often cause confusion; here’s a simplified definition:
internationalization
localization
More details can be found in the W3C Web Internationalization FAQ, the Wikipedia article or the GNU gettext documentation.
Warning
Translation and formatting are controlled by USE_I18N
and USE_L10N
settings respectively. However, both features involve internationalization and localization. The names of the settings are an unfortunate result of Django’s history.
Here are some other terms that will help us to handle a common language:
locale name
ll
or a combined language and country specification of the form ll_CC
. Examples: it
, de_AT
, es
, pt_BR
, sr_Latn
. The language part is always in lowercase. The country part is in titlecase if it has more than 2 characters, otherwise it’s in uppercase. The separator is an underscore.language code
Accept-Language
HTTP header using this format. Examples: it
, de-at
, es
, pt-br
. Language codes are generally represented in lowercase, but the HTTP Accept-Language
header is case-insensitive. The separator is a dash.message file
.po
file extension.translation string
format file
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/topics/i18n/index/