Django1.11国际化入门

网上关于django的例子,多而且复杂,而我想实现的效果就是自动切换,如下图。自动识别语言偏好只是django送的,我没想要,哈哈。综合了,网上各种blog,最终实现了国际化。
本教程,不教你原理,想懂原理去看文档吧。
主要参考:1.文档;
2. https://www.ibm.com/developerworks/cn/web/1101_jinjh_djangoi18n/
对以上分享者,感谢。
环境:django1.11+python 3.5.3
效果就是:Django1.11国际化入门 ,选择语言,然后切换。
最开始要安装gettext:cmd执行
看看是不是安装好了。
没安装好的话:windows下,我的安装方式是,下载两个文件
Django1.11国际化入门
,解压合并,然后把bin目录放到环境变量里面。(不会?我相信你不是初学者了,百度吧)

Settings中配置更改:
1.中间件开启:(为了让django自己发现自己的语言偏好,django确实强大啊)
MIDDLEWARE = [
‘django.middleware.security.SecurityMiddleware’,
‘django.contrib.sessions.middleware.SessionMiddleware’,
'django.middleware.locale.LocaleMiddleware’,
‘django.middleware.common.CommonMiddleware’,
‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’,
]

2.把django语言偏好改成你的默认语言,我用的是英文
LANGUAGE_CODE = 'en-us’

TIME_ZONE = ‘UTC’

USE_I18N = True 默认开启

USE_L10N = True 默认开启

3.配置LANGUAGES,里面是你所要翻译的所有语言对。(想翻译几个国家,翻译几个国家)
ugettext = lambda s: s

LANGUAGES = (
(‘en-us’, ugettext(‘English’)),
(‘zh-CN’, ugettext(‘Chinese’)),
)
此处也可以这样:(最好是这样)
from django.utils.translation import ugettext_lazy as _
# ugettext = lambda s: s

LANGUAGES = (
(‘en-us’, _(‘English’)),
(‘zh-CN’, _(‘Chinese’)),
(‘de’, _(‘German’)),
(‘ja’, _(‘Japanese’)),
(‘it’, _(‘Italian’)),
(‘es’, _(‘Spanish’)),
(‘fr’, _(‘French’)),
)

4.设置po和mo搜索环境。
LOCALE_PATHS = (
os.path.join(BASE_DIR, ‘locale’),
)


在主app添加:(django自己封装的py,我们自己设置就可以了)
url(r’^i18n/’, include(‘django.conf.urls.i18n’)),
为了重定向回原来的模板 。

在进入Django1.11国际化入门 这个选项的界面的views里面把标红的添加进去:
首先要引入:from django.conf import settings
return render(request,“magreat_user/magreat_index.html”,{“gfe_list”:gfe_list,“result”:result,“address_result”:address_result,“coin_one”:coin_one,“num”:num,“langu”:settings.LANGUAGES})
这是为了setiing里面设置的选项,导入到模板。

在模板里面设置:(注意标黄的地方不要更改,这个就是重定向的路由,django封装好了的)要仔细看这里

{% trans "Languages" %} {% for lang in langu %} {{ lang.1 }} {% endfor %}

然后可以标记需要翻译的内容了:

  1. views中(除了ugettext_lazy还有其他三种翻译模式,自己百度吧)
    from django.utils.translation import ugettext_lazy as _
    code = _(“The second sentence is from the Python code.”)

2.模板中
{%trans “welcome”}

标记完成后,开始编译生成po文件:在project下
django-admin.py makemessages -l zh_CN
其他国家的类似,自己百度。
然后在,每个po文件里,自己翻译一下,我相信你能看懂po文件。
执行:django-admin.py compilemessages
执行生成的mo文件才是django最终想要的东西。

完成。

在浏览器设置语言优先级 Django1.11国际化入门
查看效果。

小提示:语言更换后的排版是TM真的恶心,还有一句一句翻译,也恶心。