2011-08-17 41 views
6

Yii's I18n topic对我来说还不够。I18n的基础知识对于Yii Framework

我的源郎是土耳其,目标lang是英语(例如)

我的测试控制器的index action:

public function actionIndex() 
    { 
     Yii::app()->language='en'; 
     $this->render("index"); 
    } 

这是我的看法文件的内容:

echo Yii::t('test', 'Deneme'); 

而且最后,这是我的protected/messages/en/test.php文件内容:

return array(
    'Deneme' => 'Example', 
); 

一切正常,它返回示例。但正如你所看到的,我在我的指数行动手动设置语言。我怎样才能自动做到这一点?我必须添加Yii :: app() - > language ='en';所有行动?你如何在你的项目中使用l18n?

注:我是Yii和l18n noob,所以请一步一步描述。

谢谢。

回答

5

应设置在protected/config/main.phpCWebApplication:beginRequest()

目标语言,添加:

'onBeginRequest' => array('MyApp', 'beginRequest') 

在保护/组件,创建一个文件MyApp.php,并添加这个类:

class MyApp { 
    public static function beginRequest(CEvent $event) { 
    //set your language, theme, etc here 
    } 
} 

请记住要将beginRequest()声明为static,否则您将遇到如下错误:
https://github.com/yiisoft/yii/issues/794

3

这很简单。如你所说,你会做所有的语言翻译。然后,在父控制器中,在init方法中,您可以检查所需的语言并设置当前的语言。那样,你不必在每个动作中都这样做,只需要一次。