django 国际化

摘要:
参考文件:https://docs.djangoproject.com/zh-hans/2.2/topics/i18n/translation/https://blog.csdn.net/qq_36963372/article/details/88788463https://www.jianshu.com/p/b7fd0658989d配置设置IDDLEWARE=['django.co

参考文档:

配置 settings

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 或 控制台,后加入的环境变量不会生效,需要重启咯),如图:

django 国际化第1张

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

brew install gettext

brew link gettext --force

  

生成需要翻译的文件

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

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

django.po 文件:

django 国际化第2张

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

msgid: 需要翻译的文案

msgstr: 翻译后的文案

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

django 国际化第3张

 django 国际化第4张

最后一步就是 编译

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

python manage.py compilemessages

  

实践效果图

django 国际化第5张

其他用途

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

免责声明:文章转载自《django 国际化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis进阶实践之十一 Redis的Cluster集群搭建29Spring_Autowriter的一些疑惑(很重要)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django模型Model之数据控制详解

模型是MVC架构中访问数据的模块,Django的模型对各种数据库提供了很好的支持。这里以MySQL为例介绍Django的模型。 使用模型 启用数据库支持 在项目的 settings.py 文件中找到 DATABASES 配置项, 根据数据库配置信息: DATABASES = { 'default': { 'ENGINE': 'dj...

安装django及配置

安装 diango官网下载地址 https://www.djangoproject.com/download/ 安装最新的LTS版本 pip安装(在windows的crm中或pycharm中的Terminal中输入) # 安装 三 选 一 pip install django==1.11.18 pip install django==1.11.18...

Django—中间件

CBV加装饰器(session) 要在CBV视图中使用我们上面的check_login装饰器,有以下三种方式: from django.utils.decorators import method_decorator from django.shortcuts import render,redirect,HttpResponse from django....

Python的Django框架

一、Django简介 Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django 是一个开放源代码的 Web 应用框架,由 Python 写成。 Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0...

django models def __str__(self)

1、 https://blog.csdn.net/wyongkang/article/details/116229846 https://my.oschina.net/u/4380404/blog/4094774 2、 https://www.zhihu.com/question/273973677/answer/371354850 3、 https://...

Django(55)GenericAPIView源码分析

源码分析 GenericAPIView继承自APIView,也就是在APIView基础上再做了一层封装,源码如下: class GenericAPIView(views.APIView): queryset = None serializer_class = None lookup_field = 'pk' lookup_...