Django国际化和本地化

ops/2024/9/23 11:13:48/

【图书介绍】《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项目下某个应用的根目录。


http://www.ppmy.cn/ops/105197.html

相关文章

Ubuntu24.04 安装向日葵远程访问工具

目录 安装向日葵远程访问工具 解决方案: 1.下载软件包 2.远程Ubuntu桌面控制卡住 卸载向日葵远程访问工具 安装向日葵远程访问工具 安装命令:sudo dpkg -i 文件名.deb sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 提示错误如下&#xf…

【Kubernetes知识点问答题】Kubernetes 部署

目录 1.部署安装 K8s 为什么要关闭 swap 分区? 2.解释 br_netfilter。 3.解释 kubeadm, kubectl, kubelet。 4.详细说明 K8s 集群的创建过程。 5. Calico 网络插件在 K8s 集群的作用。 6. kube-apiserver, kube-controller-manager, kube-scheduler, etcd的作…

RESTful基本要求

文章目录 RESTful -Representational State Transfer1 什么是RESTful2 RESTful的特征3 如何设计符合RESTful 特征的API RESTful -Representational State Transfer 1 什么是RESTful 资源 (Resources) 网络上的一个实体,或者说是网络上的一个…

Elasticsearch 介绍

1、课程介绍 1.1 ES 8.x 演化进程 版本号发布日期多少个次要版本迭代历时8.02022年2月11日?至今7.02019年4月11日17个次要版本34个月6.02017年11月15日8个次要版本17个月5.02016年10月27日6个次要版本13个月 2、Elasticsearch 是什么 2.1 概念 2.1.1 标准定义 …

【LLM模型微调】LLMs-微调经验-LLaMA微调指南v7.0

【导读】:本文是LLM模型微调第七篇,分享Meta于20240807的开源三篇文章:Methods for adapting large language models,To fine-tune or not to fine-tune,How to fine-tune: Focus on effective datasets。 【#】LLaMA…

Node.js中sqlite3的db.run、db.get和db.all方法深入解析

在Node.js中,sqlite3是一个广受欢迎的轻量级数据库库,它提供了一个简洁的API来与SQLite数据库进行交互。本文将深入解析sqlite3库中的db.run、db.get和db.all方法,包括它们的API原型定义和相应的代码示例。 一、sqlite3简介 sqlite3是一个为…

【Python基础】字典类型

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、Python 字典类型2.1 访问字典里的值2.2 修改字典2.3 删除字典元素2.4 字典键值的特性2.5 遍历字典…

docker部署project-exam-system

使⽤docker部署project-exam-system 1. 背景,在⼀台主机之内,实现容器的编排,发布考试系统 2. 环境准备 1. docker 1. vim /etc/docker/daemon.json 2. docker-compos 3. 普通的部署 1. 镜像 1. 前端:nginx latest服务 1. 拉取…