Не работают китайские переводы django
Мой settings.py выглядит так:
LANGUAGES = (
('en', _('English')),
('fr', _('French')),
#Simplified Chinese
('zh-hans', _('Simplified Chinese')),
)
В моем шаблоне у меня есть:
<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
а также
<button type="submit" value="zh-hans" name='language'>{% trans 'Simplified Chinese' %}</button>
И в моем urls.py у меня есть:
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'),
В моем почтовом файле у меня есть:
msgid "Menu"
msgstr "菜单"
Я скомпилировал сообщения, но это не работает. У меня есть рабочие переводы на французский, поэтому я не понимаю, что происходит с китайскими переводами.
РЕДАКТИРОВАТЬ: Итак, я попытался поместить китайский перевод "Меню" в мой французский po-файл, потому что я думал, что это могут быть сами символы, но это сработало. Затем, когда я положил его обратно в китайский почтовый файл, "Меню" не было переведено.
3 ответа
Для тех из вас, у кого возникла та же проблема, решение, которое я нашел, состоит в том, чтобы создать папку локали с подчеркиванием и заглавной буквой H.
Так это будет выглядеть так:
django-admin makemessages -l zh_Hans
Причина в том, что в документации Django говорится:
Во всех случаях ожидается, что имя каталога, содержащего перевод, будет названо с использованием обозначения имени локали. Например, de, pt_BR, es_AR и т. Д.
а в другой части документации написано:
Имя локали, либо языковая спецификация формы ll, либо комбинированная языковая и страновая спецификация формы ll_CC. Примеры: это, de_AT, es, pt_BR. Языковая часть всегда в нижнем регистре, а часть страны - в верхнем. Разделитель является подчеркиванием.
Ваш каталог китайских локалей называется "zh_hans" вместо "zh-hans"? Я считаю, что в каталоге должно быть подчеркивание вместо тире.
Этот вопрос действительно смутил меня много! Вот краткий обзор ответа ALUW:
# in settings.py, use lower-case language code, The separator is a dash.
LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'), )
LANGUAGES = (
('en', _('English')),
#Simplified Chinese
('zh-hans', _('Simplified Chinese')),
)
# while when making and compiling message file, use local name.
# The language part is always in lower case and the country part in upper case.
# The separator is an underscore.
./manage.py makemessages -l zh_Hans