django 国际化

参考文档:

配置 settings

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
MIDDLEWARE = [
   'django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.locale.LocaleMiddleware'# LocaleMiddleware 中间件需要放在 sessions 中间件之后和 common 中间件之前
   'django.middleware.common.CommonMiddleware',
]
 
TEMPLATES = [
    {
        # BACKEND 要使用的模板后端。还有一个 'django.template.backends.jinja2.Jinja2'
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # DIRS 包含搜索顺序的序列,搜索引擎会按照这个顺序查找 template 资源文件
        'DIRS': [
            os.path.join(BASE_DIR, 'templates').replace('\\', '/'),  # 设置项目根目录模板路径
        ]
        ,
        'APP_DIRS': True# Templates 引擎是否应该在已安装的 app 中查找 Template 源文件
        'OPTIONS': {
            'context_processors': [
                "django.template.context_processors.i18n"# 模板国际化
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.template.context_processors.media',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
 
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
 
# UTC 世界统一时间
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
 
USE_I18N = True  # 启用国际化
 
USE_L10N = True
 
 
# 国际化语言种类
from django.utils.translation import gettext_lazy as _
 
LANGUAGES = [
    ('en', _('English')),
    ('zh-Hans', _('中文简体')),
]
 
# 国际化翻译文件目录
LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),  # 翻译文件所在目录,请手动创建目录
]

  

安装 gettext

Django 框架具有很好的 I18N 和 L10N 的支持,其实现是基于 GNU 的 gettext, 所以要想在 Django 中使用 I18N 还需要先安装配置 gettext。

windows gettext 下载地址:

https://mlocati.github.io/articles/gettext-iconv-windows.html

exe 包安装时会默认加入到环境变量(提醒:已打开的 cmd 或 控制台,后加入的环境变量不会生效,需要重启咯),如图:

 

 Mac 安装 gettext 使用 brew 安装:(CommandError: Can't find msguniq. Make sure you have GNU gettext tools 0.15 意思是提示需要安装 gettext)(注:Mac 解决 Homebrew 一直卡在 update

1
2
3
brew install gettext
 
brew link gettext --force

  

生成需要翻译的文件

1
python manage.py makemessages -l zh_Hans
1
2
3
python manage.py makemessages -l zh_Hans
# 结果
processing locale zh_Hans

运行成功后会生成一个 django.po 文件( LOCALE_PATHS 对应语言目录下 - 具体看下图,这个里面就是我们手动写翻译的地方)

django.po 文件:

如果执行命令:python manage.py makemessages -l zh_Hans(第二个 H 大写)

msgid: 需要翻译的文案

msgstr: 翻译后的文案

在代码中看到:_("这种就是国际化的标志,我们只需要翻译下就 OK")

 

 

 

 

最后一步就是 编译

编译成功后会在 django.po 的对应目录生成 django.mo 文件

1
python manage.py compilemessages

  

实践效果图

 

 

其他用途

  • 把三方库某些显示的文案翻译成本地语言,而不用修改源代码。

 

posted @   兰嘉轩  阅读(958)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示