pinax 配置 i18n 中文化

类似配置 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/

原文地址:https://www.cnblogs.com/sunblackshine/p/1939751.html