Django国际化注意事项
涉及两部分内容: py/html文件国际化、外部js文件国际化
步骤
1. settings.py 激活相应的配置
2. 针对py文件,需要注意被翻译代码的编写方式
3. 针对html文件,需要注意被翻译字符的编写方式
4. 外部脚本js,包含一些交互提示信息,国际化版本需要翻译这些信息。要实现web标准化,我们首先必须实现HTML页面结构、行为、样式的分离。如何不改变外部脚本的引入方式,同时实现外部脚本国际化的问题?django提供了针对外部脚本国际化的解决方案!
一、settings.py配置
1. LANGUAGES 设置网站所支持的所有语言,如 (('en', u'英文'), ('zh-cn', u'简体中文'))
2. LANGUAGE_CODE 设置缺省语言,如 en
3. USE_I18N = True
4. MIDDLEWARE_CLASSES中加入'django.middleware.locale.LocaleMiddleware',要放在SessionMiddleware和CacheMiddleware的后面,其他中间件的前面
二、Py文件编码事项
1. 文件编码 #-*- coding:utf-8 -*- 其中utf-8不要写成utf8
2.字符串换行,不要使用“\”进行换行 改为your_string = ( u"翻译的字符串"
u"很长很长")
3.不要使用元组作为字符串参数,因为无法准确定位带翻译的文字,需要改写为:your_string = "翻译的字符串, %(nm1)s,很长很长噻 %(nm2)s" % {nm1: "jim", nm2:"lily"}
三、HTML文件翻译事项
1. 文件首行添加 {% load i18n %}
2. 需要翻译的字符串使用 {%trans '被翻译字符串'%}
四、JS脚本翻译事项
1. 在url.py中加入: (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog')
2. html中引用jsi18n脚本: <script src="/jsi18n/appname1+appname2”></script> 如果项目中翻译内容很多,为方便管理可以在每个app下的local目录生成翻译文件,如此无需每次访问都加在全部翻译内容; 如果项目翻译内容较少,可以考虑整体目录下生成翻译文件,一次性加载全部翻译内容。
3. 在JS中使用gettext函数翻译:alert(gettext('系统繁忙,请稍后再试'));
五、创建语言文件
方案一:
在manage.py同级目录下手动创建 conf/locale目录,运行 python manage.py makemessages -l en
上述命令会生成.po文件,翻译过后,使用命令 python manage.py compilemessages 进行编译,则会生成相应的.mo文件
方案二:
每个app下手动创建locale目录,然后cd 到该app目录下,运行 python ../manage.py makemessages -l en
上述命令会生成.po文件,翻译过后,使用命令 python manage.py compilemessages 进行编译,则会生成相应的.mo文件
注意事项:
1. py、html文件中的需要翻译的字符串运行上述命令会自动识别,并添加到django.po文件中
2. 外部js文件中需要翻译的字符串需要手动创建djangojs.po文件,并将翻译字符串写进去
3. 如果改动了mo文件,由于缓存的原因,需要重启端口才能生效
六、设置页面语言
判断session是否设置了django_language,如果设置,程序自动使用该语言进行翻译,否则使用settings.py里默认缺省语言LANGUAGE_CODE
示例代码:request.session['django_language'] = “zh-cn” ,设置后需要刷新页面才可看到效果。
Django国际化注意事项的更多相关文章
- Django学习之五:Django 之 注意事项及汇总
目录 Django 之 注意事项及汇总 全局 settings model模块-模型模块 URLs模块 Templates System 模版模块 View/HttpRequest/HttpRespo ...
- [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧]
[Django框架 - 注意事项,安装,项目搭建,小白必会三板斧] 想要正常运行django项目所需要知道的注意事项 1. 计算机名称不能有中文,不然bug在哪儿你都不知道! 2. 项目名和py文件名 ...
- Django 国际化和本地化
所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...
- Django国际化和本地化
把django的这篇文档看了一遍,基本弄懂了,讲的也挺详细的 https://docs.djangoproject.com/en/1.6/topics/i18n/ 首先是国际化和本地化概念: 1,国际 ...
- django国际化的简单设置
设置国际化的具体步骤: 一.国际化 1)效果:针对不同的国家的人可以配置不同的语言(一般是英文和中文, English Chinese) 2)目的:增加项目的用户量 3)难度:不难 比较费劲的就是 ...
- django国际化总结
转:http://blog.csdn.net/ybdesire/article/details/46806739
- virtualenv 和apache 搭建django时注意事项
在对应网站的xxx.conf中 WSGIDaemonProcess http://127.0.0.1:80 python-path=/home/user/my_blog_2:/home/user/ve ...
- Django分析之国际化处理
最近在公司终于开始做web开发了,本以为会是简单的首页之类的小规模项目,结果上来就是一个处理大数据分析的项目,一个关于油品分析的系统,不过我接到的第一个任务是做这个网站的国际化处理,虽然项目还没有上线 ...
- Django:之安全、国际化和session
Django 安全 以下是关于Django安全的一些特征,它包括如何使基于Django的网站的一些建议. 关于安全的官方文档:https://docs.djangoproject.com/en/dev ...
随机推荐
- 超强vim配置文件
简易安装方法: https://github.com/ma6174/vim 打开终端,执行下面的命令就自动安装好了: wget -qO- https://raw.github.com/ma6174/v ...
- VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
VS2013/2012下代码一写上去保存就报错了,下方提示无法打开 源 文件“stdafx.h” 如图: 百度了一下,对于VS2010有这样的方法可以解决: 在项目属性中展开C/C++,选择常规,在附 ...
- Cas Server中各配置文件介绍
Cas Server中所有的配置文件都是放在WEB-INF目录及其子目录下的. 在WEB-INF/classes下的配置文件有: l cas-theme-default.properties:该文件 ...
- Linux安装程序Anaconda分析
1.概述 Anaconda是RedHat.CentOS.Fedora等Linux的安装管理程序.它能够提供文本.图形等安装管理方式,并支持Kickstart等脚本提供自己主动安装的功能.此外, ...
- Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏
在我看来,学会写简单的Makefile,阅读较复杂的makefile,是每一个Linux程序员都必须拥有的基本素质.Makefile可以自动识别哪些源文件被更改过,需要重新编译,那些不需要.从而节省大 ...
- GDB的non-stop模式
线程调试必杀技 - GDB的non-stop模式 作者:破砂锅 开源的GDB被广泛使用在Linux.OSX.Unix和各种嵌入式系统(例如手机),这次它又带给我们一个惊喜. 多线程调试之痛 调试器 ...
- HttpServlet请求重定向
方法一: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...
- android本地定时通知
android本地通知略有不同,分为立即触发和延时触发 1.即时通知 android默认的Notification为立即触发 Intent intent = new Intent(Intent.ACT ...
- 多维数组遍历PHP
原文出处 <?php /* * ------------------------------------------------- * Author : nowamagic * Url : ww ...
- 动态添加JS文件到页面
/*** ** 功能: 加载外部JS文件,加载完成后执行回调函数callback ***/ var utools = { config: { id: "", url: " ...