instaclick / locale-bundle
语言切换工具包
Requires
This package is not auto-updated.
Last update: 2024-09-14 12:55:23 UTC
README
该工具包目前处于重构状态。您可以通过查看PR #5的注释或Wiki来了解工具包将采取的方案。
您可以通过查看refactoring
分支来跟踪重构。master
分支是Symfony 2.0.*框架的最后一个稳定版本。
信息
此Symfony2工具包目前由3个部分组成
- 请求事件监听器,用于设置语言
- 控制器/路由,用于实际的“切换语言”操作
- 一个Twig插件,用于显示可用的语言(来自Craue/TwigExtensionsBundle的分支)
1. 请求事件监听器(Listener/LocaleDetectorListener.php)
监听器使用$request->getPreferredLanguage()
和$request->getLanguages()
方法,这些方法收集有关浏览器语言的信息(见http://en.wikipedia.org/wiki/Content_negotiation)。
监听器还会检查allowed_language
列表,以确保应用程序的区域设置只会设置为允许的区域/语言。
在识别区域后,它将被保存在会话中,因为我们只希望每个用户只进行一次区域查找,而不是每次页面请求都进行。
如果用户手动更改语言(使用此工具包中的“切换语言”操作),则应用程序将锁定到该语言。
此外,还会设置一个包含用户选择语言的cookie。(针对回头客)
如果您有一个注册用户的项目,您应该始终设置用户提供的语言和区域,例如,在登录后设置应用程序区域。
见:https://symfony.ac.cn/doc/2.0/book/translation.html
场景:浏览器未提供区域
如果没有从浏览器提供语言,则区域将设置为在app/config.yml
中定义的默认%locale%
。
场景:首选语言匹配
如果从$request->getPreferredLanguage()
获取的首选语言与在app/config.yml
中定义的allowed_languages
列表中的语言匹配,则应用程序区域将设置为首选区域。
示例:首选语言设置为'de_AT',监听器将检查主要语言(即'de'),并将其设置为'de_AT',因为我们还想使用/设置用户的区域。
场景:没有匹配的首选语言,但我们的allowed_languages列表中仍有匹配项
如果首选语言不匹配我们的任何allowed_languages
,则将从$request->getLanguages()
提供的语言中检查是否有匹配我们的任何allowed languages
,并将其设置为用户设置的第一个匹配的allowed_language
(最高优先级)。
示例
我们允许以下语言
- de
- en
- fr
首选语言设置为'ru_RU',但浏览器提供了额外的区域/语言
- ru
- da_DK
- da
- en_US
- en
- de_DE
- de
然后区域将设置为'en_US',因为它是第一个匹配的语言。它还提供了区域设置(美国),可用于格式化日期或使用该区域的货币。
2. "切换语言"的控制器/路由
此控制器允许用户手动选择语言。它还会检查预定义的可用语言,并将重定向到在app/config.yml
的switch_router:
部分中指定的目标。
3. 显示可用语言的Twig插件
本Twig扩展是从craue/TwigExtensionsBundle分支出来的。该插件在<li>
标签中显示允许的语言。
以下是在app/config.yml
部分中描述的选项。
已经为show_languagetitle
选项提供了一些翻译,欢迎您进行修正/添加翻译 :)
安装
1. 依赖项
[LuneticsLocaleBundle]
git=http://github.com/lunetics/LocaleBundle.git
target=bundles/Lunetics/LocaleBundle
(添加到依赖项文件并运行./bin/vendors install
)
2. AppKernel
将Bundle添加到您的应用程序的kernel中
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
//...
$bundles[] = new Lunetics\LocaleBundle\LuneticsLocaleBundle();
//...
}
3. 自动加载
将命名空间强伦
添加到自动加载器
$loader->registerNamespaces(array(
//...
'Lunetics\LocaleBundle' => __DIR__.'/../vendor/bundles'
//...
));
4. 配置设置。
编辑app/config.yml
文件并添加以下内容
lunetics_locale:
# Sets the Languages which are allowed
allowed_languages:
# Add Language 'de' (German)
- de
# Add Language 'en' (English)
- en
# Add Language 'fr' (French)
- fr
# Options for the Change Language Twig Extension
change_language:
# Show The Language in their native Language (e.g. Deutsch / English / Français )
# Default setting is set to false
show_foreign_languagenames: true
# Force Uppercase of the Languagenames
# Default setting is set to false
show_first_uppercase: true
# Adds an additional block / title ( Sprache ändern / Change Language / Changer la langue )
# Default setting is set to false
show_languagetitle: true
switch_router:
# Redirect to referrer after changing the language
# Default setting is set to true
use_referrer: true
# Redirect to a custom Route after changing the language.
# use_referrer must be set to false
redirect_to_route: "MyBundle_homepage"
# Redirect to a custom url after changing the language.
# use_refferer must be set to false and redirect_to_route not be set
redirect_to_url: "/"
5. 添加语言切换器的路由
如果您想使用包含的语言切换器,您必须将其添加到您的app/config/routing.yml
文件中
LuneticsLocaleBundle:
resource: "@LuneticsLocaleBundle/Resources/config/routing.yml"
prefix: /