如何在CakePHP中为多语言网站获取翻译的URI和控制器

时间:2011-01-12 20:55:03

标签: php cakephp internationalization url-rewriting

大家好,并提前感谢您一眼,我感谢任何可能的帮助。我是一个搜索引擎优化的人,并继承了一个CakePHP网站,该网站将提供三种语言的内容。我希望获得一种规范(seo友好)的方式来获得一个良好的多语言URL架构,而不会让我的开发人员太烦恼。

我们想要的最终解决方案:

每种语言都有三个不同的URL(已翻译)的好网址。例如:

www.domain.com/L1/language-1-parent/language-1-child/ www.domain.com/L2/language-2-parent/language-2-child/ www.domain.com/L3/language-3-parent/language-3-child /

在这里,我们有一个内容片。这三种语言的内容相同,但会被翻译。因此,我们也希望翻译相应的子目录和URI,其中:

L {1-3}是指示语言的子目录

语言 - {1-3}是内容的“控制者”。目前我们只有一个控制器,无论语言子目录是否使用不同的语言。)

langauge- {1-3} -child是依赖的内容项或子目录,必须根据语言子目录进行翻译


假设问题:

我的开发人员告诉我,因为Cake有控制器来提供内容,因此翻译有点乱。 在上面的例子中:我假设'language-1,'language-2,'和'language-3'是控制器。

另外,我假设因为我们试图从一个控制器(具有不同的URL)提供三个内容版本,我们遇到了问题。

目前我们有这样的网址:

www.domain.com/L1/language-1-parent/language-1-child/ www.domain.com/L2/language-1-parent/language-1-child/ www.domain.com/L3/language-1-parent/language-1-child /

此处的问题是,无论用户是否选择其他语言,我们都会使用不对应且未翻译的URL。 此外,我们确实有一些内容项没有其他语言翻译。因此,我想在页面上放置一个rel = canonical元标记而不翻译和/或noindex这些页面,同时我们正在翻译。

再次,您的帮助非常受欢迎,我期待您的回复。我很乐意澄清任何事情。

1 个答案:

答案 0 :(得分:1)

使用标准的cakephp配置,您可以使用cakephp internationlization

轻松实现这些类型的网址
/eng/users/account
/fre/users/account

如果您需要这些网址王

/eng/users/account
/fre/utilisateurs/compte

然后你应该玩你的AppController.php

// pseudo code, you need to rewrite this section as you need.
var lang getUrlParams['language'];
var controller getUrlParams['controller'];
var action getUrlParams['action'];

if (controller[lang] != controller || action[lang] != action) :
    redirect to `/lang/controller[lang]/action[lang]`;
endif;

在视图中,所有链接都应该像

一样调用
$this->Html->link(__('My Link'), array('controller' => __('users'), 'controller' => __('account')))