Natural

 

Django 国际化

Django 1.5
Python 2.7.3

    国际化支持,网上一搜详细的例子很多。本以为是一个简单的case,结果折腾了好几个小时却百撕不得骑姐!!最终去翻看官方教程,总算找到解决方案。

    简单说下如何国际化支持(以中文国际化为例):(详情参阅:http://djangobook.py3k.cn/2.0/chapter19/)

    对 Django 中 Python 代码进行国际化主要用到 ugettext(),gettext_noop(),gettext_lazy() 和 ungettext() 等函数;模板中则使用trans、blocktrans标签。

国际化步骤:
    1.在你的App 目录下创建 locale 目录,并运行“django-admin.py makemessages -l zh_CN”产生 locale/zh_CN/LC_MESSAGES/django.po 文件。它会自动搜索目录下所有需要国际化的内容,生成一个清单文件(django.po),然后打开该文件,加上对应的中文翻译即可。
    2.运行“django-admin.py compilemessages”命令,生成一个django.mo文件,这是真正在运行时所调用的。

按照教程所说,django运行时会根据算法自动找到该文件,然而遇到的问题是它没有被找到。显示的依然是默认的英文。
Django使用以下算法寻找翻译:

    首先,Django在该视图所在的应用程序文件夹中寻找 locale 目录。 若找到所选语言的翻译,则加载该翻译。

    第二步,Django在项目目录中寻找 locale 目录。 若找到翻译,则加载该翻译。

    最后,Django使用 django
/conf/locale 目录中的基本翻译。
估计这个问题与我的项目的目录结构有关,app没有直接在项目的根目录下,而是中间多了一个目录apps。(感兴趣的可参考一下:django最佳实践:项目布局
翻看了下官方文挡,总算找到了解决办法:
在项目的settings.py配置文件中,添加LOCALE_PATHS变量,把locale目录添加到其中(官方链接)。
LOCALE_PATHS = (
    
'/home/www/project/common_files/locale',
    
'/var/local/translations/locale'
)

在django1.5下,国际化默认是支持的,并不需要像各教程所说那样在配置文件中添加相应的中间件(默认已经加上了)。如果你发现你的国际化资源文件没有被载入,那就去上面这个变量中添加locale路径吧。

posted on 2013-05-10 16:24 此号已被删 阅读(608) 评论(0)  编辑  收藏 所属分类: Python


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(8)

随笔分类(83)

随笔档案(78)

文章档案(2)

相册

收藏夹(7)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜