twi / multi-domain-locale-bundle
symfony2的简单地区包
dev-master / 1.0.x-dev
2014-02-03 12:35 UTC
Requires
- php: >=5.3.0
- symfony/framework-bundle: ~2.1
Requires (Dev)
- sensio/framework-extra-bundle: <2.1.5
- symfony/browser-kit: <2.1.5
- symfony/class-loader: <2.1.5
- symfony/css-selector: <2.1.5
- symfony/finder: <2.1.5
- symfony/form: <2.1.5
- symfony/framework-bundle: <2.1.5
- symfony/http-foundation: <2.1.5
- symfony/http-kernel: <2.1.5
- symfony/process: <2.1.5
- symfony/routing: <2.1.5
- symfony/twig-bundle: <2.1.5
- symfony/validator: <2.1.5
- symfony/yaml: <2.1.5
This package is not auto-updated.
Last update: 2024-09-28 15:43:18 UTC
README
一般
为什么还需要另一个地区包?这是一个好问题。
我们使用不同的方法(jms i18n bundle,lunatics ...)最终使我们的地区配置上线,但最后我们总是遇到一些未包含的需求问题。
如果你...
- 正在使用结合语言和国家代码的地区:de_DE, fr_FR, de_CH
- 有不同域名(mycompany.de, mycompany.ch, mycompany.fr)
- 只想为某些域名允许某些地区(例如. de => de_DE;. ch => de_CH, fr_CH, it_CH;. fr => fr_FR)
- 不想使用cookie来存储地区设置
安装
MultiDomainLocaleBundle的安装非常直接。只需将以下内容添加到您的composer.json中
// composer.json
{
// ...
require: {
// ...
"twi/multi-domain-locale-bundle": "1.0.*@dev"
}
}
使用composer update更新您的lib
php composer.phar update
将bundle添加到您的AppKernel
<?php
// in AppKernel::registerBundles()
$bundles = array(
// ...
new TWI\MultiDomainLocaleBundle\TWIMultiDomainLocaleBundle(),
// ...
);
安装已完成。但您需要在它真正工作之前配置一些内容。
配置
首先,整个配置,解释在行内
# locale type select either long (like de_DE) or short (like de)
locale_type: long
# all allowed locales, new locales MUST be defined here!!!
locales_allowed: de_DE|en_GB|de_CH|fr_FR # mandatory, list all supported locales for your site
# specify which locale is allowed in which country by top level domain
localesByCountry: # mandatory
ch: # top level domain
name: Switzerland # Name of Country
locales: [de_CH, fr_FR, en_GB] # Allowed locales for this domain
default_locale: de_CH # Fallback locale if none or unknown locale is given
de:
name: Germany
locales: [de_DE, en_GB]
default_locale: de_DE
#add more countries here
# default, is only for dev environments without a valid top level domain
default: # mandatory
name: Germany
locales: [de_DE, en_GB]
default_locale: de_DE
# Config data for locales, important for language dropdown menu
locales_config: # mandatory
de_DE:
image: de.gif
label: Deutsch
de_CH:
image: de_ch.gif
label: Deutsch (Schweiz)
fr_FR:
image: fr.gif
label: Français
en_GB:
image: en.gif
label: English
# Whitelist of routes, where locale validation is activated
include_paths: # mandatory
- /demo
- /user
# Optional stuff, you can easily overwrite if necessary
# Regular Expression to find a locale pattern like 'de_DE' or 'de' within a string (url)
regex_locale_long: |\/(?P<locale>[a-z]{2}_[A-Z]{2})\/|
regex_locale_short: |\/(?P<locale>[a-z]{2})\/|
# Cookie name for user locale
cookie_name: tl # optional
在路由中,在所有必要的路由前添加/{_locale}
login_check:
pattern: /{_locale}/login_check
requirements:
_locale: %locales_allowed%
TWIG
如果您需要访问特定域的所有可用地区,您可以在任何TWIG模板中通过添加以下内容来访问地区项目服务:
twig:
globals:
locales: @parku.twig.locale
在TWIG中,您可以通过调用locales.getItems来访问结果数组。根据您的参数设置(请更详细地查看locales_config),您可以更改对应地区的图像文件名和标签。
<ul>
{% for item in locales.getItems %}
<li>
<a href="{{ path(app.request.attributes.get("_route"), (app.request.attributes.get('_route_params') ?: [])|merge({"_locale": item.key })) }}">
<img src="/img/flags/{{ item.image }}"><span>{{ item.label }}</span>
</a>
</li>
{% endfor %}
</ul>