Django支持多语言切换

您所在的位置:网站首页 咖啡吧英文网站 Django支持多语言切换

Django支持多语言切换

2023-11-03 00:09| 来源: 网络整理| 查看: 265

Django支持多语言切换

python学习手册大全点我下载

下面介绍下如何使网站或APP国际化,让其支持多种语言 。

官网

效果

1、创建locale文件夹

先在项目根目录下创建一个名为locale的文件夹,这个文件夹是用来存放django.po和django.mo编译过的翻译文件。下面是我的项目文件夹示例:

2、settings.py中配置

首先配置中间件,添加LocaleMiddleware,放在SessionMiddleware后面,CommonMiddleware前面,

MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', # 多语言支持 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

配置支持多语言:

from django.utils.translation import ugettext_lazy as _ LANGUAGE_CODE = 'zh-hans' # 默认使用中国时区 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True LANGUAGES = ( ('en', _('English')), ('zh-hans', _('Simplified Chinese')), ) # 用于存放django.po和django.mo编译过的翻译文件 LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),) 3、设置urls.py

在项目中的路由配置urls.py中设置i18n多语言路由。

from django.conf.urls.i18n import i18n_patterns from django.contrib import admin from django.urls import path, re_path, include from django.views.static import serve from mallSystem import settings urlpatterns = [ path('i18n/', include('django.conf.urls.i18n')), ] urlpatterns += i18n_patterns( path('admin/', admin.site.urls), path("", include("mall.urls")), re_path(r'^static/(?P.*)$', serve, {'document_root': settings.STATICFILES_DIRS}), )

注:i18n是国际化(Internationalization)的缩写。i 和 n 之间有 18 个字母,简称 i18n,。l10n是本地化(localization)的缩写。l 和 n 之间有 10 个字母,简称 l10n。

4、访问admin

现在就可以通过不同的语言来访问后台管理网站了,

中文:http://127.0.0.1:8001/zh-hans/admin/login/

英文:http://127.0.0.1:8001/en/admin/login/

5、翻译py、html中的字符串

在py文件中使用函数ugettext_lazy 。

在html中使用标签{% trans "string" %}或{% blocktrans%} {%endblocktrans %} ,需在文件开头加入{% load i18n %} 表示使用多语言。

下面是翻译的一个示例。通过访问url来得到不同语言的html。

apps/mall/urls.py

from django.urls import path from mall import views urlpatterns = [ path("", views.index, name="index"), # 首页 ]

apps/mall/views.py

from django.shortcuts import render from django.utils.translation import ugettext_lazy as _ def index(request): context = {'msg': _("这是一个有趣的购物网站,你可以在这里购买都衣服、手提包、鞋子等等")} return render(request, 'index.html', context)

templates/index.html

{% load static %} {% load i18n %} {% trans "购物网站" %} body { overflow-x: hidden; /* Prevent scroll on narrow devices */ font-family: 'Inter', Arial, sans-serif; background: #F6F8FF; padding-top: 56px; } .form-control{ margin-right: 10px; } {#多语言切换下拉框#} {% trans "Django多语言切换" %} {% csrf_token %} {% get_current_language as LANGUAGE_CODE %} {% get_available_languages as LANGUAGES %} {% get_language_info_list for LANGUAGES as languages %} {% for language in languages %} {{ language.name_local }} {% endfor %} {% trans "Select" %} {% block content %} {% get_current_language as LANGUAGE_CODE %} {% trans '当前语言' %}: {{ LANGUAGE_CODE }} {% trans "这是一个购物网站" %} {% blocktrans %} {{ msg }} {% endblocktrans %} {% endblock %} © {% trans '开发者 LDC' %} {% trans '联系方式: 微信 1257309054' %}

可以通过get_current_language获取当前语言。

6、生成po、mo翻译文件

如果是windows系统,需要先下载gettext,

下载方式一:官网

下载方式二:关注公众号“轻松学编程”,回复gettext即可。

下载gettext后解压缩到C盘, C:\Program Files (x86)\gettext,复制C:\Program Files (x86)\gettext\bin路径加入到系统PATH的环境变量(在控制面板>系统>高级>环境变量中添加)

在项目根目录中打开cmd窗口,激活虚拟环境,然后运行以下命令生成po文件:

# 生成中文的po文件 python manage.py makemessages -l zh_HANS # 生成英文的po文件 python manage.py makemessages -l en

如果生成成功,那么在locale文件夹中可以看到以下文件:

翻译好每一个msgstr后,就需要生成mo文件,命令为:

python manage.py compilemessages

然后打开浏览器,输入http://127.0.0.1:8001/zh-hans/,就可以看到中文html,

输入http://127.0.0.1:8001/en/就可以看到英文的html了,当然也可以通过下拉框来进行切换。

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。 如果文章对您有帮助,请我喝杯咖啡吧!

公众号

有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3