您的位置:首页 > 运维架构 > 网站架构

CakePHP: 基于url的多语言版本网站的实现方案

2011-07-02 14:14 495 查看
有几种方案来实现网站的多语言版本:

*) 基于url的方案( 比如{locale}.yeenav.com 或者 www.yeenav.com/{locale} )

*) 基于session/cookie的方案( 通过记录用户语言选项在session中来实现切换)

*) 基于theme的方案( 通过切换不同语言版本的theme来实现)

其中基于url的方案更为SEO友好。

下面简单介绍CakePHP中如何实现基于url的方案。

1、url格式

使用iso code3来唯一标识语言
http://www.yeenav.com/eng/articles/add <-> http://www.yeenav.com/chi/articles/add
2、添加语言前缀相关路由

CakePHP已经在Router基类中实现了这个方法,我们可以在自己的路由配置文件比如app/config/yeenav_routes中直接调用:

YeenavRouter::localize();

该方法把locale参数自动添加到domain后面,如1所示格式。

3、在settings中添加语言开关:

Config.language: chi

Translate: 1

这代表默认语言为中文,且支持多语言url。

4、添加语言切换的界面链接

<p style="display: inline-block;">

<?php echo $html->link('English', array('locale'=>'eng')); ?>

</p>

<p style="display: inline-block;">

<?php echo $html->link('中文', array('locale'=>'chi')); ?>

</p>

5、把locale写入config

在app/app_controller中添加如下代码:

if (isset($this->params['locale'])) {

Configure::write('Config.language', $this->params['locale']);

}

6、最后一步,自动把语言参数添加到所有网站链接中

在app/app_helper中添加如下方法:

public function url($url = null, $full = false) {

if (!isset($url['locale']) && isset($this->params['locale'])) {

$url['locale'] = $this->params['locale'];

}

return parent::url($url, $full);

}

这样网站就实现了i18n和i10n特性,可见用CakePHP来实现多语言方案是相当容易的。前提是所有的字符串必须遵循__()的编程规范。

如果网站中存在一些动态内容,比如产品描述,那么还需要DB层面的设计(添加语言字段)以支持多语言版本内容的录入。这不在本文涵盖范围。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: