Django 中文本地化汉化方法

来源:互联网 发布:软件开发工程师职责 编辑:程序博客网 时间:2024/05/22 06:16

在 Python 的 web 开发框架中很多人都会选择强大的 Django 来进行学习,但是 Django 默认使用的语言是英语,对于开发人员可能还好,但是实际部署的时候英文环境对于网站运维人员未必友好,所以需要能够将 Django 的后台中文本地化,接下来就简单介绍一下如何汉化我们的 Django 。

系统环境

本文建立在以下系统环境中,对于其他版本和环境本文内容仅供参考。

操作系统:Manjaro Linux 内核版本 4.14
Django: 1.11
Python: 3.6

我们搭建了一个简单的投票应用,登录后台是纯英文的如下图:
这里写图片描述

可以看到我们的应用(app)名字叫polls ,polls 下有一个模型(models)叫做Question,然后我们整个后台管理界面(admin)也都是全英文的。

设置项目为中文

打开项目配置文件 settings.py 修改为下面的样子

# 较早版本的 Django 可以尝试改为'zh-CN',具体可查看# “python/site-packages/django/conf/locale/”中的语言名称LANGUAGE_CODE = 'zh-Hans'# Windows环境中此项的时区必须和系统一致,设置为 Asia/Shanghai。# 另外此项设置如果保持 UTC 有可能导致 Django 时间和本地时间不同的情况。TIME_ZONE = 'Asia/Shanghai'# 这里必须是 True,否则 LANGUAGE_CODE 会失效USE_I18N = True

保存后我们刷新后台就可以多看,几乎所有由 Django 创建的内容都已经汉化为了中文

这里写图片描述

汉化应用app

眼尖的同学肯定看到我们创建的应用 polls 和模型 Question 还都是英文的状态,那么接下来我们首先给应用设置中文名字。

我们打开应用下的 apps.py 文件设置应用的名称

# polls/apps.pyclass PollsConfig(AppConfig):    name = 'polls'    # 在已有的 PollsConfig 类中增加app的名字    verbose_name = '投票系统'

这里写图片描述

设置模型 models 的中文名

剩下的模型的名字了,当然还包括模型中不同字段的名字,不然不清楚要填写什么就更要命了。
我们看一下 Question 的的模型

class Question(models.Model):    # django 的大多数字段都接受一个可选的位置参数    # (在第一的位置) — 字段的自述名,我们利用它来使我们的项目汉化    question_text = models.CharField("问题", max_length=200)    pub_date = models.DateTimeField('发布时间')    def __str__(self):        return self.question_text    def was_published_recently(self):        now = timezone.now()        return now - datetime.timedelta(days=1) <= self.pub_date <= now    was_published_recently.admin_order_field = 'pub_date'    was_published_recently.boolean = True    # 我们可以在模型、admin中通过 short_description 设置自定义名称    was_published_recently.short_description = '是否最近发布?'    class Meta:        # 设置模型的名字,但是记得复数形式也要设置,否则有些地方就变成 verbose_name + s 了        verbose_name = '问卷'        verbose_name_plural = '问卷(复数形式)'

这里写图片描述

ForeignKey、ManyToManyField 和 OneToOneField 的中文名

由于 ForeignKey() ManyToManyField()OneToOneField() 的第一个参数要求是关联的模型,因此他们的汉化名字需要通过增加 verbose_name 关键字参数来设置

# 先来建立一个新的tag标签的模型,并且设置中文名称class Tag(models.Model):    tag_name = models.CharField("标签", max_length=10)    class Meta:        verbose_name="Tag标签"        verbose_name_plural = "Tag标签"# 创建一个新的文章的模型设置Tag模型的外键,并设置中文名称class Post(models.Model):    title = models.CharField('题目', max_length=30)    tag = models.ForeignKey(Tag, on_delete=models.CASCADE, verbose_name="标签")

至此,我们通过相对来说简单暴力的方法让我们的 Django 站点实现了中文化。而对于需要面对多语言用户的的情况,官方更建议的方式是通过本地化和全球化的方法来编辑翻译文档来实现。