Localization 在Zend Framework 2中的布局或视图中获取本地值

Localization 在Zend Framework 2中的布局或视图中获取本地值,localization,zend-framework2,Localization,Zend Framework2,我们如何在layout.phtml或Zend Framework 2中的视图中获取局部值(即:“en”或“en_US”、“de”等) 我的本地设置与 所以我想在调用api时使语言选项动态化 PS:我没有任何查询字符串参数,比如'language',这是一个谷歌api的东西,我需要在脚本url中设置(如果你不知道),请不要混淆。 未回答取决于要从何处获取区域设置值。在任何情况下,您都可以在控制器中执行此操作,例如: $locale = $this->request->getQuery(

我们如何在layout.phtml或Zend Framework 2中的视图中获取局部值(即:“en”或“en_US”、“de”等)

我的本地设置与

所以我想在调用api时使语言选项动态化

PS:我没有任何查询字符串参数,比如'language',这是一个谷歌api的东西,我需要在脚本url中设置(如果你不知道),请不要混淆。
未回答取决于要从何处获取区域设置值。在任何情况下,您都可以在控制器中执行此操作,例如:

$locale = $this->request->getQuery('language');
$this->layout()->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);
    }

    //...
}

误解了!我已经更新了问题细节。我们从未访问过谷歌服务器来获取它的“语言”查询变量。谷歌在zf2中吗?@Sanju我明白你的意思,并将其添加到我的答案中。这正是我想要的。谢谢!抱歉,我是zf2中的新手,但我将尝试$request=newrequest()$语言环境=$request->getQuery('locale');变量转储($locale);但我得到“null”@icy2k你不能从“新请求”得到它,那个对象基本上是空的。当您在控制器中时,应该可以使用此->请求。一个简单的选项:
$this->plugin('translate')->getTranslator()->getLocale()
$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);