我正在寻找一种方法来为我的ZF2应用程序添加翻译,在我的URL中使用全局变量。 无论如何都要立即为整个应用程序执行此操作吗?
一个错误的网址如下所示:http://domain.com/en_GB/user/index
第一部分(en_GB)应该用于显示正确的翻译。
除此之外,如果可以将此路由器部分设置为可选,那将是很好的。 因此,如果我应该http://domain.com/user/index(没有区域设置部分)到我的应用程序,它应该自动采用浏览器区域设置。
我希望我足够清楚,如果这个问题需要任何补充,请随时提出。
提前完成
答案 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”值。然后,您可以执行一些检查并设置应用程序区域设置。