yii:国际化 (i18n) 和动态 url 管理器 [英] yii: internationalization (i18n) and dynamic url manager
本文介绍了yii:国际化 (i18n) 和动态 url 管理器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道在Yii框架中实现国际化(i18n)"和动态URL管理"的更好方法.
I would like to know a better way to implement "internationalization (i18n)" and "dynamic URL management" in Yii framework.
一个(难以维护的)临时解决方案:
A (difficult to maintain) temporary solution:
// protected/config/main.php
'language' => 'es',
...
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
// pages
'es/turismo/<slug:>' => array('visit/page', 'defaultParams' => array('lang' => 'es'), 'urlSuffix' => '.html'),
'it/visita/<slug:>' => array('visit/page', 'defaultParams' => array('lang' => 'it'), 'urlSuffix' => '.html'),
'en/travel/<slug:>' => array('visit/page', 'defaultParams' => array('lang' => 'en'), 'urlSuffix' => '.html'),
'turismo/<slug:>' => array('visit/page', 'urlSuffix' => '.html'),
// home
'es/turismo' => array('visit/index', 'defaultParams' => array('lang' => 'es'), 'urlSuffix' => '.html'),
'it/visita' => array('visit/index', 'defaultParams' => array('lang' => 'it'), 'urlSuffix' => '.html'),
'en/travel' => array('visit/index', 'defaultParams' => array('lang' => 'en'), 'urlSuffix' => '.html'),
// contact us
'es/contactenos' => array('site/contact', 'defaultParams' => array('lang' => 'es'), 'urlSuffix' => '.html'),
'it/contattaci' => array('site/contact', 'defaultParams' => array('lang' => 'it'), 'urlSuffix' => '.html'),
'en/contact-us' => array('site/contact', 'defaultParams' => array('lang' => 'en'), 'urlSuffix' => '.html'),
),
),
...
// protected/controllers/VisitController.php
...
public function actionIndex($lang = 'es'){
Yii::app()->language = $lang;
...
}
public function actionPage($slug, $lang = 'es'){
Yii::app()->language = $lang;
...
}
...
这意味着,每个控制器的新配置 'urlManager' 规则总是为每个控制器操作传递 $lang 参数.一个活生生的例子:
This implies, new config 'urlManager' rules for each controller and always pass the $lang parameter for each controller action. A live example:
我尝试了一些其他选项但没有成功:
I tried some other options without success:
谢谢!
推荐答案
规则:
'<lang:(es|it|en)>/(turismo|visita|travel)/<slug:>' => array('visit/page', 'urlSuffix' => '.html'),
控制器:
class VisitController extends Controller
{
public function actionPage($slug)
{
}
}
父控制器(如果您不使用模块):
Parent controller (if you don't use modules):
class Controller extends CController
{
public function beforeAction($action)
{
Yii::app()->language = Yii::app()->request->getQuery('lang', 'es');
return parent::beforeAction($action);
}
}
这篇关于yii:国际化 (i18n) 和动态 url 管理器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文