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层面的设计(添加语言字段)以支持多语言版本内容的录入。这不在本文涵盖范围。
*) 基于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层面的设计(添加语言字段)以支持多语言版本内容的录入。这不在本文涵盖范围。
相关文章推荐
- 多语言网站实现方案
- 一步一步实现网站的多语言版本
- 如何实现网站的多语言版本?
- 多语言网站实现方案
- 多语言网站(如何实现网站的多语言版本?)
- 一步一步实现网站的多语言版本
- 多语言网站(如何实现网站的多语言版本?)
- 一步一步实现网站的多语言版本
- 多语言网站(如何实现网站的多语言版本?)
- 基于ShareKit2.0的版本,修改了Sina和Twitter的实现,支持同时发送URL和IMAGE,由于和原来的接口有所不同,所以开个分支。特别感谢icyleaf的工作基础
- 网站设计--多语言网站实现方案
- 基于jQuery.i18n.properties实现前端网站语言多版本
- 如何实现网站的多语言版本?
- 如何实现网站多语言版本
- 多语言网站实现方案
- 利用.net的资源文件实现网站的多语言版本
- 多语言网站(如何实现网站的多语言版本?)
- 多语言网站(如何实现网站的多语言版本?)
- 多语言网站(如何实现网站的多语言版本?)
- asp.net2.0多语言版本网站软件的实现--青蛙非王子(lostfrog)