Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56007
  • 博文数量: 9
  • 博客积分: 269
  • 博客等级: 二等列兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-14 09:43
文章分类

全部博文(9)

文章存档

2012年(2)

2011年(6)

2010年(1)

分类: Python/Ruby

2011-05-15 13:31:46

    django框架带有完善的I18N和L10N支持,其实现是基于GNU gettext的。最近看着文档研究了一下,在这里概要总结一下django国际化的处理流程。

    经典用法是把ugettext_lazy导为_使用,该函数标记要翻译的符号,并在要输出该符号的时候进行翻译,返回
unicode对象:
   例:
    from django.utils.translation import ugettext_lazy as _
    spam=_('User')
    需要输出spam的地方,"User"这个单词会以本地化语言显示。

在对应app目录创建locale目录,并按此格式/LC_MESSAGES/创建好欲支持的语言目录,转到app目录下执行django-admin.py makemessages --all --settings=path.to.settings 命令, 把所有标记的翻译符号导出为po文件,vi打开各个/LC_MESSAGES/django.po文件,把符号翻译为对应的本地言语,再执行django-admin.py compilemessages --settings=path.to.settings 把po文件编译为mo文件,这两个命令一定要在locale的当前目录执行

    要启用国际化支持需设置settings文件以下几项:
    USE_I18N = True
    USE_L10N = True
    MIDDLEWARE_CLASSES增加'django.middleware.locale.LocaleMiddleware',该中间要出现在SessionMiddleware和CacheMiddleware后,其他所有中件间之前
    TEMPLATE_CONTEXT_PROCESSORS 增加 'django.core.context_processors.i18n'

    django按照如下顺序决定使用哪种语言:
  1. 在用户session里查找django_language key
  2. 如果不存在session,查找django_language cookie
  3. 查找http头 Accept-Language
  4. 以后都未设置,使用settings.LANGUAGE_CODE
    决定了使用哪种语言后,按如下找顺序查找mo文件:
  1. settings LOCALE_PATHS变量指定的路径
  2. 每个app目录下的locale目录
  3. 工程目录下的locale目录
  4. 最后是django/conf/locale目录
    当有重复的mo文件时,mo优先级同查找顺序一致,即先找到的会屏蔽其后边的mo项
   
阅读(3830) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~