Django国际化和本地化

【图书介绍】《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项目下某个应用的根目录。
相关推荐
泰山小张只吃荷园5 分钟前
期末Python复习-输入输出
java·前端·spring boot·python·spring cloud·docker·容器
凤枭香17 分钟前
Python Selenium介绍(二)
开发语言·爬虫·python·selenium
工业互联网专业36 分钟前
Python毕业设计选题:基于django+vue的期货交易模拟系统的设计与实现
vue.js·python·django·毕业设计·源码·课程设计
java_python源码44 分钟前
[含文档+PPT+源码等]精品大数据项目-Django基于大数据实现的游戏用户行为分析与个性化推荐系统
python·游戏
Srlua1 小时前
周期性移动模式地铁乘客流量预测
python·数据分析
易辰君1 小时前
【Python爬虫实战】深入解析 Scrapy:从阻塞与非阻塞到高效爬取的实战指南
开发语言·python
python收藏家1 小时前
如何在Python中进行数学建模?
python
龙虎榜小红牛系统2 小时前
WordCloud参数的用法:
python·wordcloud
hummhumm2 小时前
第 36 章 - Go语言 服务网格
java·运维·前端·后端·python·golang·java-ee
achaoyang2 小时前
【Python中while循环】
开发语言·python