Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录

    • ⭐注意⭐
    • 1. 配置项目全局设置:启用国际化
    • 2. 编写视图函数
    • 3. 配置路由
    • 4. 界面演示
    • 5、扩展
      • 自动识别并切换到当前语言
      • 设置语言并保存到Session
      • 设置语言并保存到 Cookie

⭐注意⭐

以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能,请先参考:Django 启用国际化支持(1)—实现配置多国语言

1. 配置项目全局设置:启用国际化

在项目的全局配置文件 settings.py 中完成以下步骤:

(1)启用国际化功能

再次确认 USE_I18N = True,这是 Django 多语言支持的基础。

(2)定义支持的语言

使用 LANGUAGES 选项指定支持的语言列表,这样可以避免用户切换到不支持的语言,同时提升性能。

# settings.py
LANGUAGES = [('en', 'English'),            # 英文('zh-hans', 'Simplified Chinese'),  # 简体中文
]
USE_I18N = True  # 启用国际化功能

2. 编写视图函数

(1)首页视图 index

  • 页面显示一个问候信息(根据语言切换)。
  • 提供语言切换链接,点击后切换到对应语言。

(2)切换语言视图 set_language

  • 根据用户选择的语言切换显示内容。
  • 如果用户选择了不受支持的语言,返回错误信息。
# views.py
from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import redirect
from django.utils.translation import gettext as _, activatedef index(request):message = _('hello world')  # 翻译字符串return HttpResponse(f"""<html><body><p>{message}</p><a href="/set_language/?lang=en">English</a> |  <!-- 切换到英文 --><a href="/set_language/?lang=zh-hans">中文</a> |  <!-- 切换到简体中文 --><a href="/set_language/?lang=fr">français</a>  <!-- 一个未支持的语言 --></body></html>""")def set_language(request):# 获取用户选择的语言参数,默认值为 'en'lang = request.GET.get('lang', 'en')# 获取项目中支持的语言列表supported_languages = dict(settings.LANGUAGES).keys()if lang in supported_languages:# 如果选择的语言是支持的activate(lang)  # 切换到该语言return redirect("/")  # 重定向回首页else:# 如果选择的语言不支持,返回错误信息error_message = f"Error: Language '{lang}' is not supported."return HttpResponseBadRequest(error_message)

3. 配置路由

urls.py 中配置 URL 路由:

# urls.py
from django.contrib import admin
from django.urls import path
from demo.views import index, set_languageurlpatterns = [path("admin/", admin.site.urls),path("", index),  # 首页path("set_language/", set_language),  # 语言切换处理
]

4. 界面演示

在这里插入图片描述

5、扩展

自动识别并切换到当前语言

可以根据用户浏览器的 Accept-Language 自动切换语言:

from django.utils.translation import get_language_from_request,activatedef index(request):lang = get_language_from_request(request)activate(lang)message = _('hello world')return HttpResponse(f"<p>{message}</p>")

设置语言并保存到Session

# views.py
from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import redirect
from django.utils.translation import gettext as _, activate....def set_language(request):lang = request.GET.get('lang', 'en')supported_languages = dict(settings.LANGUAGES).keys()if lang in supported_languages:activate(lang)# 将语言存储到用户 Session 中(确保 Django 数据库已初始化)request.session['django_language'] = langreturn redirect("/")else:error_message = f"Error: Language '{lang}' is not supported."return HttpResponseBadRequest(error_message)

注意:

切换语言时,语言代码会存储到用户的 Session 中。确保以下步骤已完成:

  1. 数据库已经初始化:

    python manage.py migrate
    
  2. migrate 后会自动创建django_session表,这是 Django 默认的 存储Session 数据的表。

设置语言并保存到 Cookie

  • 如果不想使用 Session存储,可以改用 Cookie:

    response.set_cookie('django_language', lang)
    

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

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

相关文章

中国省级新质生产力发展指数数据(任宇新版本)2010-2023年

一、测算方式&#xff1a;参考C刊《财经理论与实践》任宇新&#xff08;2024&#xff09;老师的研究&#xff0c;新质生产力以劳动者劳动资料劳动对象及其优化组合的质变为 基本内涵&#xff0c;借 鉴 王 珏 和 王 荣 基 的 做 法构建新质生产力发展水平评价指标体系如下所示&a…

设计模式之 状态模式

状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时&#xff0c;改变其行为。这种模式将状态的转换和行为的变化解耦&#xff0c;将不同状态的行为封装到独立的状态类中&#xff0c;而通过上下文&#xff08;Con…

学习日志015--python单链表

创建 class Node:def __init__(self,data):# 数据域self.data data# 链接域self.next Noneclass LinkList:def __init__(self,):# 初始化头节点self.head None# 记录链表的长度self.size 0 增加 #头插def insert_head(self,value):# 创建新节点node Node(value)q self…

CSP/信奥赛C++语法基础刷题训练(22):洛谷P1075:[NOIP2012 普及组] 质因数分解

CSP/信奥赛C语法基础刷题训练&#xff08;22&#xff09;&#xff1a;洛谷P1075&#xff1a;[NOIP2012 普及组] 质因数分解 题目描述 已知正整数 n n n 是两个不同的质数的乘积&#xff0c;试求出两者中较大的那个质数。 输入格式 输入一个正整数 n n n。 输出格式 输出…

Java开发经验——开发常用工具类

摘要 本文介绍了Java开发中常用的工具类&#xff0c;包括Apache Commons Collections的SetUtils、Google Guava的Sets、Apache Commons Lang的ArrayUtils等&#xff0c;以及它们在集合操作、数组操作、字符串处理、JSON处理等方面的应用。文章还涉及了Optional类、Money工具类…

【Python TensorFlow】进阶指南(续篇三)

在前几篇文章中&#xff0c;我们探讨了TensorFlow的高级功能&#xff0c;包括模型优化、分布式训练、模型解释等多个方面。本文将进一步深入探讨一些更具体和实用的主题&#xff0c;如模型持续优化的具体方法、异步训练的实际应用、在线学习的实现细节、模型服务化的最佳实践、…

阿里系 acw_sc__v3 某教学网站

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

1、HCIP之RSTP协议与STP相关安全配置

目录 RSTP—快速生成树协议 STP STP的缺点&#xff1a; STP的选举&#xff08;Listening状态中&#xff09;&#xff1a; RSTP P/A&#xff08;提议/同意&#xff09;机制 同步机制&#xff1a; 边缘端口的配置&#xff1a; RSTP的端口角色划分&#xff1a; ensp模拟…

ChatGPT 与其他 AI 技术在短视频营销中的技术应用与协同策略

摘要&#xff1a; 本文深入探讨了 ChatGPT 及其他 AI 技术在短视频营销中的应用。从技术层面剖析了这些技术如何助力短视频内容创作、个性化推荐、用户互动以及营销效果评估等多方面&#xff0c;通过具体方法分析、数据引用与大模型工具介绍&#xff0c;旨在为短视频营销领域提…

数据结构-树状数组专题(2)

一、前言 接上回树状数组专题&#xff08;1&#xff09;&#xff0c;这次主要介绍差分跟树状数组联动实现区间更新 二、我的模板 重新放了一遍&#xff0c;还是提一嘴&#xff0c;注意下标从0开始&#xff0c;区间左闭右开 template <typename T> struct Fenwick {in…

使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程

当涉及到图数据时&#xff0c;复杂性是不可避免的。无论是社交网络中的庞大互联关系、像 Freebase 这样的知识图谱&#xff0c;还是推荐引擎中海量的数据量&#xff0c;处理如此规模的图数据都充满挑战。 尤其是当目标是生成能够准确捕捉这些关系本质的嵌入表示时&#xff0c;…

启动前后端分离项目笔记

一、项目 首先可以在各大开源软件拿取一个项目&#xff0c;以下项目是在gitee上获取 二、准备工作 配置JDK环境&#xff0c;node.js环境&#xff0c;安装vue脚手架工具以及maven环境 三、前端项目启动 在前端目录下安装依赖 npm install 如果报错可能是因为权限不够&#…

3个月,2000+台虚机迁移成功!

在全球数字化浪潮的推动下&#xff0c;各国政务部门纷纷加速信息化与数字化转型&#xff0c;以提升服务效率和数据安全。在这一背景下&#xff0c;墨西哥某政府部门因迅速增长的政务数字化需求&#xff0c;选择与华为云合作&#xff0c;构建专属的政务私有云平台。 经过多方尝…

GRU (门控循环单元 - 基于RNN - 简化LSTM又快又好 - 体现注意力的思想) + 代码实现 —— 笔记3.5《动手学深度学习》

目录 0. 前言 1. 门控隐状态 1.1 重置门和更新门 1.2 候选隐状态 1.3 隐状态 2. 从零开始实现 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 3 简洁实现 4. 小结 0. 前言 课程全部代码&#xff08;pytorch版&#xff09;已上传到附件看懂上一篇RNN的所有细节&am…

微知-plantuml常用语法和要点以及模板?(note over、create、box,endbox、alt,else,end, autonumber)

文章目录 常见语法常用 线条类实线虚线斜箭头或奇数箭头 A ->(10) B: B->(10) A分割线&#xff1a;newpage 颜色类给箭头指定颜色 -[#red]->给某个note加颜色&#xff1a; note over Alice, Bob #FFAAAA: xxx给分组信息着色 alt#red 分组类alt xxx; else xxx; else xx…

YOLOV5/rknn生成可执行文件部署在RK3568上

接上一篇文章best-sim.rknn模型生成好后&#xff0c;我们要将其转换成可执行文件运行在RK3568上&#xff0c;这一步需要在rknpu上进行&#xff0c;在强调一遍&#xff01;&#xff01;rknpu的作用是可以直接生成在开发板上运行的程序 退出上一步的docker环境 exit1.复制best-…

2024信创数据库TOP30之蚂蚁集团OceanBase

数据库作为存储、管理和分析这些数据的关键工具&#xff0c;其地位自然不言而喻。随着信息技术的日新月异&#xff0c;数据库技术也在不断演进&#xff0c;以满足日益复杂多变的市场需求。近日&#xff0c;备受瞩目的“2024信创数据库TOP30”榜单由DBC联合CIW/CIS权威发布&…

Kafka 生产者优化与数据处理经验

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

【强化学习的数学原理】第02课-贝尔曼公式-笔记

学习资料&#xff1a;bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接&#xff1a;强化学习的数学原理 西湖大学 赵世钰 文章目录 一、为什么return重要&#xff1f;如何计算return&#xff1f;二、state value的定义三、Bellman公式的详细推导四、公式向量形式…

006-自定义枚举注解

自定义枚举注解 一、业务需求描述1.问题描述2.解决方案 二、创建一个描述注解三、创建一个枚举注解四、创建一个枚举五、创建一个配置文件六、场景实战1.在 RequestParam 前面使用2.在非 Model 的实体类上使用3.在 RequestBody 对应的实体类中使用 七、效果展示 一、业务需求描…