[英]choose language in the zend framework 2 website
我使用Zend / Translator翻譯我網站上的文字。 我設置了一個默認本地,它的工作原理。 現在,用戶應該能夠在layout.html中選擇語言:
...
<li class="dropdown">
<a href="<?php echo $this->url('home');?>" class="dropdown-toggle" data-toggle="dropdown">Sprache<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">Deutsch</a></li>
<li><a href="<?php echo $this->url('application/default', array('action'=>'en'));?>">Englisch</a></li>
<li><a href="#">Französisch</a></li>
<li><a href="#">Spanisch</a></li>
</ul>
</li>
...
默認語言是德語。 現在我嘗試通過在下拉菜單中選擇“Englisch”將語言更改為英語。 但我不知道在控制器中寫什么。 我試過這樣,但它不起作用:
public function enAction()
{
$translator = $this->getServiceLocator()->get('translator');
$translator->setLocale('en');
return $this->redirect()->toRoute('home');
}
有人能幫我嗎?
謝謝。
您可以查看SlmLocale ,這是一個執行區域設置檢測和存儲的模塊(通過會話或cookie)。 使用SlmLocale,您可以渲染菜單以從區域設置切換,相應地更新所有URL。
echo $this->localeMenu();
SlmLocale能夠根據主機名,路徑的一部分(即/en/my/url
)或查詢參數選擇區域設置。
免責聲明:我是SlmLocale的作者:)
設置區域設置時,翻譯器不會記住所選語言。 您需要將選定的lang保留在會話中以供將來請求使用。 在你的模塊bootstrap從會話中獲取lang並設置翻譯器語言環境。
當你想要更改語言時,應該有代碼來刷新頁面,並將lang參數附加到url。 設置是
class Settings{
const DEFAULT_LANGUAGE = 'en';
public static $locations = array(
'sa'=>'sa_SA',
'en'=>'en_US'
);
}
並在Application \\ Module.php中
public function onBootstrap(MvcEvent $e) {
$lang = $e->getRequest()->getQuery('lang'); // new language
$session = new Container('base');
if($lang == null || $lang == ''){
if ($session->offsetExists('lang')) {
$lang = $session->offsetGet('lang'); // current language
}else{
$lang = 'en; // default language
}
}
$session->offsetSet('lang', $lang);
$loc = Settings::$locations[$lang];
$translator
->setLocale($loc)
->setFallbackLocale(Settings::DEFAULT_LANGUAGE .'_' . Settings::DEFAULT_LOCATION);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.