转自 https://blog.csdn.net/scissors0707/article/details/79042458

Django国际化

所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面。

设置setting.py

# system time zone.
TIME_ZONE = 'UTC'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'zh_hans' # Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
USE_I18N = True
USE_L10N = True
USE_TZ = True LANGUAGES = (
('en', ('English')),
('zh-hans', ('中文简体')),
('zh-hant', ('中文繁體')),
) # 翻译文件所在目录,需要手工创建
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
) MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.locale.LocaleMiddleware', # 添加此行
]

一、在视图中标识需要翻译的文本

在视图中和HTML模板中都可以标识要翻译的文本。在视图中,通过_()或ugettext()函数,指定某个变量需要翻译,如下所示:

from django.utils.translation import ugettext as _
from django.http import HttpResponse def my_view(request):
output = _("Welcome to my site.")
return HttpResponse(output)

二、在模板中表示需要翻译的文本

在模版文件中,要标识一个待翻译的文本,需要使用{% trans %}模板标签,但首先你要在模版的顶部加载{% load i18n %}。比如:

{% load i18n %}
<title>{% trans "This is the title." %}</title>

三、blocktrans模板标签

与{% trans %}模板标签不同,blocktrans标签允许你通过使用占位符来标记由文字和可变内容组成的复杂句子进行翻译,如下例所示:

{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}

四、本地化

建立语言文件是通过django-admin makemessages命令完成的。 
在项目的根目录下,也就是包含manage.py的目录下,运行下面的命令:

python manage.py makemessages -l zh_hans
python manage.py makemessages -l en
python manage.py makemessages -l zh_hant

注意:在Windows下,需要提前安装GNU gettext工具!安装链接

每个.po文件首先包含一小部分元数据,例如翻译维护者的联系信息,但文件的大部分是翻译对照:被翻译字符串和特定语言的实际翻译文本之间的简单映射。 
例如,有一个像下面这样的待翻译字符串: 
_("Welcome to my site.") 
在.po文件中将包含一条下面样子的条目: 
#: path/to/python/module.py:23 
msgid "Welcome to my site." 
msgstr "" 

这三行内容各自代表下面的意思:

  • 第一行通过注释表达该条要翻译的字符串在视图或模版中的位置;
  • msgid:要翻译的字符串。不要修改它。
  • msgstr:翻译后的文本。一开始它是空的,需要翻译人员逐条填写。 
    这是一个文本文件,需要专业的翻译人员将所有的msgstr空白‘填写’齐全。如果你的项目比较大,这可能是个磨人的事。

五、编译语言文件

django-admin compilemessages

Django将自动搜索所有的.po文件,将它们都翻译成.mo文件。

六、附件

af 南非荷兰语 
sq 阿尔巴尼亚语 
ar-sa 阿拉伯语(沙特阿拉伯) 
ar-iq 阿拉伯语(伊拉克) 
ar-eg 阿拉伯语(埃及) 
ar-ly 阿拉伯语(利比亚) 
ar-dz 阿拉伯语(阿尔及利亚) 
ar-ma 阿拉伯语(摩洛哥) 
ar-tn 阿拉伯语(突尼斯) 
ar-om 阿拉伯语(阿曼) 
ar-ye 阿拉伯语(也门) 
ar-sy 阿拉伯语(叙利亚) 
ar-jo 阿拉伯语(约旦) 
ar-lb 阿拉伯语(黎巴嫩) 
ar-kw 阿拉伯语(科威特) 
ar-ae 阿拉伯语(阿拉伯联合酋长国) 
ar-bh 阿拉伯语(巴林) 
ar-qa 阿拉伯语(卡塔尔) 
eu 巴斯克语 
bg 保加利亚语 
be 贝劳语 
ca 加泰罗尼亚语 
zh-tw 中文(中国台湾) 
zh-cn 中文(中华人民共和国) 
zh-hk 中文(中国香港特别行政区) 
zh-sg 中文(新加坡) 
hr 克罗地亚语 
cs 捷克语 
da 丹麦语 
nl 荷兰语(标准) 
nl-be 荷兰语(比利时) 
en 英语 
en-us 英语(美国) 
en-gb 英语(英国) 
en-au 英语(澳大利亚) 
en-ca 英语(加拿大) 
en-nz 英语(新西兰) 
en-ie 英语(爱尔兰) 
en-za 英语(南非) 
en-jm 英语(牙买加) 
en 英语(加勒比) 
en-bz 英语(伯利兹) 
en-tt 英语(特立尼达) 
et 爱沙尼亚语 
fo 法罗语 
fa 波斯语 
fi 芬兰语 
fr 法语(标准) 
fr-be 法语(比利时) 
fr-ca 法语(加拿大) 
fr-ch 法语(瑞士) 
fr-lu 法语(卢森堡) 
gd 盖尔语(苏格兰) 
gd-ie 盖尔语(爱尔兰) 
de 德语(标准) 
de-ch 德语(瑞士) 
de-at 德语(奥地利) 
de-lu 德语(卢森堡) 
de-li 德语(列支敦士登) 
el 希腊语 
he 希伯来语 
hi 北印度语 
hu 匈牙利语 
is 冰岛语 
in 印度尼西亚语 
it 意大利语(标准) 
it-ch 意大利语(瑞士) 
ja 日语 
ko 朝鲜语 
ko 朝鲜语(韩国) 
lv 拉脱维亚语 
lt 立陶宛语 
mk FYRO 马其顿语 
ms 马来西亚语 
mt 马耳他语 
no 挪威语(博克马尔) 
no 挪威语(尼诺斯克) 
pl 波兰语 
pt-br 葡萄牙语(巴西) 
pt 葡萄牙语(葡萄牙) 
rm 拉丁语系 
ro 罗马尼亚语 
ro-mo 罗马尼亚语(摩尔达维亚) 
ru 俄语 
ru-mo 俄语(摩尔达维亚) 
sz 萨摩斯语(拉普兰) 
sr 塞尔维亚语(西里尔) 
sr 塞尔维亚语(拉丁) 
sk 斯洛伐克语 
sl 斯洛文尼亚语 
sb 索布语 
es 西班牙语(西班牙传统) 
es-mx 西班牙语(墨西哥) 
es 西班牙语(西班牙现代) 
es-gt 西班牙语(危地马拉) 
es-cr 西班牙语(哥斯达黎加) 
es-pa 西班牙语(巴拿马) 
es-do 西班牙语(多米尼加共和国) 
es-ve 西班牙语(委内瑞拉) 
es-co 西班牙语(哥伦比亚) 
es-pe 西班牙语(秘鲁) 
es-ar 西班牙语(阿根廷) 
es-ec 西班牙语(厄瓜多尔) 
es-cl 西班牙语(智利) 
es-uy 西班牙语(乌拉圭) 
es-py 西班牙语(巴拉圭) 
es-bo 西班牙语(玻利维亚) 
es-sv 西班牙语(萨尔瓦多) 
es-hn 西班牙语(洪都拉斯) 
es-ni 西班牙语(尼加拉瓜) 
es-pr 西班牙语(波多黎各) 
sx 苏图语 
sv 瑞典语 
sv-fi 瑞典语(芬兰) 
th 泰语 
ts 汤加语 
tn 瓦纳语 
tr 土耳其语 
uk 乌克兰语 
ur 乌尔都语 
ve 文达语 
vi 越南语 
xh 科萨语 
ji 依地语 
zu 祖鲁语

django框架项目 国际化和本地化的实现方法的更多相关文章

  1. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  2. 使用Pycharm开发python下django框架项目生成的文件解释

    目录MyDjangoProject下表示工程的全局配置,分别为setttings.py.urls.py和wsgi.py,1.其中setttings.py包括了系统的数据库配置.应用配置和其他配置,2. ...

  3. 潭州课堂25班:Ph201805201 django框架 第八课 表关联对象方法add,create,remove,clear,多表查询 (课堂笔记)

    查表: 数据的插入 新建添加 删除 清空

  4. Django 国际化和本地化

    所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...

  5. 第六章:Django 综合篇 - 18:国际化和本地化

    所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...

  6. Django国际化和本地化

    把django的这篇文档看了一遍,基本弄懂了,讲的也挺详细的 https://docs.djangoproject.com/en/1.6/topics/i18n/ 首先是国际化和本地化概念: 1,国际 ...

  7. python开发学习-day15(前端部分知识、web框架、Django创建项目)

    s12-20160430-day15 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  8. 第三百零三节,Django框架介绍——用pycharm创建Django项目

    Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  9. Django项目国际化

    Django项目国际化 实验环境: py3.4.3 + django1.8.2 + Windows 项目设置 >django-admin startproject I18nDjango > ...

随机推荐

  1. 在iframe框架中全屏不好使的原因

    遇到的问题:我是在iframe框架中添加了一个插件在360和火狐中不好使,将allowfullscreen="true" 属性配置好就没问题了: 可能出现的原因:将allowful ...

  2. linux新安装JDK不生效的问题

    新安装了jdk,但重新连接之后仍然显示老的jdk 1. which java 2. which javac 3. rm -rf /usr/bin/java 4. rm -rf /usr/bin/jav ...

  3. sdk接入

    文档 http://blog.csdn.net/chenjie19891104/article/details/42217281 视频: https://chuanke.baidu.com/v2869 ...

  4. [SoapUI] 设置最大等待时间,不断重复的去发送一个request,每次从response中获取一个status,直到这个status从一种状态变成另外一种状态

    import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def holde ...

  5. sdkbox 接facebook

    详情参见:http://sdkbox-doc.github.io/en/plugins/facebook/v3-js/#manual-integration 一步不落然后 *** Terminatin ...

  6. 解决Android启动显示空白界面的问题

    Android程序启动时,第一个看的界面并不是我们的指定的第一个Activity界面,而是显示了一个空白的界面,带标题栏的,但是界面什么内容都没有,这个界面只显示不到1秒左右的时间就会切换到我们的第一 ...

  7. 2018.10.01 NOIP模拟 卡牌游戏(贪心)

    传送门 简单贪心题. 然而考试的时候失了智少讨论了一种情况导致gg. 实际上用到了二分图匹配的思想,L每次找到刚好比当前的牌小一点的出出去,看能匹配几个. 如何处理? 我们先考虑第一种比分策略. 我们 ...

  8. 2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)

    传送门 调了半天发现是输出优化打错了求心理阴影体积233 这题很简单啊. 一个修改操作x如果对一个询问操作y有贡献那么有. tx<ty,Xx<=Xy,Yx<=Yy" rol ...

  9. csdn的一次回答问题

    #coding:utf8 import tushare as ts import pandas as pd import numpy as np import pymysql,datetime imp ...

  10. myeclipse新建jsp文件时弹出默认模板,怎么改成自己修改后的

    (1)打开Window——Preferences (2)选择MyEclipse——Filed andEditors——JSP——JSP Source——Templates 看到右边的New Jsp编辑 ...