Django 国际化(翻译)
django 国际化
1.切到app目录下
python manage.py makemessages -l zh-cn # 校验跟现有po文件的差异性,把多出的英文写在.po文件中
django-admin makemessages -l zh-cn
2.html文件中的翻译
修改项目目录下的.po文件
如果遇到一个英语翻译成几种不同的中文
msgctxt "courseact" # 加标记
msgid "Price"
msgstr "价格"
找到html对应的翻译处 加上context
{% trans 'Price' context 'courseact' %}
3. js文件中的翻译
在local app中zh_CN中的js.po文件中添加翻译
js中加标记pgettext('staffs', 'Please confirm your password')
正常写法gettext('Inconsistent Password')
# js或者全局的html中,切换到根目录进行编译
4.编译
python manage.py compilemessages
django-admin compilemessages
settings中的LOCALE_PATHS决定查找顺序
# django 自带的模版渲染 国际化 需要加{% verbatim %}{% endverbatim %}
'''
verbatim
禁止模版引擎在该标签中进行渲染工作
'''
{% verbatim %}
{{each data value i}}
<div style="margin-bottom:10px" class="clearfix">
<span class="bold mr20 category_title_name pull-left">{{value.tag_type__name}}:</span>
<div class="pull-left label_click_wrap">
{{ if value.tag_type_id == -1}}
<span data-id="-1" class="label_click">其他</span>
{{ else }}
<span data-id="0" class="label_all_click label_click">{% endverbatim %}{% trans 'All' %}{% verbatim %}</span>
{{/each}}
{% endverbatim %}
# js文件中的html中的翻译
$('#calendar_show_tbody').empty();
var temp = '<tr><td style="height: 240px !important;" colspan="'+ month_list.length +'" rowspan="'+ level_list.length +'">' +
'<p class="td-p"><img style="margin-bottom: 20px" src="/static/img/course/none_data.png"></p>' +
'<p class="td-p">' + gettext("You have not created any lesson plan") + '</p>' +
'<p class="td-p">' + gettext("If you need help, please contact Taidii account managers.")+ '</p>' +
'</td></tr>'
$('#calendar_show_tbody').append(temp);
django国际化几个参数的用途
django.utils.translation.ugettext()
指定一个翻译字符串,一般都用于 views.py
django.utils.translation.gettext_noop()
标记一个不需要立即翻译的字符串。 这个串会稍后从变量翻译。使用这种方法的环境是,有字符串必须以原始语言的形式存储(如储存在数据库中的字符串)而在最后需要被 翻译出来(如显示给用户时)。
django.utils.translation.gettext_lazy()
ugettext_lazy() 将字符串作为惰性参照存储,而不是实际翻译 , 一般会用于 models.py。 翻译工作将在字符串在字符串上下文中被用到时进行,比如在 Django 管理页面提交模板时。在 Django 模型中总是无一例外的使用惰性翻译。
django.utils.translation.ungettext()
函数包括三个参数: 单数形式的翻译字符串,复数形式的翻译字符串,和对象的个数(将以 count 变量传递给需要翻译的语言)。
django中设置和获取中英文配置
# 设置系统中英文
# 将session中的django_language更新 en-us(英文) zh_CN(中文)
self.request.session['django_language'] = self.language
# 获取
request.session.get('django_language')