pmaxs/silex-locale

Silex 服务提供者,通过 URL 调整地区/语言

2.1.0 2016-10-14 21:05 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:58:44 UTC


README

Silex 服务提供者,通过 URL 调整地区/语言。

安装

composer require pmaxs/silex-locale "^1.0" # for silex v1.x
composer require pmaxs/silex-locale "^2.0" # for silex v2.x

选项

  • locale.locales - 可用地区
  • locale.default_locale - 默认地区
  • locale.resolve_by_host - 从主机名解析地区
  • locale.exclude_routes - 应该排除的路线(服务路线)

URLs

  • locale.resolve_by_host = 0
  • 默认地区: scheme://host/...
  • 非默认地区: scheme://host/{{locale}}/...
  • locale.resolve_by_host = 1
  • 默认地区: scheme://host/...
  • 非默认地区: scheme://{{locale}}.host/...

加载提供者

silex v1.x

$app->register(new Pmaxs\Silex\Locale\Provider\LocaleServiceProvider(), [
    'locale.locales' => ['en', 'ru', 'es'],
    'locale.default_locale' => 'en',
    'locale.resolve_by_host' => false,
    'locale.exclude_routes' => ['^_'],
]);

silex v2.x

$app->register(new Pmaxs\Silex\Locale\Provider\LocaleServiceProvider(), [
    'locale.locales' => ['en', 'ru', 'es'],
    'locale.default_locale' => 'en',
    'locale.resolve_by_host' => false,
    'locale.exclude_routes' => ['^_'],
]);

$app->register(new Silex\Provider\LocaleServiceProvider(), [
]);

使用

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

require '../vendor/autoload.php';

$app = new \Silex\Application();

$app->register(new \Silex\Provider\LocaleServiceProvider());
$app->register(new \Silex\Provider\TranslationServiceProvider());
$app->register(new \Pmaxs\Silex\Locale\Provider\LocaleServiceProvider(), [
    'locale.locales' => ['en', 'ru', 'es'],
    'locale.default_locale' => 'en',
    'locale.resolve_by_host' => false,
    'locale.exclude_routes' => ['^_']
]);

// will be accessible by urls `/`, `/en/`, `/ru/`, `/es/`
$app->get('/', function (Request $request) use ($app) {
    return new Response('index ' . $request->getLocale());
})->bind('index');

// will be accessible by urls `/test/123`, `/en/test/123`, `/ru/test/123`, `/es/test/123`
$app->get('/test/{var}', function(Request $request) use ($app) {
    return new Response('test ' . $request->getLocale() . ' ' . $request->get('var'));
})->bind('test');

URL 生成

  • 索引 URL
    • 当前地区
      • php: $app['locale.url_generator']->getIndexUrl()
      • twig: locale_get_index_url()
    • 任何地区
      • php: $app['locale.url_generator']->getIndexUrlForLocale('es')
      • twig: locale_get_index_url_for_locale('es')
  • 其他 URL
    • 当前地区
      • php: 标准的 Silex URL 生成机制 $app['url_generator']->generate(...)
      • twig: 标准的 Twig URL 生成机制 path(...)
    • 任何地区
      • php: $app['locale.url_generator']->generate('es', $name, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
      • twig: locale_generate('es', $name, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)