中文 django 翻译不起作用
Chinese django translations not working
我的 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'),
在我的 po 文件中我有:
msgid "Menu"
msgstr "菜单"
我编译了这些消息,但它不起作用。我有法语的工作翻译,所以我不明白中文翻译是怎么回事。
编辑:所以我尝试将 "Menu" 的中文翻译放入我的法语 po 文件中,因为我认为它可能是字符本身,但它起作用了。然后当我把它放回中文 po 文件时,"Menu" 没有被翻译。
您的中文语言环境目录名称是 'zh_hans' 而不是 'zh-hans' 吗?我相信目录必须有下划线而不是破折号。
对于遇到同样问题的人,我找到的解决方案是创建带有下划线和大写 H 的语言环境文件夹。
所以它看起来像:
django-admin makemessages -l zh_Hans
原因是Django文档states:
In all cases the name of the directory containing the translation is
expected to be named using locale name notation. E.g. de, pt_BR,
es_AR, etc.
并在 another part of the documentation 中说:
A locale name, either a language specification of the form ll or a
combined language and country specification of the form ll_CC.
Examples: it, de_AT, es, pt_BR. The language part is always in lower
case and the country part in upper case. The separator is an
underscore.
这个问题确实让我很困惑!
以下是基于 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
我的 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'),
在我的 po 文件中我有:
msgid "Menu"
msgstr "菜单"
我编译了这些消息,但它不起作用。我有法语的工作翻译,所以我不明白中文翻译是怎么回事。
编辑:所以我尝试将 "Menu" 的中文翻译放入我的法语 po 文件中,因为我认为它可能是字符本身,但它起作用了。然后当我把它放回中文 po 文件时,"Menu" 没有被翻译。
您的中文语言环境目录名称是 'zh_hans' 而不是 'zh-hans' 吗?我相信目录必须有下划线而不是破折号。
对于遇到同样问题的人,我找到的解决方案是创建带有下划线和大写 H 的语言环境文件夹。
所以它看起来像:
django-admin makemessages -l zh_Hans
原因是Django文档states:
In all cases the name of the directory containing the translation is expected to be named using locale name notation. E.g. de, pt_BR, es_AR, etc.
并在 another part of the documentation 中说:
A locale name, either a language specification of the form ll or a combined language and country specification of the form ll_CC. Examples: it, de_AT, es, pt_BR. The language part is always in lower case and the country part in upper case. The separator is an underscore.
这个问题确实让我很困惑! 以下是基于 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