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” ,设置后需要刷新页面才可看到效果。

时间: 2024-08-03 20:33:26

Django国际化注意事项的相关文章

django学习注意事项

1:名字(项目名,包名,函数名等等)在django里面一定要非常注意.常用的名字用起来一定要慎重.比如login,username. 比如,想要新建一个叫user的app是不可能的.上次做登录功能的时候,用了login函数名,结果覆盖了django.contrib.auth里面的login函数名,调试了大半天才发现原来是函数名的问题! 解决方案:建议起名字的时候,在常用名前后加上特殊的修饰符,大部分情况下可以避免冲突和覆盖! django学习注意事项

Django国际化

不同的网站有可能被不同国家地区的人访问,为了让不同的国家或者地区的人有更好的客户体验,对web程序进行国际化设置就很有必要了. 1.Django进行国际化的机制 以下是我的目录树: 我这里创建了一个internationlization的项目,然后在项目下面创建了一个被称为translation的应用程序.我们要进行国际化,首先要通过django.utils.translation包里面的方法定义需要进行国际化的字符串,比如我用的是ugettext_lazy ,通过函数包装并返回可供国际化使用的

Django 国际化和本地化

他分为models, views和模版(templates)三处的英文转化. 首先settings 增加一个locale的中间件 增加LANGUAGES 增加LOCALE_PATHS 并且手动创建locale文件夹 在模板中增加如下标签 执行 python manage.py makemessages -l en 会生成如下文件 修改django.po文件,增加翻译的文字 修改url ,此url文件必须是项目的根url那个文件. 重启服务器 访问 http://192.168.119.54:80

Django:之安全、国际化和session

Django 安全 以下是关于Django安全的一些特征,它包括如何使基于Django的网站的一些建议. 关于安全的官方文档:https://docs.djangoproject.com/en/dev/#security 官方文档包括以下几个方面: Security overview Disclosed security issues in Django Clickjacking protection Cross Site Request Forgery protection Cryptogra

Django分析之国际化处理

最近在公司终于开始做web开发了,本以为会是简单的首页之类的小规模项目,结果上来就是一个处理大数据分析的项目,一个关于油品分析的系统,不过我接到的第一个任务是做这个网站的国际化处理,虽然项目还没有上线,还差的很多,但是国际化这个东西使用的是Django自带的来处理的,所以在一边写项目的时候就要写好国际化的代码,所以我现在就开始处理我的国际化了. 大家可以在Django Doctment上看官方的说明,我在这里就不复制官方文档了,django框架带有完善的I18N和L10N支持,其实现是基于GNU

Django rest_framework 实用技巧

前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用法 1 #################################################################### 2 ########安装和简单使用 3 ###### 准备工作 4 pip install rest_framework # 安装 5 6 INSTALL

Django1-web概述与django基本操作

WEB概述 浏览器和服务端通信都要遵循一个HTTP协议(消息的格式要求) 动态的网页,本质上都是字符串的替换(再服务端),替换完就返回给浏览器 版本 广泛版本 --> HTTP1.1最新版本 --> HTTP/2 HTTP协议 HTTP: 超文本协议 1,浏览器 --> 服务端 请求(request) 2,服务端 --> 浏览器 响应(response) GET请求和POST请求 GET请求 浏览器请求一个页面 搜索引擎检索关键字 POST请求 浏览器项服务器提交数据 比如: 登录

Django-下载安装-配置-创建django项目-三板斧简单使用

目录 Django 简介 使用 django 的注意事项 计算机名不能有中文 Django版本问题 django下载安装 在命令行下载安装 在pycharm图形界面下载安装 检验是否安装成功 创建Django项目 命令行下创建与启动 pycharm下创建与启动 django项目目录介绍 新建应用(app)特别注意***** 配置文件 settings.py 解析 django小白必会三板斧 HttpResponse 举例 render 举例(可传数据模板渲染) redirect 案例 Djang

Struts2(XWork)拦截器的功能介绍:

  拦截器 名字 说明 Alias Interceptor alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变 Chaining Interceptor chain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type="chain">)结合使用. Checkbox Interceptor checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,