【问题标题】:Get local value in layout or view in Zend Framework 2在 Zend Framework 2 中获取布局或视图中的本地值
【发布时间】:2016-05-03 22:59:48
【问题描述】:

我们如何在 layout.phtml 或 Zend Framework 2 中的视图中获取本地值(即:'en' 或 'en_US'、'de' 等)?

我的本​​地设置和explained here一模一样

<?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

我需要在调用 google map api url 时使用 '$locale' 来获取匹配的区域设置/语言。我在 layout.phtml 中的整个应用程序中调用它

$this->headScript()->appendFile('http://maps.googleapis.com/maps/api/js?language=' . $locale);

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

PS:我没有任何查询字符串参数,例如“语言”,这是一个 google api 的东西,我需要在脚本 url 中设置(如果你不知道)请不要混淆。 未回复here

【问题讨论】:

  • 一个简单的选择available here
  • Solution: $this-&gt;plugin('translate')-&gt;getTranslator()-&gt;getLocale();

标签: localization zend-framework2


【解决方案1】:

取决于您想从哪里获取 Locale 值。在任何情况下,您都可以在控制器中执行此操作,例如:

$locale = $this->request->getQuery('language');
$this->layout()->locale = $locale;

return new ViewModel(array('locale' => $locale));

编辑如果您只想从翻译人员那里获取语言环境,您可以在视图脚本中尝试:

$this->plugin('translate')->getTranslator()->getLocale();

【讨论】:

  • 误会了!我已经更新了问题的详细信息。我们永远无法访问谷歌服务器来获取它的“语言”查询变量。谷歌在 zf2 中?
  • @Sanju 我明白你的意思并将其添加到我的答案中。
  • 正是我想要的。非常感谢!
  • 对不起,我是 zf2 的新手,但我会尝试 $request = new Request(); $locale = $request->getQuery('locale'); var_dump($locale);但我得到“空”
  • @icy2k 您无法从“新请求”中获取它,该对象基本上是空的。当你在控制器中时,你应该有这个->请求可用。
【解决方案2】:

我的版本是这样的

<?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);

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多