以前写过一个关于edX平台汉化的博客链接在此:http://blog.csdn.net/lion19930924/article/details/41791751
但是在edX平台使用的是paver工具。前两天想对正在做的一个项目进行汉化,但是没有paver工具,所以看了一下Django国家化翻译的文档。
国际化是指:项目包含了为将来翻译而标记的文本(比如用户界面要素和错误信息等)、日期和时间的抽象显示以便保证不同地区的标准得到遵循、为不同时区提供支持,并且一般确保代码中不会存在关于使用者所在地区的假设。国际化被缩写为i18n因为Internationlization中间有18个字母
本地化是指:国际化的程序为了在某个特定地区使用而进行实际翻译的过程。 本地化缩写为 L10N ,因为 Localization中间有10个字母
要在项目中启用Django国际化需要在settings.py里设置tUSE_I18N =True,如果不需要国际化则设置为False。进行本地化时,在setting里的LANGUAGES设置为要本地化的语言即可。Django国际化的本质是开发者对要进行翻译的字符串进行标记,由翻译者进行翻译,当用户访问该 Web 时,Django 内部框架根据用户使用偏好进行 Web 呈现。
国际化需要三个步骤:
1. 第一步:在 Python 代码和模板中嵌入待翻译的字符串,
2. 第二步:把那些字符串翻译成需要支持的语言,并进行相应的编译
3. 第三步:在 Django settings 文件中激活本地中间件
1 指定待翻译字符串
from django.utils.translation import ugettext as _
def my_view(request):
output = _("Welcome to my site.")
return HttpResponse(output)
当你需要标记一个不需要立刻翻译的字符串,可以用django.utils.translation.gettext_noop()
<title>{% trans "This is the title." %}</title>
含有变量:
{% blocktrans with value|filter as myvar %}
This will have {{ myvar }} inside.
{% endblocktrans %}
2 创建语言文件
django-admin.py makemessages -l zh-CN
创建语言文件。zh-CN 是所创建文件的语言代码。这段脚本应该在三处之一运行:
- Django项目根目录。
- 您Django应用的根目录。
- django 根目录(不是Subversion检出目录,而是通过 $PYTHONPATH 链接或位于该路径的某处)。 这仅和你为Django自己创建一个翻译时有关。
django-admin.py makemessages -a
但是这个命令非常耗时间,如果只是针对一个地区,可以不用这么
3 编译运行
#: /ex1/ex2/ex3/ex4.html
msgid "examplestring"
msgstr ""
msgid是文件中标记的字符串,msgstr是需要翻译人员翻译的内容。翻译完成之后运行:
django-admin.py compilemessages
就可以了。