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)翻译效果如图
相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
GetcharZp6 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
二十雨辰7 小时前
[爬虫]-Urllib
爬虫·python
玉鸯8 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_446260859 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao9 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
qetfw9 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具