libra/libra-locale

Zend Framework 2 地区模块。它可以检测各个模块的地区设置,并将参数 'locale' 传递给其控制器

0.6.1 2014-07-11 06:55 UTC

This package is not auto-updated.

Last update: 2024-09-14 12:29:20 UTC


README

#Libra Locale Module

##描述 此模块为您的模块添加地区支持。它还设置全局默认地区。它使应用程序地区感知,添加了类似于通常使用的 enfrru 这样的地区别名,而不是像 en-US.UTF8en-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\UriLibraLocale\Navigation\Page\Mvc。或者使用页面类型 === null 以及服务容器 - LibraLocale\Navigation\Service\DefaultNavigationFactory。这可以通过在 application.config.php 文件中的 'service_manager' 数组行中添加来实现。

            'Navigation' => 'LibraLocale\Navigation\Service\DefaultNavigationFactory',