libra / libra-locale
Zend Framework 2 地区模块。它可以检测各个模块的地区设置,并将参数 'locale' 传递给其控制器
Requires
- php: >=5.3.3
- libra/libra-module-manager: 1.*
- zendframework/zend-i18n: 2.*
- zendframework/zend-mvc: 2.*
README
#Libra Locale Module
##描述 此模块为您的模块添加地区支持。它还设置全局默认地区。它使应用程序地区感知,添加了类似于通常使用的 en、fr、ru 这样的地区别名,而不是像 en-US.UTF8、en-GB 等这样的长地区标签。
####注意!您可以将此模块轻松添加到项目中作为 LibraLocale,它保留默认别名的路径,并使用相同的方式进行任何操作。
##使用方法 要启用地区,请将模块添加到应用程序配置中。要为任何模块禁用地区行为,请将 disable_locale => true 参数添加到模块根级别路由的路由选项中
'router' => array(
'routes' => array(
'application' => array(
'type' => 'Segment',
'options' => array(
'route' => '/application',
'disable_locale' => true,
'constraints' => array(
'alias' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
....
),
'may_terminate' => true,
'child_routes' => array(
....
)
)
),
....
之后,您可以通过 RouteMatch 参数获取地区别名。在控制器中通过代码
$locale = $this->params('locale');
//or
$locale = $this->getEvent()->getRouteMatch()->getParam('locale');
它有一个切换器,通过路由参数 'to' 使用地区别名
echo $this->url('libra-locale/switch', array(), array('query' => array('to' => 'en')));
echo $this->url('libra-locale/switch', array(), array('query' => array('to' => 'ru')));
echo $this->url('libra-locale/switch', array(), array('query' => array('to' => 'fr')));
####检查地区是否启用 要禁用地区,您可以
- 取消注释路由中的 locale_aware 选项。它应假定对启用模块的 '*' 或 'All' 地区有效。
- 禁用 LibraLocale 模块。
然后,要检查应用程序是否支持地区,请使用
if (\LibraModuleManager\Module::isModulePresent('LibraLocale')) {
//put code here
}
注意:我刚刚意识到,可能需要在配置中添加一个标志而不是禁用模块。将在有需求时实现。
感谢使用此模块。
##安装 它可以通过 composer 包 libra/libra-locale 获取。
- 在 composer.json 的 required 列表中添加:
"libra/libra-locale": "~0.3.0"
- 在 config/application.config.php 的模块数组中启用模块,添加行:
'LibraLocale',
- 将
vendor/libra/libra-locale/config/libra-locale.global.php.dist
复制到config/autoload/libra-locale.global.php
- 如上所述,为希望启用的模块启用它。
##变更日志 #####0.5.0 经过一些经验,我决定将默认地区路径设置为 '/' 而不是 '/locale/',因为默认地区很少更改。如果您的地区扩展语言子标签如 en-US 和 en-GB,则页面可能会重复 - 将几乎相同。因此,搜索引擎应将其识别为不同地区中的相同文本(希望在未来是这样)。已添加配置参数以设置重定向行为。由于 (http://www.w3.org/International/articles/language-tags/) 和 (http://en.wikipedia.org/wiki/IETF_language_tag) 和 (http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html) 的新标准,保留了连字符分隔符(而不是下划线)。在 '/' 上的默认地区将使在没有地区的情况下添加地区到项目中更加顺畅。
BC更改
- 通过启用此模块,地区将被添加到所有 http 路由中。要禁用它,请将 'disable_locale' => true, 参数添加到自定义路由中。
使用
- 通过 \Locale::getDefault(); 获取当前地区
- 在控制器动作中通过 $this->params('locale'); 获取当前地区别名。或者通过 \LibraLocale\Module::$alias;
- 通过 \LibraLocale\Module::getLocales() 获取可用和允许的别名和地区的列表
添加
标志 redirect_from_locale_tag 允许从地区标签到别名的重定向。现在它将接受几乎未知的别名。默认值为 false,但为了 BC,libra-cms 全局变量中的默认值直到版本 0.6.0 将为 true。
要通过导航助手获取正确的链接,请在页面中使用类型 LibraLocale\Navigation\Page\Uri 和 LibraLocale\Navigation\Page\Mvc。或者使用页面类型 === null 以及服务容器 - LibraLocale\Navigation\Service\DefaultNavigationFactory。这可以通过在 application.config.php 文件中的 'service_manager' 数组行中添加来实现。
'Navigation' => 'LibraLocale\Navigation\Service\DefaultNavigationFactory',