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

有几种方案来实现网站的多语言版本:

*) 基于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层面的设计(添加语言字段)以支持多语言版本内容的录入。这不在本文涵盖范围。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值