Django i18n多语言的URL差异化解决方案

昨天我已经对站点“春天音乐”进行了国际化,添加了英文翻译。

但当时后端是根据session和cookie记录用户的语言设定,

这造成的问题是,同一URL,存在一个中文版、一个英文版。

搜索引擎的爬虫进入后,大多只能抓取并保存对应的中文版(默认语言),而遗失了对应的英文版。

因此,必须对中文版和英文版进行URL差异化。有两种选择:

1. 增加一个参数,类似 http://www.fachun.net/?lang=en

2. 增加一个前缀,类似 http://www.fachun.net/en/

因为第二种更好看,我选择了第二种。整个实现过程较繁琐,下面提供我采用的解决方案。

1. 安装django-localeurl

我安装的版本是2.0.1: https://pypi.python.org/pypi/django-localeurl

该程序包的作用,是允许你在URL中设定语言,而不需要修改原有的URL配置(urls.py中的设置)。

安装完成后,编辑settings.py文件配置:

LANGUAGE_CODE = ‘zh-CN’
LANGUAGES = {
(‘zh-cn’, ‘中文’),
(‘en’, ‘English’),
}
PREFIX_DEFAULT_LOCALE = False
LOCALEURL_USE_ACCEPT_LANGUAGE = True

MIDDLEWARE_CLASSES = (
#’django.middleware.cache.CacheMiddleware’,
‘django.contrib.sessions.middleware.SessionMiddleware’,
‘localeurl.middleware.LocaleURLMiddleware’,
‘django.middleware.common.CommonMiddleware’,

#’django.middleware.locale.LocaleMiddleware’,

)

INSTALLED_APPS = (

..

‘localeurl’,

)

几点说明: 继续阅读Django i18n多语言的URL差异化解决方案

Django i18n国际化在windows测试环境中需要注意的问题

这两天准备把前面写的网站 春天音乐 做一下国际化

(补充:翻译量小,半天就完成了,不过教训是一开始应该预留翻译函数接口。在模板中找字符串浪费了很多时间),

以曾经的经验,这样的资源站,超过一半的访客都是通过google进入的,国外用户数高于内地访客。

在windows开发环境中测试i18n可能会遇到一些问题,此处简单罗列:

1. 在windows下安装gnu gettext

i18n需要使用到gettext,windows下单独编译或安装。

当前我win7上所用的django版本为1.5.1,它要求提供至少提供0.15以上的gettext

附0.17的win32安装包: gettext-0.17-win32-setup.exe

安装完毕之后,请把子文件夹bin添加到用户的环境变量PATH中。

 

2. 让locale文件夹位于app目录下

django-admin.py makemessages -l en

上述命令会自动搜寻 视图文件views.py、模板文件中需要翻译的中文字符串(此处我是中译英),

执行这个命令之前,可以首先切换到app目录下,创建一个locale文件夹。

执行后会自动生成en\LC_MESSAGES\django.po这样的文件,以及其上级父文件夹。

 

3. 在修改翻译之后,编译并重启web server

在我们修改了django.po中的翻译后,每次都需要执行:

django-admin.py compilemessages

编译它,随后会生成一个django.mo文件。

为了让修改生效,需要重启web服务器。

测试环境中使用WSGIServer同样需要重启。

下载翻译编辑工具poedit:

http://www.poedit.net/download.php#win32