在Django中使用多语言(i18n)

在Django中使用多语言

配置中间件
python 复制代码
MIDDLEWARE = [
    ......
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',  # 此行重点
    'django.middleware.common.CommonMiddleware',
	......
]
配置翻译文件目录
  • 根目录下创建目录locale
python 复制代码
# 国际化翻译文件目录
LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),  # 翻译文件所在目录,请手动创建目录
]
创建语言文件
python 复制代码
 python manage.py makemessages -l zh_Hans
 python manage.py makemessages -l en

如果上述报错:Can't find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed

则需要安装 gettext,访问https://mlocati.github.io/articles/gettext-iconv-windows.html 下载安装包,一路next即可

在需要翻译的地方使用_函数
复制代码
# 导入
from django.utils.translation import gettext_lazy as _

_("你好")  # 纯字符串
_('Today is %(month)s %(day)s.') % {'month': m, 'day': d}  # 携带变量的字符串
把函数标记的字符串,自动加入到翻译文件中
python 复制代码
 python manage.py makemessages
文件内容如下
python 复制代码
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-12-18 10:51+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: .\apps\pvmi_defects\views.py:91
msgid "你好"  # 标记的字符串
msgstr "hello"    # 对应语言需要显示的字符串

msgid "Today is %(month)s %(day)s."  # %(params_name)s 为申明变量
msgstr "今天是%(month)s月%(day)s日"
翻译完后,需要编译翻译文件
python 复制代码
python manage.py compilemessages
如果需要动态切换语言,可以使用activate函数
python 复制代码
from django.utils.translation import activate
示例
python 复制代码
from django.utils.translation import activate, get_language_info
from django.utils.translation import gettext_lazy as _
activate("en")
print(_("你好"))  # hello

activate("zh-Hans")
print(_("你好"))  # 你好

m = 1
d = 2
print(_('Today is %(month)s %(day)s.') % {'month': m, 'day': d})  # 今天是1月2日
相关推荐
Coding茶水间20 小时前
基于深度学习的草莓健康度检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Django+web+训练代码+数据集)
人工智能·深度学习·yolo·机器学习·django
源码之屋2 天前
计算机毕业设计:Python出行数据智能分析与预测平台 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·深度学习·数据分析·django·汽车·课程设计
vx_biyesheji00012 天前
计算机毕业设计:Python网约车订单数据可视化系统 Django框架 可视化 数据大屏 数据分析 大数据 机器学习 深度学习(建议收藏)✅
大数据·python·机器学习·信息可视化·django·汽车·课程设计
I love studying!!!2 天前
Web项目:从Django入手
后端·python·django
q_35488851532 天前
计算机毕业设计:Python居民出行规律可视化分析系统 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·数据分析·车载系统·django·汽车·课程设计
vx_biyesheji00012 天前
计算机毕业设计:Python城市交通出行模式挖掘系统 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·深度学习·数据分析·django·汽车·课程设计
yuanmazhiwu2 天前
计算机毕业设计:Python智慧出行数据分析与模式识别系统 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·算法·数据分析·django·flask·课程设计
EmmaXLZHONG3 天前
Django By Example - 学习笔记
笔记·python·学习·django
AC赳赳老秦3 天前
OpenClaw二次开发入门:自定义技能,适配自身工作需求
服务器·数据库·python·mysql·django·deepseek·openclaw
暴力袋鼠哥4 天前
基于 LightGBM 的山东高考智能择校推荐系统设计与实现
python·django·flask