実現したいこと
djangoでバリデーションメッセージを日本語化したいです。
前提
Pythonバージョン:3.11.3
Dyangoバージョン:4.2
※venv上で仮想サーバーを起動し(runserver)動作確認をしています。
発生している問題・エラーメッセージ
バリデーションメッセージが英語のまま出力されます。
該当のソースコード
現在Djangoの動作確認のため、テスト用のサイトを作成しています。
そのうち、今回の事例に関連する部分は下記になります。
poll.views.IndexView.py
Django
1from django.shortcuts import render 2from django.views.generic import View 3import logging 4 5class IndexView(View): 6 def get(self,request): 7 params = dict(request.GET) 8 serializer = PollsSerializer(data=params); 9 logger = logging.getLogger('django') 10 if (serializer.is_valid() == False): 11 logger.info(serializer.errors) 12 13 return render(request,"polls/index.html",params)
polls.serializers.PollsSerializers.py
Django
1from rest_framework import serializers 2 3class PollsSerializer(serializers.Serializer): 4 test_param_1 = serializers.CharField( 5 required=True, 6 )
現状
loclahost:8000?test_param_1=2222にアクセスしてみましたが、ログには英語のメッセージ(Not a valid string)しか表示されません。
表示されたメッセージ
app.log
1[INFO] 2023-05-15 13:05:20,081 django.get:23 {'test_param_1': [INFO] 2023-05-15 14:08:17,218 django.get:13 {'test_param_1': [ErrorDetail(string='Not a valid string.', code='invalid')]}
しかし、パラメータを渡さず、localhost:8000にアクセスすると、日本語のログが表示されます。
app.log
1[INFO] 2023-05-15 14:07:57,639 django.get:13 {'test_param_1': [ErrorDetail(string='このフィールドは必須です。', code='required')]}
確認したところ,「このフィールドは必須です。」のメッセージは、venv以下のフォルダに存在することが
おりますが、settings.pyはプロジェクトフォルダ上の国際化ファイルを見るように設定しているので、その設定が効いていないことはわかるのですが、どうすれば効くようになるのかをご享受願いたいです。
試したこと
1.settings.pyに国際化の設定をおこないました。
project/settings.py
Django
1from django.utils.translation import gettext_lazy as _ 2#------------------------------------------- 3# ミドルウェア 4#------------------------------------------- 5MIDDLEWARE = [ 6 'django.middleware.security.SecurityMiddleware', 7 'django.contrib.sessions.middleware.SessionMiddleware', 8 'django.middleware.locale.LocaleMiddleware', # 国際化のため追加 9 'django.middleware.common.CommonMiddleware', 10 'django.middleware.csrf.CsrfViewMiddleware', 11 'django.contrib.auth.middleware.AuthenticationMiddleware', 12 'django.contrib.messages.middleware.MessageMiddleware', 13 'django.middleware.clickjacking.XFrameOptionsMiddleware', 14] 15 16#------------------------------------------- 17# 国際化 18#------------------------------------------- 19LANGUAGE_CODE = 'ja' 20 21TIME_ZONE = 'Asia/Tokyo' 22 23USE_I18N = True 24 25USE_TZ = True 26 27LANGUAGES = ( 28 ('ja', _('Japanese')), 29 ('en', _('English')), 30) 31 32LOCALE_PATHS = ( 33 os.path.join(BASE_DIR, 'locale'), 34) 35
2.プロジェクトフォルダ直下にlocaleフォルダを作成、managedmakemessage -l jaで下記の言語ファイルを作成し、項目を追加後 django-admin compilemessages -l jaで.moファイルを生成しました。
project/locale/LC_MESSAGES/django.po
Django
1# SOME DESCRIPTIVE TITLE. 2# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3# This file is distributed under the same license as the PACKAGE package. 4# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. 5# 6#, fuzzy 7msgid "" 8msgstr "" 9"Project-Id-Version: PACKAGE VERSION\n" 10"Report-Msgid-Bugs-To: \n" 11"POT-Creation-Date: 2023-05-15 13:32+0900\n" 12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 14"Language-Team: LANGUAGE <LL@li.org>\n" 15"MIME-Version: 1.0\n" 16"Content-Type: text/plain; charset=UTF-8\n" 17"Content-Transfer-Encoding: 8bit\n" 18"Plural-Forms: nplurals=1; plural=0;\n" 19#: .\settings.py:126 20msgid "Japanese" 21msgstr "" 22 23#: .\settings.py:127 24msgid "English" 25msgstr "" 26 27msgid "Not a valid string." 28msgstr "文字列ではありません。" 29 30msgid "invalid" 31msgstr "文字列ではありません。"

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。