django international - WBowam/wbowam.github.com GitHub Wiki

Date: 2014-09-07 Title: django 国际化 Tags: Django Category: It

第一步:在你的Python代码和模板中嵌入待翻译的字符串。

我选择用如下方式:
models

from django.utils.translation import ugettext_lazy as _

class MyThing(models.Model):
    name = models.CharField(_('name'), help_text=_('This is the help text'))
    class Meta:
        verbose_name = _('my thing')
        verbose_name_plural = _('mythings')

template

{% load i18n %} 放在模板最前面。  
###翻译一个常量字符串 (括以单或双引号) 或 可变内容:
<title>{% trans "This is the title." %}</title>
<title>{% trans myvar %}</title>
### 如果你的译文要求字符串带有变量(占位符placeholders),请使用 {% blocktrans %} :
{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}

第二步:把那些字符串翻译成你要支持的语言。

为一种语言创建一个信息文件:

在三处之一运行如下命令:

  • Django项目根目录。(首选)

  • 您Django应用的根目录。

  • django 根目录(不是Subversion检出目录,而是通过 $PYTHONPATH 链接或位于该路径的某处)。 这仅和你为Django自己创建一个翻译时有关
    django-admin.py makemessages -l zh

在po文件里进行翻译并保存

编译信息文件

在你运行django-admin.py makemessages的目录下运行:
django-admin.py compilemessages

第三步:在你的Django settings文件中激活本地中间件。

在 MIDDLEWARE_CLASSES 设置中增加 'django.middleware.locale.LocaleMiddleware' 。
中间件的顺序是有影响的,最好按照依照以下要求:

  • 保证它是第一批安装的中间件类。

  • 因为 LocalMiddleware 要用到session数据,所以需要放在 SessionMiddleware 之后。

  • 如果你使用CacheMiddleware,把LocaleMiddleware放在它后面。 如下:

MIDDLEWARE_CLASSES = (
   'django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.locale.LocaleMiddleware',
   'django.middleware.common.CommonMiddleware',
)
⚠️ **GitHub.com Fallback** ⚠️