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路径吧。