{"title":"翻訳","version":"1.11","locale":"ja","docname":"topics/i18n/translation","url":"/ja/1.11/topics/i18n/translation/","canonical":"https://djangodocs.dev/ja/1.11/topics/i18n/translation/","summary":"概要 Link to this heading # Django プロジェクトを翻訳可能にするためには、Python コードやテンプレートに、多少のフックを加筆しなければなりません。このフックは 翻訳文字列 と呼ばれます。翻訳文字列は Django…","html":"<span id=\"translation\"></span><h1>翻訳<a class=\"heading-anchor\" href=\"#module-django.utils.translation\"><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 プロジェクトを翻訳可能にするためには、Python コードやテンプレートに、多少のフックを加筆しなければなりません。このフックは <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-translation-string\"><span class=\"xref std std-term\">翻訳文字列</span></a> と呼ばれます。翻訳文字列は Django に「このテキストに対する翻訳が有効な場合、このテキストはエンドユーザの言語に翻訳すべきだ」ということを通知します。翻訳可能な文字列をマークすることは開発者の責任です。システムが翻訳できるのは指定された文字列だけなのです。</p>\n<p>Django は、翻訳文字列を <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-message-file\"><span class=\"xref std std-term\">メッセージファイル</span></a> に抽出するユーティリティを提供します。このファイルがあるため、翻訳者が対象の言語において翻訳文字列に対応する文字列を用意することが簡単になります。翻訳者がメッセージファイルの中身を書き終わったら、それをコンパイルしなければなりません。このプロセスは GNU gettext ツー ルキットに依存しています。</p>\n<p>これが済めば、 Django はユーザの言語設定に従って、オンザフライでアプリケーションを利用可能な言語に翻訳するようになります。</p>\n<p>Django の国際化フックはデフォルトで有効になっており、これは、フレームワークの特定の箇所で i18n に関する小さなオーバーヘッドが発生することを意味します。国際化を使わない場合は、 <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-USE_I18N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_I18N</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code></a> を設定ファイルに記述してください。そうすれば Django は国際化の部品を読み込まないようにして多少の最適化をします。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-USE_L10N\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_L10N</span></code></a> もまた、別個ではありますが関連して書式のローカル化を行います。詳しくは <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/formatting/\"><span class=\"doc\">表示形式のローカル化</span></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/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> が <a class=\"reference internal\" href=\"/ja/1.11/ref/middleware/#django.middleware.locale.LocaleMiddleware\" title=\"django.middleware.locale.LocaleMiddleware\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.middleware.locale.LocaleMiddleware</span></code></a> を含むかどうかチェックすることです) 。まだの場合は、<a class=\"reference internal\" href=\"#how-django-discovers-language-preference\"><span class=\"std std-ref\">How Django discovers language preference</span></a> を参照してください。</p>\n</aside>\n</section>\n<section id=\"internationalization-in-python-code\">\n<h2>Python コードでの国際化<a class=\"heading-anchor\" href=\"#internationalization-in-python-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"standard-translation\">\n<h3>標準的な翻訳<a class=\"heading-anchor\" href=\"#standard-translation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>翻訳対象の文字列を関数 <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext\" title=\"django.utils.translation.ugettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code></a> で指定します。タイプ数を減らすため、ugettext() を <code class=\"docutils literal notranslate\"><span class=\"pre\">_</span></code> という別名で import するのが慣習的なやり方です。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Python の標準ライブラリ <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> モジュールは、グローバルの名前空間に <code class=\"docutils literal notranslate\"><span class=\"pre\">_()</span></code> とい う名前で <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext()</span></code> をインストールします。 Django ではこの方法に従っていませんが、それは以下の理由からです:</p>\n<ol class=\"arabic simple\">\n<li><p>国際文字セット (Unicode) のサポート下では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext()</span></code> よりも <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext\" title=\"django.utils.translation.ugettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code></a> の方が便利だからです。また、ファイルによっては <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext_lazy\" title=\"django.utils.translation.ugettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code></a> をデフォルトの翻訳用メソッドに使った方がよい場合もあります。グローバル名前空間に <code class=\"docutils literal notranslate\"><span class=\"pre\">_()</span></code> がなければ、開発者に場合に応じて適切な翻訳用メソッドを選ぶ自由を与えられます。</p></li>\n<li><p>アンダースコア文字 (<code class=\"docutils literal notranslate\"><span class=\"pre\">_</span></code>) は、 Python の対話シェルや doctest で書かれたテストの中では「直前の式の値」を表します。そのため、グローバル名前空間に <code class=\"docutils literal notranslate\"><span class=\"pre\">_()</span></code> をインストールすると、干渉して問題を引き起こします。 <code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">_()</span></code> という名前で明示的に import すれば、この問題を回避できます。</p></li>\n</ol>\n</aside>\n<aside class=\"admonition-what-functions-may-be-aliased-as admonition\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">_</span></code> として別名をつけられる関数は？</p>\n<p>(<a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a> で使われる) <code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span></code> が動作する方法のせいで、単一の文字列引数を持つ関数のみが <code class=\"docutils literal notranslate\"><span class=\"pre\">_</span></code> として import できます。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.gettext\" title=\"django.utils.translation.gettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext()</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.gettext_lazy\" title=\"django.utils.translation.gettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext_lazy()</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext\" title=\"django.utils.translation.ugettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext_lazy\" title=\"django.utils.translation.ugettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code></a></p></li>\n</ul>\n</aside>\n<p>この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Welcome</span> <span class=\"pre\">to</span> <span class=\"pre\">my</span> <span class=\"pre\">site.&quot;</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Welcome to my site.&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">)</span>\n</code></pre></div>\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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">ugettext</span><span class=\"p\">(</span><span class=\"s2\">&quot;Welcome to my site.&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>翻訳は、計算済みの値に適用されます。次の例は、上の2つの例とまったく同一です:</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\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;Welcome&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;my&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;site.&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39; &#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">)</span>\n</code></pre></div>\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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">sentence</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Welcome to my site.&#39;</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"n\">sentence</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(上の 2 つの例のように変数や計算済みの値を使う場合の注意点として、Django の翻訳文字列検出ユーティリティ <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">makemessages</span></code></a> はこれらの文字列を検出できません。詳しくは後の <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a> の節で説明します。)</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">_()</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code> に渡す文字列には、Pyton の標準の名前付き補完構文によるプレースホルダを使えます。例えば:</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\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"n\">d</span><span class=\"p\">):</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Today is </span><span class=\"si\">%(month)s</span><span class=\"s1\"> </span><span class=\"si\">%(day)s</span><span class=\"s1\">.&#39;</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"p\">{</span><span class=\"s1\">&#39;month&#39;</span><span class=\"p\">:</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"s1\">&#39;day&#39;</span><span class=\"p\">:</span> <span class=\"n\">d</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">output</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このテクニックを使うと、言語ごとの翻訳でプレースホルダを並び替えられるようになります。例えば、英語の翻訳文 <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Today</span> <span class=\"pre\">is</span> <span class=\"pre\">Nobember,</span> <span class=\"pre\">26.&quot;</span></code> に対して、スペイン語では <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Hoy</span> <span class=\"pre\">es</span> <span class=\"pre\">26</span> <span class=\"pre\">de</span> <span class=\"pre\">Noviembre.&quot;</span></code> となるように、月と日のプレースホルダの位置を入れ替えることができます。</p>\n<p>この理由から、引数が複数ある場合には、固定引数を使った補完 (<code class=\"docutils literal notranslate\"><span class=\"pre\">%s</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">%d</span></code>) ではなく、名前付きの補完 (<code class=\"docutils literal notranslate\"><span class=\"pre\">%(day)s</span></code>) を使ってください。固定引数による補完を使った場合、プレースホルダを正しい順番で翻訳できない場合があります。</p>\n</section>\n<section id=\"comments-for-translators\">\n<span id=\"translator-comments\"></span><h3>翻訳者へのコメント<a class=\"heading-anchor\" href=\"#comments-for-translators\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>翻訳可能な文字列についてのヒントを翻訳者に示したい場合、文字列の直前の行で <code class=\"docutils literal notranslate\"><span class=\"pre\">Translators</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\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Translators: This message appears on the home page only</span>\n    <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">ugettext</span><span class=\"p\">(</span><span class=\"s2\">&quot;Welcome to my site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>コメントは、後に記述された翻訳可能な文章に関連付けられた、結果の <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイル内に表示され、ほとんどの翻訳ツールで表示されます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>単に完全性のため、以下は結果の <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> の断片と一致します:</p>\n<div class=\"code-block\" data-language=\"po\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Po</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=\"Po code\"><code><span class=\"c1\">#. Translators: This message appears on the home page only</span>\n<span class=\"c1\"># path/to/python/file.py:123</span>\n<span class=\"nv\">msgid</span> <span class=\"s\">&quot;Welcome to my site.&quot;</span>\n<span class=\"nv\">msgstr</span> <span class=\"s\">&quot;&quot;</span>\n</code></pre></div>\n</aside>\n<p>これはテンプレート内でも動作します。詳しくは <a class=\"reference internal\" href=\"#translator-comments-in-templates\"><span class=\"std std-ref\">Comments for translators in templates</span></a> を参照してください。</p>\n</section>\n<section id=\"marking-strings-as-no-op\">\n<h3>no-op として文字列をマークする<a class=\"heading-anchor\" href=\"#marking-strings-as-no-op\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>翻訳しない文字列としてマークするためには、<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext_noop\" title=\"django.utils.translation.ugettext_noop\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.ugettext_noop()</span></code></a> を使ってください。文字列は、変数より後で翻訳されます。</p>\n<p>ソース言語内に保持すべき構成文字列がある場合、これを使ってください。これは、システムやユーザー (たとえばデータベース内の文字列) を介して交換される一方で、最後の時点 (たとえばユーザに文字列が表示されるとき) で翻訳される必要があるからです。</p>\n</section>\n<section id=\"pluralization\">\n<h3>複数形<a class=\"heading-anchor\" href=\"#pluralization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>複数形のメッセージを指定するには、関数 <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ungettext\" title=\"django.utils.translation.ungettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.ungettext()</span></code></a> を使ってください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ungettext</span></code> は 3 つの引数を取ります: 単数形の文字列、複数形の文字列、オブジェクトの数です。</p>\n<p>この関数は、Django アプリケーションを数と <a class=\"reference external\" href=\"https://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms\">複数形</a> の複雑さが英語で 2 より大きい (その値にかかわらず、単数には 'object'、そして <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> が 1 ではない全ての場合に 'objects' となります。) 言語にローカル化させる必要がある場合に役立ちます。</p>\n<p>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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ungettext</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">hello_world</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">count</span><span class=\"p\">):</span>\n    <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">ungettext</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;there is </span><span class=\"si\">%(count)d</span><span class=\"s1\"> object&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;there are </span><span class=\"si\">%(count)d</span><span class=\"s1\"> objects&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">count</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;count&#39;</span><span class=\"p\">:</span> <span class=\"n\">count</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">page</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>この例では、オブジェクトの数値は <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> 変数として翻訳言語に渡されます。</p>\n<p>複数形は、複雑で言語によって異なる動作をすることに注意してください。<code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> と 1 の比較は正しいルールではないことがあります。以下のコードは洗練されて見えますが、いくつかの言語に対しては誤った結果を生み出します:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ungettext</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Report</span>\n\n<span class=\"n\">count</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n<span class=\"k\">if</span> <span class=\"n\">count</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">verbose_name</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">verbose_name_plural</span>\n\n<span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">ungettext</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;There is </span><span class=\"si\">%(count)d</span><span class=\"s1\"> </span><span class=\"si\">%(name)s</span><span class=\"s1\"> available.&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;There are </span><span class=\"si\">%(count)d</span><span class=\"s1\"> </span><span class=\"si\">%(name)s</span><span class=\"s1\"> available.&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">count</span>\n<span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;count&#39;</span><span class=\"p\">:</span> <span class=\"n\">count</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"n\">name</span>\n<span class=\"p\">}</span>\n</code></pre></div>\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=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">ungettext</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;There is </span><span class=\"si\">%(count)d</span><span class=\"s1\"> </span><span class=\"si\">%(name)s</span><span class=\"s1\"> object available.&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;There are </span><span class=\"si\">%(count)d</span><span class=\"s1\"> </span><span class=\"si\">%(name)s</span><span class=\"s1\"> objects available.&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">count</span>\n<span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;count&#39;</span><span class=\"p\">:</span> <span class=\"n\">count</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">verbose_name</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" id=\"pluralization-var-notes\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ungettext()</span></code> を使うときは、リテラルで挿入される全ての変数に対して単一の名前を使うようにしてください。以下の例で、2 つの翻訳文字列でどのように <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> Python 変数が使われるかに注意してください。この例は、上述した通りいくつかの言語で間違っている以外に、失敗するでしょう:</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\">text</span> <span class=\"o\">=</span> <span class=\"n\">ungettext</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;There is </span><span class=\"si\">%(count)d</span><span class=\"s1\"> </span><span class=\"si\">%(name)s</span><span class=\"s1\"> available.&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;There are </span><span class=\"si\">%(count)d</span><span class=\"s1\"> </span><span class=\"si\">%(plural_name)s</span><span class=\"s1\"> available.&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">count</span>\n<span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;count&#39;</span><span class=\"p\">:</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(),</span>\n    <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">verbose_name</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;plural_name&#39;</span><span class=\"p\">:</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">verbose_name_plural</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-compilemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">compilemessages</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\">a</span> <span class=\"nb\">format</span> <span class=\"n\">specification</span> <span class=\"k\">for</span> <span class=\"n\">argument</span> <span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"k\">as</span> <span class=\"ow\">in</span> <span class=\"s1\">&#39;msgstr[0]&#39;</span><span class=\"p\">,</span> <span class=\"n\">doesn</span><span class=\"s1\">&#39;t exist in &#39;</span><span class=\"n\">msgid</span><span class=\"s1\">&#39;</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Plural form and po files</p>\n<p>Django does not support custom plural equations in po files. As all\ntranslation catalogs are merged, only the plural form for the main Django po\nfile (in <code class=\"docutils literal notranslate\"><span class=\"pre\">django/conf/locale/&lt;lang_code&gt;/LC_MESSAGES/django.po</span></code>) is\nconsidered. Plural forms in all other po files are ignored. Therefore, you\nshould not use different plural equations in your project or application po\nfiles.</p>\n</aside>\n</section>\n<section id=\"contextual-markers\">\n<span id=\"id1\"></span><h3>文脈マーカー<a class=\"heading-anchor\" href=\"#contextual-markers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>単語は複数の意味を持っている場合があります。例えば、英語の <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;May&quot;</span></code> は、月名と動詞を指します。翻訳者が異なる文脈でこれらの単語を正しく翻訳できるようにするには、<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.pgettext\" title=\"django.utils.translation.pgettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.pgettext()</span></code></a> 関数、もしくは文字列が複数形を必要とする場合は  <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.npgettext\" title=\"django.utils.translation.npgettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.npgettext()</span></code></a> 関数を使うことができます。両方とも、第 1 変数として文脈文字列を取ります。</p>\n<p>結果の <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイルで、文字列は同じ文字列に対する異なる文脈マーカーがあるのと同じ頻度で出現し (コンテキストは <code class=\"docutils literal notranslate\"><span class=\"pre\">msgctxt</span></code> 行に出現します)、これらそれぞれに対して翻訳者が異なる翻訳ができるようにします。</p>\n<p>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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">pgettext</span>\n\n<span class=\"n\">month</span> <span class=\"o\">=</span> <span class=\"n\">pgettext</span><span class=\"p\">(</span><span class=\"s2\">&quot;month name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;May&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">pgettext_lazy</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyThing</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">pgettext_lazy</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;help text for MyThing model&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;This is the help text&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>これは <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイル内に以下のように出現します:</p>\n<div class=\"code-block\" data-language=\"po\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Po</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=\"Po code\"><code><span class=\"nv\">msgctxt</span> <span class=\"s\">&quot;month name&quot;</span>\n<span class=\"nv\">msgid</span> <span class=\"s\">&quot;May&quot;</span>\n<span class=\"nv\">msgstr</span> <span class=\"s\">&quot;&quot;</span>\n</code></pre></div>\n<p>文脈マーカーは、<a class=\"reference internal\" href=\"#std-templatetag-trans\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">trans</span></code></a> and <a class=\"reference internal\" href=\"#std-templatetag-blocktrans\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">blocktrans</span></code></a> テンプレートタグによってもサポートされています。</p>\n</section>\n<section id=\"lazy-translation\">\n<span id=\"lazy-translations\"></span><h3>Lazy な翻訳<a class=\"heading-anchor\" href=\"#lazy-translation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Lazy に -- 値が呼ばれたときではなくアクセスされたときに -- 文字列を翻訳するためには、<a class=\"reference internal\" href=\"#module-django.utils.translation\" title=\"django.utils.translation\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.utils.translation</span></code></a> (名前の <code class=\"docutils literal notranslate\"><span class=\"pre\">lazy</span></code> 接尾辞ですぐ分かります) の翻訳関数の lazy バージョンを使ってください、</p>\n<p>これらの関数は、Lazy な文字列参照を保持します -- 実際の翻訳ではありません。翻訳自体はテンプレートレンダリング内のように、文字列が文字列コンテキスト内で使われるときに行われます。</p>\n<p>これらの関数への呼び出しがモジュールのロード時に実行されるコードパスにある場合は、これは不可欠です。</p>\n<p>これは、モデル、フォーム、モデルフォームを定義するときに簡単に発生することができるものです。これは、Django がフィールドを実際にクラスレベルの属性にするように実装するためです。 そのため、以下のような場合は lazy な翻訳を使用してください:</p>\n<section id=\"model-fields-and-relationships-verbose-name-and-help-text-option-values\">\n<h4>モデルフィールドとリレーションシップの <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose_name</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">help_text</span></code> オプションの値<a class=\"heading-anchor\" href=\"#model-fields-and-relationships-verbose-name-and-help-text-option-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>例えば、以下のモデルの <em>name</em> フィールドのヘルプテキストを翻訳するためには、以下のようにします:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyThing</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;This is the help text&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/1.11/ref/models/options/#django.db.models.Options.verbose_name\" title=\"django.db.models.Options.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">verbose_name</span></code></a> オプションを使えば、<a class=\"reference internal\" href=\"/ja/1.11/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>、<a class=\"reference internal\" href=\"/ja/1.11/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> や <a class=\"reference internal\" href=\"/ja/1.11/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyThing</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">kind</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">ThingKind</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;kinds&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;kind&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/1.11/ref/models/options/#django.db.models.Options.verbose_name\" title=\"django.db.models.Options.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">verbose_name</span></code></a> と同様に、必要に応じて Django が自動的にタイトルケースに直すので、リレーションシップに対する小文字の冗長な名前テキストを提供する必要があります。</p>\n</section>\n<section id=\"model-verbose-names-values\">\n<h4>モデルの冗長な名前の値<a class=\"heading-anchor\" href=\"#model-verbose-names-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>フォールバックの英語中心とモデルのクラス名を見ることによって Django が動作する冗長な名前の純粋な決定に頼るよりも、明示的な <a class=\"reference internal\" href=\"/ja/1.11/ref/models/options/#django.db.models.Options.verbose_name\" title=\"django.db.models.Options.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">verbose_name</span></code></a> と <a class=\"reference internal\" href=\"/ja/1.11/ref/models/options/#django.db.models.Options.verbose_name_plural\" title=\"django.db.models.Options.verbose_name_plural\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">verbose_name_plural</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyThing</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">),</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;This is the help text&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;my thing&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;my things&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"model-methods-short-description-attribute-values\">\n<h4>モデルメソッド <code class=\"docutils literal notranslate\"><span class=\"pre\">short_description</span></code> 属性値<a class=\"heading-anchor\" href=\"#model-methods-short-description-attribute-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>モデルメソッドに対しては、<code class=\"docutils literal notranslate\"><span class=\"pre\">short_description</span></code> 属性で Djangoと admin サイトへの翻訳を提供することができます:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyThing</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">kind</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">ThingKind</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;kinds&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;kind&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">is_mouse</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kind</span><span class=\"o\">.</span><span class=\"n\">type</span> <span class=\"o\">==</span> <span class=\"n\">MOUSE_TYPE</span>\n    <span class=\"n\">is_mouse</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Is it a mouse?&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"working-with-lazy-translation-objects\">\n<h3>Lazy 翻訳オブジェクトともに働く<a class=\"heading-anchor\" href=\"#working-with-lazy-translation-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code> 呼び出しの結果は、他の Django コード内で unicode 文字列 (<a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">str</span></code></a> オブジェクト) を使うときはいつでも使うことができますが、気まぐれな Python コードでうまく動作しないかもしれません。例えば、<a class=\"reference external\" href=\"https://pypi.python.org/pypi/requests/\">requests</a> ライブラリが <code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy</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=\"n\">body</span> <span class=\"o\">=</span> <span class=\"n\">ugettext_lazy</span><span class=\"p\">(</span><span class=\"s2\">&quot;I </span><span class=\"se\">\\u2764</span><span class=\"s2\"> Django&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># (unicode :heart:)</span>\n<span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s1\">&#39;https://example.com/send&#39;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;body&#39;</span><span class=\"p\">:</span> <span class=\"n\">body</span><span class=\"p\">})</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code> オブジェクトを非 Django コードに渡す前にテキスト文字列にキャストすることで、この問題を防ぐことができます:</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\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s1\">&#39;https://example.com/send&#39;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;body&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">body</span><span class=\"p\">)})</span>\n</code></pre></div>\n<p>Python 2 では <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">unicode</span></code> を使ってください。もしくは、<code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">six.text_type</span></code> が Python 2 と 3 をサポートします。</p>\n<p>If you try to use a <code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code> result where a bytestring (a\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#bytes\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">bytes</span></code></a> object) is expected, things won't work as expected since a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code> object doesn't know how to convert itself to a bytestring.\nYou can't use a unicode string inside a bytestring, either, so this is\nconsistent with normal Python behavior. For example, putting a unicode proxy\ninto a unicode string is fine:</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=\"s2\">&quot;Hello </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">ugettext_lazy</span><span class=\"p\">(</span><span class=\"s2\">&quot;people&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>But you can't insert a unicode object into a bytestring and nor can you insert\na unicode proxy there:</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=\"sa\">b</span><span class=\"s2\">&quot;Hello </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"n\">ugettext_lazy</span><span class=\"p\">(</span><span class=\"s2\">&quot;people&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>If you ever see output that looks like <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;hello</span>\n<span class=\"pre\">&lt;django.utils.functional...&gt;&quot;</span></code>, you have tried to insert the result of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code> into a bytestring. That's a bug in your code.</p>\n<p>If you don't like the long <code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy</span></code> name, you can just alias it as\n<code class=\"docutils literal notranslate\"><span class=\"pre\">_</span></code> (underscore), like so:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyThing</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;This is the help text&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Using <code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">ungettext_lazy()</span></code> to mark strings in models\nand utility functions is a common operation. When you're working with these\nobjects elsewhere in your code, you should ensure that you don't accidentally\nconvert them to strings, because they should be converted as late as possible\n(so that the correct locale is in effect). This necessitates the use of the\nhelper function described next.</p>\n<section id=\"lazy-translations-and-plural\">\n<span id=\"lazy-plural-translations\"></span><h4>Lazy translations and plural<a class=\"heading-anchor\" href=\"#lazy-translations-and-plural\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>When using lazy translation for a plural string (<code class=\"docutils literal notranslate\"><span class=\"pre\">[u]n[p]gettext_lazy</span></code>), you\ngenerally don't know the <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> argument at the time of the string\ndefinition. Therefore, you are authorized to pass a key name instead of an\ninteger as the <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> argument. Then <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> will be looked up in the\ndictionary under that key during string interpolation. Here's 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ungettext_lazy</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyForm</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\">error_message</span> <span class=\"o\">=</span> <span class=\"n\">ungettext_lazy</span><span class=\"p\">(</span><span class=\"s2\">&quot;You only provided </span><span class=\"si\">%(num)d</span><span class=\"s2\"> argument&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;You only provided </span><span class=\"si\">%(num)d</span><span class=\"s2\"> arguments&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;num&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"k\">if</span> <span class=\"n\">error</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ValidationError</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">error_message</span> <span class=\"o\">%</span> <span class=\"p\">{</span><span class=\"s1\">&#39;num&#39;</span><span class=\"p\">:</span> <span class=\"n\">number</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>If the string contains exactly one unnamed placeholder, you can interpolate\ndirectly with the <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> argument:</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\">MyForm</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\">error_message</span> <span class=\"o\">=</span> <span class=\"n\">ungettext_lazy</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;You provided </span><span class=\"si\">%d</span><span class=\"s2\"> argument&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;You provided </span><span class=\"si\">%d</span><span class=\"s2\"> arguments&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"k\">if</span> <span class=\"n\">error</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ValidationError</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">error_message</span> <span class=\"o\">%</span> <span class=\"n\">number</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"formatting-strings-format-lazy\">\n<h4>Formatting strings: <code class=\"docutils literal notranslate\"><span class=\"pre\">format_lazy()</span></code><a class=\"heading-anchor\" href=\"#formatting-strings-format-lazy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Python's <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a> method will not work when either the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">format_string</span></code> or any of the arguments to <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a>\ncontains lazy translation objects. Instead, you can use\n<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.text.format_lazy\" title=\"django.utils.text.format_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.text.format_lazy()</span></code></a>, which creates a lazy object\nthat runs the <code class=\"docutils literal notranslate\"><span class=\"pre\">str.format()</span></code> method only when the result is included\nin a string. 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.text</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">format_lazy</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span>\n<span class=\"o\">...</span>\n<span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">ugettext_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;John Lennon&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">instrument</span> <span class=\"o\">=</span> <span class=\"n\">ugettext_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;guitar&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">format_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">{name}</span><span class=\"s1\">: </span><span class=\"si\">{instrument}</span><span class=\"s1\">&#39;</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">instrument</span><span class=\"o\">=</span><span class=\"n\">instrument</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>In this case, the lazy translations in <code class=\"docutils literal notranslate\"><span class=\"pre\">result</span></code> will only be converted to\nstrings when <code class=\"docutils literal notranslate\"><span class=\"pre\">result</span></code> itself is used in a string (usually at template\nrendering time).</p>\n</section>\n<section id=\"other-uses-of-lazy-in-delayed-translations\">\n<h4>Other uses of lazy in delayed translations<a class=\"heading-anchor\" href=\"#other-uses-of-lazy-in-delayed-translations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>For any other case where you would like to delay the translation, but have to\npass the translatable string as argument to another function, you can wrap\nthis function inside a lazy call yourself. 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">six</span>  <span class=\"c1\"># Python 3 compatibility</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.functional</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">lazy</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.safestring</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mark_safe</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"n\">mark_safe_lazy</span> <span class=\"o\">=</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">mark_safe</span><span class=\"p\">,</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>And then later:</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\">lazy_string</span> <span class=\"o\">=</span> <span class=\"n\">mark_safe_lazy</span><span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;p&gt;My &lt;strong&gt;string!&lt;/strong&gt;&lt;/p&gt;&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"localized-names-of-languages\">\n<h3>言語のローカル化された名前<a class=\"heading-anchor\" href=\"#localized-names-of-languages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.utils.translation.get_language_info\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_language_info</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.translation.get_language_info\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_language_info()</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">activate</span><span class=\"p\">,</span> <span class=\"n\">get_language_info</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"s1\">&#39;fr&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">li</span> <span class=\"o\">=</span> <span class=\"n\">get_language_info</span><span class=\"p\">(</span><span class=\"s1\">&#39;de&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">li</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">],</span> <span class=\"n\">li</span><span class=\"p\">[</span><span class=\"s1\">&#39;name_local&#39;</span><span class=\"p\">],</span> <span class=\"n\">li</span><span class=\"p\">[</span><span class=\"s1\">&#39;name_translated&#39;</span><span class=\"p\">],</span> <span class=\"n\">li</span><span class=\"p\">[</span><span class=\"s1\">&#39;bidi&#39;</span><span class=\"p\">])</span>\n<span class=\"go\">German Deutsch Allemand False</span>\n</code></pre></div>\n<p>ディクショナリの <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">name_local</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">name_translated</span></code> 属性は、言語の英語名、言語自体、カレントのアクティブ言語をそれぞれ含んでいます。<code class=\"docutils literal notranslate\"><span class=\"pre\">bidi</span></code> 属性は双方向性の言語に対してのみ True です。</p>\n<p>言語情報のソースは <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.locale</span></code> モジュールです。テンプレートコードでも、この情報に対して同じようにアクセスすることができます。以下を参照してください。</p>\n</section>\n</section>\n<section id=\"internationalization-in-template-code\">\n<span id=\"specifying-translation-strings-in-template-code\"></span><h2>ローカル化: テンプレート内<a class=\"heading-anchor\" href=\"#internationalization-in-template-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ja/1.11/ref/templates/language/\"><span class=\"doc\">Django テンプレート</span></a> 内での翻訳は 2 つのテンプレートタグと Pthon コードとはやや異なるシンタックスを使います。テンプレートでこれらのタグを使えるようにするには、<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">load</span> <span class=\"pre\">i18n</span> <span class=\"pre\">%}</span></code> をテンプレートの先頭に対して設置してください。全てのテンプレートタグと同じように、すでに <code class=\"docutils literal notranslate\"><span class=\"pre\">i18n</span></code> をロードしているテンプレートを extend している場合であっても、翻訳を使用する全てのテンプレートでロードする必要があります。</p>\n<section id=\"trans-template-tag\">\n<span id=\"std-templatetag-trans\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">trans</span></code> テンプレートタグ<a class=\"heading-anchor\" href=\"#trans-template-tag\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">trans</span> <span class=\"pre\">%}</span></code> テンプレートタグは、(シングルクオートやダブルクオートで囲まれた) 定数文字列 や変数コンテンツを翻訳します:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;This is the title.&quot;</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"nv\">myvar</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">noop</span></code> オプションが存在する場合、変数はそのままですが翻訳の対象外となります。将来的に翻訳を必要とするコンテンツを &quot;もみ消している&quot; ときに役立ちます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;myvar&quot;</span> <span class=\"nv\">noop</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>内部的には、インラインの翻訳は <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext\" title=\"django.utils.translation.ugettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code></a> 呼び出しを使っています。</p>\n<p>テンプレート var (上記の <code class=\"docutils literal notranslate\"><span class=\"pre\">myvar</span></code>) がタグに渡された場合、最初にランタイムで変数から文字列へと解決し、それからメッセージカタログ内でその文字列をルックアップします。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">trans</span> <span class=\"pre\">%}</span></code> 内の文字列でテンプレート変数を混ぜることはできません。翻訳が変数 (プレースホルダ) とともに文字列を必要とする場合は、代わりに <a class=\"reference internal\" href=\"#std-templatetag-blocktrans\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">blocktrans</span> <span class=\"pre\">%}</span></code></a> を使ってください。</p>\n<p>翻訳された文字列を表示させずに取り出したい場合は、以下のシンタックスを使うことができます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;This is the title&quot;</span> <span class=\"k\">as</span> <span class=\"nv\">the_title</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">the_title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">meta</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;description&quot;</span> <span class=\"na\">content</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">the_title</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>実際には、テンプレート内の複数の箇所で使用できる文字列を取得するためか、他のテンプレートタグやフィルタに対する引数としてアウトプットを使うために、この方法を使うことになるでしょう:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;starting point&quot;</span> <span class=\"k\">as</span> <span class=\"nv\">start</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;end point&quot;</span> <span class=\"k\">as</span> <span class=\"nv\">end</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;La Grande Boucle&quot;</span> <span class=\"k\">as</span> <span class=\"nv\">race</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/&quot;</span> <span class=\"na\">title</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"cp\">%}</span><span class=\"s\">Back to &#39;</span><span class=\"cp\">{{</span> <span class=\"nv\">race</span> <span class=\"cp\">}}</span><span class=\"s\">&#39; homepage</span><span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">race</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">h1</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">stage</span> <span class=\"k\">in</span> <span class=\"nv\">tour_stages</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">cycle</span> <span class=\"nv\">start</span> <span class=\"nv\">end</span> <span class=\"cp\">%}</span>: <span class=\"cp\">{{</span> <span class=\"nv\">stage</span> <span class=\"cp\">}}{%</span> <span class=\"k\">if</span> <span class=\"nb\">forloop</span><span class=\"nv\">.counter</span><span class=\"o\">|</span><span class=\"nf\">divisibleby</span><span class=\"o\">:</span><span class=\"m\">2</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;</span><span class=\"nt\">br</span> <span class=\"p\">/&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>, <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">trans</span> <span class=\"pre\">%}</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code> キーワードを使う <a class=\"reference internal\" href=\"#contextual-markers\"><span class=\"std std-ref\">文脈マーカー</span></a> もサポートしています:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;May&quot;</span> <span class=\"nv\">context</span> <span class=\"s2\">&quot;month name&quot;</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n<section id=\"blocktrans-template-tag\">\n<span id=\"std-templatetag-blocktrans\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">blocktrans</span></code> テンプレートタグ<a class=\"heading-anchor\" href=\"#blocktrans-template-tag\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"#std-templatetag-trans\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">trans</span></code></a> タグとは対照的に、<code class=\"docutils literal notranslate\"><span class=\"pre\">blocktrans</span></code> タグで、プレースホルダを使用することで、翻訳に対するリテラルと変数のコンテンツから構成される複雑な文章をマークすることができます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"cp\">%}</span>This string will have <span class=\"cp\">{{</span> <span class=\"nv\">value</span> <span class=\"cp\">}}</span> inside.<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>テンプレート表現を翻訳するには -- 例えば、オブジェクトの属性にアクセスしたりテンプレートフィルタを使う -- 翻訳ブロック内で使うローカル変数に対する表現をくくる必要があります。例えば:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"k\">with</span> <span class=\"nv\">amount</span><span class=\"o\">=</span><span class=\"nv\">article.price</span> <span class=\"cp\">%}</span>\nThat will cost $ <span class=\"cp\">{{</span> <span class=\"nv\">amount</span> <span class=\"cp\">}}</span>.\n<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"k\">with</span> <span class=\"nv\">myvar</span><span class=\"o\">=</span><span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">filter</span> <span class=\"cp\">%}</span>\nThis will have <span class=\"cp\">{{</span> <span class=\"nv\">myvar</span> <span class=\"cp\">}}</span> inside.\n<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>単一の <code class=\"docutils literal notranslate\"><span class=\"pre\">blocktrans</span></code> タグ内で複数の表現を使うことができます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"k\">with</span> <span class=\"nv\">book_t</span><span class=\"o\">=</span><span class=\"nv\">book</span><span class=\"o\">|</span><span class=\"nf\">title</span> <span class=\"nv\">author_t</span><span class=\"o\">=</span><span class=\"nv\">author</span><span class=\"o\">|</span><span class=\"nf\">title</span> <span class=\"cp\">%}</span>\nThis is <span class=\"cp\">{{</span> <span class=\"nv\">book_t</span> <span class=\"cp\">}}</span> by <span class=\"cp\">{{</span> <span class=\"nv\">author_t</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>以前の冗長な書式もまだサポートされています: <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">blocktrans</span> <span class=\"pre\">with</span> <span class=\"pre\">book|title</span> <span class=\"pre\">as</span> <span class=\"pre\">book_t</span> <span class=\"pre\">and</span> <span class=\"pre\">author|title</span> <span class=\"pre\">as</span> <span class=\"pre\">author_t</span> <span class=\"pre\">%}</span></code></p>\n</aside>\n<p>他のブロックタグ (例えば <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">for</span> <span class=\"pre\">%}</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">if</span> <span class=\"pre\">%}</span></code>) は <code class=\"docutils literal notranslate\"><span class=\"pre\">blocktrans</span></code> タグ内に容れることはできません。</p>\n<p>If resolving one of the block arguments fails, blocktrans will fall back to\nthe default language by deactivating the currently active language\ntemporarily with the <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.deactivate_all\" title=\"django.utils.translation.deactivate_all\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">deactivate_all()</span></code></a>\nfunction.</p>\n<p>This tag also provides for pluralization. To use it:</p>\n<ul class=\"simple\">\n<li><p>Designate and bind a counter value with the name <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code>. This value will\nbe the one used to select the right plural form.</p></li>\n<li><p>Specify both the singular and plural forms separating them with the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">plural</span> <span class=\"pre\">%}</span></code> tag within the <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">blocktrans</span> <span class=\"pre\">%}</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">endblocktrans</span> <span class=\"pre\">%}</span></code> tags.</p></li>\n</ul>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"nv\">count</span> <span class=\"nv\">counter</span><span class=\"o\">=</span><span class=\"nv\">list</span><span class=\"o\">|</span><span class=\"nf\">length</span> <span class=\"cp\">%}</span>\nThere is only one <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span> object.\n<span class=\"cp\">{%</span> <span class=\"k\">plural</span> <span class=\"cp\">%}</span>\nThere are <span class=\"cp\">{{</span> <span class=\"nv\">counter</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}</span> objects.\n<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>A more complex example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"k\">with</span> <span class=\"nv\">amount</span><span class=\"o\">=</span><span class=\"nv\">article.price</span> <span class=\"nv\">count</span> <span class=\"nv\">years</span><span class=\"o\">=</span><span class=\"nv\">i.length</span> <span class=\"cp\">%}</span>\nThat will cost $ <span class=\"cp\">{{</span> <span class=\"nv\">amount</span> <span class=\"cp\">}}</span> per year.\n<span class=\"cp\">{%</span> <span class=\"k\">plural</span> <span class=\"cp\">%}</span>\nThat will cost $ <span class=\"cp\">{{</span> <span class=\"nv\">amount</span> <span class=\"cp\">}}</span> per <span class=\"cp\">{{</span> <span class=\"nv\">years</span> <span class=\"cp\">}}</span> years.\n<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>When you use both the pluralization feature and bind values to local variables\nin addition to the counter value, keep in mind that the <code class=\"docutils literal notranslate\"><span class=\"pre\">blocktrans</span></code>\nconstruct is internally converted to an <code class=\"docutils literal notranslate\"><span class=\"pre\">ungettext</span></code> call. This means the\nsame <a class=\"reference internal\" href=\"#pluralization-var-notes\"><span class=\"std std-ref\">notes regarding ungettext variables</span></a>\napply.</p>\n<p>Reverse URL lookups cannot be carried out within the <code class=\"docutils literal notranslate\"><span class=\"pre\">blocktrans</span></code> and should\nbe retrieved (and stored) beforehand:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;path.to.view&#39;</span> <span class=\"nv\">arg</span> <span class=\"nv\">arg2</span> <span class=\"k\">as</span> <span class=\"nv\">the_url</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"cp\">%}</span>\nThis is a URL: <span class=\"cp\">{{</span> <span class=\"nv\">the_url</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>翻訳された文字列を表示させずに取り出したい場合は、以下のシンタックスを使うことができます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"nv\">asvar</span> <span class=\"nv\">the_title</span> <span class=\"cp\">%}</span>The title is <span class=\"cp\">{{</span> <span class=\"nv\">title</span> <span class=\"cp\">}}</span>.<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">the_title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">meta</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;description&quot;</span> <span class=\"na\">content</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">the_title</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>In practice you'll use this to get a string you can use in multiple places in a\ntemplate or so you can use the output as an argument for other template tags or\nfilters.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">blocktrans</span> <span class=\"pre\">%}</span></code> also supports <a class=\"reference internal\" href=\"#contextual-markers\"><span class=\"std std-ref\">contextual\nmarkers</span></a> using the <code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code> keyword:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"k\">with</span> <span class=\"nv\">name</span><span class=\"o\">=</span><span class=\"nv\">user.username</span> <span class=\"nv\">context</span> <span class=\"s2\">&quot;greeting&quot;</span> <span class=\"cp\">%}</span>Hi <span class=\"cp\">{{</span> <span class=\"nv\">name</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Another feature <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">blocktrans</span> <span class=\"pre\">%}</span></code> supports is the <code class=\"docutils literal notranslate\"><span class=\"pre\">trimmed</span></code> option. This\noption will remove newline characters from the beginning and the end of the\ncontent of the <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">blocktrans</span> <span class=\"pre\">%}</span></code> tag, replace any whitespace at the beginning\nand end of a line and merge all lines into one using a space character to\nseparate them. This is quite useful for indenting the content of a <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span>\n<span class=\"pre\">blocktrans</span> <span class=\"pre\">%}</span></code> tag without having the indentation characters end up in the\ncorresponding entry in the PO file, which makes the translation process easier.</p>\n<p>For instance, the following <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">blocktrans</span> <span class=\"pre\">%}</span></code> tag:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"nv\">trimmed</span> <span class=\"cp\">%}</span>\n  First sentence.\n  Second paragraph.\n<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>will result in the entry <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;First</span> <span class=\"pre\">sentence.</span> <span class=\"pre\">Second</span> <span class=\"pre\">paragraph.&quot;</span></code> in the PO file,\ncompared to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;\\n</span>&#160; <span class=\"pre\">First</span> <span class=\"pre\">sentence.\\n</span>&#160; <span class=\"pre\">Second</span> <span class=\"pre\">sentence.\\n&quot;</span></code>, if the <code class=\"docutils literal notranslate\"><span class=\"pre\">trimmed</span></code>\noption had not been specified.</p>\n</section>\n<section id=\"string-literals-passed-to-tags-and-filters\">\n<h3>String literals passed to tags and filters<a class=\"heading-anchor\" href=\"#string-literals-passed-to-tags-and-filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>You can translate string literals passed as arguments to tags and filters\nby using the familiar <code class=\"docutils literal notranslate\"><span class=\"pre\">_()</span></code> syntax:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">some_tag</span> <span class=\"kp\">_</span><span class=\"o\">(</span><span class=\"s2\">&quot;Page not found&quot;</span><span class=\"o\">)</span> <span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">yesno</span><span class=\"o\">:</span><span class=\"kp\">_</span><span class=\"o\">(</span><span class=\"s2\">&quot;yes,no&quot;</span><span class=\"o\">)</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>In this case, both the tag and the filter will see the translated string,\nso they don't need to be aware of translations.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>In this example, the translation infrastructure will be passed the string\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;yes,no&quot;</span></code>, not the individual strings <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;yes&quot;</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;no&quot;</span></code>. The\ntranslated string will need to contain the comma so that the filter\nparsing code knows how to split up the arguments. For example, a German\ntranslator might translate the string <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;yes,no&quot;</span></code> as <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;ja,nein&quot;</span></code>\n(keeping the comma intact).</p>\n</aside>\n</section>\n<section id=\"comments-for-translators-in-templates\">\n<span id=\"translator-comments-in-templates\"></span><h3>Comments for translators in templates<a class=\"heading-anchor\" href=\"#comments-for-translators-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Just like with <a class=\"reference internal\" href=\"#translator-comments\"><span class=\"std std-ref\">Python code</span></a>, these notes for\ntranslators can be specified using comments, either with the <a class=\"reference internal\" href=\"/ja/1.11/ref/templates/builtins/#std-templatetag-comment\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">comment</span></code></a>\ntag:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">comment</span> <span class=\"cp\">%}</span><span class=\"c\">Translators: View verb</span><span class=\"cp\">{%</span> <span class=\"k\">endcomment</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;View&quot;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">comment</span> <span class=\"cp\">%}</span><span class=\"c\">Translators: Short intro blurb</span><span class=\"cp\">{%</span> <span class=\"k\">endcomment</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"cp\">%}</span>A multiline translatable\nliteral.<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>or with the <code class=\"docutils literal notranslate\"><span class=\"pre\">{#</span></code> ... <code class=\"docutils literal notranslate\"><span class=\"pre\">#}</span></code> <a class=\"reference internal\" href=\"/ja/1.11/ref/templates/language/#template-comments\"><span class=\"std std-ref\">one-line comment constructs</span></a>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"c\">{# Translators: Label of a button that triggers search #}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">button</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;Go&quot;</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">button</span><span class=\"p\">&gt;</span>\n\n<span class=\"c\">{# Translators: This is a text of the base template #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">blocktrans</span> <span class=\"cp\">%}</span>Ambiguous translatable block of text<span class=\"cp\">{%</span> <span class=\"k\">endblocktrans</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Just for completeness, these are the corresponding fragments of the\nresulting <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> file:</p>\n<div class=\"code-block\" data-language=\"po\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Po</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=\"Po code\"><code><span class=\"c1\">#. Translators: View verb</span>\n<span class=\"c1\"># path/to/template/file.html:10</span>\n<span class=\"nv\">msgid</span> <span class=\"s\">&quot;View&quot;</span>\n<span class=\"nv\">msgstr</span> <span class=\"s\">&quot;&quot;</span>\n\n<span class=\"c1\">#. Translators: Short intro blurb</span>\n<span class=\"c1\"># path/to/template/file.html:13</span>\n<span class=\"nv\">msgid</span> <span class=\"s\">&quot;&quot;</span>\n<span class=\"s\">&quot;A multiline translatable&quot;</span>\n<span class=\"s\">&quot;literal.&quot;</span>\n<span class=\"nv\">msgstr</span> <span class=\"s\">&quot;&quot;</span>\n\n<span class=\"c1\"># ...</span>\n\n<span class=\"c1\">#. Translators: Label of a button that triggers search</span>\n<span class=\"c1\"># path/to/template/file.html:100</span>\n<span class=\"nv\">msgid</span> <span class=\"s\">&quot;Go&quot;</span>\n<span class=\"nv\">msgstr</span> <span class=\"s\">&quot;&quot;</span>\n\n<span class=\"c1\">#. Translators: This is a text of the base template</span>\n<span class=\"c1\"># path/to/template/file.html:103</span>\n<span class=\"nv\">msgid</span> <span class=\"s\">&quot;Ambiguous translatable block of text&quot;</span>\n<span class=\"nv\">msgstr</span> <span class=\"s\">&quot;&quot;</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"switching-language-in-templates\">\n<span id=\"std-templatetag-language\"></span><h3>Switching language in templates<a class=\"heading-anchor\" href=\"#switching-language-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you want to select a language within a template, you can use the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">language</span></code> template tag:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">i18n</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">get_current_language</span> <span class=\"k\">as</span> <span class=\"nv\">LANGUAGE_CODE</span> <span class=\"cp\">%}</span>\n<span class=\"cm\">&lt;!-- Current language: </span><span class=\"cp\">{{</span> <span class=\"nv\">LANGUAGE_CODE</span> <span class=\"cp\">}}</span><span class=\"cm\"> --&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;Welcome to our page&quot;</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">language</span> <span class=\"s1\">&#39;en&#39;</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">get_current_language</span> <span class=\"k\">as</span> <span class=\"nv\">LANGUAGE_CODE</span> <span class=\"cp\">%}</span>\n    <span class=\"cm\">&lt;!-- Current language: </span><span class=\"cp\">{{</span> <span class=\"nv\">LANGUAGE_CODE</span> <span class=\"cp\">}}</span><span class=\"cm\"> --&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;Welcome to our page&quot;</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endlanguage</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>While the first occurrence of &quot;Welcome to our page&quot; uses the current language,\nthe second will always be in English.</p>\n</section>\n<section id=\"other-tags\">\n<span id=\"template-translation-vars\"></span><h3>Other tags<a class=\"heading-anchor\" href=\"#other-tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>These tags also require a <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">load</span> <span class=\"pre\">i18n</span> <span class=\"pre\">%}</span></code>.</p>\n<section id=\"get-available-languages\">\n<span id=\"std-templatetag-get_available_languages\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_available_languages</span></code><a class=\"heading-anchor\" href=\"#get-available-languages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">get_available_languages</span> <span class=\"pre\">as</span> <span class=\"pre\">LANGUAGES</span> <span class=\"pre\">%}</span></code> returns a list of tuples in\nwhich the first element is the <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-language-code\"><span class=\"xref std std-term\">language code</span></a> and the second is the\nlanguage name (translated into the currently active locale).</p>\n</section>\n<section id=\"get-current-language\">\n<span id=\"std-templatetag-get_current_language\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_current_language</span></code><a class=\"heading-anchor\" href=\"#get-current-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">get_current_language</span> <span class=\"pre\">as</span> <span class=\"pre\">LANGUAGE_CODE</span> <span class=\"pre\">%}</span></code> returns the current user's\npreferred language as a string. Example: <code class=\"docutils literal notranslate\"><span class=\"pre\">en-us</span></code>. See\n<a class=\"reference internal\" href=\"#how-django-discovers-language-preference\"><span class=\"std std-ref\">How Django discovers language preference</span></a>.</p>\n</section>\n<section id=\"get-current-language-bidi\">\n<span id=\"std-templatetag-get_current_language_bidi\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_current_language_bidi</span></code><a class=\"heading-anchor\" href=\"#get-current-language-bidi\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">get_current_language_bidi</span> <span class=\"pre\">as</span> <span class=\"pre\">LANGUAGE_BIDI</span> <span class=\"pre\">%}</span></code> returns the current\nlocale's direction. If <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, it's a right-to-left language, e.g. Hebrew,\nArabic. If <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> it's a left-to-right language, e.g. English, French,\nGerman, etc.</p>\n<p>If you enable the <code class=\"docutils literal notranslate\"><span class=\"pre\">django.template.context_processors.i18n</span></code> context processor\nthen each <code class=\"docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code> will have access to <code class=\"docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">LANGUAGE_BIDI</span></code> as defined above.</p>\n</section>\n<section id=\"get-language-info\">\n<span id=\"std-templatetag-get_language_info\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_language_info</span></code><a class=\"heading-anchor\" href=\"#get-language-info\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>You can also retrieve information about any of the available languages using\nprovided template tags and filters. To get information about a single language,\nuse the <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">get_language_info</span> <span class=\"pre\">%}</span></code> tag:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">get_language_info</span> <span class=\"nv\">for</span> <span class=\"nv\">LANGUAGE_CODE</span> <span class=\"k\">as</span> <span class=\"nv\">lang</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">get_language_info</span> <span class=\"nv\">for</span> <span class=\"s2\">&quot;pl&quot;</span> <span class=\"k\">as</span> <span class=\"nv\">lang</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>You can then access the information:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code>Language code: <span class=\"cp\">{{</span> <span class=\"nv\">lang.code</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;</span><span class=\"nt\">br</span> <span class=\"p\">/&gt;</span>\nName of language: <span class=\"cp\">{{</span> <span class=\"nv\">lang.name_local</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;</span><span class=\"nt\">br</span> <span class=\"p\">/&gt;</span>\nName in English: <span class=\"cp\">{{</span> <span class=\"nv\">lang.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;</span><span class=\"nt\">br</span> <span class=\"p\">/&gt;</span>\nBi-directional: <span class=\"cp\">{{</span> <span class=\"nv\">lang.bidi</span> <span class=\"cp\">}}</span>\nName in the active language: <span class=\"cp\">{{</span> <span class=\"nv\">lang.name_translated</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n</section>\n<section id=\"get-language-info-list\">\n<span id=\"std-templatetag-get_language_info_list\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_language_info_list</span></code><a class=\"heading-anchor\" href=\"#get-language-info-list\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>You can also use the <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">get_language_info_list</span> <span class=\"pre\">%}</span></code> template tag to retrieve\ninformation for a list of languages (e.g. active languages as specified in\n<a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a>). See <a class=\"reference internal\" href=\"#set-language-redirect-view\"><span class=\"std std-ref\">the section about the set_language redirect\nview</span></a> for an example of how to display a language\nselector using <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">get_language_info_list</span> <span class=\"pre\">%}</span></code>.</p>\n<p>In addition to <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> style list of tuples,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">get_language_info_list</span> <span class=\"pre\">%}</span></code> supports simple lists of language codes.\nIf you do this in your view:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;available_languages&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;en&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;es&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fr&#39;</span><span class=\"p\">]}</span>\n<span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;mytemplate.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>you can iterate over those languages in the template:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">get_language_info_list</span> <span class=\"nv\">for</span> <span class=\"nv\">available_languages</span> <span class=\"k\">as</span> <span class=\"nv\">langs</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">lang</span> <span class=\"k\">in</span> <span class=\"nv\">langs</span> <span class=\"cp\">%}</span> ... <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n<section id=\"template-filters\">\n<span id=\"std-templatefilter-language_name_translated\"></span><span id=\"std-templatefilter-language_bidi\"></span><span id=\"std-templatefilter-language_name_local\"></span><span id=\"std-templatefilter-language_name\"></span><h4>テンプレートフィルタ<a class=\"heading-anchor\" href=\"#template-filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>There are also simple filters available for convenience:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">LANGUAGE_CODE|language_name</span> <span class=\"pre\">}}</span></code> (&quot;German&quot;)</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">LANGUAGE_CODE|language_name_local</span> <span class=\"pre\">}}</span></code> (&quot;Deutsch&quot;)</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">LANGUAGE_CODE|language_bidi</span> <span class=\"pre\">}}</span></code> (False)</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">LANGUAGE_CODE|language_name_translated</span> <span class=\"pre\">}}</span></code> (&quot;německy&quot;, when active language is Czech)</p></li>\n</ul>\n</section>\n</section>\n</section>\n<section id=\"internationalization-in-javascript-code\">\n<h2>国際化: JavaScript コード内<a class=\"heading-anchor\" href=\"#internationalization-in-javascript-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>JavaScript に対する翻訳には、いくつか問題があります:</p>\n<ul class=\"simple\">\n<li><p>JavaScript コードは <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> 実行にアクセスできません。</p></li>\n<li><p>JavaScript コードは <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">.mo</span></code> ファイルにアクセスできません; サーバーによって配布される必要があります。</p></li>\n<li><p>JavaScript に対する翻訳カタログはできる限り小さくなければなりません。</p></li>\n</ul>\n<p>Django には、これらの問題を統合する解決策が用意してあります: 翻訳を JavaScript に渡すので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> などを JavaScript 内から呼び出すことができます。</p>\n<p>主な解決策は以下の <code class=\"docutils literal notranslate\"><span class=\"pre\">JavaScriptCatalog</span></code> ビューです。これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> を模倣する関数と翻訳文字列の配列で JavaScript コードライブラリを生成します。</p>\n<section id=\"module-django.views.i18n\">\n<span id=\"the-javascriptcatalog-view\"></span><span id=\"javascript-catalog-view\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">JavaScriptCatalog</span></code> ビュー<a class=\"heading-anchor\" href=\"#module-django.views.i18n\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"1.10\">\n<p class=\"version-note-title\">New in Django 1.10</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.views.i18n.JavaScriptCatalog\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">JavaScriptCatalog</span></span><a class=\"heading-anchor\" href=\"#django.views.i18n.JavaScriptCatalog\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A view that produces a JavaScript code library with functions that mimic\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> interface, plus an array of translation strings.</p>\n<p><strong>属性</strong></p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.views.i18n.JavaScriptCatalog.domain\">\n<span class=\"sig-name descname\"><span class=\"pre\">domain</span></span><a class=\"heading-anchor\" href=\"#django.views.i18n.JavaScriptCatalog.domain\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ビューの出力に追加する文字列を含む翻訳ドメインです。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">'djangojs'</span></code> です。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.views.i18n.JavaScriptCatalog.packages\">\n<span class=\"sig-name descname\"><span class=\"pre\">packages</span></span><a class=\"heading-anchor\" href=\"#django.views.i18n.JavaScriptCatalog.packages\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インストールされたアプリケーション間の <a class=\"reference internal\" href=\"/ja/1.11/ref/applications/#django.apps.AppConfig.name\" title=\"django.apps.AppConfig.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">application</span> <span class=\"pre\">names</span></code></a> のリストです。これらのアプリケーションは <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> ディレクトリを含んでいる必要があります。これらのカタログに加えて  (常に含まれている) <code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS`内で見つかった全てのカタログは、1</span> <span class=\"pre\">つのカタログに統合されます。デフォルトは</span> <span class=\"pre\">``None`</span></code> で、全ての <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> からの利用可能な翻訳は JavaScript の出力に渡されることを意味します。</p>\n</dd></dl>\n\n<p><strong>デフォルト値を使った例</strong>:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">JavaScriptCatalog</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">JavaScriptCatalog</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;javascript-catalog&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p><strong>独自のパッケージを使った例</strong>:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/myapp/$&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">JavaScriptCatalog</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(</span><span class=\"n\">packages</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;your.app.label&#39;</span><span class=\"p\">]),</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;javascript-catalog&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>ルートの URLconf が <a class=\"reference internal\" href=\"#django.conf.urls.i18n.i18n_patterns\" title=\"django.conf.urls.i18n.i18n_patterns\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">i18n_patterns()</span></code></a>、<code class=\"docutils literal notranslate\"><span class=\"pre\">JavaScriptCatalog</span></code> を使っている場合、カタログが正しく生成されるように <code class=\"docutils literal notranslate\"><span class=\"pre\">i18n_patterns()</span></code> によるラップも必要となります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">i18n_patterns()</span></code> <strong>を使った例</strong>:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">i18n_patterns</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"n\">i18n_patterns</span><span class=\"p\">(</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">JavaScriptCatalog</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;javascript-catalog&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<p>翻訳の優先事項は、<code class=\"docutils literal notranslate\"><span class=\"pre\">packages</span></code> 引数内で現れるパッケージに最初に現れるものより高い優先順位を付けることです。これは、同じ利他ラルに対して翻訳がクラッシュする場合に備えて重要です。</p>\n<p>サイト上で複数の <code class=\"docutils literal notranslate\"><span class=\"pre\">JavaScriptCatalog</span></code> ビューを使っていてそのうちのいくつかが同じ文字列を定義している場合、最後にロードされたカタログ内の文字列が優先されます。</p>\n</section>\n<section id=\"the-javascript-catalog-view\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">javascript_catalog</span></code> ビュー<a class=\"heading-anchor\" href=\"#the-javascript-catalog-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.i18n.javascript_catalog\">\n<span class=\"sig-name descname\"><span class=\"pre\">javascript_catalog</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">domain</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'djangojs'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">packages</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.i18n.javascript_catalog\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-deprecated\" data-version=\"1.10\">\n<p class=\"version-note-title\">Deprecated since Django 1.10</p><p><span class=\"versionmodified deprecated\">バージョン 1.10 で非推奨: </span><code class=\"docutils literal notranslate\"><span class=\"pre\">javascript_catalog()</span></code> は、<a class=\"reference internal\" href=\"#django.views.i18n.JavaScriptCatalog\" title=\"django.views.i18n.JavaScriptCatalog\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JavaScriptCatalog</span></code></a> が支持されたため Django 2.0 で削除されます。</p>\n</aside>\n<p>The main solution to these problems is the\n<a class=\"reference internal\" href=\"#django.views.i18n.javascript_catalog\" title=\"django.views.i18n.javascript_catalog\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">django.views.i18n.javascript_catalog()</span></code></a> view, which sends out a JavaScript\ncode library with functions that mimic the <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> interface, plus an array\nof translation strings. Those translation strings are taken from applications or\nDjango core, according to what you specify in either the <code class=\"docutils literal notranslate\"><span class=\"pre\">info_dict</span></code> or the\nURL. Paths listed in <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> are also included.</p>\n<p>You hook it up like this:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">javascript_catalog</span>\n\n<span class=\"n\">js_info_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;packages&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;your.app.package&#39;</span><span class=\"p\">,),</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">javascript_catalog</span><span class=\"p\">,</span> <span class=\"n\">js_info_dict</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;javascript-catalog&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Each string in <code class=\"docutils literal notranslate\"><span class=\"pre\">packages</span></code> should be in Python dotted-package syntax (the\nsame format as the strings in <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>) and should refer to a\npackage that contains a <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> directory. If you specify multiple packages,\nall those catalogs are merged into one catalog. This is useful if you have\nJavaScript that uses strings from different applications.</p>\n<p>The precedence of translations is such that the packages appearing later in the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">packages</span></code> argument have higher precedence than the ones appearing at the\nbeginning, this is important in the case of clashing translations for the same\nliteral.</p>\n<p>By default, the view uses the <code class=\"docutils literal notranslate\"><span class=\"pre\">djangojs</span></code> gettext domain. This can be\nchanged by altering the <code class=\"docutils literal notranslate\"><span class=\"pre\">domain</span></code> argument.</p>\n<p>You can make the view dynamic by putting the packages into the URL pattern:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/(?P&lt;packages&gt;\\S+?)/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">javascript_catalog</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;javascript-catalog&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>With this, you specify the packages as a list of package names delimited by '+'\nsigns in the URL. This is especially useful if your pages use code from\ndifferent apps and this changes often and you don't want to pull in one big\ncatalog file. As a security measure, these values can only be either\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf</span></code> or any package from the <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setting.</p>\n<p>You can also split the catalogs in multiple URLs and load them as you need in\nyour sites:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">js_info_dict_app</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;packages&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;your.app.package&#39;</span><span class=\"p\">,),</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">js_info_dict_other_app</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;packages&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;your.other.app.package&#39;</span><span class=\"p\">,),</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/app/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">javascript_catalog</span><span class=\"p\">,</span> <span class=\"n\">js_info_dict_app</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/other_app/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">javascript_catalog</span><span class=\"p\">,</span> <span class=\"n\">js_info_dict_other_app</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>If you use more than one <code class=\"docutils literal notranslate\"><span class=\"pre\">javascript_catalog</span></code> on a site and some of them\ndefine the same strings, the strings in the catalog that was loaded last take\nprecedence.</p>\n<p>The JavaScript translations found in the paths listed in the\n<a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> setting are also always included. To keep consistency\nwith the translations lookup order algorithm used for Python and templates, the\ndirectories listed in <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> have the highest precedence with\nthe ones appearing first having higher precedence than the ones appearing\nlater.</p>\n</section>\n<section id=\"using-the-javascript-translation-catalog\">\n<h3>JavaScript 翻訳カタログを使う<a class=\"heading-anchor\" href=\"#using-the-javascript-translation-catalog\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>カタログを使うには、以下のように動的に生成されたスクリプトを参照してください:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">script</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text/javascript&quot;</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;javascript-catalog&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">script</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>これは、reverse URL を使用して、JavaScript カタログビューの URL をルックアップします。カタログがロードされると、JavaScript コードは以下のメソッドを使えるようになります:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ngettext</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">interpolate</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_format</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">gettext_noop</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pgettext</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">npgettext</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pluralidx</span></code></p></li>\n</ul>\n<section id=\"gettext\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code><a class=\"heading-anchor\" href=\"#gettext\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> 関数は、Python コード内の標準の <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> インターフェースと同じように動作します:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">gettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;this is to be translated&#39;</span><span class=\"p\">));</span>\n</code></pre></div>\n</section>\n<section id=\"ngettext\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">ngettext</span></code><a class=\"heading-anchor\" href=\"#ngettext\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ngettext</span></code> 関数は単語やフレーズを複数形にするインターフェースを提供します:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"kd\">var</span><span class=\"w\"> </span><span class=\"nx\">object_count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">1</span><span class=\"w\"> </span><span class=\"c1\">// or 0, or 2, or 3, ...</span>\n<span class=\"nx\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">ngettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;literal for the singular case&#39;</span><span class=\"p\">,</span>\n<span class=\"w\">        </span><span class=\"s1\">&#39;literal for the plural case&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"nx\">object_count</span><span class=\"p\">);</span>\n</code></pre></div>\n</section>\n<section id=\"interpolate\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">interpolate</span></code><a class=\"heading-anchor\" href=\"#interpolate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">interpolate</span></code> 関数は表示形式の文字列の動的な記入をサポートします。補完シンタックスは  Python を模しているので、<code class=\"docutils literal notranslate\"><span class=\"pre\">interpolate</span></code> 関数は位置および名前付きの補完の両方をサポートします。</p>\n<ul>\n<li><p>位置による補完: <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> は、表示されるのと同じ順番で要素の値が一致する <code class=\"docutils literal notranslate\"><span class=\"pre\">fmt</span></code> プレースホルダ内で連続的に補完される JavaScript Array オブジェクトを含んでいます。例えば:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nx\">fmts</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">ngettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;There is %s object. Remaining: %s&#39;</span><span class=\"p\">,</span>\n<span class=\"w\">        </span><span class=\"s1\">&#39;There are %s objects. Remaining: %s&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">11</span><span class=\"p\">);</span>\n<span class=\"nx\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">interpolate</span><span class=\"p\">(</span><span class=\"nx\">fmts</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"mf\">11</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">20</span><span class=\"p\">]);</span>\n<span class=\"c1\">// s is &#39;There are 11 objects. Remaining: 20&#39;</span>\n</code></pre></div>\n</li>\n<li><p>名前付きの補完: このモードは <code class=\"docutils literal notranslate\"><span class=\"pre\">named</span></code> パラメータを <code class=\"docutils literal notranslate\"><span class=\"pre\">true</span></code> として渡すことで選択されます。<code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> は JavaScript オブジェクトや結合配列を含みます。例えば:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nx\">d</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"nx\">count</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"mf\">10</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"nx\">total</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"mf\">50</span>\n<span class=\"p\">};</span>\n\n<span class=\"nx\">fmts</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">ngettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;Total: %(total)s, there is %(count)s object&#39;</span><span class=\"p\">,</span>\n<span class=\"s1\">&#39;there are %(count)s of a total of %(total)s objects&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"nx\">d</span><span class=\"p\">.</span><span class=\"nx\">count</span><span class=\"p\">);</span>\n<span class=\"nx\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"nx\">interpolate</span><span class=\"p\">(</span><span class=\"nx\">fmts</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"nx\">d</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kc\">true</span><span class=\"p\">);</span>\n</code></pre></div>\n</li>\n</ul>\n<p>文字列補完でトップに行ってはいけませんが: とは言えこれは JavaScript なので、コードは繰り返しの正規表現の代替を作る必要があります。これは、Python 内での補完ほど高速ではないので、本当に必要な場合のみ使用するようにしてください (例えば、適切な複数形を生成するための <code class=\"docutils literal notranslate\"><span class=\"pre\">ngettext</span></code> との結合内)。</p>\n</section>\n<section id=\"get-format\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_format</span></code><a class=\"heading-anchor\" href=\"#get-format\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_format</span></code> 関数は設定済みの i18n 表示形式設定にアクセスでき、与えられた設定名に対して表示形式文字列を取り出します:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">get_format</span><span class=\"p\">(</span><span class=\"s1\">&#39;DATE_FORMAT&#39;</span><span class=\"p\">));</span>\n<span class=\"c1\">// &#39;N j, Y&#39;</span>\n</code></pre></div>\n<p>以下の設定に対してアクセスします:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-DATE_FORMAT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATE_FORMAT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-DATE_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATE_INPUT_FORMATS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-DATETIME_FORMAT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATETIME_FORMAT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-DATETIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATETIME_INPUT_FORMATS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-DECIMAL_SEPARATOR\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DECIMAL_SEPARATOR</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-FIRST_DAY_OF_WEEK\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FIRST_DAY_OF_WEEK</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-MONTH_DAY_FORMAT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MONTH_DAY_FORMAT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-NUMBER_GROUPING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">NUMBER_GROUPING</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-SHORT_DATE_FORMAT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SHORT_DATE_FORMAT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-SHORT_DATETIME_FORMAT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SHORT_DATETIME_FORMAT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-THOUSAND_SEPARATOR\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">THOUSAND_SEPARATOR</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-TIME_FORMAT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_FORMAT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-TIME_INPUT_FORMATS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_INPUT_FORMATS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-YEAR_MONTH_FORMAT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">YEAR_MONTH_FORMAT</span></code></a></p></li>\n</ul>\n<p>これは、Python によってレンダリングされる値と一貫性を持った表示形式を保守するために役立ちます。</p>\n</section>\n<section id=\"gettext-noop\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">gettext_noop</span></code><a class=\"heading-anchor\" href=\"#gettext-noop\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>これは <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> 関数をエミュレートしますが、何もせず、渡されたものをそのまま返します:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">gettext_noop</span><span class=\"p\">(</span><span class=\"s1\">&#39;this will not be translated&#39;</span><span class=\"p\">));</span>\n</code></pre></div>\n<p>これは、将来的に翻訳が必要なコードの部分をもみ消しておくのに役立ちます。</p>\n</section>\n<section id=\"pgettext\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">pgettext</span></code><a class=\"heading-anchor\" href=\"#pgettext\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pgettext</span></code> 関数は Python の変数 (<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.pgettext\" title=\"django.utils.translation.pgettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">pgettext()</span></code></a>) のように動作し、文脈的に翻訳される単語を提供します:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">pgettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;month name&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;May&#39;</span><span class=\"p\">));</span>\n</code></pre></div>\n</section>\n<section id=\"npgettext\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">npgettext</span></code><a class=\"heading-anchor\" href=\"#npgettext\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">npgettext</span></code> 関数も Python 変数 (<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.npgettext\" title=\"django.utils.translation.npgettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">npgettext()</span></code></a>) のように動作し、<strong>複数形の</strong> 文脈的に翻訳される単語を提供します:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">npgettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;group&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;party&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">1</span><span class=\"p\">));</span>\n<span class=\"c1\">// party</span>\n<span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">npgettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;group&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s1\">&#39;party&#39;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"mf\">2</span><span class=\"p\">));</span>\n<span class=\"c1\">// parties</span>\n</code></pre></div>\n</section>\n<section id=\"pluralidx\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">pluralidx</span></code><a class=\"heading-anchor\" href=\"#pluralidx\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pluralidx</span></code> 関数は <a class=\"reference internal\" href=\"/ja/1.11/ref/templates/builtins/#std-templatefilter-pluralize\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">pluralize</span></code></a> テンプレートフィルタと同じように動作し、与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> が単語の複数形を使うべきかどうかを決めます:</p>\n<div class=\"code-block\" data-language=\"javascript\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">JavaScript</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=\"JavaScript code\"><code><span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">pluralidx</span><span class=\"p\">(</span><span class=\"mf\">0</span><span class=\"p\">));</span>\n<span class=\"c1\">// true</span>\n<span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">pluralidx</span><span class=\"p\">(</span><span class=\"mf\">1</span><span class=\"p\">));</span>\n<span class=\"c1\">// false</span>\n<span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nx\">write</span><span class=\"p\">(</span><span class=\"nx\">pluralidx</span><span class=\"p\">(</span><span class=\"mf\">2</span><span class=\"p\">));</span>\n<span class=\"c1\">// true</span>\n</code></pre></div>\n<p>最も単純なケースでは、独自の複数形が必要ない場合、これは整数 <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">false</span></code> を返し、他の数に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">true</span></code> を返します。</p>\n<p>ただし、複数形は全ての言語でこのようにシンプルではありません。言語が複数形をサポートしていない場合、空の値が渡されます。</p>\n<p>加えて、複数形に関して複雑なルールが存在する場合、カタログビューは条件付きの表現をレンダリングします。これは、値を <code class=\"docutils literal notranslate\"><span class=\"pre\">true</span></code> (複数形) と <code class=\"docutils literal notranslate\"><span class=\"pre\">false</span></code> (複数形 <strong>ではない</strong> ) のどちらにするかを評価します。</p>\n</section>\n</section>\n<section id=\"the-jsoncatalog-view\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">JSONCatalog</span></code> ビュー<a class=\"heading-anchor\" href=\"#the-jsoncatalog-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"1.10\">\n<p class=\"version-note-title\">New in Django 1.10</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.views.i18n.JSONCatalog\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">JSONCatalog</span></span><a class=\"heading-anchor\" href=\"#django.views.i18n.JSONCatalog\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>他のクライアントサイドのライブラリを使って翻訳を扱うためには、<code class=\"docutils literal notranslate\"><span class=\"pre\">JSONCatalog</span></code> を利用するのがいいでしょう。<a class=\"reference internal\" href=\"#django.views.i18n.JavaScriptCatalog\" title=\"django.views.i18n.JavaScriptCatalog\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JavaScriptCatalog</span></code></a> と似ていますが、JSON のレスポンスを返します。</p>\n<p>使える値を知るには、<a class=\"reference internal\" href=\"#django.views.i18n.JavaScriptCatalog\" title=\"django.views.i18n.JavaScriptCatalog\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JavaScriptCatalog</span></code></a> を参照してください。また、<code class=\"docutils literal notranslate\"><span class=\"pre\">domain</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">packages</span></code> 属性を使用してください。</p>\n<p>レスポンスの形式は以下の通りです:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>{\n    &quot;catalog&quot;: {\n        # Translations catalog\n    },\n    &quot;formats&quot;: {\n        # Language formats for date, time, etc.\n    },\n    &quot;plural&quot;: &quot;...&quot;  # Expression for plural forms, or null.\n}\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"the-json-catalog-view\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">json_catalog</span></code> ビュー<a class=\"heading-anchor\" href=\"#the-json-catalog-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.i18n.json_catalog\">\n<span class=\"sig-name descname\"><span class=\"pre\">json_catalog</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">domain</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'djangojs'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">packages</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.i18n.json_catalog\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-deprecated\" data-version=\"1.10\">\n<p class=\"version-note-title\">Deprecated since Django 1.10</p><p><span class=\"versionmodified deprecated\">バージョン 1.10 で非推奨: </span><code class=\"docutils literal notranslate\"><span class=\"pre\">json_catalog()</span></code> は、<a class=\"reference internal\" href=\"#django.views.i18n.JSONCatalog\" title=\"django.views.i18n.JSONCatalog\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONCatalog</span></code></a> が支持されたため Django 2.0 で削除されます。</p>\n</aside>\n<p>In order to use another client-side library to handle translations, you may\nwant to take advantage of the <code class=\"docutils literal notranslate\"><span class=\"pre\">json_catalog()</span></code> view. It's similar to\n<a class=\"reference internal\" href=\"#django.views.i18n.javascript_catalog\" title=\"django.views.i18n.javascript_catalog\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">javascript_catalog()</span></code></a> but returns a JSON response.</p>\n<p>The JSON object contains i18n formatting settings (those available for\n<a class=\"reference internal\" href=\"#get-format\">get_format</a>), a plural rule (as a <code class=\"docutils literal notranslate\"><span class=\"pre\">plural</span></code> part of a GNU gettext\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Plural-Forms</span></code> expression), and translation strings. The translation strings\nare taken from applications or Django's own translations, according to what is\nspecified either via <code class=\"docutils literal notranslate\"><span class=\"pre\">urlpatterns</span></code> arguments or as request parameters. Paths\nlisted in <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> are also included.</p>\n<p>The view is hooked up to your application and configured in the same fashion as\n<a class=\"reference internal\" href=\"#django.views.i18n.javascript_catalog\" title=\"django.views.i18n.javascript_catalog\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">javascript_catalog()</span></code></a> (namely, the <code class=\"docutils literal notranslate\"><span class=\"pre\">domain</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">packages</span></code> arguments behave identically):</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">json_catalog</span>\n\n<span class=\"n\">js_info_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;packages&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;your.app.package&#39;</span><span class=\"p\">,),</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsoni18n/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">json_catalog</span><span class=\"p\">,</span> <span class=\"n\">js_info_dict</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>レスポンスの形式は以下の通りです:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>{\n    &quot;catalog&quot;: {\n        # Translations catalog\n    },\n    &quot;formats&quot;: {\n        # Language formats for date, time, etc.\n    },\n    &quot;plural&quot;: &quot;...&quot;  # Expression for plural forms, or null.\n}\n</code></pre></div>\n</section>\n<section id=\"note-on-performance\">\n<h3>実行速度についての覚え書き<a class=\"heading-anchor\" href=\"#note-on-performance\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>たくさんの JavaScript/JSON i18n ビューは全てのリクエストで <code class=\"docutils literal notranslate\"><span class=\"pre\">.mo</span></code> ファイルからカタログを生成します。出力は一定なので、少なくとも与えられたサイトのバージョンに対しては、キャッシングが有力な選択肢となります。</p>\n<p>サーバーサイトのキャッシングは CPU のロードを軽減します。<a class=\"reference internal\" href=\"/ja/1.11/topics/cache/#django.views.decorators.cache.cache_page\" title=\"django.views.decorators.cache.cache_page\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">cache_page()</span></code></a> デコレータを使うと簡単に実装できます。翻訳を変更したときにキャッシュの無効部分をトリガーするには、以下の例にあるようにバージョンに依存したキープレフィックスを使ってください。 もしくは、バージョンに依存した URL でビューをマッピングしてください:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.cache</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">cache_page</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">JavaScriptCatalog</span>\n\n<span class=\"c1\"># The value returned by get_version() must change when translations change.</span>\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/$&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">cache_page</span><span class=\"p\">(</span><span class=\"mi\">86400</span><span class=\"p\">,</span> <span class=\"n\">key_prefix</span><span class=\"o\">=</span><span class=\"s1\">&#39;js18n-</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">get_version</span><span class=\"p\">())(</span><span class=\"n\">JavaScriptCatalog</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">()),</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;javascript-catalog&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Client-side caching will save bandwidth and make your site load faster. If\nyou're using ETags (<a class=\"reference internal\" href=\"/ja/1.11/ref/middleware/#django.middleware.http.ConditionalGetMiddleware\" title=\"django.middleware.http.ConditionalGetMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ConditionalGetMiddleware</span></code></a>),\nyou're already covered. Otherwise, you can apply <a class=\"reference internal\" href=\"/ja/1.11/topics/conditional-view-processing/#conditional-decorators\"><span class=\"std std-ref\">conditional decorators</span></a>. In the following example, the cache is invalidated\nwhenever you restart your application server:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">last_modified</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">JavaScriptCatalog</span>\n\n<span class=\"n\">last_modified_date</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^jsi18n/$&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">last_modified</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">req</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">:</span> <span class=\"n\">last_modified_date</span><span class=\"p\">)(</span><span class=\"n\">JavaScriptCatalog</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">()),</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;javascript-catalog&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>また、開発プロシージャの一部として JavaScript カタログを事前に生成して、静的ファイルとして提供することもできます。この抜本的テクニックは <a class=\"reference external\" href=\"https://django-statici18n.readthedocs.io/en/latest/\">django-statici18n</a> で実装されます。</p>\n</section>\n</section>\n<section id=\"module-django.conf.urls.i18n\">\n<span id=\"internationalization-in-url-patterns\"></span><span id=\"url-internationalization\"></span><h2>国際化: URL パターン内<a class=\"heading-anchor\" href=\"#module-django.conf.urls.i18n\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django には、URL パターンを国際化するための 2 つの仕組みが用意されています:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/middleware/#django.middleware.locale.LocaleMiddleware\" title=\"django.middleware.locale.LocaleMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code></a> が、リクエストされた URL からアクティブにする言語を検出できるようにするため、URL パターンのルートに言語のプレフィックスを追加します。</p></li>\n<li><p>URL パターン自体を <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext_lazy\" title=\"django.utils.translation.ugettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.ugettext_lazy()</span></code></a> 関数を通じて翻訳可能にする。</p></li>\n</ul>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>この 2 つのうちどちらを使う場合でも、各リクエストに対してアクティブな言語をセットすることが必要となります; 言い換えれば、<a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> 設定内に <a class=\"reference internal\" href=\"/ja/1.11/ref/middleware/#django.middleware.locale.LocaleMiddleware\" title=\"django.middleware.locale.LocaleMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.middleware.locale.LocaleMiddleware</span></code></a> を記述しておく必要があります。</p>\n</aside>\n<section id=\"language-prefix-in-url-patterns\">\n<h3>URL パターンにおける言語プレフィックス<a class=\"heading-anchor\" href=\"#language-prefix-in-url-patterns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.conf.urls.i18n.i18n_patterns\">\n<span class=\"sig-name descname\"><span class=\"pre\">i18n_patterns</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">urls</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">prefix_default_language</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.conf.urls.i18n.i18n_patterns\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>この関数は、ルートの URLconf で使うことができ、Django は自動的に現在アクティブな言語のコードを <a class=\"reference internal\" href=\"#django.conf.urls.i18n.i18n_patterns\" title=\"django.conf.urls.i18n.i18n_patterns\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">i18n_patterns()</span></code></a> で定義された全ての URL パターンの先頭に追加します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefix_default_language</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> にセットすると、デフォルト言語 (<a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a>) からプレフィックスを除去します。これは、現在の URL を変更しないよう既存のサイトに翻訳を追加するとき、役に立ちます。</p>\n<p>URL パターンの例:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">url</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">i18n_patterns</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">about</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">about_views</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">news</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">news_views</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sitemap.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">sitemap</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span> <span class=\"n\">sitemap</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;sitemap-xml&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n\n<span class=\"n\">news_patterns</span> <span class=\"o\">=</span> <span class=\"p\">([</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^$&#39;</span><span class=\"p\">,</span> <span class=\"n\">news_views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^category/(?P&lt;slug&gt;[\\w-]+)/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">news_views</span><span class=\"o\">.</span><span class=\"n\">category</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;category&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^(?P&lt;slug&gt;[\\w-]+)/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">news_views</span><span class=\"o\">.</span><span class=\"n\">details</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;detail&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">],</span> <span class=\"s1\">&#39;news&#39;</span><span class=\"p\">)</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">+=</span> <span class=\"n\">i18n_patterns</span><span class=\"p\">(</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^about/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">about_views</span><span class=\"o\">.</span><span class=\"n\">main</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;about&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^news/&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"n\">news_patterns</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"s1\">&#39;news&#39;</span><span class=\"p\">)),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>After defining these URL patterns, Django will automatically add the\nlanguage prefix to the URL patterns that were added by the <code class=\"docutils literal notranslate\"><span class=\"pre\">i18n_patterns</span></code>\nfunction. Example:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">activate</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"s1\">&#39;en&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;sitemap-xml&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;/sitemap.xml&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;news:index&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;/en/news/&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"s1\">&#39;nl&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;news:detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;news-slug&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">&#39;/nl/news/news-slug/&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefix_default_language=False</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE='en'</span></code> を使うと、URL は以下のようになります:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"s1\">&#39;en&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;news:index&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;/news/&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"s1\">&#39;nl&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;news:index&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&#39;/nl/news/&#39;</span>\n</code></pre></div>\n<aside class=\"version-note version-added\" data-version=\"1.10\">\n<p class=\"version-note-title\">New in Django 1.10</p><p><code class=\"docutils literal notranslate\"><span class=\"pre\">prefix_default_language</span></code> パラーメータが追加されました。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><a class=\"reference internal\" href=\"#django.conf.urls.i18n.i18n_patterns\" title=\"django.conf.urls.i18n.i18n_patterns\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">i18n_patterns()</span></code></a> はルートの URLconf のみで使うことができます。インクルードされた URLconf で使うと <a class=\"reference internal\" href=\"/ja/1.11/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ImproperlyConfigured</span></code></a> 例外を投げます。</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"1.10\">\n<p class=\"version-note-title\">Changed in Django 1.10</p><p>以前のバージョンでは、<a class=\"reference internal\" href=\"/ja/1.11/ref/request-response/#django.http.HttpRequest.urlconf\" title=\"django.http.HttpRequest.urlconf\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.urlconf</span></code></a> で設定した <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ROOT_URLCONF</span></code></a> と異なる <code class=\"docutils literal notranslate\"><span class=\"pre\">i18n_patterns</span></code> を使うことはサポートされていませんでした。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>自動的に追加される言語プレフィックスと重複するようなプレフィックスを持った URL パターンにしないように注意してください。</p>\n</aside>\n</section>\n<section id=\"translating-url-patterns\">\n<span id=\"translating-urlpatterns\"></span><h3>URL パターンを翻訳する<a class=\"heading-anchor\" href=\"#translating-url-patterns\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URL パターンは、<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext_lazy\" title=\"django.utils.translation.ugettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code></a> 関数を使って、翻訳可能にマークすることもできます。例えば:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">url</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls.i18n</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">i18n_patterns</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">about</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">about_views</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">news</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">news_views</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">sitemaps.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">sitemap</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span> <span class=\"n\">sitemap</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;sitemap-xml&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n\n<span class=\"n\">news_patterns</span> <span class=\"o\">=</span> <span class=\"p\">([</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^$&#39;</span><span class=\"p\">,</span> <span class=\"n\">news_views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^category/(?P&lt;slug&gt;[\\w-]+)/$&#39;</span><span class=\"p\">),</span> <span class=\"n\">news_views</span><span class=\"o\">.</span><span class=\"n\">category</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;category&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^(?P&lt;slug&gt;[\\w-]+)/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">news_views</span><span class=\"o\">.</span><span class=\"n\">details</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;detail&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">],</span> <span class=\"s1\">&#39;news&#39;</span><span class=\"p\">)</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">+=</span> <span class=\"n\">i18n_patterns</span><span class=\"p\">(</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^about/$&#39;</span><span class=\"p\">),</span> <span class=\"n\">about_views</span><span class=\"o\">.</span><span class=\"n\">main</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;about&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^news/&#39;</span><span class=\"p\">),</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"n\">news_patterns</span><span class=\"p\">,</span> <span class=\"n\">namespace</span><span class=\"o\">=</span><span class=\"s1\">&#39;news&#39;</span><span class=\"p\">)),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>翻訳を作成した後に、<a class=\"reference internal\" href=\"/ja/1.11/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> 関数はアクティブな言語で URL を返します。例えば:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">activate</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"s1\">&#39;en&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;news:category&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">&#39;/en/news/category/recent/&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"s1\">&#39;nl&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;news:category&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">})</span>\n<span class=\"go\">&#39;/nl/nieuws/categorie/recent/&#39;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>ほとんどのケースでは、(<a class=\"reference internal\" href=\"#django.conf.urls.i18n.i18n_patterns\" title=\"django.conf.urls.i18n.i18n_patterns\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">i18n_patterns()</span></code></a> を使った) パターンのブロックでプリふぇっくすされたげんごこー度のみを使って翻訳された URL を使用するのが最も良い選択です。不用意に翻訳された URL が翻訳されない URL パターンと衝突するのを防ぎます。</p>\n</aside>\n</section>\n<section id=\"reversing-in-templates\">\n<span id=\"id2\"></span><h3>テンプレート内でリバースする<a class=\"heading-anchor\" href=\"#reversing-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ローカル化された URL がテンプレート内でリバースされる場合、常に現在の言語が使用されます。他の言語の URL にリンクを貼るには、<a class=\"reference internal\" href=\"#std-templatetag-language\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">language</span></code></a> テンプレートタグを使ってください。これは、テンプレートの囲まれた範囲内で、指定された言語を有効化します:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">i18n</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">get_available_languages</span> <span class=\"k\">as</span> <span class=\"nv\">languages</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">trans</span> <span class=\"s2\">&quot;View this category in:&quot;</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">lang_code</span><span class=\"o\">,</span> <span class=\"nv\">lang_name</span> <span class=\"k\">in</span> <span class=\"nv\">languages</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">language</span> <span class=\"nv\">lang_code</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;category&#39;</span> <span class=\"nv\">slug</span><span class=\"o\">=</span><span class=\"nv\">category.slug</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">lang_name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endlanguage</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#std-templatetag-language\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">language</span></code></a> タグは引数のみとして言語コードを予期します。</p>\n</section>\n</section>\n<section id=\"localization-how-to-create-language-files\">\n<span id=\"how-to-create-language-files\"></span><h2>ローカル化: 言語ファイルを作成する方法<a class=\"heading-anchor\" href=\"#localization-how-to-create-language-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>アプリケーションの文字列リテラルが後の翻訳にためにタグづけされ終わったら、翻訳自体を記述する (もしくは取得する) 必要があります。以下は、その方法です。</p>\n<section id=\"message-files\">\n<h3>メッセージファイル<a class=\"heading-anchor\" href=\"#message-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>最初のステップは、新しい言語に対する <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-message-file\"><span class=\"xref std std-term\">message file</span></a> を作成することです。メッセージファイルはプレーンテキストファイルで、単一の言語を記述します。このファイルは、全ての翻訳可能な文字列とそれらがどのように与えられた言語で表示されるかを含みます。メッセージファイルは <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイル拡張子を持ちます。</p>\n<p>Djangoには <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">makemessages</span></code></a> というツールが用意してあり、これらのファイルの作成と保全を自動化します。</p>\n<aside class=\"admonition-gettext-utilities admonition\">\n<p class=\"admonition-title\">Gettext ユーティリティ</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">makemessages</span></code> コマンド (と後述する <code class=\"docutils literal notranslate\"><span class=\"pre\">compilemessages</span></code>) は、GNU gettext ツールセットからのコマンドを使用します: <code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">msgfmt</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">msgmerge</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">msguniq</span></code> です。</p>\n<p>サポートされている <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> ユーティリティの最小バージョンは 0.15 です。</p>\n</aside>\n<p>メッセージファイルを作成または更新するには、以下のコマンドを実行してください:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">django</span><span class=\"o\">-</span><span class=\"n\">admin</span> <span class=\"n\">makemessages</span> <span class=\"o\">-</span><span class=\"n\">l</span> <span class=\"n\">de</span>\n</code></pre></div>\n<p>...ここでの <code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code> は作成したいメッセージファイルに対する <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-locale-name\"><span class=\"xref std std-term\">locale name</span></a> です。例えば、ブラジル系のポルトガル語に対する <code class=\"docutils literal notranslate\"><span class=\"pre\">pt_BR</span></code>、オーストリア系のドイツ語に対する <code class=\"docutils literal notranslate\"><span class=\"pre\">de_AT</span></code>、インドネシアに対する <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> などです。</p>\n<p>スクリプトは、2 つの場所のうち 1 つから実行する必要があります:</p>\n<ul class=\"simple\">\n<li><p>Django プロジェクトのルートディレクトリ (<code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> を含むところ)。</p></li>\n<li><p>Django アプリケーションのルートディレクトリ。</p></li>\n</ul>\n<p>スクリプトは、プロジェクトのソースツリーもしくはアプリケーションのソースツリーを通じて実行され、翻訳用にマークされた全ての文字列 (<a class=\"reference internal\" href=\"#how-django-discovers-translations\"><span class=\"std std-ref\">How Django discovers translations</span></a> を参照して <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> を正しく設定してください) を抽出します。ディレクトリ <code class=\"docutils literal notranslate\"><span class=\"pre\">locale/LANG/LC_MESSAGES</span></code> にメッセージファイルを作成 (もしくは更新) します。<code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code> の例では、ファイルは <code class=\"docutils literal notranslate\"><span class=\"pre\">locale/de/LC_MESSAGES/django.po</span></code> となります。</p>\n<p>プロジェクトのルートディレクトリから <code class=\"docutils literal notranslate\"><span class=\"pre\">makemessages</span></code> を実行したとき、抽出された文字列は自動的に適切なメッセージファイルへと分配されます。つまり、<code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> ディレクトリを含むアプリケーションのファイルから抽出された文字列は、そのディレクトリ下のメッセージファイルに格納されます。<code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> ディレクトリがないアプリケーションのファイルから抽出された文字列は、<a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> 内に最初にリストアップされたディレクトリ下にあるメッセージファイルか、もしくは <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> が空の場合はエラーを生成します。</p>\n<p>By default <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">makemessages</span></code></a> examines every\nfile that has the <code class=\"docutils literal notranslate\"><span class=\"pre\">.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">.txt</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">.py</span></code> file extension. If you want to\noverride that default, use the <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#cmdoption-makemessages-extension\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--extension</span></code></a>\nor <code class=\"docutils literal notranslate\"><span class=\"pre\">-e</span></code> option to specify the file extensions to examine:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">django</span><span class=\"o\">-</span><span class=\"n\">admin</span> <span class=\"n\">makemessages</span> <span class=\"o\">-</span><span class=\"n\">l</span> <span class=\"n\">de</span> <span class=\"o\">-</span><span class=\"n\">e</span> <span class=\"n\">txt</span>\n</code></pre></div>\n<p>カンマで複数の拡張子を区切って、そして/あるいは <code class=\"docutils literal notranslate\"><span class=\"pre\">-e</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">--extension</span></code> を複数回使ってください:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">django</span><span class=\"o\">-</span><span class=\"n\">admin</span> <span class=\"n\">makemessages</span> <span class=\"o\">-</span><span class=\"n\">l</span> <span class=\"n\">de</span> <span class=\"o\">-</span><span class=\"n\">e</span> <span class=\"n\">html</span><span class=\"p\">,</span><span class=\"n\">txt</span> <span class=\"o\">-</span><span class=\"n\">e</span> <span class=\"n\">xml</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><a class=\"reference internal\" href=\"#creating-message-files-from-js-code\"><span class=\"std std-ref\">JavaScript のソースコードからメッセージファイルを作成する</span></a> とき、<code class=\"docutils literal notranslate\"><span class=\"pre\">-e</span> <span class=\"pre\">js</span></code> <strong>ではなく</strong>、特別な 'djangojs' ドメインを使用する必要があります。</p>\n</aside>\n<aside class=\"admonition-using-jinja2-templates admonition\">\n<p class=\"admonition-title\">Jinja2 テンプレートを使う？</p>\n<p><a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a> doesn't understand the syntax of Jinja2 templates.\nTo extract strings from a project containing Jinja2 templates, use <a class=\"reference external\" href=\"http://babel.pocoo.org/en/latest/messages.html#message-extraction\">Message\nExtracting</a> from <a class=\"reference external\" href=\"http://babel.pocoo.org/\">Babel</a> instead.</p>\n<p>Here's an example <code class=\"docutils literal notranslate\"><span class=\"pre\">babel.cfg</span></code> configuration file:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"c1\"># Extraction from Python source files</span>\n<span class=\"p\">[</span><span class=\"n\">python</span><span class=\"p\">:</span> <span class=\"o\">**.</span><span class=\"n\">py</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># Extraction from Jinja2 templates</span>\n<span class=\"p\">[</span><span class=\"n\">jinja2</span><span class=\"p\">:</span> <span class=\"o\">**.</span><span class=\"n\">jinja</span><span class=\"p\">]</span>\n<span class=\"n\">extensions</span> <span class=\"o\">=</span> <span class=\"n\">jinja2</span><span class=\"o\">.</span><span class=\"n\">ext</span><span class=\"o\">.</span><span class=\"n\">with_</span>\n</code></pre></div>\n<p>Make sure you list all extensions you're using! Otherwise Babel won't\nrecognize the tags defined by these extensions and will ignore Jinja2\ntemplates containing them entirely.</p>\n<p>Babel provides similar features to <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a>, can replace it\nin general, and doesn't depend on <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code>. For more information, read\nits documentation about <a class=\"reference external\" href=\"http://babel.pocoo.org/en/latest/messages.html\">working with message catalogs</a>.</p>\n</aside>\n<aside class=\"admonition-no-gettext admonition\">\n<p class=\"admonition-title\">gettext がない？</p>\n<p>If you don't have the <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> utilities installed,\n<a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a> will create empty files. If that's the case, either\ninstall the <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> utilities or just copy the English message file\n(<code class=\"docutils literal notranslate\"><span class=\"pre\">locale/en/LC_MESSAGES/django.po</span></code>) if available and use it as a starting\npoint; it's just an empty translation file.</p>\n</aside>\n<aside class=\"admonition-working-on-windows admonition\">\n<p class=\"admonition-title\">Windows で動作する？</p>\n<p>あなたが Windows を使っていて、<a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a> が動作するように GNU gettext ユーティリティをインストールする必要がある場合は、<a class=\"reference internal\" href=\"#gettext-on-windows\"><span class=\"std std-ref\">Windows での gettext</span></a> で詳しい情報を参照してください。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイルのフォーマットは明快です。各 <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイルは、翻訳保守者の連絡先情報などのわずかなメタデータを含みますが、大部分は <strong>メッセージ</strong> のリストです -- 特定の言語に対する、翻訳文字列と実際の翻訳済みテキストの単純なマッピングです。</p>\n<p>例えば以下のように、Django アプリケーションが <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Welcome</span> <span class=\"pre\">to</span> <span class=\"pre\">my</span> <span class=\"pre\">site.&quot;</span></code> に対する翻訳文字列を含んでいる場合、:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Welcome to my site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...それから <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">makemessages</span></code></a> は <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイルを生成し、そのファイルは以下のようなスニペットを含みます -- メッセージ:</p>\n<div class=\"code-block\" data-language=\"po\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Po</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=\"Po code\"><code><span class=\"kd\">#: path/to/python/module.py:23</span>\n<span class=\"nv\">msgid</span> <span class=\"s\">&quot;Welcome to my site.&quot;</span>\n<span class=\"nv\">msgstr</span> <span class=\"s\">&quot;&quot;</span>\n</code></pre></div>\n<p>簡単に説明すると:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">msgid</span></code> は翻訳文字列で、ソース内に存在します。変更しないでください。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">msgstr</span></code> はあなたが言語に対応する翻訳を記述する場所です。これは空の状態から始まるので、変更するのはあなたの役割です。翻訳をクオートで囲むようにしてください。</p></li>\n<li><p>利便性のため、各メッセージは、<code class=\"docutils literal notranslate\"><span class=\"pre\">#</span></code> でプレフィックスされ <code class=\"docutils literal notranslate\"><span class=\"pre\">msgid</span></code> 行の直前に位置するコメント行の形式の中に、翻訳文字列がどこから拾い集められたかを示すファイル名と行数を含みます。</p></li>\n</ul>\n<p>長いメッセージは特殊なケースです。そこでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">msgstr</span></code> (もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">msgid</span></code>) 直後の最初の文字列は空の文字列です。それからコンテンツ自身が行ごとに 1 つの文字列として次の数行にわたって記述されます。これらの文字列は直接連結されます。文字列内で最後のスペースを忘れないでください; さもなくば、空白スペースなしで接合されることになります！</p>\n<aside class=\"admonition-mind-your-charset admonition\">\n<p class=\"admonition-title\">文字コードを気にしてください</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> ツールが内部的に動作する方法および非 ASCII ソースの文字列を Django のコアとあなたのアプリケーション内で許容するために、PO ファイルに対するエンコーディングとして UTF-8 (PO ファイルが生成される際のデフォルトです) を <strong>使わなければなりません</strong>。これは、全員が同じエンコーディングを使用することを意味し、Django が PO ファイルを処理する際に重要となります。</p>\n</aside>\n<p>新しい翻訳文字列に対して全てのコードとテンプレートを再検査して <strong>全ての</strong> 言語に対する全てのメッセージファイルを更新するには、以下を実行してください:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">django</span><span class=\"o\">-</span><span class=\"n\">admin</span> <span class=\"n\">makemessages</span> <span class=\"o\">-</span><span class=\"n\">a</span>\n</code></pre></div>\n</section>\n<section id=\"compiling-message-files\">\n<h3>メッセージファイルをコンパイルする<a class=\"heading-anchor\" href=\"#compiling-message-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>メッセージファイルを作成した後 -- そして変更を加えたときそれぞれで -- <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> による使用のために、より効率的な形式にコンパイルする必要があります。<a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-compilemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">compilemessages</span></code></a> ユーティリティを利用してください。</p>\n<p>このツールは、全ての有効な <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイルを通じて動作し、<code class=\"docutils literal notranslate\"><span class=\"pre\">.mo</span></code> ファイルを生成します。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> による使用のために最適化されたバイナリファイルです。<a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">makemessages</span></code></a> を実行した同じディレクトリで、以下のように <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-compilemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">compilemessages</span></code></a> を実行してください:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">django</span><span class=\"o\">-</span><span class=\"n\">admin</span> <span class=\"n\">compilemessages</span>\n</code></pre></div>\n<p>これで終わりです。翻訳は使う準備ができました。</p>\n<aside class=\"admonition-working-on-windows admonition\">\n<p class=\"admonition-title\">Windows で動作する？</p>\n<p>あなたが Windows を使っていて、<a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-compilemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">compilemessages</span></code></a> が動作するように GNU gettext ユーティリティをインストールする必要がある場合は、<a class=\"reference internal\" href=\"#gettext-on-windows\"><span class=\"std std-ref\">Windows での gettext</span></a> で詳しい情報を参照してください。</p>\n</aside>\n<aside class=\"admonition-po-files-encoding-and-bom-usage admonition\">\n<p class=\"admonition-title\">.po ファイル: エンコーディングと BOM の使用</p>\n<p>Django は、UTF-8 でエンコードされ BOM (Byte Order Mark) を持たない <code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code> ファイルのみをサポートします。そのため、テキストエディタがデフォルトでこれらのマークをファイルの最初に追加した場合、再構成する必要があります。</p>\n</aside>\n</section>\n<section id=\"troubleshooting-ugettext-incorrectly-detects-python-format-in-strings-with-percent-signs\">\n<h3>トラブルシューティング: <code class=\"docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code> がパーセント文字を伴う文字列内で <code class=\"docutils literal notranslate\"><span class=\"pre\">python-format</span></code> を誤って見つけてしまう<a class=\"heading-anchor\" href=\"#troubleshooting-ugettext-incorrectly-detects-python-format-in-strings-with-percent-signs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>パーセント文字の後にスペースが続く場合や <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#old-string-formatting\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">文字列転換タイプ</span></a> (例 <code class=\"docutils literal notranslate\"><span class=\"pre\">_(&quot;10%</span> <span class=\"pre\">利率&quot;)</span></code>) のようないくつかのケースでは、<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext\" title=\"django.utils.translation.ugettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code></a> は <code class=\"docutils literal notranslate\"><span class=\"pre\">python-format</span></code> で間違って文字列にフラグを立てます。</p>\n<p>誤ってフラグが立てられた文字列でメッセージファイルをコンパイルしようとすると、<code class=\"docutils literal notranslate\"><span class=\"pre\">number</span> <span class=\"pre\">of</span> <span class=\"pre\">format</span> <span class=\"pre\">specifications</span> <span class=\"pre\">in</span> <span class=\"pre\">'msgid'</span> <span class=\"pre\">and</span> <span class=\"pre\">'msgstr'</span> <span class=\"pre\">does</span> <span class=\"pre\">not</span> <span class=\"pre\">match</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">'msgstr'</span> <span class=\"pre\">is</span> <span class=\"pre\">not</span> <span class=\"pre\">a</span> <span class=\"pre\">valid</span> <span class=\"pre\">Python</span> <span class=\"pre\">format</span> <span class=\"pre\">string,</span> <span class=\"pre\">unlike</span> <span class=\"pre\">'msgid'</span></code>. といったエラーが発生します。</p>\n<p>これを解決するには、パーセント文字を 2 つ重ねることでエスケープすることができます:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n<span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;10</span><span class=\"si\">%%</span><span class=\"s2\"> interest&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">no-python-format</span></code> を使ってパーセント文字がリテラルとして扱われるようにします:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"c1\"># xgettext:no-python-format</span>\n<span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;10</span><span class=\"si\">% i</span><span class=\"s2\">nterest&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"creating-message-files-from-javascript-source-code\">\n<span id=\"creating-message-files-from-js-code\"></span><h3>JavaScript ソースコードからメッセージファイルを作成する<a class=\"heading-anchor\" href=\"#creating-message-files-from-javascript-source-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>他の Django メッセージファイルと同じ方法で -- <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">makemessages</span></code></a> ツールを使って -- 作成や更新を行います。唯一の違いは、<code class=\"docutils literal notranslate\"><span class=\"pre\">-d</span> <span class=\"pre\">djangojs</span></code> パラメータを提供することによって、gettext 用語がドメインであること (このケースでは <code class=\"docutils literal notranslate\"><span class=\"pre\">djangojs</span></code> ドメイン) を、以下のように明示的に指定する必要があることです:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">django</span><span class=\"o\">-</span><span class=\"n\">admin</span> <span class=\"n\">makemessages</span> <span class=\"o\">-</span><span class=\"n\">d</span> <span class=\"n\">djangojs</span> <span class=\"o\">-</span><span class=\"n\">l</span> <span class=\"n\">de</span>\n</code></pre></div>\n<p>これは、ドイツ語に対して JavaScript 用のメッセージファイルを作成ないし更新します。メッセージファイルの更新後、通常の Django フィあると同様の方法で <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-compilemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">compilemessages</span></code></a> を実行してください。</p>\n</section>\n<section id=\"gettext-on-windows\">\n<span id=\"id3\"></span><h3>Windows での <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code><a class=\"heading-anchor\" href=\"#gettext-on-windows\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>This is only needed for people who either want to extract message IDs or compile\nmessage files (<code class=\"docutils literal notranslate\"><span class=\"pre\">.po</span></code>). Translation work itself just involves editing existing\nfiles of this type, but if you want to create your own message files, or want to\ntest or compile a changed message file, download <a class=\"reference external\" href=\"http://mlocati.github.io/gettext-iconv-windows/\">a precompiled binary\ninstaller</a>.</p>\n<p>You may also use <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> binaries you have obtained elsewhere, so long as\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span> <span class=\"pre\">--version</span></code> command works properly. Do not attempt to use Django\ntranslation utilities with a <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> package if the command <code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span>\n<span class=\"pre\">--version</span></code> entered at a Windows command prompt causes a popup window saying\n&quot;xgettext.exe has generated errors and will be closed by Windows&quot;.</p>\n</section>\n<section id=\"customizing-the-makemessages-command\">\n<span id=\"customizing-makemessages\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">makemessages</span></code> コマンドをカスタマイズする<a class=\"heading-anchor\" href=\"#customizing-the-makemessages-command\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span></code> に追加のパラメータを渡したい場合、独自の <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a> コマンドを作成して、その <code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext_options</span></code> 属性をオーバーライドする必要があります:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management.commands</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">makemessages</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Command</span><span class=\"p\">(</span><span class=\"n\">makemessages</span><span class=\"o\">.</span><span class=\"n\">Command</span><span class=\"p\">):</span>\n    <span class=\"n\">xgettext_options</span> <span class=\"o\">=</span> <span class=\"n\">makemessages</span><span class=\"o\">.</span><span class=\"n\">Command</span><span class=\"o\">.</span><span class=\"n\">xgettext_options</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s1\">&#39;--keyword=mytrans&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>もっと柔軟に使う必要があるとき場合には、<a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemessages</span></code></a> コマンドに新しい引数を追加することもできます:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management.commands</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">makemessages</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Command</span><span class=\"p\">(</span><span class=\"n\">makemessages</span><span class=\"o\">.</span><span class=\"n\">Command</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">add_arguments</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">parser</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">Command</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">add_arguments</span><span class=\"p\">(</span><span class=\"n\">parser</span><span class=\"p\">)</span>\n        <span class=\"n\">parser</span><span class=\"o\">.</span><span class=\"n\">add_argument</span><span class=\"p\">(</span>\n            <span class=\"s1\">&#39;--extra-keyword&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">dest</span><span class=\"o\">=</span><span class=\"s1\">&#39;xgettext_keywords&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">action</span><span class=\"o\">=</span><span class=\"s1\">&#39;append&#39;</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">handle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">options</span><span class=\"p\">):</span>\n        <span class=\"n\">xgettext_keywords</span> <span class=\"o\">=</span> <span class=\"n\">options</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s1\">&#39;xgettext_keywords&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">xgettext_keywords</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">xgettext_options</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"n\">makemessages</span><span class=\"o\">.</span><span class=\"n\">Command</span><span class=\"o\">.</span><span class=\"n\">xgettext_options</span><span class=\"p\">[:]</span> <span class=\"o\">+</span>\n                <span class=\"p\">[</span><span class=\"s1\">&#39;--keyword=</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">kwd</span> <span class=\"k\">for</span> <span class=\"n\">kwd</span> <span class=\"ow\">in</span> <span class=\"n\">xgettext_keywords</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">Command</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">handle</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">options</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"miscellaneous\">\n<h2>その他<a class=\"heading-anchor\" href=\"#miscellaneous\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"the-set-language-redirect-view\">\n<span id=\"set-language-redirect-view\"></span><h3>The <code class=\"docutils literal notranslate\"><span class=\"pre\">set_language</span></code> redirect view<a class=\"heading-anchor\" href=\"#the-set-language-redirect-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.i18n.set_language\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_language</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.i18n.set_language\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>As a convenience, Django comes with a view, <a class=\"reference internal\" href=\"#django.views.i18n.set_language\" title=\"django.views.i18n.set_language\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.views.i18n.set_language()</span></code></a>,\nthat sets a user's language preference and redirects to a given URL or, by default,\nback to the previous page.</p>\n<p>Activate this view by adding the following line to your URLconf:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^i18n/&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s1\">&#39;django.conf.urls.i18n&#39;</span><span class=\"p\">)),</span>\n</code></pre></div>\n<p>(Note that this example makes the view available at <code class=\"docutils literal notranslate\"><span class=\"pre\">/i18n/setlang/</span></code>.)</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>Make sure that you don't include the above URL within\n<a class=\"reference internal\" href=\"#django.conf.urls.i18n.i18n_patterns\" title=\"django.conf.urls.i18n.i18n_patterns\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">i18n_patterns()</span></code></a> - it needs to be\nlanguage-independent itself to work correctly.</p>\n</aside>\n<p>The view expects to be called via the <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> method, with a <code class=\"docutils literal notranslate\"><span class=\"pre\">language</span></code>\nparameter set in request. If session support is enabled, the view\nsaves the language choice in the user's session. Otherwise, it saves the\nlanguage choice in a cookie that is by default named <code class=\"docutils literal notranslate\"><span class=\"pre\">django_language</span></code>.\n(The name can be changed through the <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_NAME</span></code></a> setting.)</p>\n<p>After setting the language choice, Django looks for a <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> parameter in the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> data. If that is found and Django considers it to be a safe\nURL (i.e. it doesn't point to a different host and uses a safe scheme), a\nredirect to that URL will be performed. Otherwise, Django may fall back to\nredirecting the user to the URL from the <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> header or, if it is not\nset, to <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code>, depending on the nature of the request:</p>\n<ul class=\"simple\">\n<li><p>For AJAX requests, the fallback will be performed only if the <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code>\nparameter was set. Otherwise a 204 status code (No Content) will be returned.</p></li>\n<li><p>For non-AJAX requests, the fallback will always be performed.</p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"1.10\">\n<p class=\"version-note-title\">Changed in Django 1.10</p><p>Returning a 204 status code for AJAX requests when no redirect is specified\nis new.</p>\n</aside>\n<p>Here's example HTML template code:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">i18n</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;set_language&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;next&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;hidden&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">redirect_to</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span> <span class=\"p\">/&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;language&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">get_current_language</span> <span class=\"k\">as</span> <span class=\"nv\">LANGUAGE_CODE</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">get_available_languages</span> <span class=\"k\">as</span> <span class=\"nv\">LANGUAGES</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">get_language_info_list</span> <span class=\"nv\">for</span> <span class=\"nv\">LANGUAGES</span> <span class=\"k\">as</span> <span class=\"nv\">languages</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">language</span> <span class=\"k\">in</span> <span class=\"nv\">languages</span> <span class=\"cp\">%}</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">language.code</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">language.code</span> <span class=\"o\">==</span> <span class=\"nv\">LANGUAGE_CODE</span> <span class=\"cp\">%}</span> <span class=\"na\">selected</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span><span class=\"p\">&gt;</span>\n                <span class=\"cp\">{{</span> <span class=\"nv\">language.name_local</span> <span class=\"cp\">}}</span> (<span class=\"cp\">{{</span> <span class=\"nv\">language.code</span> <span class=\"cp\">}}</span>)\n            <span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;Go&quot;</span> <span class=\"p\">/&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>In this example, Django looks up the URL of the page to which the user will be\nredirected in the <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_to</span></code> context variable.</p>\n</section>\n<section id=\"explicitly-setting-the-active-language\">\n<span id=\"id4\"></span><h3>明示的にアクティブな言語をセットする<a class=\"heading-anchor\" href=\"#explicitly-setting-the-active-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>明示的に、現在のセッションに対して、アクティブな言語をセットしたくなるかもしれません。例えば、他のシステムを活用すれば、ユーザの言語設定を取得できます。<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.activate\" title=\"django.utils.translation.activate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.activate()</span></code></a> はすでに紹介済みですね。これは現在のスレッドに対してのみ適用されます。セッション全体を通して恒久的に言語設定を保持したい場合は、セッション内の <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.LANGUAGE_SESSION_KEY\" title=\"django.utils.translation.LANGUAGE_SESSION_KEY\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">LANGUAGE_SESSION_KEY</span></code></a> を修正してください。</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">translation</span>\n<span class=\"n\">user_language</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;fr&#39;</span>\n<span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">user_language</span><span class=\"p\">)</span>\n<span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">LANGUAGE_SESSION_KEY</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">user_language</span>\n</code></pre></div>\n<p>通常、両方を使う必要があるでしょう: <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.activate\" title=\"django.utils.translation.activate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.activate()</span></code></a> はこのスレッドに対して言語を変更します。そして、セッションを変更するとこの設定が将来のリクエストに恒久的に反映されます。</p>\n<p>セッションを使用していない場合は、言語はクッキー内に保存されます。名前は <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_NAME</span></code></a> の中で設定します。例えば:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">translation</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">http</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"n\">user_language</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;fr&#39;</span>\n<span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">user_language</span><span class=\"p\">)</span>\n<span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">http</span><span class=\"o\">.</span><span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">set_cookie</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LANGUAGE_COOKIE_NAME</span><span class=\"p\">,</span> <span class=\"n\">user_language</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"using-translations-outside-views-and-templates\">\n<h3>ビューやテンプレートの外で翻訳を使う<a class=\"heading-anchor\" href=\"#using-translations-outside-views-and-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>While Django provides a rich set of i18n tools for use in views and templates,\nit does not restrict the usage to Django-specific code. The Django translation\nmechanisms can be used to translate arbitrary texts to any language that is\nsupported by Django (as long as an appropriate translation catalog exists, of\ncourse). You can load a translation catalog, activate it and translate text to\nlanguage of your choice, but remember to switch back to original language, as\nactivating a translation catalog is done on per-thread basis and such change\nwill affect code running in the same thread.</p>\n<p>For example:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">translation</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">welcome_translated</span><span class=\"p\">(</span><span class=\"n\">language</span><span class=\"p\">):</span>\n    <span class=\"n\">cur_language</span> <span class=\"o\">=</span> <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">get_language</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">language</span><span class=\"p\">)</span>\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">ugettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;welcome&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">finally</span><span class=\"p\">:</span>\n        <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">cur_language</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">text</span>\n</code></pre></div>\n<p>Calling this function with the value 'de' will give you <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Willkommen&quot;</span></code>,\nregardless of <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a> and language set by middleware.</p>\n<p>Functions of particular interest are\n<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.get_language\" title=\"django.utils.translation.get_language\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.get_language()</span></code></a> which returns the language used\nin the current thread, <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.activate\" title=\"django.utils.translation.activate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.activate()</span></code></a> which\nactivates a translation catalog for the current thread, and\n<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.check_for_language\" title=\"django.utils.translation.check_for_language\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.check_for_language()</span></code></a>\nwhich checks if the given language is supported by Django.</p>\n<p>To help write more concise code, there is also a context manager\n<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.override\" title=\"django.utils.translation.override\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.translation.override()</span></code></a> that stores the current language on\nenter and restores it on exit. With it, the above example becomes:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">translation</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">welcome_translated</span><span class=\"p\">(</span><span class=\"n\">language</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">override</span><span class=\"p\">(</span><span class=\"n\">language</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">ugettext</span><span class=\"p\">(</span><span class=\"s1\">&#39;welcome&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"language-cookie\">\n<h3>Language cookie<a class=\"heading-anchor\" href=\"#language-cookie\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A number of settings can be used to adjust language cookie options:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_NAME</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_AGE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_DOMAIN</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_COOKIE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_PATH</span></code></a></p></li>\n</ul>\n</section>\n</section>\n<section id=\"implementation-notes\">\n<h2>Implementation notes<a class=\"heading-anchor\" href=\"#implementation-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"specialties-of-django-translation\">\n<span id=\"specialties-of-django-i18n\"></span><h3>Specialties of Django translation<a class=\"heading-anchor\" href=\"#specialties-of-django-translation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django's translation machinery uses the standard <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> module that comes\nwith Python. If you know <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code>, you might note these specialties in the\nway Django does translation:</p>\n<ul class=\"simple\">\n<li><p>The string domain is <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">djangojs</span></code>. This string domain is\nused to differentiate between different programs that store their data\nin a common message-file library (usually <code class=\"docutils literal notranslate\"><span class=\"pre\">/usr/share/locale/</span></code>). The\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> domain is used for Python and template translation strings\nand is loaded into the global translation catalogs. The <code class=\"docutils literal notranslate\"><span class=\"pre\">djangojs</span></code>\ndomain is only used for JavaScript translation catalogs to make sure\nthat those are as small as possible.</p></li>\n<li><p>Django doesn't use <code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span></code> alone. It uses Python wrappers around\n<code class=\"docutils literal notranslate\"><span class=\"pre\">xgettext</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">msgfmt</span></code>. This is mostly for convenience.</p></li>\n</ul>\n</section>\n<section id=\"how-django-discovers-language-preference\">\n<span id=\"id5\"></span><h3>How Django discovers language preference<a class=\"heading-anchor\" href=\"#how-django-discovers-language-preference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Once you've prepared your translations -- or, if you just want to use the\ntranslations that come with Django -- you'll just need to activate translation\nfor your app.</p>\n<p>Behind the scenes, Django has a very flexible model of deciding which language\nshould be used -- installation-wide, for a particular user, or both.</p>\n<p>To set an installation-wide language preference, set <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a>.\nDjango uses this language as the default translation -- the final attempt if no\nbetter matching translation is found through one of the methods employed by the\nlocale middleware (see below).</p>\n<p>If all you want is to run Django with your native language all you need to do\nis set <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a> and make sure the corresponding <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-message-file\"><span class=\"xref std std-term\">message\nfiles</span></a> and their compiled versions (<code class=\"docutils literal notranslate\"><span class=\"pre\">.mo</span></code>) exist.</p>\n<p>If you want to let each individual user specify which language they\nprefer, then you also need to use the <code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code>.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code> enables language selection based on data from the request.\nIt customizes content for each user.</p>\n<p>To use <code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code>, add <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.middleware.locale.LocaleMiddleware'</span></code>\nto your <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> setting. Because middleware order matters, follow\nthese guidelines:</p>\n<ul class=\"simple\">\n<li><p>Make sure it's one of the first middleware installed.</p></li>\n<li><p>It should come after <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code>, because <code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code>\nmakes use of session data. And it should come before <code class=\"docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code>\nbecause <code class=\"docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code> needs an activated language in order\nto resolve the requested URL.</p></li>\n<li><p>If you use <code class=\"docutils literal notranslate\"><span class=\"pre\">CacheMiddleware</span></code>, put <code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code> after it.</p></li>\n</ul>\n<p>For example, your <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> might look like this:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">MIDDLEWARE</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n   <span class=\"s1\">&#39;django.contrib.sessions.middleware.SessionMiddleware&#39;</span><span class=\"p\">,</span>\n   <span class=\"s1\">&#39;django.middleware.locale.LocaleMiddleware&#39;</span><span class=\"p\">,</span>\n   <span class=\"s1\">&#39;django.middleware.common.CommonMiddleware&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>(For more on middleware, see the <a class=\"reference internal\" href=\"/ja/1.11/topics/http/middleware/\"><span class=\"doc\">middleware documentation</span></a>.)</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code> tries to determine the user's language preference by\nfollowing this algorithm:</p>\n<ul>\n<li><p>First, it looks for the language prefix in the requested URL.  This is\nonly performed when you are using the <code class=\"docutils literal notranslate\"><span class=\"pre\">i18n_patterns</span></code> function in your\nroot URLconf. See <a class=\"reference internal\" href=\"#url-internationalization\"><span class=\"std std-ref\">国際化: URL パターン内</span></a> for more information\nabout the language prefix and how to internationalize URL patterns.</p></li>\n<li><p>Failing that, it looks for the <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.LANGUAGE_SESSION_KEY\" title=\"django.utils.translation.LANGUAGE_SESSION_KEY\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">LANGUAGE_SESSION_KEY</span></code></a>\nkey in the current user's session.</p></li>\n<li><p>Failing that, it looks for a cookie.</p>\n<p>The name of the cookie used is set by the <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_NAME</span></code></a>\nsetting. (The default name is <code class=\"docutils literal notranslate\"><span class=\"pre\">django_language</span></code>.)</p>\n</li>\n<li><p>Failing that, it looks at the <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-Language</span></code> HTTP header. This\nheader is sent by your browser and tells the server which language(s) you\nprefer, in order by priority. Django tries each language in the header\nuntil it finds one with available translations.</p></li>\n<li><p>Failing that, it uses the global <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a> setting.</p></li>\n</ul>\n<p id=\"locale-middleware-notes\">Notes:</p>\n<ul>\n<li><p>In each of these places, the language preference is expected to be in the\nstandard <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-language-code\"><span class=\"xref std std-term\">language format</span></a>, as a string. For example,\nBrazilian Portuguese is <code class=\"docutils literal notranslate\"><span class=\"pre\">pt-br</span></code>.</p></li>\n<li><p>If a base language is available but the sublanguage specified is not,\nDjango uses the base language. For example, if a user specifies <code class=\"docutils literal notranslate\"><span class=\"pre\">de-at</span></code>\n(Austrian German) but Django only has <code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code> available, Django uses\n<code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code>.</p></li>\n<li><p>Only languages listed in the <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> setting can be selected.\nIf you want to restrict the language selection to a subset of provided\nlanguages (because your application doesn't provide all those languages),\nset <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> to a list of languages. For example:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">LANGUAGES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n  <span class=\"p\">(</span><span class=\"s1\">&#39;de&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;German&#39;</span><span class=\"p\">)),</span>\n  <span class=\"p\">(</span><span class=\"s1\">&#39;en&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;English&#39;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>This example restricts languages that are available for automatic\nselection to German and English (and any sublanguage, like de-ch or\nen-us).</p>\n</li>\n<li><p>If you define a custom <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> setting, as explained in the\nprevious bullet, you can mark the language names as translation strings\n-- but use <a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext_lazy\" title=\"django.utils.translation.ugettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext_lazy()</span></code></a> instead of\n<a class=\"reference internal\" href=\"/ja/1.11/ref/utils/#django.utils.translation.ugettext\" title=\"django.utils.translation.ugettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">ugettext()</span></code></a> to avoid a circular import.</p>\n<p>以下はサンプルの設定ファイルです:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"n\">LANGUAGES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;de&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;German&#39;</span><span class=\"p\">)),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;en&#39;</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;English&#39;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n</ul>\n<p>Once <code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code> determines the user's preference, it makes this\npreference available as <code class=\"docutils literal notranslate\"><span class=\"pre\">request.LANGUAGE_CODE</span></code> for each\n<a class=\"reference internal\" href=\"/ja/1.11/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a>. Feel free to read this value in your view\ncode. Here's a simple example:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">hello_world</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">count</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">LANGUAGE_CODE</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;de-at&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;You prefer to read Austrian German.&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;You prefer to read another language.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Note that, with static (middleware-less) translation, the language is in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">settings.LANGUAGE_CODE</span></code>, while with dynamic (middleware) translation, it's\nin <code class=\"docutils literal notranslate\"><span class=\"pre\">request.LANGUAGE_CODE</span></code>.</p>\n</section>\n<section id=\"how-django-discovers-translations\">\n<span id=\"id6\"></span><h3>How Django discovers translations<a class=\"heading-anchor\" href=\"#how-django-discovers-translations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>At runtime, Django builds an in-memory unified catalog of literals-translations.\nTo achieve this it looks for translations by following this algorithm regarding\nthe order in which it examines the different file paths to load the compiled\n<a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-message-file\"><span class=\"xref std std-term\">message files</span></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">.mo</span></code>) and the precedence of multiple\ntranslations for the same literal:</p>\n<ol class=\"arabic simple\">\n<li><p>The directories listed in <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> have the highest\nprecedence, with the ones appearing first having higher precedence than\nthe ones appearing later.</p></li>\n<li><p>Then, it looks for and uses if it exists a <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> directory in each\nof the installed apps listed in <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.  The ones\nappearing first have higher precedence than the ones appearing later.</p></li>\n<li><p>Finally, the Django-provided base translation in <code class=\"docutils literal notranslate\"><span class=\"pre\">django/conf/locale</span></code>\nis used as a fallback.</p></li>\n</ol>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>The translations for literals included in JavaScript assets are looked up\nfollowing a similar but not identical algorithm. See the\n<a class=\"reference internal\" href=\"#javascript-catalog-view\"><span class=\"std std-ref\">javascript_catalog view documentation</span></a> for\nmore details.</p>\n</aside>\n<p>In all cases the name of the directory containing the translation is expected to\nbe named using <a class=\"reference internal\" href=\"/ja/1.11/topics/i18n/#term-locale-name\"><span class=\"xref std std-term\">locale name</span></a> notation. E.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">pt_BR</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">es_AR</span></code>,\netc.</p>\n<p>This way, you can write applications that include their own translations, and\nyou can override base translations in your project. Or, you can just build\na big project out of several apps and put all translations into one big common\nmessage file specific to the project you are composing. The choice is yours.</p>\n<p>All message file repositories are structured the same way. They are:</p>\n<ul class=\"simple\">\n<li><p>All paths listed in <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> in your settings file are\nsearched for <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;language&gt;/LC_MESSAGES/django.(po|mo)</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">$APPPATH/locale/&lt;language&gt;/LC_MESSAGES/django.(po|mo)</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">$PYTHONPATH/django/conf/locale/&lt;language&gt;/LC_MESSAGES/django.(po|mo)</span></code></p></li>\n</ul>\n<p>To create message files, you use the <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-makemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">makemessages</span></code></a>\ntool. And you use <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-compilemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">compilemessages</span></code></a>\nto produce the binary <code class=\"docutils literal notranslate\"><span class=\"pre\">.mo</span></code> files that are used by <code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code>.</p>\n<p>You can also run <a class=\"reference internal\" href=\"/ja/1.11/ref/django-admin/#django-admin-compilemessages\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">compilemessages</span>\n<span class=\"pre\">--settings=path.to.settings</span></code></a> to make the compiler process all\nthe directories in your <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LOCALE_PATHS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOCALE_PATHS</span></code></a> setting.</p>\n</section>\n<section id=\"using-a-non-english-base-language\">\n<h3>Using a non-English base language<a class=\"heading-anchor\" href=\"#using-a-non-english-base-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django makes the general assumption that the original strings in a translatable\nproject are written in English. You can choose another language, but you must be\naware of certain limitations:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">gettext</span></code> only provides two plural forms for the original messages, so you\nwill also need to provide a translation for the base language to include all\nplural forms if the plural rules for the base language are different from\nEnglish.</p></li>\n<li><p>When an English variant is activated and English strings are missing, the\nfallback language will not be the <a class=\"reference internal\" href=\"/ja/1.11/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a> of the project,\nbut the original strings. For example, an English user visiting a site with\nSpanish as the default language and original strings written in Russian will\nfallback to Russian, not to Spanish.</p></li>\n</ul>\n</section>\n</section>","rootId":"module-django.utils.translation","toc":[{"title":"概要","anchor":"overview","children":[]},{"title":"Python コードでの国際化","anchor":"internationalization-in-python-code","children":[{"title":"標準的な翻訳","anchor":"standard-translation","children":[]},{"title":"翻訳者へのコメント","anchor":"comments-for-translators","children":[]},{"title":"no-op として文字列をマークする","anchor":"marking-strings-as-no-op","children":[]},{"title":"複数形","anchor":"pluralization","children":[]},{"title":"文脈マーカー","anchor":"contextual-markers","children":[]},{"title":"Lazy な翻訳","anchor":"lazy-translation","children":[{"title":"モデルフィールドとリレーションシップの verbose_name と help_text オプションの値","anchor":"model-fields-and-relationships-verbose-name-and-help-text-option-values","children":[]},{"title":"モデルの冗長な名前の値","anchor":"model-verbose-names-values","children":[]},{"title":"モデルメソッド short_description 属性値","anchor":"model-methods-short-description-attribute-values","children":[]}]},{"title":"Lazy 翻訳オブジェクトともに働く","anchor":"working-with-lazy-translation-objects","children":[{"title":"Lazy translations and plural","anchor":"lazy-translations-and-plural","children":[]},{"title":"Formatting strings: format_lazy()","anchor":"formatting-strings-format-lazy","children":[]},{"title":"Other uses of lazy in delayed translations","anchor":"other-uses-of-lazy-in-delayed-translations","children":[]}]},{"title":"言語のローカル化された名前","anchor":"localized-names-of-languages","children":[]}]},{"title":"ローカル化: テンプレート内","anchor":"internationalization-in-template-code","children":[{"title":"trans テンプレートタグ","anchor":"trans-template-tag","children":[]},{"title":"blocktrans テンプレートタグ","anchor":"blocktrans-template-tag","children":[]},{"title":"String literals passed to tags and filters","anchor":"string-literals-passed-to-tags-and-filters","children":[]},{"title":"Comments for translators in templates","anchor":"comments-for-translators-in-templates","children":[]},{"title":"Switching language in templates","anchor":"switching-language-in-templates","children":[]},{"title":"Other tags","anchor":"other-tags","children":[{"title":"get_available_languages","anchor":"get-available-languages","children":[]},{"title":"get_current_language","anchor":"get-current-language","children":[]},{"title":"get_current_language_bidi","anchor":"get-current-language-bidi","children":[]},{"title":"get_language_info","anchor":"get-language-info","children":[]},{"title":"get_language_info_list","anchor":"get-language-info-list","children":[]},{"title":"テンプレートフィルタ","anchor":"template-filters","children":[]}]}]},{"title":"国際化: JavaScript コード内","anchor":"internationalization-in-javascript-code","children":[{"title":"JavaScriptCatalog ビュー","anchor":"module-django.views.i18n","children":[]},{"title":"javascript_catalog ビュー","anchor":"the-javascript-catalog-view","children":[]},{"title":"JavaScript 翻訳カタログを使う","anchor":"using-the-javascript-translation-catalog","children":[{"title":"gettext","anchor":"gettext","children":[]},{"title":"ngettext","anchor":"ngettext","children":[]},{"title":"interpolate","anchor":"interpolate","children":[]},{"title":"get_format","anchor":"get-format","children":[]},{"title":"gettext_noop","anchor":"gettext-noop","children":[]},{"title":"pgettext","anchor":"pgettext","children":[]},{"title":"npgettext","anchor":"npgettext","children":[]},{"title":"pluralidx","anchor":"pluralidx","children":[]}]},{"title":"JSONCatalog ビュー","anchor":"the-jsoncatalog-view","children":[]},{"title":"json_catalog ビュー","anchor":"the-json-catalog-view","children":[]},{"title":"実行速度についての覚え書き","anchor":"note-on-performance","children":[]}]},{"title":"国際化: URL パターン内","anchor":"module-django.conf.urls.i18n","children":[{"title":"URL パターンにおける言語プレフィックス","anchor":"language-prefix-in-url-patterns","children":[]},{"title":"URL パターンを翻訳する","anchor":"translating-url-patterns","children":[]},{"title":"テンプレート内でリバースする","anchor":"reversing-in-templates","children":[]}]},{"title":"ローカル化: 言語ファイルを作成する方法","anchor":"localization-how-to-create-language-files","children":[{"title":"メッセージファイル","anchor":"message-files","children":[]},{"title":"メッセージファイルをコンパイルする","anchor":"compiling-message-files","children":[]},{"title":"トラブルシューティング: ugettext() がパーセント文字を伴う文字列内で python-format を誤って見つけてしまう","anchor":"troubleshooting-ugettext-incorrectly-detects-python-format-in-strings-with-percent-signs","children":[]},{"title":"JavaScript ソースコードからメッセージファイルを作成する","anchor":"creating-message-files-from-javascript-source-code","children":[]},{"title":"Windows での gettext","anchor":"gettext-on-windows","children":[]},{"title":"makemessages コマンドをカスタマイズする","anchor":"customizing-the-makemessages-command","children":[]}]},{"title":"その他","anchor":"miscellaneous","children":[{"title":"The set_language redirect view","anchor":"the-set-language-redirect-view","children":[]},{"title":"明示的にアクティブな言語をセットする","anchor":"explicitly-setting-the-active-language","children":[]},{"title":"ビューやテンプレートの外で翻訳を使う","anchor":"using-translations-outside-views-and-templates","children":[]},{"title":"Language cookie","anchor":"language-cookie","children":[]}]},{"title":"Implementation notes","anchor":"implementation-notes","children":[{"title":"Specialties of Django translation","anchor":"specialties-of-django-translation","children":[]},{"title":"How Django discovers language preference","anchor":"how-django-discovers-language-preference","children":[]},{"title":"How Django discovers translations","anchor":"how-django-discovers-translations","children":[]},{"title":"Using a non-English base language","anchor":"using-a-non-english-base-language","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/1.11/topics/"},{"docname":"topics/i18n/index","title":"国際化とローカル化","url":"/ja/1.11/topics/i18n/"}],"prev":{"docname":"topics/i18n/index","title":"国際化とローカル化","url":"/ja/1.11/topics/i18n/"},"next":{"docname":"topics/i18n/formatting","title":"表示形式のローカル化","url":"/ja/1.11/topics/i18n/formatting/"},"formats":{"html":"/ja/1.11/topics/i18n/translation/","markdown":"/ja/1.11/topics/i18n/translation.md","json":"/ja/1.11/topics/i18n/translation.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/topics/i18n/translation.txt","official":"https://docs.djangoproject.com/ja/1.11/topics/i18n/translation/","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","fr","ja","id","pt-br","ko","es","el","pl"]}