【django 学习笔记】18-国际化
2010-06-01 13:58
387 查看
Django
的国际化挂接是默认
开启的,
这可能会给Django
的运行增加一点点开销。
如果您不需要国际化支
持,
那么您可以在您的设置文件中
设置 USE_I18N = False
。
如果 USE_I18N
被设为 False ,
那么Django
会
进行一些优化,
而不加载国际化支
持机制。
对你的Django
应用进行国际
化的三个步骤:
1.
第一步:
在你的Python
代码和模板中嵌入待翻译的字符串。
2.
第二步:
把那些字符串翻译成你要支持的语言。
3.
第三步:
在你的Django settings
文件中激活本地中间
件。
如何指定待翻译字符串
标准 翻译
在下面这个例子中,
文本 “Welcome to my site”
被标
记为待翻译字符串:
from
django.utils.translation import ugettext as _
def my_view(request):
output = _(“Welcome to
my site.”)
return
HttpResponse(output)
显然,
你也可以不使用别名来编
码。 下面这个例子和前面两个例子相同:
from
django.utils.translation import ugettext
def my_view(request):
output =
ugettext(“Welcome to my site.”)
return
HttpResponse(output)
标 记字 符串为不 操作
使用 django.utils.translation.gettext_lazy()
函数,
使得其中的值只
有在访问时才会被翻译,
而不是在gettext_lazy()
被调用时翻译。
惰 性 翻译
使用 django.utils.translation.gettext_lazy()
函数,
使得其中的值只
有在访问时才会被翻译,
而不是在gettext_lazy()
被调用时翻译。
复数的处理
使用django.utils.translation.ungettext()
来
指定以复数形式表示的消息。
需要将{% load i18n %}
放在模板最前
面。
这个{% trans %}
模板
标记翻译一个常量字符串 (
括以单或双
引号)
或 可变内容:
<title>{% trans
“This is the title.” %}</title>
<title>{% trans
myvar %}</title>
与惰性翻译对象一道工作
拼接字符串:
allow_lazy()
创建语言文件
信息文件是包含了某一语言翻译字符串和对这些字符串的翻译的一个文本文件。 信息文件以 .po
为后缀名。
django-admin.py
makemessages -l de
这段脚本应该在三处之一运行:
Django
项目根目录。
您Django
应用的根目录。
django
根目录(
不是Subversion
检出目录,
而是通过 $PYTHONPATH
链接或位于该路径的某处)
。这仅和你为Django
自己创建一个翻译
4000
时有关。
作为默认, django-admin.py
makemessages
检测每一个有 .html
扩展名的文件。 以备你要重载缺省值,
使用 –extension
或 -e
选项指定文件扩展名来检测。
django-admin.py
makemessages -l de -e txt
用逗号和(
或)
使用-e
或–extension
来分隔多项扩展名:
django-admin.py
makemessages -l de -e html,txt -e xml
当创建JavaScript
翻译
目录时,
你需要使用特殊的Django
域:not -e js
。
.po
文件格式很直观。 每个
.po
文件包含一小部分的元数据,
比如翻译维护人员的联系信息,
而文件的大部分内容是简单的翻译字符串和对应语言
翻译结果的映射关系的列表。
若要对新创建的翻译字符串校验所有的源代码和模板,
并
且更新所有语言的信息文件,
可以运行以
下命令:
django-admin.py
makemessages -a
编译信息文件
这个工具作用于所有有效的 .po
文
件,
创建优化过的二进制 .mo
文件供 gettext
使用。在你可以运行django-admin.py makemessages
的
目录下,
运行django-admin.py
compilemessages:
django-admin.py
compilemessages
就是这样了。 你的翻译成果已经可以使用了。
Django
如果要让每一个使用者各自指定语言偏好,
就
需要使用 LocaleMiddleware
。
LocaleMiddleware
使
得Django
基于请求的数据进行语
言选择,
从而为每一位用户定制内容。
它为每一个用户定制内容。使用 LocaleMiddleware
需要在 MIDDLEWARE_CLASSES
设置中增加‘django.middleware.locale.LocaleMiddleware’
。 中间件的顺序是有影响的,
最
好按照依照以下要求:
保证它是第一批安装的中间件类。
因为 LocalMiddleware
要
用到session
数据,
所以需要放在 SessionMiddleware
之后。
如果你使用CacheMiddleware,
把LocaleMiddleware
放在它后面。
LocaleMiddleware
按
照如下算法确定用户的语言:
首先,
在当前用户的 session
的中查找django_language
键;
如未找到,
它会找寻一个cookie
还找不到的话,
它会在 HTTP
请求头部里查找Accept-Language ,
该头部是你
的浏览器发送的,
并且按优
先顺序告诉服务器你的语言偏好。 Django
会
尝试头部中的每一个语种直到它发现一个可用的翻译。
以上都失败了的话,
就使用全
局的 LANGUAGE_CODE
设
定值。
在你自己的项目中使用翻译
set_language
方便起见,Django
自带了一
个 django.views.i18n.set_language
视图,
作用是设置用户
语言偏好并重定向返回到前一页面。
在URLconf
中加入下面这行
代码来激活这个视图:
(r’^i18n/’,
include(‘django.conf.urls.i18n’)),
翻译与JavaScript
使用JavaScript
创建JavaScript
django-admin.py
makemessages -d djangojs -l de
的国际化挂接是默认
开启的,
这可能会给Django
的运行增加一点点开销。
如果您不需要国际化支
持,
那么您可以在您的设置文件中
设置 USE_I18N = False
。
如果 USE_I18N
被设为 False ,
那么Django
会
进行一些优化,
而不加载国际化支
持机制。
对你的Django
应用进行国际
化的三个步骤:
1.
第一步:
在你的Python
代码和模板中嵌入待翻译的字符串。
2.
第二步:
把那些字符串翻译成你要支持的语言。
3.
第三步:
在你的Django settings
文件中激活本地中间
件。
如何指定待翻译字符串
标准 翻译
在下面这个例子中,文本 “Welcome to my site”
被标
记为待翻译字符串:
from
django.utils.translation import ugettext as _
def my_view(request):
output = _(“Welcome to
my site.”)
return
HttpResponse(output)
显然,
你也可以不使用别名来编
码。 下面这个例子和前面两个例子相同:
from
django.utils.translation import ugettext
def my_view(request):
output =
ugettext(“Welcome to my site.”)
return
HttpResponse(output)
标 记字 符串为不 操作
使用 django.utils.translation.gettext_lazy()函数,
使得其中的值只
有在访问时才会被翻译,
而不是在gettext_lazy()
被调用时翻译。
惰 性 翻译
使用 django.utils.translation.gettext_lazy()函数,
使得其中的值只
有在访问时才会被翻译,
而不是在gettext_lazy()
被调用时翻译。
复数的处理
使用django.utils.translation.ungettext()来
指定以复数形式表示的消息。
模板代码
为了使得模板访问到标签,需要将{% load i18n %}
放在模板最前
面。
这个{% trans %}
模板
标记翻译一个常量字符串 (
括以单或双
引号)
或 可变内容:
<title>{% trans
“This is the title.” %}</title>
<title>{% trans
myvar %}</title>
与惰性翻译对象一道工作
拼接字符串:
string_concat()
allow_lazy()
修
饰符
创建语言文件
信息文件是包含了某一语言翻译字符串和对这些字符串的翻译的一个文本文件。 信息文件以 .po为后缀名。
django-admin.py
makemessages -l de
这段脚本应该在三处之一运行:
Django
项目根目录。
您Django
应用的根目录。
django
根目录(
不是Subversion
检出目录,
而是通过 $PYTHONPATH
链接或位于该路径的某处)
。这仅和你为Django
自己创建一个翻译
4000
时有关。
作为默认, django-admin.py
makemessages
检测每一个有 .html
扩展名的文件。 以备你要重载缺省值,
使用 –extension
或 -e
选项指定文件扩展名来检测。
django-admin.py
makemessages -l de -e txt
用逗号和(
或)
使用-e
或–extension
来分隔多项扩展名:
django-admin.py
makemessages -l de -e html,txt -e xml
当创建JavaScript
翻译
目录时,
你需要使用特殊的Django
域:not -e js
。
.po
文件格式很直观。 每个
.po
文件包含一小部分的元数据,
比如翻译维护人员的联系信息,
而文件的大部分内容是简单的翻译字符串和对应语言
翻译结果的映射关系的列表。
若要对新创建的翻译字符串校验所有的源代码和模板,
并
且更新所有语言的信息文件,
可以运行以
下命令:
django-admin.py
makemessages -a
编译信息文件
这个工具作用于所有有效的 .po文
件,
创建优化过的二进制 .mo
文件供 gettext
使用。在你可以运行django-admin.py makemessages
的
目录下,
运行django-admin.py
compilemessages:
django-admin.py
compilemessages
就是这样了。 你的翻译成果已经可以使用了。
Django
如何处理
语言偏好
如果要让每一个使用者各自指定语言偏好,就
需要使用 LocaleMiddleware
。
LocaleMiddleware
使
得Django
基于请求的数据进行语
言选择,
从而为每一位用户定制内容。
它为每一个用户定制内容。使用 LocaleMiddleware
需要在 MIDDLEWARE_CLASSES
设置中增加‘django.middleware.locale.LocaleMiddleware’
。 中间件的顺序是有影响的,
最
好按照依照以下要求:
保证它是第一批安装的中间件类。
因为 LocalMiddleware
要
用到session
数据,
所以需要放在 SessionMiddleware
之后。
如果你使用CacheMiddleware,
把LocaleMiddleware
放在它后面。
LocaleMiddleware
按
照如下算法确定用户的语言:
首先,
在当前用户的 session
的中查找django_language
键;
如未找到,
它会找寻一个cookie
还找不到的话,
它会在 HTTP
请求头部里查找Accept-Language ,
该头部是你
的浏览器发送的,
并且按优
先顺序告诉服务器你的语言偏好。 Django
会
尝试头部中的每一个语种直到它发现一个可用的翻译。
以上都失败了的话,
就使用全
局的 LANGUAGE_CODE
设
定值。
在你自己的项目中使用翻译
set_language
重
定向视图
方便起见,Django自带了一
个 django.views.i18n.set_language
视图,
作用是设置用户
语言偏好并重定向返回到前一页面。
在URLconf
中加入下面这行
代码来激活这个视图:
(r’^i18n/’,
include(‘django.conf.urls.i18n’)),
翻译与JavaScript
使用JavaScript
翻
译目录
创建JavaScript
翻
译目录
django-admin.pymakemessages -d djangojs -l de
相关文章推荐
- Django框架学习笔记(18.一些简易的知识补充)
- 《Oracle编程艺术》学习笔记(18)-REDO和UNDO
- Django 1.7 初级教程or学习笔记(四)
- [深度学习论文笔记][ICLR 18]mixup: BEYOND EMPIRICAL RISK MINIMIZATION
- Django学习笔记之二
- django学习笔记(四)表单
- django学习笔记(四)
- Struts2学习笔记之国际化
- MySQL学习笔记18:数学函数
- django book2 表单学习笔记
- cocos2d-x学习笔记18:内存管理01:概述
- Crusher Django 学习笔记3 学习使用模板系统
- struts2系列学习笔记(13)---------------Struts2国际化
- Django 学习笔记(二)第一个网页
- Django学习笔记(8)--- Signals和GenericForeignKey的使用
- Django学习笔记(二)
- <JAVA学习笔记一>——程序的国际化
- Django 学习笔记一
- Django 入门(个人学习笔记,持续更新)
- Django学习笔记五:通过nginx+uwsgi部署Django项目(暂时静态文件没有部署上去)