{"title":"Régionalisation des formats","version":"4.0","locale":"fr","docname":"topics/i18n/formatting","url":"/fr/4.0/topics/i18n/formatting/","canonical":"https://djangodocs.dev/fr/4.0/topics/i18n/formatting/","summary":"Aperçu Lien vers cette rubrique # Le système des formats de Django est capable d’afficher des dates, des heures et des nombres dans les gabarits en utilisant les…","html":"<h1>Régionalisation des formats<a class=\"heading-anchor\" href=\"#format-localization\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"overview\">\n<h2>Aperçu<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Le système des formats de Django est capable d’afficher des dates, des heures et des nombres dans les gabarits en utilisant les formats définis pour la langue (<a class=\"reference internal\" href=\"/fr/4.0/topics/i18n/#term-locale-name\"><span class=\"xref std std-term\">locale</span></a>) active. Il gère également les saisies en formats régionalisés dans les formulaires.</p>\n<p>Lorsqu’il est actif, deux utilisateurs accédant simultanément à un même contenu peuvent voir les dates, les heures et les nombres mis en forme différemment, en fonction des formats de leur langue actuelle.</p>\n<p>Le système des formats est désactivé par défaut. Pour l’activer, il est nécessaire de définir <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-USE_L10N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_L10N</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code></a> dans votre fichier de réglages.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Pour activer le format de nombre avec séparateur de milliers, il est nécessaire de définir <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-USE_THOUSAND_SEPARATOR\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_THOUSAND_SEPARATOR</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code></a> dans le fichier des réglages. Il est aussi possible d’utiliser <a class=\"reference internal\" href=\"/fr/4.0/ref/contrib/humanize/#std-templatefilter-intcomma\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">intcomma</span></code></a> pour mettre en forme les nombres dans votre gabarit.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Il existe un réglage lié nommé <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-USE_I18N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_I18N</span></code></a> qui contrôle l’activation ou non des traductions. Voir <a class=\"reference internal\" href=\"/fr/4.0/topics/i18n/translation/\"><span class=\"doc\">Traduction</span></a> pour plus de détails.</p>\n</aside>\n</section>\n<section id=\"locale-aware-input-in-forms\">\n<h2>Saisies régionalisées dans les formulaires<a class=\"heading-anchor\" href=\"#locale-aware-input-in-forms\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lorsque l’utilisation des formats est active, Django peut utiliser des formats régionalisés lorsqu’il reçoit des dates, des heures et des nombres en provenance de formulaires. Cela signifie qu’il essaie différents formats de différentes langues pour deviner le format utilisé par l’utilisateur lors de saisies de données dans un formulaire.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Django utilise différents formats pour afficher les données que ceux qu’il utilise pour analyser les données reçues. Plus particulièrement, les formats d’analyse de dates ne peuvent pas utiliser <code class=\"docutils literal notranslate\"><span class=\"pre\">%a</span></code> (jour de la semaine abrégé), <code class=\"docutils literal notranslate\"><span class=\"pre\">%A</span></code> (jour de la semaine complet), <code class=\"docutils literal notranslate\"><span class=\"pre\">%b</span></code> (nom du mois abrégé), <code class=\"docutils literal notranslate\"><span class=\"pre\">%B</span></code> (nom du mois complet) et <code class=\"docutils literal notranslate\"><span class=\"pre\">%p</span></code> (AM/PM).</p>\n</aside>\n<p>Pour qu’un champ de formulaire utilise des formats régionalisés pour mettre en forme ses données affichées et saisies, utilisez son paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">localize</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CashRegisterForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n   <span class=\"n\">product</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">()</span>\n   <span class=\"n\">revenue</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">DecimalField</span><span class=\"p\">(</span><span class=\"n\">max_digits</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">decimal_places</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">localize</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"controlling-localization-in-templates\">\n<span id=\"topic-l10n-templates\"></span><h2>Contrôle de la régionalisation dans les gabarits<a class=\"heading-anchor\" href=\"#controlling-localization-in-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Quand la mise en forme est activée avec <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-USE_L10N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_L10N</span></code></a>, Django essaie d’utiliser des formats spécifiques à la langue lorsqu’il affiche une valeur dans un gabarit.</p>\n<p>Cependant, il n’est pas toujours adéquat d’utiliser des valeurs régionalisées, par exemple si vous produisez du JavaScript ou du XML qui devront être interprétés par le système, ce contenu ne devrait jamais contenir d’affichage régionalisé. Il peut aussi être parfois souhaitable de limiter la régionalisation à certains gabarits, plutôt que de l’utiliser partout.</p>\n<p>Pour permettre un contrôle plus fin sur l’emploi de la régionalisation, Django propose la bibliothèque de gabarit <code class=\"docutils literal notranslate\"><span class=\"pre\">l10n</span></code> qui contient les balises et filtres suivants.</p>\n<section id=\"template-tags\">\n<h3>Balises de gabarit<a class=\"heading-anchor\" href=\"#template-tags\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"localize\">\n<span id=\"std-templatetag-localize\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">localize</span></code><a class=\"heading-anchor\" href=\"#localize\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Active ou désactive la régionalisation de variables de gabarits dans le bloc qu’elle définit.</p>\n<p>Cette balise permet une granularité plus fine dans le choix de régionalisation que le réglage <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-USE_L10N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_L10N</span></code></a>.</p>\n<p>Pour activer ou désactiver la régionalisation pour un bloc de gabarit, utilisez :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">load</span> <span class=\"n\">l10n</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">localize</span> <span class=\"n\">on</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"p\">{{</span> <span class=\"n\">value</span> <span class=\"p\">}}</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endlocalize</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">localize</span> <span class=\"n\">off</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n    <span class=\"p\">{{</span> <span class=\"n\">value</span> <span class=\"p\">}}</span>\n<span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">endlocalize</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>La valeur de <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-USE_L10N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_L10N</span></code></a> n’est pas prise en compte à l’intérieur d’un bloc <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">localize</span> <span class=\"pre\">%}</span></code>.</p>\n</aside>\n<p>Voir aussi <a class=\"reference internal\" href=\"#std-templatefilter-localize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">localize</span></code></a> et <a class=\"reference internal\" href=\"#std-templatefilter-unlocalize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">unlocalize</span></code></a> pour des filtres de gabarit qui font le même travail au niveau des variables.</p>\n</section>\n</section>\n<section id=\"template-filters\">\n<h3>Filtres de gabarit<a class=\"heading-anchor\" href=\"#template-filters\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"std-templatefilter-localize\">\n<span id=\"id1\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">localize</span></code><a class=\"heading-anchor\" href=\"#std-templatefilter-localize\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Force la régionalisation d’une seule valeur.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">load</span> <span class=\"n\">l10n</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"p\">{{</span> <span class=\"n\">value</span><span class=\"o\">|</span><span class=\"n\">localize</span> <span class=\"p\">}}</span>\n</code></pre></div>\n<p>Pour désactiver la régionalisation d’une seule valeur, utilisez <a class=\"reference internal\" href=\"#std-templatefilter-unlocalize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">unlocalize</span></code></a>. Pour contrôler la régionalisation sur toute une section d’un gabarit, utilisez la balise de gabarit <a class=\"reference internal\" href=\"#std-templatetag-localize\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">localize</span></code></a>.</p>\n</section>\n<section id=\"unlocalize\">\n<span id=\"std-templatefilter-unlocalize\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">unlocalize</span></code><a class=\"heading-anchor\" href=\"#unlocalize\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Force l’affichage d’une seule valeur sans régionalisation.</p>\n<p>Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"o\">%</span> <span class=\"n\">load</span> <span class=\"n\">l10n</span> <span class=\"o\">%</span><span class=\"p\">}</span>\n\n<span class=\"p\">{{</span> <span class=\"n\">value</span><span class=\"o\">|</span><span class=\"n\">unlocalize</span> <span class=\"p\">}}</span>\n</code></pre></div>\n<p>Pour forcer la régionalisation d’une seule valeur, utilisez <a class=\"reference internal\" href=\"#std-templatefilter-localize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">localize</span></code></a>. Pour contrôler la régionalisation sur toute une section d’un gabarit, utilisez la balise de gabarit <a class=\"reference internal\" href=\"#std-templatetag-localize\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">localize</span></code></a>.</p>\n<p>Renvoie une représentation textuelle et non régionalisée des nombres (int`, <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">Decimal</span></code>).</p>\n</section>\n</section>\n</section>\n<section id=\"creating-custom-format-files\">\n<span id=\"custom-format-files\"></span><h2>Création de fichiers de formats personnalisés<a class=\"heading-anchor\" href=\"#creating-custom-format-files\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django fournit des définitions de formats pour de nombreuses langues, mais il peut être parfois souhaitable de créer ses propres formats, soit parce qu’il n’existe pas de fichier de formats pour votre langue, soit par ce que vous souhaitez surcharger certaines valeurs.</p>\n<p>Pour utiliser des formats personnalisés, indiquez d’abord le chemin où vous allez placer les fichiers de formats. Pour cela, indiquez dans le réglage <a class=\"reference internal\" href=\"/fr/4.0/ref/settings/#std-setting-FORMAT_MODULE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORMAT_MODULE_PATH</span></code></a> le chemin du paquet dans lequel seront définis les fichiers de formats ; par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">FORMAT_MODULE_PATH</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s1\">&#39;mysite.formats&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;some_app.formats&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Les fichiers ne sont pas placés directement dans ce répertoire, mais dans un répertoire nommé d’après la locale, et doit s’appeler <code class=\"docutils literal notranslate\"><span class=\"pre\">formats.py</span></code>. Prenez garde de ne pas mettre d’informations sensibles dans ces fichiers car les valeurs contenues pourraient être exposées si la chaîne est passée à <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.formats.get_format()</span></code> (utilisée par le filtre de gabarit <a class=\"reference internal\" href=\"/fr/4.0/ref/templates/builtins/#std-templatefilter-date\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">date</span></code></a>).</p>\n<p>Pour personnaliser les formats anglais, voici à quoi ressemblerait la structure nécessaire :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">mysite</span><span class=\"o\">/</span>\n    <span class=\"n\">formats</span><span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n        <span class=\"n\">en</span><span class=\"o\">/</span>\n            <span class=\"fm\">__init__</span><span class=\"o\">.</span><span class=\"n\">py</span>\n            <span class=\"n\">formats</span><span class=\"o\">.</span><span class=\"n\">py</span>\n</code></pre></div>\n<p>où <code class=\"file docutils literal notranslate\"><span class=\"pre\">formats.py</span></code> contient les définitions de formats personnalisés. Par exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">THOUSAND_SEPARATOR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\xa0</span><span class=\"s1\">&#39;</span>\n</code></pre></div>\n<p>pour utiliser une espace insécable (Unicode <code class=\"docutils literal notranslate\"><span class=\"pre\">00A0</span></code>) comme séparateur de milliers au lieu du caractère par défaut qui est la virgule en anglais.</p>\n</section>\n<section id=\"limitations-of-the-provided-locale-formats\">\n<h2>Limites des formats de langue fournis<a class=\"heading-anchor\" href=\"#limitations-of-the-provided-locale-formats\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Certaines langues utilisent des formats différents selon le contexte pour les nombres, ce que le système de régionalisation de Django ne sait pas gérer automatiquement.</p>\n<section id=\"switzerland-german\">\n<h3>Suisse (alémanique)<a class=\"heading-anchor\" href=\"#switzerland-german\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Le système de mise en forme des nombres dépend du type de nombre. Pour les valeurs monétaires, c’est la virgule qui doit être utilisée comme séparateur de milliers et le point décimal comme séparateur décimal. Pour tous les autres nombres, la virgule est utilisée comme séparateur décimal et l’espace comme séparateur de milliers. Le format de langue fournit par Django utilise toujours les séparateurs globaux, une virgule comme séparateur décimal et l’espace comme séparateur de milliers.</p>\n</section>\n</section>","rootId":"format-localization","toc":[{"title":"Aperçu","anchor":"overview","children":[]},{"title":"Saisies régionalisées dans les formulaires","anchor":"locale-aware-input-in-forms","children":[]},{"title":"Contrôle de la régionalisation dans les gabarits","anchor":"controlling-localization-in-templates","children":[{"title":"Balises de gabarit","anchor":"template-tags","children":[{"title":"localize","anchor":"localize","children":[]}]},{"title":"Filtres de gabarit","anchor":"template-filters","children":[{"title":"localize","anchor":"std-templatefilter-localize","children":[]},{"title":"unlocalize","anchor":"unlocalize","children":[]}]}]},{"title":"Création de fichiers de formats personnalisés","anchor":"creating-custom-format-files","children":[]},{"title":"Limites des formats de langue fournis","anchor":"limitations-of-the-provided-locale-formats","children":[{"title":"Suisse (alémanique)","anchor":"switzerland-german","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Utilisation de Django","url":"/fr/4.0/topics/"},{"docname":"topics/i18n/index","title":"Internationalisation et régionalisation","url":"/fr/4.0/topics/i18n/"}],"prev":{"docname":"topics/i18n/translation","title":"Traduction","url":"/fr/4.0/topics/i18n/translation/"},"next":{"docname":"topics/i18n/timezones","title":"Fuseaux horaires","url":"/fr/4.0/topics/i18n/timezones/"},"formats":{"html":"/fr/4.0/topics/i18n/formatting/","markdown":"/fr/4.0/topics/i18n/formatting.md","json":"/fr/4.0/topics/i18n/formatting.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/topics/i18n/formatting.txt","official":"https://docs.djangoproject.com/fr/4.0/topics/i18n/formatting/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}