書式ローカライズ

リリースノートを参照してください

概要

Django の書式設定システムでは、使用中の ロケール 向けの 書式を使って、日時や数字をテンプレートに表示することができます。 また、フォームでのローカライズされた入力を扱うこともできます。

そうすることで、同じコンテンツにアクセスしている二人のユーザーが、それぞれの ロケール設定に依存した書式で日時や数字を見ることになります。

この書式設定システムはデフォルトでは無効となっています。有効とするには、ファ イル設定で USE_L10N = True と設定する必要があります。

Note

django-admin.py startproject によって生成され るデフォルトの settings.py ファイルは、利便性のため USE_L10N = True を含むものとなっています。

Note

別の、しかし関連する設定 USE_I18N は、Djangoが翻訳を有効化す べきかの制御を行います。詳細については、 翻訳 を参照してください。

ロケールを考慮したフォームの入力

書式設定が有効となったら、 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)

テンプレートでのローカライズ制御

USE_L10N によって書式設定を有効化すると、 Django はテンプ レートへの出力値が何であろうと、ロケール向けの書式を使おうとします。

しかしながら、ローカライズされた値を使うことはいつも正しいとはかぎり ません。たとえば、機械解読可能なように設計された Javascript あるいは XML で出力している場合、値がつねにローカライズされることは望ましくな いでしょう。また、全ての箇所でローカライズするより、選択したテンプレ ート内でそうしたいと思うかもしれません。

ローカライズの細かな制御のためには、 Django は、以下のタグやフィルタ を含む l10n のテンプレートライブラリを用意しています。

テンプレートタグ

localize

リリースノートを参照してください

ブロック内のテンプレート変数のローカライズを有効または無効にします。

このタグにより USE_L10N よりも細かいローカライズの粒度制御が可能 となります。

テンプレートブロックへのローカライズを有効化、または無効化するためにはこのよ うにします:

{% load l10n %}

{% localize on %}
    {{ value }}
{% endlocalize %}

{% localize off %}
    {{ value }}
{% endlocalize %}

Note

{% localize %} ブロックの内部では USE_L10N の値は 考慮されません。

変数ごとに同じ働きをするテンプレートフィルタについては localizeunlocalize を参照してください。

テンプレートフィルタ

localize

リリースノートを参照してください

単独の値のローカライズを強制します。

例:

{% load l10n %}

{{ value|localize }}

単独の値のローカライズを無効化するためには unlocalize を使います。 テンプレートの大きなセクションのローカライズを制御するには、 localize テンプレートタグを使います。

unlocalize

リリースノートを参照してください

ローカライズ無しで単独の値を出力することを強制します。

例:

{% load l10n %}

{{ value|unlocalize }}

単独の値のローカライズを強制するには、 localize を使います。テンプ レートの大きなセクションのローカライズを制御するには localize テンプ レートタグを使います。

カスタムフォーマットファイルの作成

Django は多くのローカルに限定された書式を用意していますが、ときには、ロケール に書式ファイルがないとか、値を上書きしたいとかいった理由で、あなた自身の書式 を作りたくなるかもしれません。

カスタムフォーマットを使うには、最初にフォーマットファイルを保存するパスを指定 します。 FORMAT_MODULE_PATH 設定にフォーマットファイルを保存するパッ ケージを設定するだけです。たとえばこんな具合です:

FORMAT_MODULE_PATH = 'mysite.formats'

ファイルはこのディレクトリに直接ではなく、ロケール名のディレクトリに保存します。 formats.py という名前で保存してください。

英語の書式をカスタマイズするには、このような構造が必要です:

mysite/
    formats/
        __init__.py
        en/
            __init__.py
            formats.py

formats.py にカスタムフォーマットの定義が含めます。例えば:

THOUSAND_SEPARATOR = u'\xa0'

これは 3 桁ごとの区切りとして、英語のデフォルトのカンマの代わりにノーブレーク スペース (Unicode の 00A0) を使う場合です。

提供されるロケールフォーマットの制限

数字については、いくつかのロケールではコンテキストに依存した書式が使いられ ますが、それらに関しては Django のローカライズシステムは自動的には操作しません。

スイス (ドイツ語)

スイスの数字フォーマットは、フォーマットされる数字の種類に依存します。金額の 値では、 3 桁ごとの区切りにカンマが使われ、小数点の区切りには小数点が使われ ます。他の全ての数字では、カンマが小数点として使われ、空白が 3 桁ごとの区切 りに使わ れます。 Django が提供するロケールフォーマットは、汎用区切り文字を 使い、小数点にはカンマを、 3 桁ごとの区切りには空白を使います。