instaclick/locale-bundle

语言切换工具包

安装: 962

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 17

分支: 76

类型:symfony-bundle

dev-master 2012-05-30 22:04 UTC

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个部分组成

  1. 请求事件监听器,用于设置语言
  2. 控制器/路由,用于实际的“切换语言”操作
  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.ymlswitch_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:   /