django框架项目 国际化和本地化的实现方法
转自 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框架项目 国际化和本地化的实现方法的更多相关文章
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- 使用Pycharm开发python下django框架项目生成的文件解释
目录MyDjangoProject下表示工程的全局配置,分别为setttings.py.urls.py和wsgi.py,1.其中setttings.py包括了系统的数据库配置.应用配置和其他配置,2. ...
- 潭州课堂25班:Ph201805201 django框架 第八课 表关联对象方法add,create,remove,clear,多表查询 (课堂笔记)
查表: 数据的插入 新建添加 删除 清空
- Django 国际化和本地化
所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...
- 第六章:Django 综合篇 - 18:国际化和本地化
所谓的国际化,是指使用不同语言的用户在访问同一个网站页面时能够看到符合其自身语言的文本页面. 国际化的基本原理是: 浏览器通过LANGUAGE_CODE在HTTP请求头中告诉网站后台服务器用户所需要的 ...
- Django国际化和本地化
把django的这篇文档看了一遍,基本弄懂了,讲的也挺详细的 https://docs.djangoproject.com/en/1.6/topics/i18n/ 首先是国际化和本地化概念: 1,国际 ...
- python开发学习-day15(前端部分知识、web框架、Django创建项目)
s12-20160430-day15 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- 第三百零三节,Django框架介绍——用pycharm创建Django项目
Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...
- Django项目国际化
Django项目国际化 实验环境: py3.4.3 + django1.8.2 + Windows 项目设置 >django-admin startproject I18nDjango > ...
随机推荐
- Castle ActiveRecord学习(五)使用HQL语句查询
来源:http://www.cnblogs.com/Terrylee/archive/2006/04/12/372823.html 一.HQL简单介绍HQL全名是Hibernate Query Lan ...
- vim之quickfix
[vim之quickfix] quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极 ...
- 3. Install Spring-Tool-Suite & TestNG
1.Install Spring-Tool-Suite 2.Install TestNG
- 为什么c++中返回成员变量的指针,会破坏了封装?
上述代码中,get()函数返回的是类成员变量的name的地址,这是很危险的,name是私有的,意味这不想被客户访问,但是如果返回name的地址,那么外部函数就可以修改name,这就破坏了封装性. 为什 ...
- PTA第一次作业和第二次作业
PTA的第一次作业第一题: #include <stdio.h> int main (void) { int grade,i,N ,a=0,b=0,c=0,d=0,e=0; printf( ...
- Linux服务器上配置2个Tomcat或者多个Tomcat
一.当在一个服务器上面安装2个tomcat的时候,修改第二个tomcat的conf目录下server.xml文件里面的端口号(原8080改成8081,原8005改成8006)可以达到两个tomcat都 ...
- Part 4 - Authentication(14-16)
from django.conf.urls import url from django.contrib import admin from django.contrib.auth import vi ...
- HDU 3177 Crixalis's Equipment (贪心,差值)
题意:判断 n 件物品是否可以搬进洞里,每件物品有实际体积A和移动时的额外体积 B . 析:第一反应就是贪心,一想是不是按B从大到小,然后一想,不对,比如体积是20,第一个 是A=11, B=19.第 ...
- python 实现排列组合
1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...
- 极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法
1. 极小极大搜索方法 一般应用在博弈搜索中,比如:围棋,五子棋,象棋等.结果有三种可能:胜利.失败和平局.暴力搜索,如果想通过暴力搜索,把最终的结果得到的话,搜索树的深度太大了,机器不能满足, ...