CakePhp:如何知道模型中的当前局部?

时间:2011-09-27 07:39:37

标签: php cakephp internationalization model

我要开发一个多语言的小网站。这个网站使用的是ERP数据库,所以我无法选择我的数据库结构......

我的应用程序在core.php中有默认语言,我正在使用I18N Through URL来指定我要显示的语言

对于每种不同的语言,我都有一个不同的表格,其中包含正确语言的产品描述。

所以我需要在构造函数中将cakePhp的“$ useTable”设置为右表。但要做到这一点,我需要知道应用程序的当前语言环境。

我尝试了几件事:

  • 在I18n课上做一个getInstance,但我总是把“英语”称为“lang”
  • 做一个Configure :: read('Config.language'),但这只显示cakePhp的默认语言
  • 我试图阅读$ GLOBALS ['Dispatcher'] - > $ params ['language']但是如果用户没有指定任何本地,我没有得到任何
  • 我尝试导入组件会话并读取Config.language值(我正在app_controller上写),但我似乎如果我在法语页面上,我点击链接显示页面在德语(所有文本现在都是德语),但我在这里收到的价值仍然是法语,如果我刷新页面,我终于得到了德语,但我现在需要获得价值,而不是在下一页重新加载

所以我没有看到如何检索这种语言,是否有包含此var的隐藏字段,或者我可以在任何地方检索此信息?

1 个答案:

答案 0 :(得分:1)

我没有找到任何简单的方法来检索这个var,因为我们在_beforeFilter之前被调用,所以我要检查参数,会话,cookie和默认var。

所以我创建了一个方法,我把它放在我的“工具”组件中,然后在我的模型中导入它。

如果您有兴趣,可以使用以下模型:

function GetCurrentLocale(){
    if(isset($GLOBALS['Dispatcher']->params['language'])) return $GLOBALS['Dispatcher']->params['language'];
    if($this->Session->check('Config.language')) return $this->Session->read('Config.language');
    if($this->Cookie->read('lang')!==false)return $this->Cookie->read('lang');
    return Configure::read('Config.language');      
}

我这样称呼它:

    App::import('component','Tools');
    $tools = new ToolsComponent();
    $locale = $tools->GetCurrentLocale();

如果有人找到最好的方法,我会强烈反对看看如何:)