リリースノートを参照してください
Django の書式設定システムでは、使用中の ロケール 向けの 書式を使って、日時や数字をテンプレートに表示することができます。 また、フォームでのローカライズされた入力を扱うこともできます。
そうすることで、同じコンテンツにアクセスしている二人のユーザーが、それぞれの ロケール設定に依存した書式で日時や数字を見ることになります。
この書式設定システムはデフォルトでは無効となっています。有効とするには、ファ
イル設定で USE_L10N = True
と設定する必要があります。
Note
django-admin.py startproject
によって生成され
るデフォルトの settings.py
ファイルは、利便性のため
USE_L10N = True
を含むものとなっています。
書式設定が有効となったら、 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
のテンプレートライブラリを用意しています。
リリースノートを参照してください
ブロック内のテンプレート変数のローカライズを有効または無効にします。
このタグにより USE_L10N
よりも細かいローカライズの粒度制御が可能
となります。
テンプレートブロックへのローカライズを有効化、または無効化するためにはこのよ うにします:
{% load l10n %}
{% localize on %}
{{ value }}
{% endlocalize %}
{% localize off %}
{{ value }}
{% endlocalize %}
Note
{% localize %}
ブロックの内部では USE_L10N
の値は
考慮されません。
変数ごとに同じ働きをするテンプレートフィルタについては
localize
と unlocalize
を参照してください。
リリースノートを参照してください
単独の値のローカライズを強制します。
例:
{% load l10n %}
{{ value|localize }}
単独の値のローカライズを無効化するためには unlocalize
を使います。
テンプレートの大きなセクションのローカライズを制御するには、 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 桁ごとの区切りには空白を使います。
Oct 26, 2017