表示形式のローカライズLink to this heading

概要Link to this heading

Django の表示形式システムは、カレント ロケール に合った表示形式を使って日付、時刻、数値をテンプレート内で表示することができます。また、フォームでのローカライズされた入力も処理します。

同じコンテンツにアクセスする2人のユーザーが、現在のロケールのフォーマットに応じて、日付、時刻、数字を異なる方法で表示することがあります。

フォームでのロケールを認識する入力Link to this heading

表示形式機能が有効のとき、Django がフォーム内で日付、時刻、数値を描画する際に、ローカライズされた表示形式を使用できます。フォームにデータが入力されたとき、ユーザによって使用される表示形式を推測し、異なるロケールに対する異なる表示形式を試みることを意味します。

フォームフィールドの入出力データをローカライズするには localize 引数を使います:

Code
class CashRegisterForm(forms.Form):
    product = forms.CharField()
    revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)

テンプレート内でローカライズをコントロールするLink to this heading

Django はテンプレートで値を出力するときは常にロケール固有の書式を使おうとし ます。

しかし、ローカライズされた値を使うことが適切ではないこともあります -- 例えば、機械が読み込むためにデザインされた JavaScript や XML を出力している場合、どんなときでも非ローカルの値が必要でしょう。また、全ての場所でローカライズを適用するのではなく、特定のテンプレートだけで使いたいときもあるかもしれません。

ローカライズの仕様について細かいコントロールをするために、Django は l10n テンプレートライブラリを提供しています。これは、以下のタグやフィルタを含んでいます。

テンプレートタグLink to this heading

localizeLink to this heading

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

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

Django template
{% load l10n %}

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

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

ローカライズが無効化されている場合、localization settings のフォーマットが適用されます。

各変数ベースで同じ仕事をするテンプレートフィルタについて、localizeunlocalize を参照してください。

テンプレートフィルタLink to this heading

localizeLink to this heading

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

例えば次のようにします:

Django template
{% load l10n %}

{{ value|localize }}

単数のローカライズを無効化するには、unlocalize を使ってください。テンプレートの大きな範囲を通じてローカライズをコントロールするには、localize テンプレートタグを使ってください。

unlocalizeLink to this heading

単数形がローカライズされずに表示されるように強制します。

例えば次のようにします:

Django template
{% load l10n %}

{{ value|unlocalize }}

単数のローカライズを強制するには、localize を使ってください。テンプレートの大きな範囲を通じてローカライズをコントロールするには、localize テンプレートタグを使ってください。

数値(intfloat、または Decimal)に対して、localization settings のフォーマットを適用した文字列表現を返します。

独自の表示形式ファイルを作成するLink to this heading

Django は多くのロケール用のフォーマット定義を提供していますが、自分のロケール用のフォーマットファイルが存在しなかったり、いくつかの値を上書きしたりするために、自分でフォーマット定義を作りたいこともあるでしょう。

カスタムフォーマットを使用するには、まずフォーマットファイルを置くパスを指定します。 そのためには FORMAT_MODULE_PATH 設定をフォーマットファイルが存在するパッケージに設定します、例えば次のようにします:

Code
FORMAT_MODULE_PATH = [
    "mysite.formats",
    "some_app.formats",
]

ファイルはこのディレクトリに直接置くのではなく、ロケールと同じ名前のディレクトリに置き、 formats.py という名前にする必要があります。 django.utils.formats.get_format() (date テンプレートフィルタで使用されます) に文字列を渡すと、中の値が公開される可能性があるので、これらのファイルに機密情報を書かないように注意してください。

英語のフォーマットをカスタマイズするには、このような構造が必要です:

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

ここで formats.py はカスタムフォーマットの定義を含んでいます。たとえば:

Code
THOUSAND_SEPARATOR = "\xa0"

上記のようにすると、英語のデフォルトであるコンマの代わりに、区切りのないスペース(Unicode 00A0)を3桁区切りとして使うことができます。

提供されているロケール表示形式の限界Link to this heading

いくつかのロケールは、数字に対して文脈依存の表示形式を使います。これは、Django のローカライズシステムでは自動的に扱うことはできません。

スイス (ドイツ語)Link to this heading

スイスの数値の表示形式は、対象となる数字の種類によって決まります。貨幣の値に対しては、カンマが 1000 区切りに使われ、小数点が小数区切りに使われます。他の数字に対しては、カンマは小数区切りとして使われ、空白が 1000 区切りとして使われます。Django によって提供されるロケール表示形式は、一般的な区切り文字、つまり小数にはカンマそして1000 区切りには空白を使用します。