Django国际化和本地化

news2024/9/23 21:28:46

【图书介绍】《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.coloradmin.cn/o/2090448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个最基本的多线程3D渲染器方案

概括 渲染器仍然是大多数现代视频游戏的主要组件。通常,这些流水线通过 3D 图形应用程序接口(如 DirectX、OpenGL )暴露出来。现代,多核 CPU 已广泛应用于游戏机和个人电脑。为了确保 GPU 能持续不断地处理数据,渲染器…

惠中科技RDS自清洁膜层:光伏行业的清洁革命与创新先锋

在当今全球能源转型和光伏产业蓬勃发展的背景下,光伏电站的运营维护面临着诸多挑战,其中灰尘污染问题尤为突出。灰尘的堆积不仅降低了光伏板的透光率,还直接影响了电站的发电效率和经济效益。为了有效解决这一难题,惠中科技凭借其…

C++日期差值问题(2个日期之间差几天)

上面是牛客网给出的题目。 思路 假设第一个输入的日期为2011 12 03,第二个输入的日期为2024 02 29。 这两个日期并不相等,我们可以让日期2011 12 03一直加1,直到等于2024 02 29为止。 在这个过程中,每1一次,就让re…

情感共鸣:数业智能心大陆重塑AI心理交互新纪元

在科技蓬勃发展的今天,人工智能如同一张大网,与我们的生活密切交织,在多个层面深刻影响着每一个人。而数业智能心大陆,作为 “AI 心理健康” 领域的佼佼者,正以其独特的技术和创新理念, 为人工智能与用户的…

企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码

一、介绍 企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码’ 二、软件架构 二、功能介绍 三、数字大屏展示 四、数据采集原理 五、软件截图

C++ 有向图算法

概念 Breadth-First Search (BFS) 目的: 主要用于遍历或搜索图中的所有顶点。 特点: 从根节点开始,先访问所有与之相邻的节点,然后再一层一层地深入。 应用: 可以用来寻找两节点间的最短路径(当边的权重相等时),检测…

笔记:应用Visual Studio Profiler分析CPU使用情况

一、目的:应用Visual Studio Profiler分析CPU使用情况 使用 Visual Studio Profiler 分析 CPU 使用情况可以帮助你识别性能瓶颈,优化代码,提高应用程序的响应速度。 二、实现 以下是如何使用 Visual Studio Profiler 分析 CPU 使用情况的详…

前端问答:如何判断变量是否为数组?

在JavaScript的世界里,判断一个变量的类型是开发者日常工作中不可或缺的一部分,尤其是在处理数组这种关键数据结构时。数组作为一种广泛应用于各种操作的数据结构,无论是简单的数据存储还是复杂的算法实现,都发挥着重要作用。然而…

力扣刷题--762. 二进制表示中质数个计算置位【简单】

题目描述🍗 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。 计算置位位数 就是二进制表示中 1 的个数。 例如, 21 的二进制表示 10101 有 3 个计算置位。 示例 1&am…

【JPCS独立出版】2024电驱系统与控制工程国际学术研讨会(EDSCE 2024,10月18-20)

2024电驱系统与控制工程国际学术研讨会(EDSCE 2024)将于2024年10月18-20日在中国本溪隆重举行。 本次会议将集中讨论电驱系统与控制工程的最新研究成果,旨在建立一个高水平的学术交流平台,以便领域内的专家学者、工程师和技术研发…

【单片机原理及应用】实验: 8位数码显示器

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 学习8位数码管串行扩展原理,掌握74HC595与动态显示编程方法。 二、实验内容 【参照图表】 (1)创建一个包含80C51固件&#x…

如何选择适合企业的财税自动化解决方案

财税自动化解决方案是现代企业提升财务管理效率、降低运营成本的关键工具。然而,市场上的财税自动化产品琳琅满目,功能各异,企业在选择时常常感到困惑。本文金智维将从中小型的需求出发,帮助企业了解如何选择适合自身的财税自动化…

ASP.NET Core6.0-wwwroot文件夹无法访问解决方法

默认情况下,ASP.NET Core项目中的wwwroot文件夹被视为Web根文件夹。静态文件可以存储在Web根目录下的任何文件夹中,并可以使用该根目录的相对路径进行访问。在ASP.NET应用程序中,可以从应用程序的根文件夹或其下的任何其他文件夹提供静态文件…

数据分析学习之numpy

引言 好久没写帖子了,确实变懒了,在这一个月里学习了爬虫,还有seleium自动化技术初步以及数据分析中的numpy,下一步就要学习pandas,但是欠了太多帖子没写,所以现在来补一下,现在来的是numpy的学习&#xff…

Java面试宝典-java基础07

Java面试宝典-java基础07 61、什么是 java 序列化?什么情况下需要序列化?62、序列化使用场景有哪些?63、使用序列化和反序列化的注意事项64、为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么?…

计算机网络概述(分组延时、丢失和吞吐量)

目录 分组丢失和延时是怎样发生的? 四种分组延时 节点延时 排队延迟 分组丢失 吞吐量 吞吐量:互联网场景 分组丢失和延时是怎样发生的? 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排队到队头、被传输…

Ethernet 测试系列(1)-- 物理层测试::IOP Test::Link-up time

车载以太网物理层IOP测试,即互操作性测试(Interop- erability Tests),用于验证车载以太网PHY(通常也称为收发器)的可靠性和检查PHY能否在给定的有限时间内建立稳定的链路;还用于车载以太网PHY的诊断&#x…

ARCGIS 纸质小班XY坐标转电子要素面(2)

本章用于说明未知坐标系情况下如何正确将XY转要素面 背景说明 现有资料:清除大概位置,纸质小班图,图上有横纵坐标,并已知小班XY拐点坐标,但未知坐标系。需要上图 具体操作 大部分操作同这边文章ARCGIS 纸质小班XY…

Vue.js 模板语法详解:插值表达式与指令使用指南

Vue.js 模板语法详解:插值表达式与指令使用指南 引言 简要介绍主题: Vue.js 是一个现代化的 JavaScript 框架,用于构建用户界面。Vue 的模板语法提供了直观且功能强大的工具,用于将数据与 DOM 绑定。本文将深入探讨 Vue.js 的两个…

AI游戏革命!谷歌推出GameNGen,实时生成游戏画面,每秒20帧实时模拟

未来, AI会取代传统游戏引擎吗? 谷歌的研究人员发表论文称,他们创建了一个名为GameNGen的AI神经网络,直接用AI生成了整个《Doom》游戏! 最令人惊讶的是,他们并没有使用传统的游戏引擎,而是在单…