【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客
《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)
本节主要介绍Django框架国际化和本地化方面的内容。Django提供了一个强大的国际化和本地化的框架,来帮助世界各地区的开发人员进行应用程序的开发。
10.2.1 国际化与本地化概述
在Django框架中,国际化和本地化的目标是允许单个Web应用程序针对不同的语言和格式提供相应的内容。Django框架完全支持文本翻译、日期、时间和数字格式以及时区格式。
实际上,Django框架主要做了以下两件事:
- 允许开发人员在模板上指定针对本地语言进行翻译,或者格式化其应用程序的相对应部分。
- 根据特定用户的喜好对特定用户的Web应用程序使用特定的挂钩进行本地化操作。
很明显,翻译取决于目标语言,格式通常取决于目标国家,浏览器在"接受语言"Header中提供此信息。但是,时区或许并不是很容易获得。
所谓的"国际化"和"本地化"这两个名词常常会引起混乱,下面是一个简化的定义:
- 国际化:为本地化准备软件,通常由开发人员完成。
- 本地化:编写翻译和本地格式,通常由翻译人员完成。
以下是一些其他术语,可以帮助我们处理通用语言:
- 语言环境名称(Locale Name):可以是形式为ll的语言规范,也可以是形式为ll_CC的语言和国家/地区组合。例如,it、de_AT、es、pt_BR。语言部分总是小写,国家部分总是大写,分隔符是一个下画线。
- 语言代码(Language Code):代表一种语言的名称。浏览器使用此格式在"接受语言"HTTP Header中发送其接受的语言的名称。例如,it、de-at、es、pt-br。语言代码通常以小写形式表示,但是HTTP Accept-Language Header不区分大小写;分隔符是破折号。
- 消息文件(Message File):消息文件是纯文本文件,代表一种语言,其中包含所有可用的翻译字符串以及应如何以给定语言表示。例如,消息文件的扩展名为".po"。
- 翻译字符串(Translation String):可以翻译的文字。
- 格式文件(Format File):格式文件是一个Python模块,用于定义给定语言环境的数据格式。
10.2.2 国际化
在Django框架项目中,为了使Django项目可翻译,必须在Python代码和模板中添加最少数量的钩子,这些钩子称为翻译字符串。其功能是告诉Django框架,"如果可以使用该语言的翻译版本,则应将其翻译成最终用户的语言。"。标记可翻译字符串是设计人员的责任,系统只能翻译它知道的字符串。
Django框架提供实用程序将翻译字符串提取到消息文件中。该文件是翻译人员提供与目标语言等效的翻译字符串的便捷方式。翻译人员填写完消息文件后,必须对其进行编译。此过程依赖于GNU gettext工具集。
一旦完成此操作,Django框架会根据用户的语言偏好,即时翻译每种可用语言的Web应用程序。
Django框架的国际化钩子在默认情况下处于启用状态,这意味着在Django框架的某些位置存在一些与i18n相关的开销。如果不使用国际化,则应在设置文件中将USE_I18N设置为False。然后,Django框架将进行一些优化,以免加载国际化机制。
在Python代码中进行标准的国际化翻译,是通过使用gettext()函数指定翻译字符串实现的。按照惯例,可以将其导入为较短的别名------"_",以节省输入内容。在下面这个代码示例中,字符串"I like Python and Django."将被标记为翻译字符串。
【代码10-3】
01 from django.http import HttpResponse
02 from django.utils.translation import gettext as _
03
04 def my_view(request):
05 output = _("I like Python and Django.")
06 return HttpResponse(output)
【代码分析】
在第02行代码中,通过import关键字在django.utils.translation模块中引入gettext()函数,并定义为别名"_"。
在第05行代码中,通过gettext()函数的别名定义了翻译字符串。
如果不想使用别名,则【代码10-3】可以写成如下形式,这点完全基于个人的喜好。
【代码10-4】
01 from django.http import HttpResponse
02 from django.utils.translation import gettext
03
04 def my_view(request):
05 output = gettext("I like Python and Django.")
06 return HttpResponse(output)
10.2.3 本地化
在Django框架项目中,一旦标记了应用程序的字符串文字以进行后续翻译,就需要编写(或获取)翻译本身。大致过程如下:
首先,为新的语言创建消息文件。这个消息文件就是一个纯文本文件,代表一种语言,其中包含所有可用的翻译字符串以及应如何以给定语言表示。消息文件的扩展名为".po"。
Django框架带有django-admin makemessages工具,该工具可自动创建和维护这些文件。如果想创建或更新一个消息文件,请执行下面的命令:
django-admin makemessages -l en
其中,en代表打算在消息文件中使用的语言环境名称。
该脚本应从以下两个位置之一运行:
- Django项目的根目录(包含manage.py的目录)。
- Django项目下某个应用的根目录。