文章目录
- ⭐注意⭐
- 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)