Django框架笔记-国际化

实现一次国际化真的累死我了,中间的过程就让我非常郁闷,先做一笔记录,给以后做个提醒:

先给复习一个课程:GNU gettext 说简单点就是由于提供一套完整的国际化解决方案,目前绝大部分国际化组件都基于此。

Django本身是完全国际化了的,具体为Python自带的标准模块 gettext。当然了,如果不需要国际化,那还是关掉它可以为Django节省一点开销。

对你的Django应用进行国际化的三个步骤:

  1. 第一步:在你的python代码和模板中嵌入待翻译的字符串。
  2. 第二步:把那些字符串翻译成你要支持的语言。
  3. 第三步:在你的django settings文件中激活做要地区的中间件。

如何做这三步,我后面有相应链接并且是中文的,我呢?只是谈谈中间遇到的一些问题,但是建议你先看完再去读文档,那样就比较不会迷糊:

第一:simplejson和ugettext_lazy冲突

在使用AJAX的时候,JSON是最适合不过的数据传输了,但是由于ugettext_lazy返回的是一个object对象,无法正常的显示数据,你可以使用ugettext实现国际化字符串,要不然你可以这样使用:


u"%s" % ugettext_lazy('操作成功')


第二:生成PO文件

当你的Python、模板、脚本中已经做好编码以后,接下来你只要用工具生成PO文件。而Django已经帮你做了这件事,所以如果你只要通过简单的命令自动帮你生成:

生成出python代码和模板中的字符串命令:django-admin.py makemessages -l zh_CN 其中“zh_CN”是语言类型,你可以改成en、zh_TW等等,这里生成后的文件会存在这么一个目录结构表中

  • $APPPATH/locale/<language>/LC_MESSAGES/django.(po|mo)
  • $PROJECTPATH/locale/<language>/LC_MESSAGES/django.(po|mo)
  • All paths listed in LOCALE_PATHS in your settings file are searched in that order for <language>/LC_MESSAGES/django.(po|mo)
  • $PYTHONPATH/django/conf/locale/<language>/LC_MESSAGES/django.(po|mo)

假设我的项目根目录下建立个locale目录,那么当我执行 django-admin.py makemessages -l zh_CN 自动生成/projectname/locale/zh_CN/LC_MESSAGES/django.(po|mo)。

假设我现在需要增加一下英文版,我只需要django-admin.py makemessages -l en

第三:翻译

有了PO文件,接下来就是翻译。专业一点的话用Poedit(呵呵,非常方便的工具,如果想翻译PO文件建议使用它),否则随便找个编辑器打开它自己改里面的代码,但真的会眼花的,如果你需要翻译量较大的话。

注:Django生成的PO文件使用Poedit保存时会出现一个错误提示,那是因为缺少工程信息,从“类目”》“设置”填写完整的信息后即可。

第四:脚本国际化小插曲

文档中介绍动态生成脚本链接:

<script type="text/javascript" src="{% url django.views.i18n.javascript_catalog %}"></script>
总是出现异常,可以使用
<script type="text/javascript" src="/jsi18n/"></script>
原因不明,是我没有去查。

简化操作

我的项目里面有三种语言:英文、简体中文、繁体中文,所以我做了一个BAT文件,如果点一下自动生成数据:

@ECHO OFF
cd E:\Python\WEB\mood\
cd e:
echo 开始制作Python、HTML的PO文件
django-admin.py makemessages -l zh_CN
django-admin.py makemessages -l zh_TW
django-admin.py makemessages -l en
echo 完成
echo 开始制作JavaScript的PO文件
django-admin.py makemessages -d djangojs -l zh_CN
django-admin.py makemessages -d djangojs -l zh_TW
django-admin.py makemessages -d djangojs -l en
echo 完成
echo 开始编译PO文件
django-admin.py compilemessages
pause

哈哈,很开心的告诉你,你不用担心他的生成会破坏我原有已经翻译好的数据,因为Django已经很智能的帮你处理新数据、删除已经存在PO文件中的数据。

参考资料



			

Django框架笔记-开篇

越来越喜欢Python这种动态编译语言,一个简单的DOS窗口,可以做只要你想得到的事。在很早以前我有过对Python的简单了解,也是直到最近在学习正则表达式才重新对她进行较深入的学习,而这一篇主要还是说一下关于Django框架,她是WEB框架中的一种,其主要选择是因为她的风格和我自己的风格很相像。

一、安装

http://www.djangoproject.com/download/可以下载到最新版,可以放在任何目录下然后执行:python setup.py install。测试一下吧:

>>> import django
>>> django.VERSION
(1, 1, 0, final', 1)

二、创建一个项目

转到Django目录:django-admin.py startproject mysite 其中mysite是项目名称。自动在Django目录下生成mysite目录。

三、运行开发服务器

Django开发服务是可用在开发期间的,一个内建的,轻量的WEB服务,所以在开发过程中无须使用产品级的WEB服务(比如:Apache),只需要执行:python manage.py runserver 8080 当然必须在mysite目录下。你可以通过http://127.0.0.1:8080来访问您的站点。

四、模型(Django数据库层)

(一)、配置数据库,缺省都在:settings.py

(二)、创建模型

在mysite目录下执行:python manage.py startapp books她会自动创建几个模型相关文件在mysite目录下。当然这不是说你就创建一个模型了,我们还得写一些代码。这里的Django模型只是用Python代码形式描述数据在数据库中的定义。

第一步:编写生成文件当中的models.py用Python代码来描述你的模型。

第二步:安装模型。

这一步你需要修改settings.py中INSTALLED_APPS项,把你创建的模型添加到列表中,以便告诉Django需要激活这个模型。你可以先使用python manage.py validate来验证你是否已经正确,如果有错误会明细指出。你还可以用python manage.py sqlall books命令先检查一下Django为你生成的SQL命令是否正确,当然这需要跟你目前配置的数据库来判断。最后用python manage.py syncdb命令来同步你的模型和数据库定义,她傻了一点只会增加你不存在的表,不能同步模型的修改数据库,当然还是有办法的。

第三步:一起HIGHT一下

你可以通过SHELL窗口完成不可思议的操作:

>>> from books.models import Publisher
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Apress>, <Publisher: O'Reilly>]

五、Django站点管理

这是Django内置的,你只需要简单配置就可以有一个简单漂亮的站点管理平台,你可以通过他来做一些数据增删改动作。

第一步:对setting.py一点改动

  1. django.contrib.admin加入到INSTALLED_APPS
  2. django.contrib.auth、django.contrib.contenttypes、django.contrib.sessions加入到INSTALLED_APPS
  3. django.middleware.common.CommonMiddleware、django.contrib.sessions.middleware.SessionMiddleware、django.contrib.auth.middleware.AuthenticationMiddleware加入到MIDDLEWARE_CLASSES

第二步:运行python manage.py syncdb同步站点管理需要的数据库表。

第三步:将admin访问配置在URLconf。

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
  (r'^admin/', include(admin.site.urls)),
)

接下来还有什么呢?

The Django Book这里你可以获取到很完整的Django教程,当然他是中文的。

当然也有像The Definitive Guide to Django: Web Development Done Right权威书籍。

最后可别忘了http://www.djangoproject.com/比任何资源来得好,提供非常完整的文档,如遇到BUG咱们上面有人。 😎

© 2017 卡片机色彩 沪ICP备13032872号-3

Theme by cipchk

to top