日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django 进行国际化及在后台进行中英文切换

發布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django 进行国际化及在后台进行中英文切换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目的部署地為: 中國大陸與美國東海岸, 兩個地區的服務器數據不進行同步, 中國地區的服務器頁面展示中文, 美國地區的服務器頁面展示成英文, 項目后臺使用python編程語言進行開發, 并結合django框架進行版本迭代.

這里對項目的國際化進行配置說明:

?

一.在配置文件settings.py中:

1) 開啟國際化功能

# 語言, 先設置成中文 LANGUAGE_CODE = 'zh-hans' # 1.8版本之后的language code設置不同, 1.8之前是LANGUAGE_CODE = 'zh-CN' # LANGUAGE_CODE = 'en'# 時區 TIME_ZONE = 'Asia/Shanghai' # TIME_ZONE = 'UTC'# Internationalization # https://docs.djangoproject.com/en/2.1/topics/i18n/ # 開啟國際化 USE_I18N = True# 開啟本地化 USE_L10N = TrueUSE_TZ = TrueLANGUAGES = (('en', 'English'),('zh-hans', '中文簡體'), )# 翻譯文件所在目錄, 與 manage.py 文件在同級目錄下 LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'), )

2) 添加進行國際化的中間件

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware',# 這就是新添加進來的中間件, 注意位置: 需要放置在 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', ]

3) 添加i18n上下文渲染器

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': [# 新添加進來的上下文渲染器, 不知是否是本人配置不當, 如果將該渲染器放置在其他位置, 無法進行語言切換'django.template.context_processors.i18n','django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},}, ]

?

二.在項目的路由文件 urls.py中, 添加路由:

# 如果需要支持在頁面自由選擇語言進行切換, 必須添加該路由, 獲取語言翻譯文件 url(r'^i18n/', include('django.conf.urls.i18n')),

?

三.在模板文件中開啟國際化

<!DOCTYPE html>{% load i18n %}

在需要進行國際化的模板中開啟國際化功能: 在文件的開頭添加: {% load i18n %}, 也可以放置在 <!DOCTYPE html> 后面

?

四.添加需要進行國際化的字符串

1) 在視圖中調用模板, 通過變量賦值渲染模板( 或者直接返回json數據給前臺, 由前臺通過js或者其他模塊進行翻譯):

在views.py中:

from django.utils.translation import gettext_lazy as _...if user.is_active:# _("已激活") 標示對該字符串進行國際化context = {"text": _("已激活"),"domain": domain}# 進行模板渲染,響應用戶請求.如果前后分離,可以直接返回json數據給前端,由前端在js中進行國際化return render(request, "./users/active_account.html", context)

如果是模板渲染, 在相應的模板文件 acitveacitve_account.html 中:

<body><h2>{%trans "你好!" %}</h2><h2>{{ text }}</h2><img src="{{ domain }}/static/images/qcat2.jpeg" alt=""> </body>

直接將變量渲染到模板中即可, 由模板調用翻譯文件進行翻譯.

如果需要進行國際化的字符串可以直接寫死在模板中, 也可以直接在模板中使用下面的方式進行國際化:

{%trans "需要翻譯的字符串" %} , 如上面的代碼中所示.

?

五.生成翻譯文件(先在manage.py的同級目錄下創建 locale目錄)

python manage.py makemessages -l en

會在locale目錄下生成 po 翻譯文件, 文件自動列出需要進行翻譯的字符串, 如:

# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-04-17 03:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"#: apps/users/models.py:25 msgid "郵箱地址" msgstr ""#: apps/users/views.py:748 msgid "已激活" msgstr ""#: templates/users/active_account.html:10 msgid "你好!" msgstr ""

msgid : 需要進行國際化的字符串

msgstr: 將翻譯好的字符串, 填充進去即可,如:

# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-04-17 03:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"msgid "郵箱地址" msgstr "email"#: apps/users/views.py:748 msgid "已激活" msgstr "You have successfully activated the account, do not need to activete it again, thank you!"#: templates/users/active_account.html:10 msgid "你好!" msgstr "hello"

編譯po文件, 在locale所在目錄下執行下面的命令:

python manage.py compilemessages

到這里, 國際化的配置基本完成, 可以通過修改下面的配置項,進行平臺語言展示的設置

# 中文 # LANGUAGE_CODE = 'zh-hans' # 1.8版本之后的language code設置不同, 1.8之前是LANGUAGE_CODE = 'zh-CN' # 英文, 按照這里的步驟進行設置, 默認語言必須設置成英文, 否則中英文翻譯會失效 LANGUAGE_CODE = 'en'# 時區 TIME_ZONE = 'Asia/Shanghai' # TIME_ZONE = 'UTC'

如下所示

中文:

你好! 已激活

英文:

hello You have successfully activated the account, do not need to activete it again, thank you!

如果需要在頁面中讓用戶自行選擇進行語言切換, 還需要進行額外的配置, 詳情可以去查看官方文檔

?

六.如果前臺是APP,語言切換時,因為前后臺的語言環境需要保持一直,所以我這里采取了一種不是太優雅的的辦法: 封裝一個接口, 當用戶進行國際化切換時,由APP請求一下該接口, 告知后臺該用戶選擇了那種語言, 接口代碼如下所示:

@api_view(["POST"]) def set_lang(request):"""用戶在app進行語言切換時, 請求一下該接口:param request::return:"""language = request.data.get("language", "en")if language == "zh-hans":request.session['_language'] = "zh-hans"else:request.session['_language'] = "en"return Response({"msg": "Ok"}, status=status.HTTP_200_OK)

當用戶請求其他接口時,就可以通過request請求對象獲取到用戶當前是選擇的那種語言(即使不進行登錄也可以獲取到):

language = request.LANGUAGE_CODE

?

總結

以上是生活随笔為你收集整理的django 进行国际化及在后台进行中英文切换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。