.. _format-localization: ================ 書式ローカライズ ================ .. versionadded:: 1.2 概要 ==== Django の書式設定システムでは、使用中の :term:`ロケール` 向けの 書式を使って、日時や数字をテンプレートに表示することができます。 また、フォームでのローカライズされた入力を扱うこともできます。 そうすることで、同じコンテンツにアクセスしている二人のユーザーが、それぞれの ロケール設定に依存した書式で日時や数字を見ることになります。 この書式設定システムはデフォルトでは無効となっています。有効とするには、ファ イル設定で :setting:`USE_L10N = True ` と設定する必要があります。 .. note:: :djadmin:`django-admin.py startproject ` によって生成され るデフォルトの :file:`settings.py` ファイルは、利便性のため :setting:`USE_L10N = True ` を含むものとなっています。 .. note:: 別の、しかし関連する設定 :setting:`USE_I18N` は、Djangoが翻訳を有効化す べきかの制御を行います。詳細については、 :doc:`/topics/i18n/translation` を参照してください。 ロケールを考慮したフォームの入力 ================================ 書式設定が有効となったら、 Django は、ローカライズ書式を、日時や数字をフォー ムにおいて解析する場合に使うことができます。つまり、ユーザがフォームに入力す る際に使った書式を推測しながら、異なるロケールの異なる書式を試すということで す。 .. note:: Django はデータ解析のために使う書式とは違う書式を、データを表示する際 に使います。とりわけ、データ解析のための書式では、 ``%a`` (省略された 曜日名) や ``%A`` (省略されない曜日名) ``%b`` (省略された月の名前) ``%B`` (省略されない月の名前) ``%p`` (AM/PM) を使うことはできません。 フォームフィールドがデータの入出力をローカライズできるようにするには、 ``localize`` 引数を使うだけです:: class CashRegisterForm(forms.Form): product = forms.CharField() revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True) .. _topic-l10n-templates: テンプレートでのローカライズ制御 ================================ :setting:`USE_L10N` によって書式設定を有効化すると、 Django はテンプ レートへの出力値が何であろうと、ロケール向けの書式を使おうとします。 しかしながら、ローカライズされた値を使うことはいつも正しいとはかぎり ません。たとえば、機械解読可能なように設計された Javascript あるいは XML で出力している場合、値がつねにローカライズされることは望ましくな いでしょう。また、全ての箇所でローカライズするより、選択したテンプレ ート内でそうしたいと思うかもしれません。 ローカライズの細かな制御のためには、 Django は、以下のタグやフィルタ を含む ``l10n`` のテンプレートライブラリを用意しています。 テンプレートタグ ---------------- .. templatetag:: localize localize ~~~~~~~~ .. versionadded:: 1.3 ブロック内のテンプレート変数のローカライズを有効または無効にします。 このタグにより :setting:`USE_L10N` よりも細かいローカライズの粒度制御が可能 となります。 テンプレートブロックへのローカライズを有効化、または無効化するためにはこのよ うにします:: {% load l10n %} {% localize on %} {{ value }} {% endlocalize %} {% localize off %} {{ value }} {% endlocalize %} .. note:: ``{% localize %}`` ブロックの内部では :setting:`USE_L10N` の値は 考慮されません。 変数ごとに同じ働きをするテンプレートフィルタについては :tfilter:`localize` と :tfilter:`unlocalize` を参照してください。 テンプレートフィルタ -------------------- .. templatefilter:: localize localize ~~~~~~~~ .. versionadded:: 1.3 単独の値のローカライズを強制します。 例:: {% load l10n %} {{ value|localize }} 単独の値のローカライズを無効化するためには :tfilter:`unlocalize` を使います。 テンプレートの大きなセクションのローカライズを制御するには、 :ttag:`localize` テンプレートタグを使います。 .. templatefilter:: unlocalize unlocalize ~~~~~~~~~~ .. versionadded:: 1.3 ローカライズ無しで単独の値を出力することを強制します。 例:: {% load l10n %} {{ value|unlocalize }} 単独の値のローカライズを強制するには、 :tfilter:`localize` を使います。テンプ レートの大きなセクションのローカライズを制御するには :ttag:`localize` テンプ レートタグを使います。 .. _custom-format-files: カスタムフォーマットファイルの作成 ================================== Django は多くのローカルに限定された書式を用意していますが、ときには、ロケール に書式ファイルがないとか、値を上書きしたいとかいった理由で、あなた自身の書式 を作りたくなるかもしれません。 カスタムフォーマットを使うには、最初にフォーマットファイルを保存するパスを指定 します。 :setting:`FORMAT_MODULE_PATH` 設定にフォーマットファイルを保存するパッ ケージを設定するだけです。たとえばこんな具合です:: FORMAT_MODULE_PATH = 'mysite.formats' ファイルはこのディレクトリに直接ではなく、ロケール名のディレクトリに保存します。 ``formats.py`` という名前で保存してください。 英語の書式をカスタマイズするには、このような構造が必要です:: mysite/ formats/ __init__.py en/ __init__.py formats.py :file:`formats.py` にカスタムフォーマットの定義が含めます。例えば:: THOUSAND_SEPARATOR = u'\xa0' これは 3 桁ごとの区切りとして、英語のデフォルトのカンマの代わりにノーブレーク スペース (Unicode の ``00A0``) を使う場合です。 提供されるロケールフォーマットの制限 ==================================== 数字については、いくつかのロケールではコンテキストに依存した書式が使いられ ますが、それらに関しては Django のローカライズシステムは自動的には操作しません。 スイス (ドイツ語) ----------------- スイスの数字フォーマットは、フォーマットされる数字の種類に依存します。金額の 値では、 3 桁ごとの区切りにカンマが使われ、小数点の区切りには小数点が使われ ます。他の全ての数字では、カンマが小数点として使われ、空白が 3 桁ごとの区切 りに使わ れます。 Django が提供するロケールフォーマットは、汎用区切り文字を 使い、小数点にはカンマを、 3 桁ごとの区切りには空白を使います。