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 中。确保以下步骤已完成:
-
数据库已经初始化:
python manage.py migrate -
migrate后会自动创建django_session表,这是 Django 默认的 存储Session 数据的表。
设置语言并保存到 Cookie
-
如果不想使用 Session存储,可以改用 Cookie:
response.set_cookie('django_language', lang)
相关文章:
Django启用国际化支持(2)—实现界面内切换语言:activate()
文章目录 ⭐注意⭐1. 配置项目全局设置:启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…...
基于单片机的多功能跑步机控制系统
本设计基于单片机的一种多功能跑步机控制系统。该系统以STM32单片机为主控制器,由七个电路模块组成,分别是:单片机模块、电机控制模块、心率检测模块、音乐播放模块、液晶显示模块、语音控制模块、电源模块。其中,单片机模块是整个…...
VSCode 如何选中包含某个字母的所有行
文章目录 写在前面一、需求描述二、解决方法参考链接 写在前面 自己的测试环境:VSCode 一、需求描述 由于需要处理文件,需求是删除文件中包含某个字母的所有行。 二、解决方法 在 Visual Studio Code (VSCode) 中,如果你想选中所有包含某…...
CSRF保护--laravel进阶篇
laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…...
计算机网络-理论部分(二):应用层
网络应用体系结构 Client-Server客户-服务器体系结构:如Web,FTP,Telnet等Peer-Peer:点对点P2P结构,如BitTorrent 应用层协议定义了: 交换的报文类型,请求or响应报文类型的语法字段的含义如何…...
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
虚拟机 rocky9.4 linux master node01 node02 已部署k8s集群版本 1.31 方法 一 使用容器部署harbor (1) wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce systemctl enable docker…...
QT中使用json格式存取矩阵数据
在 Qt 中,可以通过 QJsonDocument 和 QJsonArray 方便地存取 JSON 格式的矩阵数据。以下是存储和读取矩阵数据的完整实现示例。 1. 矩阵存储为 JSON 将矩阵(QVector<QVector<double>> 或其他二维数组)存储为 JSON 文件。 实现代码 #include <QJsonArray&g…...
k8s 集群安装
安装rockylinux https://www.jianshu.com/p/a5fe20318b8e https://www.cnblogs.com/haoee/p/18290506 配置VirtualBox双网卡 https://www.cnblogs.com/ShineLeBlog/p/17580311.html https://zhuanlan.zhihu.com/p/341328334 https://blog.csdn.net/qq_36544785/article/deta…...
Elasticsearch面试内容整理-核心概念与数据模型
在 Elasticsearch 中,理解核心概念与数据模型是非常重要的,因为它们定义了数据如何被组织、存储和搜索。以下是 Elasticsearch 的核心概念和数据模型的详细介绍。 核心概念 集群(Cluster) ● 集群是由一个或多个节点组成的,用于共同存储和搜索数据的集合。...
Spring Boot实现License生成和校验
Spring Boot实现License生成和校验 证书准备 # 1. 生成私钥库 # validity:私钥的有效期(天) # alias:私钥别称 # keystore:私钥库文件名称(生成在当前目录) # storepass:私钥库密码…...
es写入磁盘的过程以及相关优化
数据写入到内存buffer同时写入到数据到translog buffer,这是为了防止数据不会丢失每隔1s数据从buffer中refresh到FileSystemCache中,生成segment文件,这是因为写入磁盘的过程相对耗时,借助FileSystemCache,一旦生成segment文件,就能通过索引查询到了refresh完,memory bu…...
十大网络安全事件
一、私有云平台遭攻击,美国数千家公司工资难以发放 1月,专门提供劳动力与人力资本管理解决方案的美国克罗诺斯(Kronos)公司私有云平台遭勒索软件攻击,事件造成的混乱在数百万人中蔓延。 克罗诺斯母公司UKG集团…...
【数据结构】【线性表】栈的基本概念(附c语言源码)
栈的基本概念 讲基本概念还是回到数据结构的三要素:逻辑结构,物理结构和数据运算。 从逻辑结构来讲,栈的各个数据元素之间是通过是一对一的线性连接,因此栈也是属于线性表的一种从物理结构来说,栈可以是顺序存储和顺…...
修改ffmpeg实现https-flv内容加密
目录 1 前言 2 ffmpeg源码修改 2.1 增加头文件 2.2 http上下文增加解密密钥和AVAESCTR结构体 2.3 aes解密上下文初始化 2.4 对http数据部分解密 2.5 http关闭时清理资源 3 ffmpeg使用 1 前言 当前视频拉流已经通过URL鉴权方式来对访客身份进行识别和过滤,但…...
react中useMemo的使用场景
useMemo 是 React 的一个 Hook,用来优化性能,尤其是在计算复杂值时。它会记住(缓存)计算结果,只有在依赖项变化时才重新计算,避免不必要的重复计算。 import React, { useMemo } from react; function Ex…...
Pytorch自定义算子反向传播
文章目录 自定义一个线性函数算子如何实现反向传播 有关 自定义算子的实现前面已经提到,可以参考。本文讲述自定义算子如何前向推理反向传播进行模型训练。 自定义一个线性函数算子 线性函数 Y X W T B Y XW^T B YXWTB 定义输入M 个X变量,输出N个…...
aws服务(二)机密数据存储
在AWS(Amazon Web Services)中存储机密数据时,安全性和合规性是最重要的考虑因素。AWS 提供了多个服务和工具,帮助用户确保数据的安全性、机密性以及合规性。以下是一些推荐的存储机密数据的AWS服务和最佳实践: 一、A…...
VMware Workstation 17.6.1
概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1: 本月11号官宣:针对所有人免费提供,包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后,双击默认安装即可: 一路单击下一步按钮: 等待…...
高校企业数据挖掘平台推荐
TipDM数据挖掘建模平台是由广东泰迪智能科技股份有限公司自主研发打造的可视化、一站式、高性能的数据挖掘与人工智能建模服务平台,致力于为使用者打通从数据接入、数据预处理、模型开发训练、模型评估比较、模型应用部署到模型任务调度的全链路。平台内置丰富的机器…...
Vue项目开发 formatData 函数有哪些常用的场景?
formatData 不是 JavaScript 中的内建函数,它通常是一个自定义函数,用来格式化数据。不同的开发环境和框架中可能有不同的 formatData 实现方式。如果你指的是某个特定框架或者库中的 formatData,请提供更多的上下文信息。不过,以…...
NCM解密终极指南:3步解锁网易云音乐加密文件
NCM解密终极指南:3步解锁网易云音乐加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经在网易云音乐下载了心爱的歌曲,却发现只能在官方客户端播放,无法在其他设备或播放器上欣赏&…...
从地图导航到网络路由:深入理解Floyd-Warshall算法的动态规划内核与空间优化技巧
从地图导航到网络路由:深入理解Floyd-Warshall算法的动态规划内核与空间优化技巧 当我们使用地图导航寻找两点间最快路线时,或在数据中心配置网络路由协议时,背后可能都在运行一个经典的图论算法——Floyd-Warshall。这个诞生于1962年的算法以…...
Mac鼠标滚轮优化终极指南:三步告别卡顿实现丝滑滚动
Mac鼠标滚轮优化终极指南:三步告别卡顿实现丝滑滚动 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently for…...
Windows热键冲突终结者:3步精准定位占用进程的智能方案
Windows热键冲突终结者:3步精准定位占用进程的智能方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾…...
终极指南:如何在Mac上免费实现NTFS读写功能
终极指南:如何在Mac上免费实现NTFS读写功能 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for NTFS dri…...
Win10显示器关闭就锁屏?一个注册表键值让你告别烦人锁屏(附详细路径)
Win10显示器关闭后自动锁屏的终极解决方案:注册表深度优化指南 1. 问题背景与用户痛点 每当我们在Windows 10系统中设置显示器自动关闭以节省能源时,常常会遇到一个令人困扰的现象:显示器关闭后不久,系统就会自动进入锁屏状态。这…...
overwrite
编写overwrite.c程序#inlcude<stdio.h> int main() {int b 123;int c 789;int a 456;char s[100];printf("%p\n", &a);scanf("%s", s);printf(s);if (a 16){puts("my name is c");}else if (a 2){puts("my name is small&qu…...
第2篇_写MQTTBroker第一关不是PUBLISH_而是怎么让多个客户端稳稳连上同一个端口
写 Broker 最容易一上来就盯着 PUBLISH。但实际测试时,第一关通常不是消息转发,而是:两个客户端都连 192.168.20.100:1883,为什么一个都连不上,或者槽位刚置位就释放?先给结论:MQTT Broker 不是…...
【VScode】STM32CubeMX+VScode开发编译下载STM32程序(基于Cmake工程)
【VScode】STM32CubeMXVScode开发STM32程序(基于Cmake工程) 文章目录准备工作安装上述软件(略)为VScode配置隔离开发环境-cubeMX为新环境安装插件1. 安装STM32CubelIDE for Visual Studiio Code插件2. 安装Cortex-Debug插件3. 安装…...
VSCode里PlatformIO插件抽风?手把手教你彻底卸载重装PIO(解决创建工程失败)
VSCode PlatformIO插件异常终极解决手册:从崩溃到重生的全流程指南 当你在VSCode中满怀期待地点击"New Project"按钮,却看到那个刺眼的红色错误提示时,那种挫败感每个开发者都懂。PlatformIO作为物联网开发的瑞士军刀,一…...
