{"title":"表示形式のローカル化","version":"2.1","locale":"ja","docname":"topics/i18n/formatting","url":"/ja/2.1/topics/i18n/formatting/","canonical":"https://djangodocs.dev/ja/2.1/topics/i18n/formatting/","summary":"概要 Link to this heading # Django の表示形式システムは、カレント ロケール に合った表示形式を使って日付、時刻、数値をテンプレート内で表示することができます。また、フォームでのローカル化された入力も処理します。 この機能が有効のとき、同じコンテンツにアクセスする 2…","html":"<h1>表示形式のローカル化<a class=\"heading-anchor\" href=\"#format-localization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"overview\">\n<h2>概要<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django の表示形式システムは、カレント <a class=\"reference internal\" href=\"/ja/2.1/topics/i18n/#term-locale-name\"><span class=\"xref std std-term\">ロケール</span></a> に合った表示形式を使って日付、時刻、数値をテンプレート内で表示することができます。また、フォームでのローカル化された入力も処理します。</p>\n<p>この機能が有効のとき、同じコンテンツにアクセスする 2 人のユーザは、違う形で日付、時刻、数値を目にすることになるでしょう。これは、現在のロケールの表示形式に依存します。</p>\n<p>デフォルトでは、表示形式システムは無効になっています。有効化するには、設定ファイル内の <a class=\"reference internal\" href=\"/ja/2.1/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> をセットする必要があります。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"/ja/2.1/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span></code></a> によって生成されるデフォルトの <code class=\"file docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> ファイルは、利便性のために <a class=\"reference internal\" href=\"/ja/2.1/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> を含んでいます。ただし、1000 区切りでの数値表示を有効にするためには、設定ファイル内で <a class=\"reference internal\" href=\"/ja/2.1/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> にすることに注意してください。別の方法として、テンプレート内で数値の表示形式を指定するために <a class=\"reference internal\" href=\"/ja/2.1/ref/contrib/humanize/#std-templatefilter-intcomma\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">intcomma</span></code></a> を使うこともできます。</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>ほかにも、独立はしていますが、関連する <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-USE_I18N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_I18N</span></code></a> 設定もあります。これは、Django が表示形式のローカル化を有効にするかどうかをコントロールします。詳しくは <a class=\"reference internal\" href=\"/ja/2.1/topics/i18n/translation/\"><span class=\"doc\">翻訳</span></a> を参照してください。</p>\n</aside>\n</section>\n<section id=\"locale-aware-input-in-forms\">\n<h2>フォームでのロケールを認識する入力<a class=\"heading-anchor\" href=\"#locale-aware-input-in-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>表示形式機能が有効のとき、Django がフォーム内で日付、時刻、数値を描画する際に、ローカル化された表示形式を使用することができます。フォームにデータが入力されたとき、ユーザによって使用される表示形式を推測し、異なるロケールに対する異なる表示形式を試みることを意味します。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Django は、データを描画するために使うものに対して、データを表示するための異なる表示形式を使います。特に、日付を描画するための表示形式は、<code class=\"docutils literal notranslate\"><span class=\"pre\">%a</span></code> (省略された曜日名)、<code class=\"docutils literal notranslate\"><span class=\"pre\">%A</span></code> (曜日名), <code class=\"docutils literal notranslate\"><span class=\"pre\">%b</span></code> (省略された月名)、<code class=\"docutils literal notranslate\"><span class=\"pre\">%B</span></code> (月名)、<code class=\"docutils literal notranslate\"><span class=\"pre\">%p</span></code> (AM/PM) を使うことができません。</p>\n</aside>\n<p>フォームフィールドにローカル化された入力を有効化してデータを出力するには、単に <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>テンプレート内でローカル化をコントロールする<a class=\"heading-anchor\" href=\"#controlling-localization-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-USE_L10N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_L10N</span></code></a> で表示形式を有効にしたとき、Django はテンプレート内で値が出力されたときはいつでもロケールに対応した表示形式を使います。</p>\n<p>しかし、ローカル化された値を使うことが適切ではないこともあります -- 例えば、機械可読的に絵座員された JavaScript や XML を出力している場合、常にローカル化されていない値が必要でしょう。また、全ての場所でローカル化を適用するのではなく、特定のテンプレートだけで使いたいときもあるかもしれません。</p>\n<p>ローカル化の仕様について細かいコントロールをするために、Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">l10n</span></code> テンプレートライブラリを提供しています。これは、以下のタグやフィルタを含んでいます。</p>\n<section id=\"template-tags\">\n<h3>テンプレートタグ<a class=\"heading-anchor\" href=\"#template-tags\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>ブロック内で、テンプレート変数のローカル化を有効化または無効化します。</p>\n<p>このタグでは、<a class=\"reference internal\" href=\"/ja/2.1/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>テンプレートブロックに対してローカル化を有効化または無効化するためには、以下を使ってください:</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\">注釈</p>\n<p><a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-USE_L10N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_L10N</span></code></a> の値は、<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">localize</span> <span class=\"pre\">%}</span></code> ブロック内では尊重されません。</p>\n</aside>\n<p>各変数ベースで同じ仕事をするテンプレートフィルタについて、<a class=\"reference internal\" href=\"#std-templatefilter-localize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">localize</span></code></a> と <a class=\"reference internal\" href=\"#std-templatefilter-unlocalize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">unlocalize</span></code></a> を参照してください。</p>\n</section>\n</section>\n<section id=\"template-filters\">\n<h3>テンプレートフィルタ<a class=\"heading-anchor\" href=\"#template-filters\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>単数のローカル化を強制します。</p>\n<p>例:</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>単数のローカル化を無効化するには、<a class=\"reference internal\" href=\"#std-templatefilter-unlocalize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">unlocalize</span></code></a> を使ってください。テンプレートの大きな範囲を通じてローカル化をコントロールするには、<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\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>単数形がローカル化されずに表示されるように強制します。</p>\n<p>例:</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>単数のローカル化を強制するには、<a class=\"reference internal\" href=\"#std-templatefilter-localize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">localize</span></code></a> を使ってください。テンプレートの大きな範囲を通じてローカル化をコントロールするには、<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>\n</section>\n<section id=\"creating-custom-format-files\">\n<span id=\"custom-format-files\"></span><h2>独自の表示形式ファイルを作成する<a class=\"heading-anchor\" href=\"#creating-custom-format-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django は多くのロケールに対して表示形式の定義を準備していますが、あなたのロケールに対して表示形式ファイルが存在しなかったり、値のいくつかを上書きしたいときには、独自の定義を作成したいこともあるでしょう。</p>\n<p>独自の表示形式を使うには、最初に表示形式を設置するパスを指定してください。そのために、<a class=\"reference internal\" href=\"/ja/2.1/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> 設定を表示形式ファイルを置く予定のパッケージにセットしてください。例えば:</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>Files are not placed directly in this directory, but in a directory named as\nthe locale, and must be named <code class=\"docutils literal notranslate\"><span class=\"pre\">formats.py</span></code>. Be careful not to put sensitive\ninformation in these files as values inside can be exposed if you pass the\nstring to <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.formats.get_format()</span></code> (used by the <a class=\"reference internal\" href=\"/ja/2.1/ref/templates/builtins/#std-templatefilter-date\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">date</span></code></a>\ntemplate filter).</p>\n<p>To customize the English formats, a structure like this would be needed:</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>where <code class=\"file docutils literal notranslate\"><span class=\"pre\">formats.py</span></code> contains custom format definitions. For example:</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>to use a non-breaking space (Unicode <code class=\"docutils literal notranslate\"><span class=\"pre\">00A0</span></code>) as a thousand separator,\ninstead of the default for English, a comma.</p>\n</section>\n<section id=\"limitations-of-the-provided-locale-formats\">\n<h2>提供されているロケール表示形式の限界<a class=\"heading-anchor\" href=\"#limitations-of-the-provided-locale-formats\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>いくつかのロケールは、数字に対して文脈依存の表示形式を使います。これは、Django のローカル化システムでは自動的に扱うことはできません。</p>\n<section id=\"switzerland-german\">\n<h3>スイス (ドイツ語)<a class=\"heading-anchor\" href=\"#switzerland-german\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>スイスの数値の表示形式は、対象となる数字の種類によって決まります。貨幣の値に対しては、カンマが 1000 区切りに使われ、小数点が小数区切りに使われます。他の数字に対しては、カンマは小数区切りとして使われ、空白が 1000 区切りとして使われます。Django によって提供されるロケール表示形式は、一般的な区切り文字、つまり小数にはカンマそして1000 区切りには空白を使用します。</p>\n</section>\n</section>","rootId":"format-localization","toc":[{"title":"概要","anchor":"overview","children":[]},{"title":"フォームでのロケールを認識する入力","anchor":"locale-aware-input-in-forms","children":[]},{"title":"テンプレート内でローカル化をコントロールする","anchor":"controlling-localization-in-templates","children":[{"title":"テンプレートタグ","anchor":"template-tags","children":[{"title":"localize","anchor":"localize","children":[]}]},{"title":"テンプレートフィルタ","anchor":"template-filters","children":[{"title":"localize","anchor":"std-templatefilter-localize","children":[]},{"title":"unlocalize","anchor":"unlocalize","children":[]}]}]},{"title":"独自の表示形式ファイルを作成する","anchor":"creating-custom-format-files","children":[]},{"title":"提供されているロケール表示形式の限界","anchor":"limitations-of-the-provided-locale-formats","children":[{"title":"スイス (ドイツ語)","anchor":"switzerland-german","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/2.1/topics/"},{"docname":"topics/i18n/index","title":"国際化とローカル化","url":"/ja/2.1/topics/i18n/"}],"prev":{"docname":"topics/i18n/translation","title":"翻訳","url":"/ja/2.1/topics/i18n/translation/"},"next":{"docname":"topics/i18n/timezones","title":"タイムゾーン","url":"/ja/2.1/topics/i18n/timezones/"},"formats":{"html":"/ja/2.1/topics/i18n/formatting/","markdown":"/ja/2.1/topics/i18n/formatting.md","json":"/ja/2.1/topics/i18n/formatting.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/topics/i18n/formatting.txt","official":"https://docs.djangoproject.com/ja/2.1/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","pt-br","ko","es","el","pl"]}