# Documentation Django 3.1.9.dev

# Internationalisation et régionalisation

## Aperçu

Le but de l’internationalisation et de la régionalisation est de permettre à une seule application Web de présenter son contenu dans des langues et des formats adaptés à ses visiteurs.

Django prend pleinement en charge la traduction de texte, la mise en forme de dates, d’heures et de nombres, et les fuseaux horaires.

Essentiellement, Django effectue deux choses :

- Il permet aux développeurs et aux rédacteurs de gabarits d’indiquer quelles parties de leurs applications doivent être traduites ou mises en forme en fonction des langues et cultures locales.
- Il utilise ces marqueurs pour régionaliser les applications Web en fonction des préférences des utilisateurs.

La traduction dépend de la langue cible et la mise en forme dépend généralement du pays cible. Ces informations sont données par les navigateurs dans l’en-tête `Accept-Language`. Cependant, le fuseau horaire n’est pas accessible de manière évidente.

## Définitions

Les mots « internationalisation » et « régionalisation » sont souvent sources de confusion. En voici une définition simplifiée :

internationalisation
  Préparation du logiciel en vue de sa régionalisation. Habituellement effectuée par les développeurs.
régionalisation
  Rédaction des traductions et des formats de langue. Habituellement effectuée par les traducteurs.

Vous pouvez trouver de plus amples détails dans la FAQ W3C Web Internationalization, l”article Wikipédia ou la documentation de GNU gettext.

Avertissement

La traduction et la mise en forme sont contrôlés par les réglages respectifs `USE_I18N` et `USE_L10N`. Mais les deux fonctionnalités concernent l’internationalisation et la régionalisation. Les noms de ces réglages dans Django ont une malencontreuse origine historique.

Voici quelques autres termes qui vont nous aider à gérer une même langue :

nom de locale
  Un nom de locale indiquant soit une langue sous la forme `ll` ou une combinaison de code langue et pays sous la forme `ll_PP`. Exemples : `it`, `de_AT`, `es`, `pt_BR`, `sr_Latn`. Le code de langue est toujours en minuscules. Le code pays en majuscules s’il comporte 2 caractères, ou seulement la première lettre s’il comporte plus de caractères. Le séparateur est un caractère soulignement.
code de langue
  Représente le nom d’une langue. Les navigateurs envoient les noms de langues qu’ils acceptent dans l’en-tête HTTP `Accept-Language` avec ce format. Exemples : `it`, `de-at`, `es`, `pt-br`. Les codes de langue sont généralement représentés en minuscules, mais l’en-tête HTTP `Accept-Language` n’est pas sensible à la casse. Le séparateur est un tiret.
fichier de messages
  Un fichier de messages est un fichier de texte pur correspondant à une seule langue et qui contient toutes les chaînes de caractères de traduction disponibles avec leur équivalent traduit dans la langue donnée. Les fichiers de messages possèdent l’extension `.po`.
chaîne à traduire
  Du texte à traduire.
format de fichier
  Un fichier de formats est un module Python définissant les formats de données d’une langue définie.