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')
