Django 多语言教程的实现(i18n)

yizhihongxing

实现Django多语言教程(i18n)的步骤如下:

  1. 确认Django安装语言包

首先,我们需要确认Django安装了我们需要使用的语言包。在Django中,i18n语言包是作为django.middleware.locale.LocaleMiddleware中间件的一部分提供的。

查看本机安装了哪些语言包可以通过Django的源代码或者使用下面的命令:

python -c "import django; print(django.conf.locale.LANG_INFO)"

如果需要添加新的语言包,只需在settings.py文件中将其加入LANGUAGES列表中,并且在LOCALE_PATHS列表中添加语言目录。例如:

# settings.py

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

# 可选语言列表
LANGUAGES = [
    ('en', 'English'),
    ('zh-hans', '简体中文'),
    ('fr', 'Français'),
]

# 语言文件路径
LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
]
  1. 创建Django多语言应用程序

默认情况下,Django不会自动创建用于多语言支持的目录和文件,我们需要手动添加它们。最佳做法是将这些文件存储在您的Django应用程序的根目录中。

第一步是在应用程序目录中创建locale目录。从本质上讲,此目录将包含应用程序的所有翻译。在locale目录中,您将创建一个子目录以存放每种语言。

举个例子,假设您希望支持英语和西班牙语。您的目录结构将如下所示:

myapp/
    locale/
        en/
            LC_MESSAGES/
        es/
            LC_MESSAGES/
        ...

请注意,Django需要在每个语言目录(即'en/'和'es/')中启用LC_MESSAGES目录(即'en/LC_MESSAGES/'和'es/LC_MESSAGES/')。此目录将存储Messages文件。

  1. 在Django应用程序中添加文案翻译

为了使应用程序在多种语言中运行,我们需要将所有诸如按钮标签、导航标题、输入占位符等等的英文值进行翻译。在Django中,翻译是通过 gettext 来实现的。

我们在需要翻译的文案前使用 gettext() 函数或 gettext_lazy() 函数来标记这些文案。例如,在模版文件中我们可以这样引用:

{% load i18n %}

<h1>{% trans "Hello World" %}</h1>

在python文件中我们也可以按照如下方式翻译:

from django.utils.translation import gettext as _

...
message = _("Hello World")

我们需要在每个语言目录(即'en/LC_MESSAGES/'和'es/LC_MESSAGES/')中创建一个Messages文件。Messages文件是使用 gettext 工具来创建的,在这里我们不做详细讲解。在简单的例子中,只需要在应用程序的根目录下打开终端或命令提示符窗口,并键入以下命令:

python manage.py makemessages -l en

这将从项目中提取所有gettext引用的短语,并生成一个名为django.po的文件。然后,我们可以在该文件中将每个短语手动翻译成指定语言的值。当我们完成翻译之后,需要使用以下命令来将这些翻译应用到项目:

python manage.py compilemessages

这将把.po文件编译成django.mo文件,并且像之前所述的文件分别放置在每个语言的相关目录下。我们现在实现了一个完全支持多语言的Django应用程序。

  1. 在Django应用程序中使用中间件启用多语言支持

默认情况下,Web请求处理流程会忽略用户设置的支持的语言。我们需要通过中间件来更新请求过程中返回的context信息。在settings.py中,需要加入以下两个配置:

MIDDLEWARES = [
    ...
    'django.middleware.locale.LocaleMiddleware',
    ...
]

LANGUAGE_CODE = 'en-us'

# 可选语言列表
LANGUAGES = [
    ('en', 'English'),
    ('zh-hans', '简体中文'),
    ('fr', 'Français'),
]

# 语言文件路径
LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
]

在该配置的MIDDLEWARES列表中插入django.middleware.locale.LocaleMiddleware中间件,以便Django会自动指定诊断的语言。然后,将该文件末尾的‘ALLOWED_HOSTS’配置替换为‘LANGUAGE_CODE’、‘LANGUAGES’和‘LOCALE_PATHS’。

  1. 示例一:在 Django 模板文件中使用多语言支持

在定制现有网站或编写新网站时,通常需要使用模板文件(例如,一个HTML文件或者一个Email模板)。下面的示例说明如何通过模板文件来使用多语言支持:

{% load i18n %}

<h1>{% trans "Hello World" %}</h1>

这里我们使用{% trans %}标签将要翻译的文案进行标记,并在标记中传入默认的翻译值。在模版中使用trans标签以便Django在渲染过程中搜索Messages文件。

  1. 示例二:在 Python 代码中使用多语言支持

下面的示例说明如何在Python中提供一个多语言值。

from django.utils.translation import gettext as _

msg = _("This is a message")

在Python代码中,我们使用gettex()函数标记文本,在标记中传入默认的翻译值,即为翻译文本提供一个多语言翻译。

以上就是Django多语言教程(i18n)的完整攻略,包含了实现步骤以及两个实例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django 多语言教程的实现(i18n) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django单表查询及其方法

    前期准备 首先新建一个test的python文件,然后再manage.py中导入main语句及其下面的复制到新文件中并导入django 写上django.setup() 就可以导入对应的models进行数据操作了 import os if __name__ == “__main__”: os.environ.setdefault(“DJANGO_SETTIN…

    Django 2023年4月12日
    00
  • django.db.utils.OperationalError: (2003, “Can’t connect to MySQL server on ‘127.0.0.1’)

    报错信息如下:       检查发现原来是自己的sql没有启动     启动mysql后,        

    Django 2023年4月12日
    00
  • Django Admin后台添加数据库视图过程解析

    下面我将为你详细讲解“Django Admin后台添加数据库视图过程解析”以及两条示例说明。 什么是Django Admin? Django Admin 是 Django 的一个开箱即用的功能,它提供了一个快速而简单的方式来创建管理后台。通过 Django Admin,我们可以灵活地配置、管理和增加我们的数据。 如何添加数据库视图? 添加数据库视图有两个步骤…

    Django 2023年5月16日
    00
  • 【Django单元测试方法】

    一.前言/准备   测Django的东西仅限于在MTV模型。哪些可以测?哪些不可以。 1.html里的东西不能测。①Html里的HTML代码大部分都是写死的②嵌套在html中的Django模板语言也不能测,即使有部分逻辑。 但写测试用例时至少要调用一个类或者方法。模板语言没有出参也没有入参,不能测2.models模型可测。属于数据库层3.views,视图层可…

    Django 2023年4月11日
    00
  • Python – Django – request 对象

    获取请求的方法,例如 GET、POST 等 views.py: from django.shortcuts import render, HttpResponse # request 对象 def test(request): print(request.method) return render(request, “test.html”) 访问页面 可以通…

    Django 2023年4月10日
    00
  • Django+Vue打造购物网站(三)

    商品列表页 通过商品列表页面来学习drf django的view实现商品列表页 在goods目录下新建一个views_base.py文件,用来区分drf的view和Dajngo自带的view的区别利用Django的view实现返回json数据 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 20…

    2023年4月9日
    00
  • Python的Django框架使用入门指引

    Python的Django框架使用入门指引 什么是Django Django是一个高级Web应用框架,使用Python编写。它帮助开发人员轻松地构建和维护复杂的Web应用程序。Django相对于其他Web框架的优势在于它的可扩展性,开发速度快和安全性高。 Django的安装 要安装Django,您需要安装Python。在安装Python之后,可以在命令行中使…

    Django 2023年5月16日
    00
  • python + django + echart 构建中型项目

    1. python生产环境, 多层modules 导入问题:   多个modules 如何导入不同级别的包: 在每个modules下新建 __init__.pyimport os, sys dir_mytest = os.path.dirname(os.path.abspath(__file__))      # crontab 跑时 os.getcwd()…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部