当前位置: 首页 > news >正文

Django 实战:I18N 国际化与本地化配置、翻译与切换一步到位

文章目录

    • 一、国际化与本地化介绍
      • 定义
      • 相关概念
    • 二、安装配置
      • 安装 gettext
      • 配置 settings.py
    • 三、使用国际化
      • 视图中使用
      • 序列化器和模型中使用
    • 四、本地化操作
      • 创建或更新消息文件
      • 消息文件说明
      • 编译消息文件
    • 五、项目实战


一、国际化与本地化介绍

定义

国际化和本地化的目标,是允许一个单一的 Web 应用程序以适合受众的语言和格式提供其内容。 Django 提供了完整的国际化(i18n)和本地化(l10n)支持。

  • 国际化(i18n) :是指在软件开发过程中,将软件设计为可以支持多种语言和文化环境的过程。国际化为本地化准备软件。通常由开发者完成。
  • 本地化(l10n) :是指将软件根据特定语言和文化环境进行定制的过程。本地化编写翻译和本地格式化。通常由翻译者完成。

相关概念

  • 消息文件:消息文件(message file)是一个纯文本文件,代表一种语言,它包含所有可用的翻译字段以及如何以给定语言表示。消息文件扩展名是 .po 文件。

  • 惰性翻译:gettext_lazy会延迟翻译计算,直到实际渲染时才会根据当前请求语言动态加载,而 gettext 在模块加载时即固定翻译结果

参考资料:Django 国际化和本地化

二、安装配置

安装 gettext

下载地址,下载64位 share 安装包。双击安装,默认下一步。安装后检查是否可识别:

msguniq --version
# 上述命令如果在VSCode的终端无法识别,可以在CMD中运行

配置 settings.py

在 Django 项目的 settings.py 文件中进行如下配置:

### I18N 配置
USE_I18N = True
LOCALE_PATHS = [BASE_DIR / "locale"]
LANGUAGES = (("zh-hans", "简体中文"),("en", "English"),
)MIDDLEWARE = [# ..."django.contrib.sessions.middleware.SessionMiddleware","django.middleware.locale.LocaleMiddleware", # I18N多语言支持,注意放置顺序"django.middleware.common.CommonMiddleware",# ...
]

点击查看完整代码

三、使用国际化

视图中使用

视图中使用:使用函数 gettext() 来指定翻译字符串。按照惯例,将其作为下划线( _ )导入,以保存输入。

from django.utils.translation import gettext as _# ...# 检查用户名与密码是否正确if not user:# 登录失败,记录登录日志log_data["result"] = LoginResultEnum.BAD_CREDENTIALS.valuelogin_log_task.delay(log_data)return CommonResponse.error(code=111201, msg=_("账号或密码错误"))

序列化器和模型中使用

序列化器和模型中使用:使用惰性翻译函数 gettext_lazy() 来指定翻译字符串。

  • 序列化器的 error_messages 中直接使用 _() 函数时,Django 会在启动时立即计算翻译值(基于默认语言),而非根据请求动态切换。需改用 ugettext_lazy 实现惰性翻译,使翻译在运行时根据请求语言动态加载。
# 示例:序列化器中
from django.utils.translation import gettext_lazy as _error_messages={"required": "密码不能为空","min_length": _("密码长度至少为8位"),"max_length": "密码长度不能超过16位",},# 示例:模型
from django.db import models
from django.utils.translation import gettext_lazy as tclass MyThing(models.Model):name = models.CharField(help_text=t("This is the help text"))

四、本地化操作

创建或更新消息文件

下面命令会遍历项目源代码,并抽出所有要被翻译的字符串。默认情况下,脚本检查具有 .html、.txt 或 .py 文件扩展名的每个文件。可通过-e选项指定。

# 进入Django 项目的根目录(就是包含 manage.py 的那个目录),或进入Django app的根目录
django-admin makemessages -l zh_Hans
django-admin makemessages -l en# 只检查 *.py 文件(可选)
django-admin makemessages -l zh_Hans -e py# 以后使用下面命令,重新检查并更新所有语言的消息文件
django-admin makemessages -a

生成对应的消息文件*.po

locale
├── en
│   └── LC_MESSAGES
│       ├── django.mo
│       └── django.po  # 消息文件
└── zh_Hans└── LC_MESSAGES├── django.mo└── django.po  # 消息文件

消息文件说明

*.po的是消息文件,必须使用 UTF-8 编码

  • msgid :显示在源代码中需要翻译的字符串。不要改动它。
  • msgstr :翻译后的字符串。
# mysite\locale\en\LC_MESSAGES\django.po
msgid "账号或密码错误"
msgstr "Account or password error"# mysite\locale\zh_Hans\LC_MESSAGES\django.po
msgid "账号或密码错误"
msgstr "账号或密码错误"

编译消息文件

下面命令会根据 .po 文件内容,编译并创建对应的 .mo 文件。

django-admin compilemessages
# 如果更新了消息文件,需要重新编译

生成的翻译文件应位于以下路径。需要重启一下Django项目,才生效。

locale
├── en
│   └── LC_MESSAGES
│       ├── django.mo  # 编译后的翻译文件
│       └── django.po  # 消息文件
└── zh_Hans└── LC_MESSAGES├── django.mo  # 编译后的翻译文件└── django.po  # 消息文件

五、项目实战

用户登录功能,按上述步骤配置国际化与本地化

在这里插入图片描述

用户登录界面默认为中文,给出中文提示

在这里插入图片描述

修改浏览器语言偏好:设置 → 语言 → 添加"英语(美国)" → 拖到顶部作为首选语言

在这里插入图片描述

此时,给出英文提示

在这里插入图片描述

点击查看完成代码


您正在阅读的是《Django从入门到实战》专栏!关注不迷路~

http://www.lryc.cn/news/592118.html

相关文章:

  • Mysql数据库——增删改查CRUD
  • Jfinal+SQLite解决MYSQL迁移表未复制索引问题,完善迁移工具
  • 算法学习笔记:29.拓扑排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • hadoop(服务器伪分布式搭建)
  • 瀚高数据库开启Oracle兼容模块
  • Oracle 11g RAC 高可用集群部署最佳实践
  • SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战
  • Golang 中 JSON 和 XML 解析与生成的完全指南
  • sqli-labs靶场通关笔记:第29-31关 HTTP参数污染
  • 配置本地git到gitlab并推送
  • 【LeetCode 热题 100】199. 二叉树的右视图——(解法一)BFS
  • Visual Studio编译WPF项目生成的文件介绍
  • Newline全场景方案闪耀2025中国智慧生活大会
  • UniApp -- 小程序自定义导航栏组件
  • 共享模式、社群与开源链动2+1模式AI智能名片S2B2C商城小程序的协同发展研究
  • usb转can测试
  • 为Notepad++插上JSON格式化的翅膀
  • 全国计算机等级考试二级题库【C语言】:程序修改题型——结构体、可变数组、链表 自制答案详解合辑
  • 在 ASP.NET Core 和 JavaScript 中配置 WebSocket
  • 【计算机网络】MAC地址与IP地址:网络通信的双重身份标识
  • 依托CCLinkIE转ModbusTCP网关的转换达成西门子PLC连接配置案例
  • 计算机网络基础:从协议到通信全解析(大致框架)
  • Selenium自动化浏览器操作指南
  • websocket案例 599足球比分
  • IDEA高效开发:Database Navigator插件安装与核心使用指南
  • 【后端】.NET Core API框架搭建(10) --配置163邮件发送服务
  • 应用集成体系深度解析:从数据互通到流程协同
  • 实现库存显示和状态按钮的Question
  • nginx定制http头信息
  • python实现Markdown转化PDF的方案