raindrop/locale-bundle

Raindrop Locale Symfony2 Bundle

安装: 164

依赖: 0

建议: 0

安全: 0

星标: 3

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

01.04.02 2013-03-01 11:20 UTC

README

Build Status

此bundle是从LuneticsLocaleBundle派生的,允许您从Symfony2应用程序中的不同参数中猜测Locale。

安装

将包添加到您的依赖中

"require": {
    "raindrop/locale-bundle": "dev-master",
    ....
},

在您的内核中注册bundle

public function registerBundles()
    {
        $bundles = array(
            // ...
            new Raindrop\LocaleBundle\RaindropLocaleBundle(),
        );

更新您的包

php composer.phar update raindrop/locale-bundle

配置

允许的应用程序Locale

您需要定义至少一个对您的应用程序有效的Locale

raindrop_locale:
  allowed_locales:
    - en
    - fr
    - de

严格模式

raindrop_locale:
  strict_mode: true # defaults to false

您可以启用strict_mode,此时只有完全匹配的允许Locale会被选中。例如

  • 如果您的用户浏览器Locale为de_DEde,而您只显式允许de,则将选择Localede
  • 如果您的用户浏览器Locale为de,而您只显式允许de_DE,则不会检测到任何Locale。

我们鼓励您使用非严格模式,这将为您选择用户最佳区域Locale。

猜测器

您需要激活并定义Locale猜测器的顺序。这在配置中一步完成

raindrop_locale:
  guessing_order:
    - session
    - cookie
    - browser
    - query
    - router

根据上述示例,猜测器将按照您定义的顺序调用,即1. session 2. cookie 2. router 3. browser。

注意,session和cookie猜测器仅检索路由器或浏览器猜测器之前识别并保存的Locale。

如果您在您的路由中使用了_locale参数作为属性/参数,您应该首先使用查询和路由猜测器。

raindrop_locale:
  guessing_order:
    - query
    - router
    - session
    - cookie
    - browser

Locale Cookies / Session

当您不在uri中使用Locale并且从用户浏览器首选项中猜测时,通常使用session和cookie猜测器。当这样做时,

session和/或cookie设置为第一个猜测器以避免在每个请求中尝试检测Locale。

Cookie

如果您使用cookie猜测器,它将自动从cookie中读取,并在Locale更改时(即使是从另一个猜测器)将更改写入cookie

raindrop_locale:
  cookie:
    set_on_change: true

这对于未注册和返回访客非常有用。

Session

session猜测器将自动将先前识别的Locale保存到session中,并从session中检索它。如果您不使用路由器猜测器,则此猜测器应在您的guessing_order配置中始终是第一个。

FilterLocaleSwitchEvent / LocaleUpdateListener

当您使用'session'或cookie猜测器时,LocaleGuesserManager会分发一个LocaleBundleEvents::onLocalChange。LocaleUpdateListeners检查Locale是否已更改,并更新session或cookie。

例如,如果您不使用路由/查询参数作为Locale,您可以为您自己的用户登录构建一个自己的监听器,该监听器分发一个LocaleBundleEvents::onLocalChange事件以设置用户的Locale。您只需使用FilterLocaleSwitchEvent并设置Locale即可。

$locale = $user->getLocale();
$localeSwitchEvent = new FilterLocaleSwitchEvent($locale);
$this->dispatcher->dispatch(LocaleBundleEvents::onLocaleChange, $localeSwitchEvent);

自定义猜测器

有关创建自己的猜测器的更多信息,请参阅此处

有关创建自定义Locale猜测器的完整文档

切换到另一个Locale

您可以通过在模板中调用twig函数来渲染默认的Locale切换器

{{ locale_switcher() }}

有关切换器的完整文档