Django 4.0 の管理画面を日本語化する方法

Django 4.0 の管理画面を日本語化する方法

Django の管理画面

Django は Python で作られている Web フレームワークです。ちょっとした Web システムを組むときは Flask を利用したりしますが、大きめのシステムだと Django を利用した方がいいでしょう。
その Django には標準の管理画面が用意されています。管理画面をゼロから用意するのは大変ですので、そのベースがあるのは大変助かります。しかし、この管理画面は標準では英語表記です。管理者が英語を毛嫌いしていれば却下されてしまいます。今回はこの Django の管理画面を日本語化する方法を紹介します。

説明するにはそのベースが必要になるので、今回は Django 4.0.2 での「チュートリアルその7」まで終わっている状態のプロジェクトを元に紹介します。

https://docs.djangoproject.com/ja/4.0/intro/tutorial07/

このとき管理画面は次のように表示されています。



0. 管理画面の日本語化

まずは基本的な項目になりますが、管理画面を日本語化しましょう。
これはプロジェクトフォルダにある settings.py を編集します。
編集するのは、「 LANGUAGE_CODE 」です。これを「 ja 」にしましょう。またついでに「 TIME_ZONE 」も日本標準時に変更しておくといいでしょう。

mysite/setting.py

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
これにより次のように表示されます。多くの箇所が日本語化されたことが判ります。


残りの箇所は、それぞれ以下の番号の対応が必要になります。

1. アプリ名の日本語化

Django には複数のアプリを追加しますが、そのアプリ名を日本語表示させましょう。
それには apps.py の PollsConfig クラスを編集します。 PollsCpnfig クラスは AppConfig クラスを継承しており、この AppConfig は verbose_name 変数を持っています。この verbose_name が表示する名前になります。

polls/apps.py

class PollsConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'polls'
    verbose_name = '世論調査'

2. モデル名の日本語化

次は Question モデルを日本語化します。
それには Question クラス内に Meta クラスを用意します。そして Meta クラスに verbose_name をセットします。また verbose_name だけだと、所々「 質問s 」のように英語の複数形を示す「 s 」が付いて表示されます。そのため日本語の場合は verbose_name_plural にも同じ値をセットするといいでしょう。

polls/models.py

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('Date Published')

    def __str__(self):
        return self.question_text

    @admin.display(
        boolean=True,
        ordering='pub_date',
        description='Published recently?',
    )
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    class Meta:
        verbose_name = '質問'
        verbose_name_plural = '質問'

3. 項目名の日本語化

リストのカラム名にも表示される項目を日本語化します。
それぞれ設定方法が異なるので注意が必要です。モデルのフィールドに相当する CharField では引数の verbose_name に値をセットします。 DateTimeField でも同様ですが、第 1 引数が verbose_name であるため、 models.DateTimeField(‘発行日’) としても大丈夫です。
また was_published_recently メソッドについては管理画面で表示する設定が @admin.display で行われているので、その description に値をセットします。

polls/models.py

class Question(models.Model):
    question_text = models.CharField(max_length=200, verbose_name='質問')
    pub_date = models.DateTimeField('発行日')

    def __str__(self):
        return self.question_text

    @admin.display(
        boolean=True,
        ordering='pub_date',
        description='最近?',
    )
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

    class Meta:
        verbose_name = '質問'
        verbose_name_plural = '質問'

上記 1, 2, 3 を設定すると、次のように表示されます。



まとめ

今回は、 Django の管理画面日本語化を紹介しました。設定が必要な個所は様々ですが、全て設定することができました。今回紹介した以外にも、追加項目などの日本語化もありますが、それらにも設定方法が備わっています。
管理画面をゼロから用意するのは大変なので、標準で備わっている Django の管理画面を編集するのがいいでしょう。ぜひフル活用してください。
» エンジニア登録はこちら