如何将语言变量传递给ZF2中的布局?

时间:2014-12-20 07:13:23

标签: zend-framework2

我刚刚启动了Zend Framework 2,我希望能够将一种语言附加到doctype。

自举:

$this->layout()->setVariable('language', 'nl');

Layout.phtml

<html lang="<?php echo $language;?>">

这只适用于Controller,如何解决这个问题呢?

the awnser:

public function onBootstrap(MvcEvent $e) {
    $viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
    $viewModel->language = 'en';
}

// Now in your layout:
<html lang="<?php echo $this->language ?>">

2 个答案:

答案 0 :(得分:2)

您至少有两个选择:

  1. 您可以编写自定义视图帮助程序来解析并返回语言,并在布局中使用它,如:

    <html lang="<?php echo $this->langHelper() ?>">
    
  2. 在Module.php的onBootstrap()方法中,您可以将任何变量传递给布局,如下所示:

    public function onBootstrap(MvcEvent $e) {
        $viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
        $viewModel->language = 'en';
    }
    
    // Now in your layout:
    <html lang="<?php echo $this->language ?>">
    

答案 1 :(得分:1)

@foozy的另一种方法:

使用php的Locale作为当前语言环境的容器。这将直接用于任何其他i18n的东西(gettext,Zend \ I18n,Doctrine的可翻译等);

use Locale;

public function onBootstrap(MvcEvent $e)
{
    Locale::setDefault('en_GB');
}

使用它:

<html lang="<?= Locale::getPrimaryLanguage(Locale::getDefault())?>">

如果您希望能够从视图脚本覆盖区域设置(例如,在另一个区域设置中有一个“意外”的页面:

<?php
if (!isset($locale)) {
    $locale = Locale::getDefault();
}
?>

<html lang="<?= Locale::getPrimaryLanguage($locale)?>">

如果需要,设置(仅适用于非默认值!)视图中的区域设置:

<? $this->layout()->locale = 'nl_NL' ?>