这里是python新手。我希望我的网站支持英文和中文。所以我只是按照 django 书,第 19 章国际化。但这似乎对我不起作用,我希望字符串显示为中文,仍然是英文。我的代码和设置如下。
[设置.py]
LANGUAGE_CODE = 'zh-cn'
USE_I18N = True
USE_L10N = True
LANGUAGES = (
('en', 'English'),
('zh-cn', 'Chinese')
)
TEMPLATE_CONTEXT_PROCESSORS = {
'django.core.context_processors.i18n',
}
MIDDLEWARE_CLASSES = (
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
在我的应用程序views.py中,我在索引中强制将语言代码设置为“zh-cn”
def index( request ):
response= render_to_response( 'index.htm' )
response.set_cookie('django_language','zh-cn')
return response
那么我希望在 index.htm 之后加载的另一个页面将显示一个中文字符串。
另一个页面由 upload.html 渲染
{% load i18n %}
<html>
<head>
{% block head %}
{% endblock %}
</head>
<body>
{% block body %}
<h1>{% trans 'Upload Demo' %}</h1>
{% endblock %}
</body>
</html>
在那之后,我做
django-admin.py makemessages -l zh-cn -e htm
在我的 django 项目文件夹中,我在 locale/zh-cn/LC_MESSAGES/django.po 获得了 django.po 内容就像
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-05-10 18:33+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: uploader/template/base.htm:10
msgid "Upload Demo"
msgstr "上传文件"
此后,我调用以下命令来编译消息 django-admin.py compilemessages
我在 django.po 的某个文件夹中获得了 django.mo 文件
我首先访问索引页面,然后访问另一个页面,该页面具有“上传演示”字符串 ID。实际上我仍然在那里看到英文字符串。
并尝试通过打印语言代码调试,发现语言设置正确。
context = RequestContext(request) 打印上下文 translation.activate('zh-cn')
最后,我使用
gettext locale/zh-cn/LC_MESSAGES/django.mo "Upload Demo"
真的有'上传演示'。所以我认为问题就在这里。但是为什么会这样呢?我真的很困惑。有谁能够帮我。
非常感谢任何评论或帮助。
gettext locale/zh-cn/LC_MESSAGES/django.mo "Upload Demo"
我想我犯了一个错误。上面的命令返回一个字符串,它与您输入的字符串 ID 相同,而不是翻译后的字符串。在上面的命令中,它是“Upload Demo”,也就是说,如果您将上面命令中的“Upload Demo”更改为“bla bla”,您将“bla bla”。