Django国际化注意事项

时间:2023-03-08 16:41:31
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” ,设置后需要刷新页面才可看到效果。