转自 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. redhat配置java环境

    1.检查是否有旧版本的jdk java -version java version "1.4.2" gij (GNU libgcj) version (Red Hat -) Cop ...

  2. Package gtk+-3.0 was not found in the pkg-config search path

    问题描述: 在fedora21系统上通过rpmbuild构建fcitx的二进制包时出现以上错误,经老程序员指点:“是相应的开发包没有安装” 解决办法: yum installl gtk3-devel  ...

  3. 检测空值,以及会不会出现mapping类型不一致的问题

    /// <summary> /// 检测空值,以及会不会出现mapping类型不一致的问题 /// </summary> /// <typeparam name=&quo ...

  4. htmlparser学习(原创)

    --thumbelina.jar  这是一个演示图片搜索和显示的小程序JFrame Preferences.userNodeForPackage(getClass());  根据传入的class所在包 ...

  5. BZOJ 1935 Tree 园丁的烦恼 (树状数组)

    题意:中文题. 析:按x排序,然后用树状数组维护 y 即可. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000" ...

  6. Proxy Hosted Virtual

    http://books.sonatype.com/nexus-book/reference/confignx-sect-manage-repo.html Public Repositories 对外 ...

  7. 20155225 2016-2017-2 《Java程序设计》第九周学习总结

    20155225 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 了解JDBC架构 使用JDBC API JDBC是用于执行SQL的解决方案,开 ...

  8. 从窗口句柄得到菜单句柄(从HWND得到HMENU)

    1. 如果HWND是主窗口,可以使用API: GetMenu(...) 得到属于主窗口的句柄,原型如下: HMENU GetMenu(HWND hWnd); 在MFC中原型如下: CMenu* Get ...

  9. hdu 1116 欧拉回路+并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=1116 给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思.但是如果有多个重复的单词时,也必须满足这 ...

  10. Java中HTTP通信

    Java自带的get.post请求: get请求方式: package com.java; import java.io.BufferedReader; import java.io.IOExcept ...