django 国际化实例之一(附源码)

在做网站时,通常需要多语言,也就是国际化,不同国家的人打开,显示不同的语言。也就是需要网站支持i18n,
用 django  如何实现的呢,今天看着帮助文档,做出了第一部分。django 国际化,如下三步实现:
1. 第一步:在 Python 代码和模板中嵌入待翻译的字符串,
2. 第二步:把那些字符串翻译成需要支持的语言,并进行相应的编译( 编译po文件)
3. 第三步:在 Django settings 文件中激活本地中间件。'django.middleware.locale.LocaleMiddleware',

我的环境是 window,python2.7,django 1.4 , pydev.
详细过程:
1.创建  django 工程. 你可以用pydev, 也可以用命令.
程序代码 程序代码

django-admin.py startproject DjangoI18N

到你创建的工程目录下面建立 app
程序代码 程序代码

Python manage.py startapp i18napp

修改 views.py 代码如下:
程序代码 程序代码

# Create your views here.
from django.http import HttpResponse
import time
from django.utils.translation import ugettext

def home(request):  
    t  = time.localtime()
    n  = t[6]
    weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday','Sunday']
    return HttpResponse('Today is:'+weekdays[n])

def trans_home(request):
    t  = time.localtime()
    n  = t[6]
    weekdays = [ugettext('Monday'),ugettext('Tuesday'),ugettext('Wednesday'),ugettext('Thursday'),
                        ugettext('Friday'),ugettext('Saturday'),ugettext('Sunday')]
    return HttpResponse('Today is:'+weekdays[n])


urls.py 文件配置:
程序代码 程序代码

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
    # Examples:
     url(r'^$', 'DjangoI18N.i18napp.views.home'),
     url(r'^trans1$', 'DjangoI18N.i18napp.views.trans_home'),
)



此时,你可以运行 Python manage.py runserver 0.0.0.0:8000
在浏览器中看到如下结果:


2.进行国际化
首先在你的 i18napp app下面建立一个目录 locale. 然后执行命令:django-admin.py makemessages -l zh_CN

可以看到,在locale 目录下 生成了django.po 文件


这一步有可能有错误,在windows 环境下,可以如下解决:
已经解决windows上执行django-admin.py makemessages -l zh_CN 后出现xgettext'ds' 不是内部或外部命令,也不是可运行的程序或批处理文件的错误

原因和解决办法是:
因为windows上没有gettext,所以要安装gettext(python有gettext,但是好像不行,它没有xgettext)
下载地址是:
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime-0.17-1.zip
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-tools-0.17.zip

解压这zip文件到同一个文件夹,比如 C:\Program Files\gettext-utils
然后添加到系统变量的PATH中:
控制面板 > 系统 > 高级 > 环境变量
在系统变量列表中, 选中Path, 然后单击编辑
添加 ;C:\Program Files\gettext-utils\bin 到结尾后一直点确定就行了

你可以用文本文件编译此文件,我用的是pydev,eclipse

编译文件,命令:django-admin.py compilemessages

修改settings.py
注意 USE_I18N =True
另外  注意  'django.middleware.locale.LocaleMiddleware', 的位置.
程序代码 程序代码

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)


重新运行:Python manage.py runserver 0.0.0.0:8080
在浏览器中打开:

切换语言:



最后附上代码下载:下载文件 点击下载此文件


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 轻舞肥羊 于 2012-08-10 09:43 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: python django 国际化 i18n
相关日志:
评论: 1 | 引用: 0 | 查看次数: -
回复回复原梓番[2012-08-09 05:46 PM | del]
你那些图片撕裂的纸张效果很有质感。
对域名有兴趣?不过我觉得你这个博客域名挺好的,非常好记,而且也不长,还是com结尾的,难道是有别的站要用域名?我手上倒是一大堆,不知对什么类型的感兴趣。
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.