项目的部署地为: 中国大陆与美国东海岸, 两个地区的服务器数据不进行同步, 中国地区的服务器页面展示中文, 美国地区的服务器页面展示成英文, 项目后台使用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 = True USE_TZ = True LANGUAGES = (
('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:
# _("已激活") 标示对该字符串进行国际化翻译, 如果是前后端分离,使用 gettext_lazy() 进行国际化翻译以后, 就可以转换成json数据向前台返回了
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 进行语言的国际化及在后台进行中英文切换的更多相关文章

  1. Django模版语言 格式化显示 后台datatime()时间

    Django模版语言 格式化显示 后台datatime()时间 场景描述:

  2. Django 模版语言详解

    一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...

  3. Django模板语言初识

    一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  4. Django模板语言相关内容 Djan

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  5. Django——模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  6. Django模板语言与视图(view)

    常用语法 {{  }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...

  7. Django模板语言(一)

    1,Django模板语言 1.1>基础语法:1.1.1,变量相关:{{ 变量名 }},1.1.2,逻辑相关{% ... %} 在Django模板语言中按此语法使用:{{ 变量名 }},当模板引擎 ...

  8. Django模板语言的学习

    1.模板系统 1.语法 1.变量相关 {{ name}} ,{{ name|length}}, {{ name |default:"默认值"}} 2.逻辑相关 1.if判断 {% ...

  9. 6月15日 python学习总结 Django模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

随机推荐

  1. linux设置root密码&进入不了root

    刚装的linux无法使用root需要初始化密码 1.设置密码 sudo passwd root 点击回车,然后输入两次你想设置的密码,比如123456 2.切换用户 su root 再输入你刚才设置的 ...

  2. [EXP]CVE-2019-9621 Zimbra<8.8.11 GetShell Exploit(配合Cscan可批量)

    发现时间 2019年03月18日 威胁目标 采用Zimbra邮件系统的企业 主要风险 远程代码执行 攻击入口 localconfig.xml  配置文件 使用漏洞 CVE-2019-9621 受影响应 ...

  3. C++用new与不用new创建对象的区别

    C++创建对象 一.Alignment问题 重新发现这个问题是因为在体系结构课上提到的一个概念,alignment对齐的概念. class MyClass { public : char c; // ...

  4. DRF框架(六)——三大认证组件之认证组件、权限组件

    drf认证组件 用户信息表 from django.db import models from django.contrib.auth.models import AbstractUser class ...

  5. Java之数据类型讲解

    Java数据类型关系图 基本数据类型 从小到大的关系图: 图中从左向右的转换都是隐式转换,无需再代码中进行强制转换 : byte i = 12; System.out.println("by ...

  6. EgretWing链接微信开发工具调试问题

    EgretWing链接微信开发工具调试问题 EgretWing 编译器支持持三种调试模式,Node.js .Chrome .EgretWing 扩展开发. 开发过程中会遇到工具配置错误. 这就需要在E ...

  7. Spring-Cloud之Sleuth链路追踪-8

    一.Spring Cloud Sleuth 是Spring Cloud 的一个组件,它的主要功能是在分布式系统中提供服务链路追踪的解决方案. 二.为什么需要Spring Cloud Sleuth? 微 ...

  8. .NET Core微服务学习-DotNetty

    DotNetty介绍: DotNetty是Azure团队仿照(几乎可以这么说)JAVA的Netty而出来的(目前已实现Netty的一部分),目前在Github上的Star有1.8K+, 地址:http ...

  9. form表单的密码是否一致校验功能

    这是form类表单,自定义的form表单,需要重写钩子函数 """ forms类表单 """ # 校验密码是否一致 from django. ...

  10. streamController