4

我是zend framework2的新手,我正在一个具有多语言集成的网站上工作。请给我一些想法,应该如何配置内置库和翻译文件,以及如何从视图文件中调用它

4

1 回答 1

13

ZF2 已经集成了 I18n 工具。

如何整合它

模块.config.php

'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),

文件 *.mo

按照上一步,创建一个文件夹并使用Poedit(简单而好的应用程序)添加您的en_US.mo(例如)

模块.php

public function onBootstrap($e)
{
    $translator = $e->getApplication()->getServiceManager()->get('translator');
    $translator
      ->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']))
      ->setFallbackLocale('en_US');
}

rq:我个人使用会话来存储我的语言环境,但这取决于我是否需要使用语言的 SEO

    // session container
    $sessionContainer = new Container('locale');

    // test if session language exists
    if(!$sessionContainer->offsetExists('mylocale')){
        // if not use the browser locale
        if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
            $sessionContainer->offsetSet('mylocale', Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']));
        }else{
            $sessionContainer->offsetSet('mylocale', 'en_US');
        }

    }

    // translating system
    $translator = $serviceManager->get('translator');
    $translator ->setLocale($sessionContainer->mylocale)
                ->setFallbackLocale('en_US');

    $mylocale = $sessionContainer->mylocale;

如何使用它

在视图中,只需键入:

 <?php echo $this->translate("Translate that!"); ?>

一些要探索的链接

于 2013-10-09T12:55:09.540 回答