raindrop / locale-bundle
Raindrop Locale Symfony2 Bundle
Requires
- php: >=5.3.3
- symfony/framework-bundle: >=2.1,<2.3-dev
- symfony/locale: >=2.1,<2.3-dev
- symfony/validator: >=2.1,<2.3-dev
- symfony/yaml: >=2.1,<2.3-dev
Requires (Dev)
- ext-intl: *
- twig/twig: 1.*
Suggests
- ext-intl: Needed for displaying the countryname in the locale language
This package is not auto-updated.
Last update: 2024-09-14 13:30:42 UTC
README
此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_DE
和de
,而您只显式允许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
您可以通过在模板中调用twig函数来渲染默认的Locale切换器
{{ locale_switcher() }}