django 进行国际化及在后台进行中英文切换 约定不等于承诺〃 2022-02-18 10:43 963阅读 0赞 项目的部署地为: 中国大陆与美国东海岸, 两个地区的服务器数据不进行同步, 中国地区的服务器页面展示中文, 美国地区的服务器页面展示成英文, 项目后台使用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: # _("已激活") 标示对该字符串进行国际化 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
相关 SpringMVC 国际化-中英文切换 国际化是为了实现不同地区页面呈现不同的语言问题; 编写程序实现国际化,在xml文件中做响应的配置,然后编写.properties文件即可。 实现登录界面的中英文切 约定不等于承诺〃/ 2024年02月18日 15:58/ 0 赞/ 49 阅读
相关 SpringBoot实现国际化中英文翻译 配置IDEA 1.设置编码为UTF-8 ![6c43d3eaa029acfbcddc3a9904a4b4e0.png][] 2.在resources目录下创建 i1 小鱼儿/ 2023年09月25日 17:09/ 0 赞/ 15 阅读
相关 Qt国际化(中英文切换) > 这里讲一讲我实现中英文切换的过程。。。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ib 秒速五厘米/ 2023年01月01日 13:54/ 0 赞/ 181 阅读
相关 spring中进行国际化 最近做的项目是使用ejb3,所以好长时间没接触spring,连最基本的东西都忘了,下面就记录一下,spring中消息处理机制(i18n或国际化): spring中常用进行消息 梦里梦外;/ 2022年08月07日 01:30/ 0 赞/ 240 阅读
相关 在Vue中使用i18n进行国际化 在Vue中使用i18n进行国际化 介绍 安装 初始配置 在Vue实例中应用 动态设置初始语言 源代码 介绍 `vue-i18n 爱被打了一巴掌/ 2022年03月28日 10:36/ 0 赞/ 280 阅读
相关 Qt 国际化 (中英文切换) 1. 在工程中,新建一个资源文件,命名为translator ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_sh 柔情只为你懂/ 2022年03月16日 09:14/ 0 赞/ 583 阅读
相关 struts2-国际化(中英文界面切换) struts2中经常会用到properties类型的文件作为国际化资源文件的载体。 直接在项目的src目录下新建两个file的文件 (i18n\_en\_US.prop ﹏ヽ暗。殇╰゛Y/ 2022年02月25日 05:58/ 0 赞/ 346 阅读
相关 django 进行国际化及在后台进行中英文切换 项目的部署地为: 中国大陆与美国东海岸, 两个地区的服务器数据不进行同步, 中国地区的服务器页面展示中文, 美国地区的服务器页面展示成英文, 项目后台使用python编程语言进 约定不等于承诺〃/ 2022年02月18日 10:43/ 0 赞/ 964 阅读
相关 [Java中实现国际化] - 配合thymeleaf实现中英文自动切换(多语言) [MOOC该链接第三章第二节][MOOC] 尚硅谷SpringBoot全集 web开发国际化 xjbo (7天,过期可以留言索取) ![1030087-201901 Myth丶恋晨/ 2021年12月14日 12:11/ 0 赞/ 443 阅读
相关 vue 中英文切换 vue2.X版本中在build/webpack.config.js文件中 在属性pulgins中设置如下属性: plugins: [ new web 左手的ㄟ右手/ 2021年10月18日 16:24/ 0 赞/ 531 阅读