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

实现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面试题

    哪些class可以继承 #class View(object): #class APIView(View): 封装了view,并且重新封装了request,初始化了各种组件 #class GenericAPIView(views.APIView): #1.增加了一些属性和方法,如get_queryset,get_serializer #class Gener…

    Django 2023年4月9日
    00
  • Django使用原生SQL查询数据库详解

    关于使用Django进行原生SQL查询,我们需要先了解一下Django提供给我们的两种方式: 使用自定义的SQL作为Django查询的一部分,基本与SQLalchemy等ORM框架使用方式相同。此方式执行的是基于Django所定义的模型中的数据查询,且在Django的查询集上已经默认处理了ORM的一些坑点使其可读性更清晰; 使用Django提供的 djang…

    Django 2023年5月16日
    00
  • windows10+apache2.4+python3.6部署Django2.2.4项目

    刚从家回来,老师让写专利,就开始准备写,初稿交给老师后,把我说了一顿,我就想着回去改呀,然后。。。老师找到了我,说是食品院那急需一个展示数据的平台,然我尽快干出来,我也是菜鸟啊,就没单独干过呀,即使是一个展示数据,上一次的海底捞的还是师兄搭好框架,我们在上面改的,也遇到了不少坑,详见我的github:http://JadenFK.github.io 还好前几…

    2023年4月9日
    00
  • django的json返回值带有汉字的处理

    原因:simpleJson把utf-8编码的字符串直接转成了unicode,但却是按字节来转的,不是真正的unicode 下面是转化为unicode的代码 from django.http import HttpResponse from django.utils import simplejson from django.conf import setti…

    Django 2023年4月13日
    00
  • 详解Django之auth模块(用户认证)

    下面我将详细讲解“详解Django之auth模块(用户认证)”的完整攻略,并且会包含两条示例说明,其内容如下: 详解Django之auth模块(用户认证) 什么是Django auth模块? Django auth是Django的一个内置模块,用于提供用户认证、用户组、权限等功能。它提供了一组可重用的视图和模板,可以快速构建用户注册、登录、注销等功能。在Dj…

    Django 2023年5月16日
    00
  • Django之POST GET与前后端交互

    Django之META与前后端交互 1 提交表单之GET 前端提交数据与发送 1)提交表单数据 2)提交JSON数据 后端的数据接收与响应 1)接收GET请求数据 2)接收POST请求数据 3)响应请求 GET 请求过程 前端通过ajax发起GET请求,json格式数据 var data = { “name”: “test”, “age”: 1 }; $.a…

    Django 2023年4月10日
    00
  • DJango的创建和使用详解(默认数据库sqlite3)

    Django的创建和使用详解(默认数据库sqlite3) 简介 Django是一个高层次的Python Web框架,全面支持MVC编程模式。Django的目标是让Web开发更加方便,让开发者可以专注于业务逻辑层面的开发,而无需关心低层次的底层细节。本文将介绍如何创建一个Django项目,并使用默认的sqlite3数据库。 准备工作 在开始创建Django项目…

    Django 2023年5月16日
    00
  • Django小项目web聊天

    WEBQQ的实现的几种方式 1、HTTP协议特点 首先这里要知道HTTP协议的特点:短链接、无状态! 在不考虑本地缓存的情况举例来说:咱们在连接博客园的时候,当tcp连接后,我会把我自己的http头发给博客园服务器,服务器端就会看到我请求的URL,server端就会根据URL分发到相应的视图处理(Django的views里)。最后给我返回这个页面,当返回之后…

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