国际化和定位

概述¶ T0>

国际化和本地化的目的就是让一个网站应用能做到根据用户语种和指定格式的不同而提供不同的内容。

Django 对translation of text, formatting of dates, times and numbers,以及time zones提供了完善的支持。

实际上,Django做了两件事:

  • 由开发者和模板作者指定应用的哪些部分应该翻译,或是根据本地语种和文化进行相应的格式化。
  • 根据用户的偏好设置,使用钩子将web应用本地化。

很显然,翻译取决于用户所选语言,而格式化通常取决于用户所在国家。 这些信息由浏览器通过Accept-Language 协议头提供。 不过确定时区就不是这么简单了。

定义¶ T0>

“国际化”和“本土化”这个词常常引起混乱;这里是一个简化的定义:

国际化
准备软件进行本地化。 通常由开发人员完成。
本地化
编写翻译和本地格式。 通常由翻译人员完成。

更多细节详见W3C Web Internationalization FAQWikipedia articleGNU gettext documentation

警告

是否启用翻译和格式化分别由配置项USE_I18NUSE_L10N 决定。 但是,这两个配置项都同时影响国际化和本地化。 这种情况是Django的历史因素所致。

下面几项可帮助我们更好地处理某种语言:

本地化名称
表示地域文化的名称,可以是ll_CC 格式的语种代码,也可以是ll 格式的语种和国家组合代码。 例如: de_AT, es, it, pt_BR. 。 语种部分总是小写而国家部分则应是大写, 中间以下划线(_)连接。
语言代码
表示语言的名称。 浏览器会发送带有语言代码的 Accept-Language HTTP报头给服务器。 例如:de-at, es, it, pt-br 语种和国家部分都是小写,但是 HTTP Accept-Language 协议头是大小写不敏感的, 中间以破折线(-)连接。
消息文件
消息文件是纯文本文件,包含某种语言下所有可用的translation strings及其对应的翻译结果。 消息文件以 .po做为文件扩展名。
翻译字符串
可以被翻译的文字。
格式文件
针对某个地域定义数据格式的Python模块。