Мне нужно реализовать интернационализацию в моем проекте, поэтому я хочу использовать i18n для статического контента, а я использую приложение django-modeltranslation для моделей. Я поддерживает следующие языки:I18n, похоже, не работает, в то время как modeltranslation делает (немного)
ан-нас (по умолчанию) п-нл де-де фр-фр эс-эс
В то время как я нидерландский, Джанго не изменяет языка на голландский. У меня есть английские окна, но хром настроен голландский, чтобы проверить интернационализацию. Это не единственная проблема, только модель переводится, когда язык по умолчанию изменяется. Когда я устанавливаю язык по умолчанию на голландский, все модели будут показывать голландский перевод, но статический контент остается на английском.
Примечание: я использовал compilemessages и перезапустить сервер
Settings.py
USE_I18N = True
LANGUAGE_CODE = 'en-us'
gettext = lambda s: s
LANGUAGES = (
('en-us', gettext('English')),
('nl-nl', gettext('Dutch')),
('fr-fr', gettext('French')),
('de-de', gettext('German')),
('es-es', gettext('Spain')),
)
LOCALE_PATHS = ('/vagrant/locale',)
/vagrant/locale/en-us/LC_MESSAGES/django.po (укороченный файл для отображения ошибки)
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <[email protected]>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-17 23:14+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <[email protected]>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"MIME-Version: 1.0\n"
"Language: en-us\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: PyDiving/settings.py:170
msgid "English"
msgstr ""
#: PyDiving/settings.py:171
msgid "Dutch"
msgstr ""
#: PyDiving/settings.py:172
msgid "French"
msgstr ""
#: PyDiving/settings.py:173
msgid "German"
msgstr ""
#: PyDiving/settings.py:174
msgid "Spain"
msgstr ""
#: company/templates/company/company_detail.html:22
msgid "City"
msgstr ""
/vagrant/locale/nl-nl/LC_MESSAGES/django.po (только показывая различия, чтобы сократить пост)
"Language: nl-nl\n"
#: company/templates/company/company_detail.html:28
msgid "Postal Code"
msgstr "Postcode"
#: company/templates/company/company_detail.html:34
msgid "City"
msgstr "Stad"
Шаблон компании/шаблоны/компания/company_detail.html
{% load i18n %}
{{ company.text }} # this is the model translation, this will change when i change the default language
{% trans "City" %} # this always says "City"
Результат, когда язык по умолчанию ан-нас
EnglishCity
где 'английский язык является содержание модели'
по умолчанию язык nl-nl
NederlandsCity
Вы используете 'django.middleware.locale.LocaleMiddleware'? Можете ли вы вывести 'request.LANGUAGE_CODE' в свой шаблон, чтобы убедиться, что правильный язык установлен? –
По какой-то причине, когда я добавляю LocaleMiddleware (который я не использовал, потому что я читал, что он предназначен для установки языков вместо распознавания), он меняет модели для отображения испанского (es-es). Он «успешно» распознает язык, потому что я могу изменить код по умолчанию, но request.LANGUAGE_CODE все еще говорит, что это es-es, что неверно. Im в нидерландах с голландским ip/chrome и английскими окнами. Однако языковые файлы остаются английскими. Я проверил файлы испанского языка, и он совпадает с английским/голландским. – LHolleman
Обычно вам нужно «LocaleMiddleware» в любом случае ... Можете ли вы проверить веб-инспектор Chrome, который вы отправляете браузером для «Accept-Language» (на вкладке «Сеть» ... выберите свой документ и посмотрите заголовки запроса) –