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)翻译效果如图
相关推荐
大鱼七成饱18 分钟前
Rust 多线程编程入门:从 thread::spawn 步入 Rust 并发世界
后端·rust
码事漫谈23 分钟前
深入剖析:C++、C 和 C# 中的 static
后端
码事漫谈27 分钟前
AI智能体全球应用调查报告:从“对话”到“做事”的变革
后端
郝学胜-神的一滴41 分钟前
Effective Python 第44条:用纯属性与修饰器取代旧式的 setter 与 getter 方法
开发语言·python·程序人生·软件工程
绝无仅有1 小时前
某大厂跳动Java面试真题之问题与解答总结(二)
后端·面试·github
绝无仅有1 小时前
某大厂跳动Java面试真题之问题与解答总结(三)
后端·面试·架构
野犬寒鸦1 小时前
从零起步学习Redis || 第十章:主从复制的实现流程与常见问题处理方案深层解析
java·服务器·数据库·redis·后端·缓存
嫂子的姐夫2 小时前
11-py调用js
javascript·爬虫·python·网络爬虫·爬山算法
图亚Vanta3 小时前
Python入门第一课:Python安装、VSCode/Pycharm配置
vscode·python·pycharm
睿思达DBA_WGX3 小时前
使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容
python·word