Python django rest框架如何国际化字段
我遵循Django文档设置国际化 我需要根据所请求的语言返回各种选项字段的翻译 例如,我有以下选择字段Python django rest框架如何国际化字段,python,django,python-3.x,internationalization,django-rest-framework,Python,Django,Python 3.x,Internationalization,Django Rest Framework,我遵循Django文档设置国际化 我需要根据所请求的语言返回各种选项字段的翻译 例如,我有以下选择字段 CHOICE_TYPES = (('short', _('Short Term')),('long', _('Long Term')), ('mixed', _('Mixed')),) 我已经按照文档设置了我的区域设置和.po文件。比如, msgid "Short Term" msgstr "단기계약" 我在请求时使用Accept language标头请求语言 但Django似乎没有看到该
CHOICE_TYPES = (('short', _('Short Term')),('long', _('Long Term')), ('mixed', _('Mixed')),)
我已经按照文档设置了我的区域设置和.po文件。比如,
msgid "Short Term"
msgstr "단기계약"
我在请求时使用Accept language标头请求语言
但Django似乎没有看到该地区,或者我还没有为DRF采取另一个步骤
Django确实看到了语言请求,因为我正在使用Django hvad进行模型翻译,并且它们被正确返回
任何帮助都将不胜感激
编辑:添加相关代码摘录
设置.py
LANGUAGES = [
('en', _('English')),
('ja', _('Japanese')),
]
LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.locale.LocaleMiddleware',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.i18n',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# replicated locale folder in 3 locations as I thought Django couldn't find it
LOCALE_PATHS = (
'../locale',
'<full_path>locale',
'<full_path>/<app_name>/locale',
)
序列化程序.py
class SomethingSerializer(TranslatableModelSerializer):
class Meta:
depth = 1
model = Something
fields = (...., ...., 'term')
在locale/ja/LC_消息中
django.po
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Translated-Using: django-rosetta 0.7.12\n"
#: common/models.py:8
msgid "Short Term"
msgstr "test translation"
最后,我运行了如下命令:
$ ./manage.py makemessages -l ja
processing locale ja
$ ./manage.py compilemessages -l ja
processing file django.po in /<Path>/locale/ja/LC_MESSAGES
processing file django.po in /<Path>/locale/ja/LC_MESSAGES
processing file django.po in /<Path>/<App Name>/locale/ja/LC_MESSAGES
class SomethingSerializer(TranslatableModelSerializer):
term = serializers.SerializerMethodField()
class Meta:
depth = 1
model = Something
fields = (...., ...., 'term')
def get_term(self,obj):
return obj.get_term_display()
$。/manage.py makemessages-l ja
处理区域设置ja
$./manage.py编译消息-l ja
正在处理//locale/ja/LC_消息中的文件django.po
正在处理//locale/ja/LC_消息中的文件django.po
正在处理///locale/ja/LC_消息中的文件django.po
我的愚蠢。翻译得很好,我只是在序列化程序中没有正确调用它
在我的序列化程序中,我有
class SomethingSerializer(TranslatableModelSerializer):
class Meta:
depth = 1
model = Something
fields = (...., ...., 'term')
鉴于我本应要求提供“术语”的显示名称,如下所示:
$ ./manage.py makemessages -l ja
processing locale ja
$ ./manage.py compilemessages -l ja
processing file django.po in /<Path>/locale/ja/LC_MESSAGES
processing file django.po in /<Path>/locale/ja/LC_MESSAGES
processing file django.po in /<Path>/<App Name>/locale/ja/LC_MESSAGES
class SomethingSerializer(TranslatableModelSerializer):
term = serializers.SerializerMethodField()
class Meta:
depth = 1
model = Something
fields = (...., ...., 'term')
def get_term(self,obj):
return obj.get_term_display()
您是否在服务器运行的系统上调用了
python manage.py compilemessages
?是否可以包含重现问题的步骤和代码?