表示形式のローカル化¶
概要¶
Django の表示形式システムは、カレント ロケール に合った表示形式を使って日付、時刻、数値をテンプレート内で表示することができます。また、フォームでのローカル化された入力も処理します。
この機能が有効のとき、同じコンテンツにアクセスする 2 人のユーザは、違う形で日付、時刻、数値を目にすることになるでしょう。これは、現在のロケールの表示形式に依存します。
デフォルトでは、表示形式システムは無効になっています。有効化するには、設定ファイル内の USE_L10N = True
をセットする必要があります。
注釈
django-admin startproject
によって生成されるデフォルトの settings.py
ファイルは、利便性のために USE_L10N = True
を含んでいます。ただし、1000 区切りでの数値表示を有効にするためには、設定ファイル内で USE_THOUSAND_SEPARATOR = True
にすることに注意してください。別の方法として、テンプレート内で数値の表示形式を指定するために intcomma
を使うこともできます。
フォームでのロケールを認識する入力¶
表示形式機能が有効のとき、Django がフォーム内で日付、時刻、数値を描画する際に、ローカル化された表示形式を使用することができます。フォームにデータが入力されたとき、ユーザによって使用される表示形式を推測し、異なるロケールに対する異なる表示形式を試みることを意味します。
注釈
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 %}
注釈
USE_L10N
の値は、{% localize %}
ブロック内では尊重されません。
各変数ベースで同じ仕事をするテンプレートフィルタについて、localize
と unlocalize
を参照してください。
テンプレートフィルタ¶
localize
¶
単数のローカル化を強制します。
例:
{% load l10n %}
{{ value|localize }}
単数のローカル化を無効化するには、unlocalize
を使ってください。テンプレートの大きな範囲を通じてローカル化をコントロールするには、localize
テンプレートタグを使ってください。
独自の表示形式ファイルを作成する¶
Django は多くのロケールに対して表示形式の定義を準備していますが、あなたのロケールに対して表示形式ファイルが存在しなかったり、値のいくつかを上書きしたいときには、独自の定義を作成したいこともあるでしょう。
独自の表示形式を使うには、最初に表示形式を設置するパスを指定してください。そのために、FORMAT_MODULE_PATH
設定を表示形式ファイルを置く予定のパッケージにセットしてください。例えば:
FORMAT_MODULE_PATH = [
'mysite.formats',
'some_app.formats',
]
Files are not placed directly in this directory, but in a directory named as
the locale, and must be named formats.py
. Be careful not to put sensitive
information in these files as values inside can be exposed if you pass the
string to django.utils.formats.get_format()
(used by the date
template filter).
To customize the English formats, a structure like this would be needed:
mysite/
formats/
__init__.py
en/
__init__.py
formats.py
where formats.py
contains custom format definitions. For example:
THOUSAND_SEPARATOR = '\xa0'
to use a non-breaking space (Unicode 00A0
) as a thousand separator,
instead of the default for English, a comma.