Django 中文本地化汉化方法

8 篇文章 0 订阅
4 篇文章 0 订阅

在 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.py

class 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 站点实现了中文化。而对于需要面对多语言用户的的情况,官方更建议的方式是通过本地化和全球化的方法来编辑翻译文档来实现。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值