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项目下某个应用的根目录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412825.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go函数详解】二、参数传递、变长参数与多返回值

文章目录 一、传递参数1. 按值传参2. 引用传参2.1 特殊情况2.1.1 切片slice2.1.2 字典map 二、变长参数1. 基本定义和传值1.1 基本定义1.2 传值1.2.1 普通传值1.2.2 传递切片 2. 任意类型的变长参数(泛型) 三、多返回值1. 命名返回值 一、传递参数 1. 按…

customRef 与 ref

ref() 我们已经很熟悉了,就是用来定义响应式数据的,其底层原理还是通过 Object.defineprotpty 中的 get 实现收集依赖( trackRefValue 函数收集),通过 set 实现分发依赖通知更新( triggerRefValue 函数分发 )。我们看看 ref 的源码就知道了 …

微气象在线监测系统:宏观层面的电网灾害预防和应急管理

微气象受局部地形(如山谷、河谷)、地物(如建筑物、森林)和地面条件(如水面、农田)的影响较大,而大范围气象环境则更多地受气候系统和天气模式的控制。输电线路微气象监测的主要目的是为了评估和…

YOLOv8环境搭建、创建数据集、训练推理教程(超级详细)

yolov8和yolov10 是一个流派,和yolov5区别还挺大,所以尝试使用yolov8来进行模型训练,下面是详细使用流程: 一、环境搭建 1.1 Anaconda安装 Anaconda是一个强大的开源数据科学平台,它将很多好的工具整合在一起,极大地…

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题——(共九套)(每套四十题)

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题-题目分享——共九套(每套四十题) 岗位——芯片与器件设计工程师 岗位意向——数字芯片 真题题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正&am…

论文阅读:VideoMamba: State Space Model for Efficient Video Understanding

论文地址:arxiv 摘要 为了解决视频理解中的局部冗余与全局依赖性的双重挑战。作者将 Mamba 模型应用于视频领域。所提出的 VideoMamba 克服了现有的 3D 卷积神经网络与视频 Transformer 的局限性。 经过广泛的评估提示了 VideoMamba 的能力: 在视觉领…

Hbuilder创建的项目(uniApp + Vue3)中引入UnoCSS原子css引擎

这里是UnoCSS的官网介绍 UnoCS通过简化和优化CSS的编写过程来提高Web开发的效率和可维护性。好处是: 提升开发效率提升开发效率提高一致性增强灵活性易于维护方便的集成与配置 同时还支持预设变量和规则。这些可参看官网进行配置。Unocss通过其原子化方法、高度的…

第二证券:静态市盈率与动态市盈率有什么区别?

市盈率(PE),是指投资者愿意为每一元净利润所支付的价格。 股票的市盈率股票价格(P)/每股净利润(EPS),或者用公司其时总市值/公司上一年总净利润。 动态市盈率与静态市盈率的区别&a…

<数据集>遥感航拍飞机和船舶和识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:19973张 标注数量(xml文件个数):19973 标注数量(txt文件个数):19973 标注类别数:2 标注类别名称:[ship,plane] 序号类别名称图片数框数1ship17575416292plane239815…

对比 PDAF、CDAF 和 LAAF 自动对焦技术

深入解析相位检测自动对焦(PDAF) 相位检测自动对焦(PDAF,Phase Detection Auto Focus)是一种高效的自动对焦技术,广泛应用于现代数码相机、无反相机和智能手机摄像头中。为了更好地理解 PDAF,我…

基于协同过滤算法的电影推荐系统的设计与实现(论文+源码)_kaic

摘 要 现在观看电影已逐渐成为人们日常生活中最常见的一种娱乐方式,人们通常会在周末或在休息、吃饭时间不由自主地在各种视频软件中搜索当前火热的影视节目。但是现在的视频软件电影推荐功能不够完善,所以需要开发出一套系统来使用户只需要简单操作就能…

华为云征文|部署私有云和文档管理系统 Kodcloud

华为云征文|部署私有云和文档管理系统 Kodcloud 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 对比普通ECS 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Kodcloud3.1 Jellyfin 介绍3.2 Docker 环境搭建3.3 Jell…

【智能算法改进】路径规划问题的多策略改进樽海鞘群算法研究

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】樽海鞘群算法(SSA)原理及实现 2.改进点 无标度网络策略 复杂网络在图论中可以用边和节点表示, Barabasi 等于1999年通过分析大量的数据提出了无标度网络模型. 该网络…

人像比对-人证比对-人脸身份证比对-人脸身份证实名认证-人脸三要素对比-实人认证

​ 人证比对API接口,全称为人脸身份证比对API接口,也被称为人脸实名认证API接口或实人认证API接口。这种接口服务主要用于将提供的人脸图片和对应的身份证照片、姓名、身份证号码进行比对,以此验证用户的身份。以下是关于人证比对API接口的详…

[易聊]软件项目测试报告

一、项目背景 随着互联网发展,各种各样的软件,比如游戏、短视频、购物软件中都有好友聊天功能,这是一个可在浏览器中与好友进行实时聊天的网页程序。“ 易聊 ”相对于一般的聊天软件,可以让用户免安装、随时随地的通过浏览器网页…

UDP英译汉网络词典

这里我们用UDP实现一个简单的英译汉小词典。我们还是仿照前一篇的UDP编程,将各自的组件封装起来,实现高内聚低耦合。 一. 字典翻译功能实现 首先我们将我们的字典知识库放在txt文本中。 apple: 苹果 banana: 香蕉 cat: 猫 dog: 狗 book: 书 pen: 笔 ha…

浮毛粘毛器可以彻底去除吗?独家揭秘值得入手浮毛空气净化器

有没有养猫五年以上还是单猫的铲屎官?能不能分享一下怎么才能控制住不养新猫。 从我养第一只猫开始,每次看到别人家的小幼猫,就控制不住的想养。到现在,家里已经有了7只猫,而前段时间楼下那只小三花又差点让我破例。不…

Keil5 Debug模式Watch窗口添加的监控变量被自动清除

Keil5 Debug模式Watch窗口添加的监控变量被自动清除 问题解决记录 问题描述:每次进入Debug模式时,watch窗口里面上一次调试添加的监控变量都会被全部清掉 如图: 退出Debug模式后,重新进入Debug模式: 解决方法&…

INFO:一种基于向量加权平均的高效优化算法【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2022年,I Ahmadianfar受到基于向量加权平均方法启发,提出了加权平均向量优化算法(weIghted meaN oF vectOrs, INFO)。 2.算法原理 2.1算法…

在线任务分发系统开发架构分析

在线任务分发系统的架构分析是一个综合性的过程,涉及多个技术层面和功能模块的设计。以下是对在线任务分发系统架构的详细分析: 一、系统概述 在线任务分发系统是一个集任务发布、分配、执行、监控及反馈于一体的综合平台,它通过互联网技术实…