2014-01-13 78 views
0

我最近开始使用框架(CodeIgniter),并且在大量研究仍然存在许多疑问之后,特别是关于多语种网站。在codeigniter中翻译多语言网站的路线(url)

我想“翻译”的网址,比如,我有​​和fr/home,但我想对每一种语言了自己的翻译一样fr/accueilpt/inicio,等等... 所以到目前为止所有我的系统正在做的是改变的语言,但是URL(控制器)保持在相同的语言(英语)的 ​​,fr/homept/home代替fr/accueilpt/inicio

什么我必须做的做到这一点某种“翻译”或路由?为每种语言创建控制器并分别调用它们会更好吗?我开始这样做,但在某个时候我意识到这是非常巨大的,可能这不是一个好习惯。但是我发现为每种语言创建一个控制器要容易得多,但是我不知道在哪个文件中以及在哪个文件中我必须设置“自动运行功能”来检测/保存语言首选项。

而且当我在URL类型只是语言(例如/en/fr)它没有“重定向”到主控制器(家):

// '/en', '/de', '/fr' and '/nl' URIs -> use default controller 
$route['^(en|fr|pt)$'] = $route['default_controller']; 

这不是为我工作,除非我键入“/”之后的语言: /fr/正常工作!,/fr不起作用!

+0

在我的看法中,如果你的控制器与当前选择的语言不一样,用户不会使用'url'浏览你的站点,他们将通过你提供的'menu'和'links' 。这是你必须做的。但是如果你真的想要这种功能,你将不得不为不同的语言添加或调用不同的控制器。 – tomexsans

回答

0

我成功地使用了为语言设置Cookie的方法,而不是在URI中设置Cookie,然后在我的页面数据库中为每种语言设置所有URI段,然后在我的页面模型中加载正确的语言URI和基于语言cookie的文本。

现在唯一剩下的问题是路由,我设置这样的事情在我的路线文件的末尾,重定向所有剩余请求的页面控制器方法:

$route['(:any)'] = "main/pages"; 
$route['(:any)/(:any)'] = "main/pages"; 

这样我可以有两种页面URI和子菜单URI与我的本地化版本。

+0

谢谢!这确实是一种可能性,以及将所有语言的网址保留为英文。但我真的想用CI来实现这一点。我知道如何获得我想要的结果的其他方式,但我认为我的可能解决方案可能不是最佳方法和模式的最佳方式...... – PauloBraga