Ich habe die Django-Dokumentation für die Einrichtung der Internationalisierung gefolgt.django Rest Framework wie Felder zu internationalisieren
Ich benötige eine Übersetzung der verschiedenen Auswahlfelder abhängig von der Sprache angefordert.
Zum Beispiel habe ich die folgenden Auswahlfelder;
Ich habe meine Locale und .po Dateien gemäß der Dokumentation eingerichtet. Beispielsweise;
msgid "Short Term"
msgstr "단기계약"
Ich Anfrage die Sprache mit dem Accept-Language-Header auf eine Anfrage.
Aber es scheint, dass Django das Gebietsschema nicht sieht oder es gibt einen weiteren Schritt, den ich für DRF nicht unternommen habe.
Django sieht die Sprachanfrage, da ich django-hvad für Modellübersetzungen verwende und sie korrekt zurückgegeben werden.
Jede Hilfe wäre willkommen.
Edit: Hinzugefügt entsprechenden Code extrahiert
Settings.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',
)
models.py
from django.utils.translation import ugettext_lazy as _
CHOICES = (('short', _('Short Term')),('long', _('Long Term')), ('mixed', _('Mixed')),)
# In the relevant model/s
term = models.CharField(max_length=10, choices=CHOICES, default='short')
serializers.py
class SomethingSerializer(TranslatableModelSerializer):
class Meta:
depth = 1
model = Something
fields = (...., ...., 'term')
In locale/ja/LC_MESSAGES
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"
Und schließlich habe ich lief wie folgt Befehle;
$ ./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
Haben Sie 'python manage.py compilemessages' auf dem System aufgerufen, auf dem Ihr Server läuft? – schwobaseggl
Können Sie Schritte und Code hinzufügen, um das Problem zu reproduzieren? – Marat