twi/multi-domain-locale-bundle

symfony2的简单地区包

dev-master / 1.0.x-dev 2014-02-03 12:35 UTC

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>