# Django 6.0.7 ドキュメント

# 表示形式のローカライズ

## 概要

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

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

注釈

3桁区切りを使用した数値フォーマットを有効にするには、設定ファイルで `USE_THOUSAND_SEPARATOR = True` を設定する必要があります。別の方法として、 `intcomma` を使ってテンプレート内で数値をフォーマットすることもできます。

注釈

関連する `USE_I18N` 設定があり、 Django が翻訳を有効にするかどうかを制御します。詳しくは 翻訳 を参照してください。

## フォームでのロケールを認識する入力

表示形式機能が有効のとき、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)

### Locale specific helpers

For country specific form fields, validation, and data formats that are not included in Django itself, consider using the django-localflavor package, which provides localized form fields and utilities for many countries and regions (documentation).

## テンプレート内でローカライズをコントロールする

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

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

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

### テンプレートタグ

#### `localize`

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

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

    {% load l10n %}

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

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

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

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

### テンプレートフィルタ

#### `localize`

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

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

    {% load l10n %}

    {{ value|localize }}

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

#### `unlocalize`

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

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

    {% load l10n %}

    {{ value|unlocalize }}

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

数値（`int`、`float`、または `Decimal`）に対して、localization settings のフォーマットを適用した文字列表現を返します。

## 独自の表示形式ファイルを作成する

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

To use custom formats, specify the path where you'll place format files first. To do that, set your `FORMAT_MODULE_PATH` setting to the package where format files will exist, for instance:

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

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

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

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

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

    THOUSAND_SEPARATOR = "\xa0"

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

## 提供されているロケール表示形式の限界

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

### スイス (ドイツ語、フランス語)

スイスにおける数値表記は、文脈によって伝統的に使い分けられています。たとえば、金額では小数点にドットを用いることがあります（`Fr. 23.50`）。一方、寸法などの測定値ではカンマが使われることが一般的です（`22,5 m`）。Django のローカライゼーションシステムは、このような文脈依存の表記の違いを自動的に扱うことはできません。

Django が提供するロケール形式では、一般的な区切り記号が使用されており、小数点にはカンマ、千位区切りにはスペースが用いられます。