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 ...
随机推荐
- fatal error LINK1123:failure during conversion to COFF:file invalid or corrupt
Visual Studio 2010编译时出现:fatal error LINK1123:failure during conversion to COFF:file invalid or corru ...
- iOS socket小结01
一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程 ...
- Hibernate—第一个案例
百度百科上是这样写道的:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可 ...
- 使用OpenXML将Excel内容读取到DataTable中
前言:前面的几篇文章简单的介绍了如何使用OpenXML创建Excel文档.由于在平时的工作中需要经常使用到Excel的读写操作,简单的介绍下使用 OpenXML读取Excel中得数据.当然使用Open ...
- sql执行计划解析案例(二)
sql执行计划解析案例(二) 今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffe ...
- Android开发_Android数据的四种存储方式
Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...
- iOS swift使用xib绘制UIView
目标:用xib绘制一个UIView,在某个ViewController中调用. 三个文件:ViewController.Swift DemoView.swift DemoView.xib ...
- cookie记录浏览记录
cookie记录浏览记录 HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做 ...
- 禁止输出重定向(>)覆盖已存在文件(防止误操作)
在输出重定向中,>表示重定向并覆盖已有文件内容,为了防止误操作,覆盖重要的内容,可以使用如下命令: set -C 这样输出重定向到一个已有文件就会提示: cannot overwrite exi ...
- JAVA 循环在一个数字前面填充0.小例子
输入结果 00000000000567 String bala="567"; 固定长度是14位,怎么循环在bala前面填充00000000000 System.out.printl ...