フォーマットのローカリゼーション
概要
Djangoのフォーマットシステムは、現在のロケールに指定されたフォーマットを使用して、テンプレートに日付、時刻、および数値を表示することができます。 また、フォームでのローカライズされた入力も処理します。
有効にすると、同じコンテンツにアクセスする2人のユーザーに、現在のロケールの形式に応じて、異なる方法でフォーマットされた日付、時刻、および数値が表示される場合があります。
書式設定システムはデフォルトで無効になっています。 有効にするには、設定する必要があります :setting: `USE_L10N = True ` 設定ファイルで。
ノート
デフォルトsettings.py
によって作成されたファイル :djadmin: `django-admin startproject ` 含まれています :setting: `USE_L10N = True ` 便宜上。 ただし、千の区切り記号を使用した数値フォーマットを有効にするには、を設定する必要があることに注意してください。 :setting: `USE_THOUSAND_SEPARATOR = True ` 設定ファイルで。 または、:tfilter: `intcomma` を使用して、テンプレートの数値をフォーマットすることもできます。
フォームへのロケール認識入力
フォーマットが有効になっている場合、Djangoはフォームの日付、時刻、数値を解析するときにローカライズされたフォーマットを使用できます。 つまり、フォームにデータを入力するときにユーザーが使用する形式を推測するときに、ロケールごとに異なる形式を試します。
ノート
Djangoは、データの解析に使用する形式とは異なる形式を使用してデータを表示します。 特に、日付の解析形式では、%a
(曜日の省略名)、%A
(完全な平日名)、%b
(月の省略名)、[ X163X] (完全な月の名前)、または%p
(AM / PM)。
フォームフィールドで入力データと出力データをローカライズできるようにするには、localize
引数を使用するだけです。
class CashRegisterForm(forms.Form):
product = forms.CharField()
revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)
テンプレートでのローカリゼーションの制御
:setting: `USE_L10N` でフォーマットを有効にすると、Djangoはテンプレートに値を出力するたびにロケール固有のフォーマットを使用しようとします。
ただし、ローカライズされた値を使用することが常に適切であるとは限りません。たとえば、機械可読になるように設計されたJavaScriptまたはXMLを出力する場合、ローカライズされていない値が常に必要になります。 どこでもローカリゼーションを使用するのではなく、選択したテンプレートでローカリゼーションを使用することもできます。
ローカリゼーションの使用を細かく制御できるように、Djangoは次のタグとフィルターを含むl10n
テンプレートライブラリを提供しています。
テンプレートフィルター
localize
単一の値のローカリゼーションを強制します。
例えば:
{% load l10n %}
{{ value|localize }}
単一の値のローカリゼーションを無効にするには、:tfilter: `unlocalize` を使用します。 テンプレートの大部分のローカリゼーションを制御するには、:ttag: `localize` テンプレートタグを使用します。
unlocalize
ローカリゼーションなしで単一の値を強制的に印刷します。
例えば:
{% load l10n %}
{{ value|unlocalize }}
単一の値のローカリゼーションを強制するには、:tfilter: `localize` を使用します。 テンプレートの大部分のローカリゼーションを制御するには、:ttag: `localize` テンプレートタグを使用します。
カスタムフォーマットファイルの作成
Djangoは多くのロケールのフォーマット定義を提供しますが、ロケールのフォーマットファイルが存在しないため、または一部の値を上書きするために、独自のフォーマット定義を作成したい場合があります。
カスタムフォーマットを使用するには、フォーマットファイルを最初に配置するパスを指定します。 これを行うには、:setting: `FORMAT_MODULE_PATH` 設定を、フォーマットファイルが存在するパッケージに設定します。例:
FORMAT_MODULE_PATH = [
'mysite.formats',
'some_app.formats',
]
ファイルはこのディレクトリに直接配置されるのではなく、ロケールとして指定されたディレクトリに配置され、formats.py
という名前を付ける必要があります。 文字列をdjango.utils.formats.get_format()
(:tfilter: `date` テンプレートフィルターで使用)に渡すと、内部の値が公開される可能性があるため、これらのファイルに機密情報を入れないように注意してください。
英語の形式をカスタマイズするには、次のような構造が必要になります。
mysite/
formats/
__init__.py
en/
__init__.py
formats.py
ここで、formats.py
にはカスタムフォーマット定義が含まれています。 例えば:
THOUSAND_SEPARATOR = '\xa0'
英語のデフォルトであるコンマの代わりに、ノーブレークスペース(Unicode 00A0
)を千単位の区切り文字として使用します。
提供されるロケール形式の制限
一部のロケールは、Djangoのローカリゼーションシステムが自動的に処理できない数値にコンテキスト依存の形式を使用します。
スイス(ドイツ語)
スイスの数値のフォーマットは、フォーマットされる数値のタイプによって異なります。 金額の場合、1000区切り文字としてコンマが使用され、小数点記号として小数点が使用されます。 他のすべての数値の場合、小数点記号としてコンマが使用され、千単位の区切り文字としてスペースが使用されます。 Djangoが提供するロケール形式では、一般的な区切り文字、小数点の場合はコンマ、千の区切り記号の場合はスペースを使用します。