============== 国际化和本地化 ============== .. toctree:: :hidden: :maxdepth: 1 translation formatting timezones 概述 ==== 国际化和本地化的目的就是让一个网站应用能做到根据用户语种和指定格式的不同而提供不同的内容。 Django对 :doc:`文本翻译 `, :doc:`格式化日期,时间和数字 `, :doc:`时区 ` 提供了完善的支持。 实际上,Django做了两件事: * 由开发者和模板作者指定应用的哪些部分应该翻译,或是根据本地语种和文化进行相应的格式化。 * 根据用户的偏好设置,使用钩子(Hook)将web应用本地化。 很显然,翻译取决于用户所选语言,而格式化通常取决于用户所在国家。这些信息由浏览器通过 ``Accept-Language`` 请求报头提供。不过确定时区就不是这么简单了。 定义 ==== 国际化和本地化通常会被混淆,这里我们对其进行简单的定义和区分: .. glossary:: 国际化 让软件支持本地化的准备工作,通常由开发者完成。 localization 编写翻译和本地格式,通常由翻译者完成。 更多细节详见 `W3C Web Internationalization FAQ`_ , `Wikipedia article`_ , `GNU gettext documentation`_ 。 .. _W3C Web Internationalization FAQ: http://www.w3.org/International/questions/qa-i18n .. _GNU gettext documentation: http://www.gnu.org/software/gettext/manual/gettext.html#Concepts .. _Wikipedia article: http://en.wikipedia.org/wiki/Internationalization_and_localization .. warning:: 是否启用翻译和格式化分别由配置项 :setting:`USE_I18N` 和 :setting:`USE_L10N` 决定。 但是,这两个配置项都同时影响国际化和本地化。之所以这么别扭是受Django的历史因素所累。 下面几项可帮助我们更好地处理某种语言: .. glossary:: 本地化名称 表示地域文化的名称,可以是 ``ll`` 格式的语种代码,也可以是 ``ll_CC`` 格式的语种和国家组合代码。例如: ``it``, ``de_AT``, ``es``, ``pt_BR`` 。语种部分总是小写而国家部分则应是大写,中间以下划线(_)连接。 语言代码 表示语言的名称。浏览器会发送带有语言代码的 ``Accept-Language`` HTTP报头给服务器。例如: ``it``, ``de-at``, ``es``, ``pt-br``. 语种和国家部分都是小写,中间以破折线(-)连接。 消息文件 消息文件是纯文本文件,包含某种语言下所有可用的 :term:`翻译字符串 ` 及其对应的翻译结果。消息文件以 ``.po`` 做为文件扩展名。 翻译字符串 可以被翻译的文字 格式文件 针对某个地域定义数据格式的Python模块。