我刚刚启动了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 ?>">
答案 0 :(得分:2)
您至少有两个选择:
您可以编写自定义视图帮助程序来解析并返回语言,并在布局中使用它,如:
<html lang="<?php echo $this->langHelper() ?>">
在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' ?>