2010-07-20 86 views
2

我正在Codeigniter中启动一个新的网站项目。我需要这个网站是多语言的,英文将成为默认语言。 我知道codeigniter中的语言类是如何工作的,而且我已经在使用它。Codeigniter中的多语言网站

我担心的是我需要使用所选语言显示URL。我将用一个例子解释一下:

当选择英语语言,我有这样的URL: www.domain.com/cars/list_cars 其中汽车是控制器和list_cars是负责调用适当视图的方法。

当选择西班牙语语言的语言,我想的URL显示为 www.domain.com/coches/mostrar_coches

这是实现这一目标的最佳途径?我能想到的唯一方式是改变routes.php文件的东西,如:

$route['cars/list_cars'] = 'coches/mostrar_coches';

是否有实现这一目标的任何更好/更简单的方法?

谢谢!

回答

0

我做了你的建议,使用routes.php为您的本地化网段。对我来说工作得很好,但是对于每一页你都需要在你的路线文件中添加一个新条目。

+0

在每个页面的routes.php中都有一个条目,这是让我失望的,但我认为这是唯一的方法。 Codeigniter需要知道您想要将名称页翻译成什么,并且在这种情况下我无法使用正则表达式。 – yinyang78 2010-07-20 15:54:30

0

翻译你的控制器和方法名称是一件令人头疼的事情。您的搜索引擎优化的好处是如此之小,以至于它确实不值得做,只要确保您有好的内容即可。

+0

我很惊讶你的答案。我不是一位SEO专家,但我多次读到,在您的网址中使用关键字是最重要的考虑因素之一。 这就是为什么我要“翻译”URL。 – yinyang78 2010-07-20 17:28:42

+0

在合适的情况下,SEO的好处将会很大。思想需要付诸实践。 – stef 2010-07-21 14:12:24

+0

嘿,如果你想手动翻译每一个URL,所以你可以有一个轻微的SEO碰撞继续前进,我宁愿只是确保我的内容适合每种语言。 – 2010-07-22 08:30:42

2

我用CodeIgniter和Url翻译构建了concebe.com。我的解决方案是将所有请求重定向到只有一个控制器,该控制器负责根据翻译调用其他功能。见下图:

function dinamic($js,$page,$item=NULL,$id=NULL) 
{ 

    switch ($page) 
    { 
     case $this->lang->line('products'): 
      $page='products'; 
     break; 
     case $this->lang->line('about_us'): 
      $page='about_us'; 
     break; 
     ... 
    } 

    //switch page 
    switch ($page) 
    { 
     case 'contact_us': 
      $this->template->render($js,$this->_contact_us($js)); 
      return; 
     break; 
    } 

这是不是一个聪明的解决方案,不帮你,因为是很难的,但我也必须区分JS调用,这是唯一的办法,我希望这帮助别人。

约束:当切换语言时,你失去了页面,你在哪里。