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

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

在做网站时,通常需要多语言,也就是国际化,不同国家的人打开,显示不同的语言。也就是需要网站支持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
在浏览器中打开:

切换语言:



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

上一篇: mysql数据库备份恢复常用命令集合
下一篇: django 国际化实例之二,基于整个工程template(附源码)

Avatar

原梓番 评论于: 2012-08-09

你那些图片撕裂的纸张效果很有质感。
对域名有兴趣?不过我觉得你这个博客域名挺好的,非常好记,而且也不长,还是com结尾的,难道是有别的站要用域名?我手上倒是一大堆,不知对什么类型的感兴趣。
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号