Zend Framework 2(ZF2)动态语言环境

时间:2012-10-24 19:32:38

标签: zend-framework2 zend-locale

我正在寻找一种方法来为我的ZF2应用程序添加翻译,在我的URL中使用全局变量。 无论如何都要立即为整个应用程序执行此操作吗?

一个错误的网址如下所示:http://domain.com/en_GB/user/index

第一部分(en_GB)应该用于显示正确的翻译。

除此之外,如果可以将此路由器部分设置为可选,那将是很好的。 因此,如果我应该http://domain.com/user/index(没有区域设置部分)到我的应用程序,它应该自动采用浏览器区域设置。

我希望我足够清楚,如果这个问题需要任何补充,请随时提出。

提前完成

2 个答案:

答案 0 :(得分:1)

@DrBeza,

感谢您的回答。我不知道这是否正确,但我创建了下一个解决方案:

在/config/global.php中我添加了这部分

'translator' => array(
        'locale' => 'nl_NL',        
        'translation_file_patterns' => array(
            array(
                'type'     => 'phpArray',
                'base_dir' => __DIR__ . '/../../language',
                'pattern'  => '%s.php',
            ),
        ),
    ),
/ podule/[modulename]/config/module.config.php中的

我添加了这部分来设置包含语言环境的URL的第一部分

'router' => array(
        'routes' => array(
            'user' => array(
                'options' => array(
                    'route'    => '[/:lang]/user[/:action][/:id]',
                    'constraints' => array(
                        'lang'  => '([a-z]{2})+(_)+([A-Z]{2})',
                    ),
                ),
            ),
        ),
    ),

在/config/local.php中我添加了此代码以从URL中获取区域设置:

http://domain.com/ [区域] [模块] [控制器]

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segment = explode('/', $_SERVER['REQUEST_URI_PATH']);

我添加了这部分动态加载语言环境:

return array(
   'translator' => array(
   'locale' => $segment[1],
);

答案 1 :(得分:0)

我建议扩展Segment路由类并添加可选的语言环境约束和段部分(如果缺少)。在应用程序范围内调用可选变量,例如'locale'。

然后在主模块引导程序中创建一个'route'事件,一旦路由匹配,该事件将触发。触发的回调函数将通过传递的事件访问RouteMatch对象,从而可以访问“locale”值。然后,您可以执行一些检查并设置应用程序区域设置。