转自 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. 基于udp的套接字

    1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 4 cs = ss.recvfrom()/ss.send ...

  2. 证书吊销列表(CRL)介绍

    一.证书吊销列表(CRL) 证书吊销列表 (Certificate Revocation List ,简称: CRL) 是 PKI 系统中的一个结构化数据文件,该文件包含了证书颁发机构 (CA) 已经 ...

  3. PAT 1062 最简分数(20)(代码+思路)

    1062 最简分数(20 分) 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N​1​​/M​1​​ 和 N ...

  4. OpenGLES.APPLE_texture_format_BGRA8888

    OpenGL ES的扩展: APPLE_texture_format_BGRA8888 http://www.khronos.org/registry/gles/extensions/APPLE/AP ...

  5. bat 调用exe

    @set errorlevel=>nul :reInput @echo 请输入批次号: @set/p 批次号= >nul @set 批次号|findstr "\\<%sea ...

  6. HttpClient的几个实现类

    DefaultHttpClient最基本的HttpClient实现 org.apache.http.impl.client.DefaultHttpClient占用内存23字节 第一次初始化的时候需要2 ...

  7. servlet 中 service ,doGet , doPost 关系

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...

  8. Android无线调试_adbWireless

    NC的ADB驱动是个很让人头疼的问题,纵使老玩家有时候也是反复装装不上,有时候就算装上了,换一个ROM就又不行了,真是让人扣心扣肺,欲哭无泪,欲罢不能啊...现在好了,有了adbWireless不但可 ...

  9. 关于使用smsx.cab控件做web打印使用方法(转)

    注意:在使用之前先告诉下我的痛苦经历 在做WEB项目是我的JSP页面在jsp文件夹里,我把smsx.cab放在js文件夹里(jsp和js是用级别目录) 在本机上测试可以正确下载控件,但是部署到测试服务 ...

  10. 内网IP和公网IP的区别

        内网IP和公网IP的区别     什么是内网IP: 一些小型企业或者学校,通常都是申请一个固定的IP地址,然后通过IP共享(IP Sharing),使用整个公司或学校的机器都能够访问互联网.而 ...