Получить локальное значение в макете или представлении в Zend Framework 2
Как мы можем получить локальное значение (то есть: "en" или "en_US", "de" и т. Д.) В layout.phtml или представлениях в Zend Framework 2?
Мои локальные настройки точно такие же, как описано здесь
<?php
namespace FileManager;
use Zend\Mvc\ModuleRouteListener;
class Module
{
public function onBootstrap($e)
{
$translator = $e->getApplication()->getServiceManager()->get('translator');
$translator
->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']))
->setFallbackLocale('en_US');
}
//...
}
Я хочу получить локальное значение примерно так:
$locale = $this->translate()->getLocale(); // <-- It's not working anyway
Мне нужно использовать '$ locale' при вызове api url карты Google, чтобы получить соответствующий языковой стандарт. Я называю это через приложение в layout.phtml
$this->headScript()->appendFile('http://maps.googleapis.com/maps/api/js?language=' . $locale);
Поэтому я хочу сделать динамическую опцию языка при вызове API.
PS: у меня нет параметра строки запроса, такого как 'language', это Google Api, который мне нужно установить в URL-адресе скрипта (если вы не знаете). Пожалуйста, не запутайтесь. Не ответил здесь
2 ответа
Зависит от того, откуда вы хотите получить значение Locale. В любом случае вы можете сделать это в вашем контроллере, например:
$locale = $this->request->getQuery('language');
$this->layout()->locale = $locale;
или же
return new ViewModel(array('locale' => $locale));
Отредактируйте, если вы просто хотите получить локаль от переводчика, вы можете попробовать это в скрипте вида:
$this->plugin('translate')->getTranslator()->getLocale();
Моя версия такая
<?php
namespace FileManager;
use Zend\Mvc\ModuleRouteListener;
use Zend\Session\Container;
class Module
{
public function onBootstrap($e)
{
$application = $e->getTarget();
$serviceManager = $application->getServiceManager();
$eventManager = $application->getEventManager();
$events = $eventManager->getSharedManager();
// session container
$sessionContainer = new Container('locale');
// test if the language in session exists
if(!$sessionContainer->offsetExists('mylocale')){
// doesn't so the browser lan
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
$sessionContainer->offsetSet('mylocale', Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']));
}else{
$sessionContainer->offsetSet('mylocale', 'en_US');
}
}
// translation
$translator = $serviceManager->get('translator');
$translator ->setLocale($sessionContainer->mylocale)
->setFallbackLocale('en_US');
$mylocale = $sessionContainer->mylocale;
$events->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) use ($mylocale) {
$controller = $e->getTarget();
$controller->layout()->mylocale = $mylocale;
}, 100);
}
//...
}
в вашем макете
$this->headScript()->appendFile('http://maps.googleapis.com/maps/api/js?language=' . $this->mylocale);