转: Django 国际化实例及原理分析
From:?http://www.oschina.net/question/12_15775
当 Web 服务搭建好以后,可以接收来自全球不同国家用户访问。这样就要求开发人员调整软件,使之能适用于不同的语言,即国际化和本地化。国际化 -- Internationalization,i 和 n 之间有 18 个字母,简称 I18N,。本地化 -- localization, l 和 n 之间有 10 个字母,简称 L10N。国际化意味着 Web 产品有适用于任何地方的潜力,针对程序开发人员;本地化则是指使一个国际化的程序为了在某个特定地区使用而进行实际翻译的过程,针对翻译人员而言。
Django 提供了非常强大的翻译机制,开发者一旦理解它的实现,就能减少编码量,提高开发效率。
本文通过两个 Django 国际化实例循序渐进地介绍在 Django 环境里进行 Web 程序国际化和本地化开发的相关方法和知识。并结合 Django 国际化现有代码进行分析,向读者阐述 Django 国际化的原理与内部实现。学习本文,可以很好的掌握国际化 Django 程序的技术。
当 Web 服务搭建好以后,可以接收来自全球不同国家用户访问。这样就要求开发人员调整软件,使之能适用于不同的语言,即国际化和本地化。国际化 -- Internationalization,i 和 n 之间有 18 个字母,简称 I18N,。本地化 -- Localization, l 和 n 之间有 10 个字母,简称 L10N。国际化意味着 Web 产品有适用于任何地方的潜力,针对程序开发人员;本地化则是指使一个国际化的程序为了在某个特定地区使用而进行实际翻译的过程,针对翻译人员而言。
Django 提供了非常强大的翻译机制,开发者一旦理解它的实现,就能减少编码量,提高开发效率。
?
启动 test1 服务指定待翻译的字符串另外一种方式
另外,_() 的参数也可以是变量,views.py 中的相关行可修改成如清单 11:
清单 11. _() 的参数为变量?
在代码中已经加入了国际化模版相关代码,下面 4 点需要注意:
1 . {% load i18n %}
使模版能够访问到访问到标签。
2 . {% trans str %}
标记翻译一个常量字符串或 可变内容
3 . 模版中的 select 的 name 值必须为"language"
4. 将 testform 的 action 重定向到 /i18n/setlang/,启用了 django.views.i18n.set_language 视图,它的作用是设置用户语言偏好并重定向返回到前一页面。
它们的工作原理,将在“针对 template 代码国际化原理分析”进行剖析。
设置模版路径
我们需要在 setting.py 里配置 template 的路径,具体请参看清单 13:
清单 13. 设置模版路径当选择下拉框中的 English 时,页面将会迅速更新为图 5:
图 5. test2 英文显示效果?
do_translate() 调用了 TranslateNode(),最后通过 django.utils.translation.ugettext() 来处理的。具体实现可参看 Django 源代码。
{% blocktrans %} 和 {% endblocktrans %}
通过 /usr/local/lib/Python2.5/site-packages/django/templatetags/i18n.py 文件 do_block_translate()实现的。
用于翻译带参数的文本块
用法 :
小结本文通过两个 Django 国际化实例向读者介绍了如何对 Django 程序中的 Python 和 template 代码进行国际化和本地化。并结合 Django 国际化现有代码框架进行分析,向读者阐述 Django 国际化的原理与内部实现。通过学习,可以很好的掌握国际化 Django 程序的技术。