Django 启用国际化支持—实现配置多国语言

文章目录

    • [1、在 Windows 上安装 GNU gettext 工具](#1、在 Windows 上安装 GNU gettext 工具)
    • [2、设置 Django 的国际化配置](#2、设置 Django 的国际化配置)
      • 创建一个demo项目,方便后续国际化配置
      • 配置国际化
        • [(1)在应用根目录中创建一个 `locale` 目录。](#(1)在应用根目录中创建一个 locale 目录。)
        • [(2)`setting.py`中 配置全局翻译目录](#(2)setting.py中 配置全局翻译目录)
        • [(3)运行 `django-admin makemessages -l zh_Hans` 命令以生成对应语言目录和相关文件](#(3)运行 django-admin makemessages -l zh_Hans 命令以生成对应语言目录和相关文件)
        • [(4)翻译`django.po` 文件中的字符串](#(4)翻译django.po 文件中的字符串)
        • [(5)运行 `django-admin compilemessages` 编译翻译文件](#(5)运行 django-admin compilemessages 编译翻译文件)
        • (6)切换语言
        • (7)翻译效果如图

1、在 Windows 上安装 GNU gettext 工具

在 Windows 上下载和安装 GNU gettext 工具的作用是支持 Django 项目的国际化(i18n)功能。具体来说,gettext 工具帮助 Django 处理翻译文件,使应用能够生成和编译 .po.mo 文件,从而实现多语言支持。

下载安装

官网地址:https://mlocati.github.io/articles/gettext-iconv-windows.html

注: 直接下载后,安装即可。本人安装的是1.17版本,无需手动配置path环境变量,安装后即可使用;

验证安装

安装并添加到路径后,输入以下命令以验证安装:

bash 复制代码
msguniq --version

如果安装成功,应该会显示 msguniq 的版本信息。如图:

2、设置 Django 的国际化配置

创建一个demo项目,方便后续国际化配置

(1)新建django项目demo
shell 复制代码
django-admin startproject demo
(2)将 项目导入到pycharm,方便后续操作,记得配置python解释器
(3)项目配置目录下demo/demo,新加 views.py 文件,实现一个简单界面
python 复制代码
from django.http import HttpResponse
from django.utils.translation import gettext as _

def index(request):
    message = _('hello world')  # 翻译字符串
    return HttpResponse(message) 

使用 gettext 进行翻译_('hello world') 会返回翻译后的字符串。

(4)配置路由
python 复制代码
urlpatterns = [
    path("admin/", admin.site.urls),
    path("",index),
]
(5)修改结果如图
(6)运行Djnago项目,结果如图

配置国际化

首先 ,确保setting.py文件中USE_I18N = True,为True时表示:启用国际化支持;

(1)在应用根目录中创建一个 locale 目录。
(2)setting.py中 配置全局翻译目录

settings.py 中添加或修改 LOCALE_PATHS 配置,来设置一个全局翻译目录。

python 复制代码
LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale')
]
(3)运行 django-admin makemessages -l zh_Hans 命令以生成对应语言目录和相关文件
shell 复制代码
django-admin makemessages -l zh_Hans

解释

  • makemessages :这是 Django 的一个子命令,用于提取项目中可翻译的字符串(例如,使用 gettextgettext_lazy 标记的字符串)。makemessages 会扫描项目中的 Python 文件、模板文件(HTML 文件)、JavaScript 文件等,找到所有标记为可翻译的字符串,并将其收集到一个 .po 文件中,方便翻译。

  • -l :这是 makemessages 命令的一个参数,表示语言代码(locale),用来指定生成翻译文件的目标语言。

  • zh_Hans :表示简体中文。zh_Hans 是简体中文的语言代码,用于指定生成的翻译文件为简体中文版本。根据不同语言需求,可以替换为其他语言代码(例如 en 表示英语,fr 表示法语等)。

这会在项目或应用目录下的 locale/zh_Hans/LC_MESSAGES/ 路径中生成一个 django.po 文件结果如图:

(4)翻译django.po 文件中的字符串

打开 zh_Hans/LC_MESSAGES/django.po 文件,找到你需要翻译的字符串,将其翻译成目标语言。例如:

(5)运行 django-admin compilemessages 编译翻译文件

保存 .po 文件后,编译成 .mo 文件,Django 运行时会读取该文件:

shell 复制代码
django-admin compilemessages
(6)切换语言

settings.py 中,将 LANGUAGE_CODE 设置为你的目标语言(例如中文 zh-Hans),或者使用 Django 的 translation 模块动态切换语言。

注: Django 的 translation 模块动态切换语言 ,如果感兴趣可以自行了解。

(7)翻译效果如图
相关推荐
NiceCloud喜云22 分钟前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
为思念酝酿的痛32 分钟前
POSIX信号量
linux·运维·服务器·后端
小羊在睡觉35 分钟前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
AI玫瑰助手1 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
weixin_468466851 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
小糖学代码1 小时前
LLM系列:环境搭建:5.Python-dotenv 环境变量管理
人工智能·python·深度学习·神经网络
swipe1 小时前
Neo4j + Graph RAG 医疗知识图谱工程实践:患者教育问答真正需要的是“关系可追溯”
后端·langchain·llm
智慧物业老杨2 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
橙橙笔记2 小时前
Python的学习第一部分
python·学习
源码宝2 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码