Не работают китайские переводы 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

Другие вопросы по тегам