使用django-admin为项目添加国际化支持, 会调用django提供的两个命令:
- makemessages
- compilemessages
准备
要想支持国际化, 需要做一些准备, 比如对django项目进行适当配置, 添加对需要国际化的字符串的处理, 以及相关目录的创建.
要想将页面依据不同语言用户的语言进行分配展示的话, 需要保证settings中的MIDDLEWARE_CLASSES中, 包含:
- django.middleware.locale.LocaleMiddleware
要想支持国际化, 需要在输出是添加对需要国际化的字符串进行ugettext包裹处理
from django.shortcuts import render
from django.utils.translation import ugettext as _
def test_view(request):
context['name'] = _('test')
return render("test/test.html", context)
由于默认需要app目录下面的locale目录来搜寻国际化支持, 所以需要在app目录下面创建locale目录, 以及想要支持的国际化语言目录, 如创建zh_CN目录来添加中文支持.
-> % cd app_dir
-> % mkdir -p locale/zh_CN
makemessages
所有准备工作做完后, 只需要在app目录下执行一个命令即可
-> % cd app_dir
-> % django-admin makemessages -a
这里-a会将需要国际化的字符串各种语言(locale目录下)都进行创建, 由于我们只有zh_CN目录所以只创建中文的
-> % ls locale
zh_CN
-> % tree locale
locale
└── zh_CN
└── LC_MESSAGES
└── django.po
compilemessages
有了django.po文件我们就需要最内容进行修改, 从而让django知道对应语言的应该如何国际化. django.po文件中格式如下:
#: test/views.py:5
msgid "test"
msgstr "测试"
会有一条注释, 表示这条记录出现的位置, msgid对应是的我们想要国际化的字符串, 而msgstr对应我们想要对应语言翻译的内容.
对django.po翻译完成后, 执行compilemessages即可.
-> % django-admin compilemessages
-> % tree locale
locale
└── zh_CN
└── LC_MESSAGES
├── django.mo
└── django.po
这里讲的是使用django自带的功能, 要想使用比较底层的可以参考关于babel部分.
到此, 所有的内容就完成了.