django国际化详细步骤 本人亲测可行

做项目的时候需要做多语言版本,记录一下一面后续忘记

 

首先,修改settings和url

        1、增加一个中间件  :

        'django.middleware.locale.LocaleMiddleware',

 

        2、添加增加LANGUAGES和LOCAL_PATHS

LANGUAGES = (
    ('zh-hans', '中文简体'),
    ('en', 'English'),

)

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

                注意:这里具体支持的语言需要去你对应的Django版本中查找locale文件夹 对应的文件名就是支持的语言

                我Django包路径如下:

/Users/apple/Desktop/work_py3/env1/lib/python3.7/site-packages/django/conf/locale

                找到虚拟环境目录下/lib/pythonxxx/site-package/django/conf/locale就是你的路径

        3、添加一条url

path('i18n/', include('django.conf.urls.i18n')),

 

 

其次,生成翻译文件

        在这前,需要安装gettext:

                linux : sudo apt-get install gettext

                mac os: brew install gettext 

        然后在views中找个函数存放你需要翻译的字符串,_('xxxxxxx'),如果有多个字符串


    from django.utils.translation import ugettext as _
    
    _('testString1')
    _('testString2')

        然后执行命令

python3 manage.py makemessages -l zh_hans

        然后去项目目录下的locale文件夹下找到zh_Hans/LC_MESSAGES可以看到如下两个文件:django.mo    django.po

        打开django.mo后发现有这么几行

#: backend/settings.py:139
msgid "test"
msgstr ""

        在msgstr填上test的译文

        然后执行命令生成翻译:

python3 manage.py compilemessages

 

 

最后:在HTML中替换需要翻译的字符串,选择语言


        修改template,在html的{% extends 'xxx' %}后(如果有)加上{% load i18n %},也就是注册{% trans %}标签,否则会报错;          把需要翻译的字符串放在trans标签里 {% tans 'xxxxx' %},如果需要翻译的文本含有变量,放在teans标签里{% block teans %} xxxxx {% endblocktrans %}。

        注意这些字符串必须与views中注册的和django.mo中的一模一样

附选择语言HTML一份:

{% load i18n %}
<!DOCTYPE html>
<html lang="en">        <!-- 选择语言(与settings对应)-->
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>


<form name="testform" id="testform" method='post'>{% csrf_token %}
    <select id="language" name="language" onchange="selectdb(this)">
        <option value="1">please select Languages</option>
        {% for lang in LANGUAGES %} 
        <option value="{{ lang.0 }}" > {{ lang.1 }}</option>
        {% endfor %}
    </select>
</form>

<p>{% trans 'Welcome to my site.' %}</p>
 
<script>
function selectdb(obj) {
    str="/i18n/setlang/";              // action必须是这个
    myform = document.getElementById('testform');
    myform.method = "POST";
    myform.action = str;
    myform.submit();
}
</script>
	
</body>
</html>

 

大功告成

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值