类似配置 django i18n 的文章不少,但是有些地方需要注意,否则总是出现一些莫名其妙的问题。本文以 pinax 为例子,重点说明容易出现问题的地方。
0、建立 pinax 环境,具体请参考 pinax 的 document。
1、建立 locale 文件夹。
md locale
2、执行命令创建 po 文件。
django-admin.py makemessages -l zh_CN -v2
注意,这里一定要用 zh_CN 而不是 zh-cn,否则汉化没有效果。 -v2 是详细输出参数。
3、翻译生成的 po 文件。
在 locale/zh_CN/LC_MESSAGES/django.po
翻译时推荐用 poedit 工具,否则很可能会出现文件格式错误。 PS: 有绿色版本。
4、编译 po 文件。
django-admin.py compilemessages
PS: pinax 有人提供了 mo 文件,见参考文章[4]。
5、更改 Settings.py
#TIME_ZONE = 'Asia/Shanghai' LANGUAGE_CODE = 'zh-cn' # 添加默认语言 LANGUAGES = ( ('en', u'English'), ('zh-cn', u'中文'), # settings.py 中的语言必须用 zh-cn,否则会出现不能切换语言的毛病。 )
另外可能需要在 MIDDLEWARE_CLASSES 添加 LocaleMiddleware
我认为这里的 'django.middleware.locale.LocaleMiddleware', 已经包含在了 'account.middleware.LocaleMiddleware',
LocaleMiddleware 是用来开启语言切换功能的。
在 TEMPLATE_CONTEXT_PROCESSORS 中添加 'django.core.context_processors.i18n'
按需添加。
6、重启 server
python manage.py runserver
**如果需要对 pinax 整体翻译,需要在 pinax 目录下先按照如上步骤做翻译,然后将 locale 文件夹拷贝到自己项目目录中 locale_pinax ,然后在 settings.py 中设置参数
LOCALE_PATHS = ( os.path.join(PROJECT_ROOT, 'pinax_locale'), )
***如果在翻译 pinax 时出现错误,如:
raise SyntaxError(msg) SyntaxError Translation blocks must not include other block tag already_logged_in.html
需要将 already_logged_in.html 中涉及到 trans transblock 代码块中的 url 语法做修改,如:
{% url acct_logout as m_acct_logout %} <p>{% blocktrans %}You are already logged into the site. To login with a different OpenID please <a href="/openid/logout/?next={{ m_acct_logout }}">logout</a> first.{% endblocktrans %}
参考文章:
[1]http://www.paolocorti.net/2009/12/18/the-pinax-tutorial-3-internationalization-of-the-application/
[2]http://www.cnblogs.com/itrust/archive/2010/05/31/1748358.html
[3]https://humou.net/public/doc/django/doc/tut15.html
[4]http://www.himysql.com/python/pinax-071-chinese-simplified.html
[5]http://docs.djangoproject.com/en/dev/topics/i18n/