Fork me on GitHub

Локализация

Для перевода приложения на разные языки в Silex используется провайдер TranslationServiceProvider. Этот провайдер устанавливает сервисы такие как translator, translator.loader, translator.message_selector которые используются для локализации приложения.

Silex использует Symfony2 Translation компонент. Подробности можно посмотреть здесь.

Конфигурация

Конфигурация провайдера задается в app/Resources/Config/config.yml файле.

Пример приведен ниже:

...
translation:
        class: Silex\Provider\TranslationServiceProvider
        parameters:
            locale_fallbacks: [en, ru]
            locale: %locale% 
...

Расширение функциональности сервиса локализации задается в действии _extendServices класса Bootstrap app/Bootstrap.php.

Пример приведен ниже:

...
//Extend translator
if (isset($app['translator']) AND $app['translator'] instanceof \Silex\Translator) {
    $app['translator'] = $app->share(
            $app->extend(
                    'translator', function (\Silex\Translator $translator, $app) {
                $translator->addLoader('yml', new Loader\YamlFileLoader());
                $translator->addResource('yml', BASEPATH . '/app/Resources/translations/messages.en.yml', 'en', 'messages');
                $translator->addResource('yml', BASEPATH . '/app/Resources/translations/messages.ru.yml', 'ru', 'messages');
                $translator->addResource('yml', BASEPATH . '/app/Resources/translations/Validators.en.yml', 'en', 'validators');
                $translator->addResource('yml', BASEPATH . '/app/Resources/translations/Validators.ru.yml', 'ru', 'validators');

                if ($app['session']->has('_locale')) {
                    $locale = $app['session']->get('_locale');
                    $translator->setLocale($locale);
                }
                return $translator;
            }
            )
    );
}
...

Здесь указаны какие файлы ресурсов использует переводчик. В нашем случае это yml файлы, которые находятся в директории app/Resources/translations/.

В файлеparameters.yml в параметре locale можно установить язык локализации по умолчанию.

Использование

Дополнительные функции для локализации приложения заданы в примеси app/Controllers/Helper/TranslateTrait.

В приложении сервис Translation можно использовать так:

$this->addFlash('info_message', $this->trans('added_new_message', array('' => $ormPost->getTitle())));

В шаблоне сервис Translation можно использовать так:

{ { 'edit'|trans|capitalize } }