---
title: "表示形式のローカル化"
version: 2.1
locale: ja
source: https://docs.djangoproject.com/ja/2.1/topics/i18n/formatting/
canonical: https://djangodocs.dev/ja/2.1/topics/i18n/formatting/
---
# 表示形式のローカル化

## 概要

Django の表示形式システムは、カレント [ロケール](/ja/2.1/topics/i18n/#term-locale-name) に合った表示形式を使って日付、時刻、数値をテンプレート内で表示することができます。また、フォームでのローカル化された入力も処理します。

この機能が有効のとき、同じコンテンツにアクセスする 2 人のユーザは、違う形で日付、時刻、数値を目にすることになるでしょう。これは、現在のロケールの表示形式に依存します。

デフォルトでは、表示形式システムは無効になっています。有効化するには、設定ファイル内の [`USE_L10N = True`](/ja/2.1/ref/settings/#std-setting-USE_L10N) をセットする必要があります。

> **Note**
>
> [`django-admin startproject`](/ja/2.1/ref/django-admin/#django-admin-startproject) によって生成されるデフォルトの `settings.py` ファイルは、利便性のために [`USE_L10N = True`](/ja/2.1/ref/settings/#std-setting-USE_L10N) を含んでいます。ただし、1000 区切りでの数値表示を有効にするためには、設定ファイル内で [`USE_THOUSAND_SEPARATOR = True`](/ja/2.1/ref/settings/#std-setting-USE_THOUSAND_SEPARATOR) にすることに注意してください。別の方法として、テンプレート内で数値の表示形式を指定するために [`intcomma`](/ja/2.1/ref/contrib/humanize/#std-templatefilter-intcomma) を使うこともできます。

> **Note**
>
> ほかにも、独立はしていますが、関連する [`USE_I18N`](/ja/2.1/ref/settings/#std-setting-USE_I18N) 設定もあります。これは、Django が表示形式のローカル化を有効にするかどうかをコントロールします。詳しくは [翻訳](/ja/2.1/topics/i18n/translation/) を参照してください。

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

表示形式機能が有効のとき、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`](/ja/2.1/ref/settings/#std-setting-USE_L10N) で表示形式を有効にしたとき、Django はテンプレート内で値が出力されたときはいつでもロケールに対応した表示形式を使います。

しかし、ローカル化された値を使うことが適切ではないこともあります -- 例えば、機械可読的に絵座員された JavaScript や XML を出力している場合、常にローカル化されていない値が必要でしょう。また、全ての場所でローカル化を適用するのではなく、特定のテンプレートだけで使いたいときもあるかもしれません。

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

### テンプレートタグ

#### `localize`

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

このタグでは、[`USE_L10N`](/ja/2.1/ref/settings/#std-setting-USE_L10N) よりも細かい粒度のローカル化のコントロールができます。

テンプレートブロックに対してローカル化を有効化または無効化するためには、以下を使ってください:

```
{% load l10n %}

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

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

> **Note**
>
> [`USE_L10N`](/ja/2.1/ref/settings/#std-setting-USE_L10N) の値は、`{% localize %}` ブロック内では尊重されません。

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

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

#### `localize`

単数のローカル化を強制します。

例:

```
{% load l10n %}

{{ value|localize }}
```

単数のローカル化を無効化するには、[`unlocalize`](#std-templatefilter-unlocalize) を使ってください。テンプレートの大きな範囲を通じてローカル化をコントロールするには、[`localize`](#std-templatetag-localize) テンプレートタグを使ってください。

#### `unlocalize`

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

例:

```
{% load l10n %}

{{ value|unlocalize }}
```

単数のローカル化を強制するには、[`localize`](#std-templatefilter-localize) を使ってください。テンプレートの大きな範囲を通じてローカル化をコントロールするには、[`localize`](#std-templatetag-localize) テンプレートタグを使ってください。

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

Django は多くのロケールに対して表示形式の定義を準備していますが、あなたのロケールに対して表示形式ファイルが存在しなかったり、値のいくつかを上書きしたいときには、独自の定義を作成したいこともあるでしょう。

独自の表示形式を使うには、最初に表示形式を設置するパスを指定してください。そのために、[`FORMAT_MODULE_PATH`](/ja/2.1/ref/settings/#std-setting-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`](/ja/2.1/ref/templates/builtins/#std-templatefilter-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.

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

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

### スイス (ドイツ語)

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