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')
原文地址:https://www.cnblogs.com/robert-zhou/p/14115760.html