Symfony - Интернационализация
Internationalization (i18n) и Localization (l10n)помочь увеличить охват клиентов веб-приложения. Symfony предоставляет для этой цели отличный компонент перевода. Давайте узнаем, как использовать компонент перевода в этой главе.
Включить перевод
По умолчанию веб-фреймворк Symfony отключает компонент перевода. Чтобы включить его, добавьте раздел переводчика в файл конфигурации app / config / config.yml.
framework: translator: { fallbacks: [en] }Файл перевода
Компонент перевода переводит текст, используя файл ресурсов перевода. Файл ресурсов может быть написан на PHP, XML и YAML. Расположение файла ресурсов по умолчанию:app/Resources/translations. Для каждого языка требуется один файл ресурсов. Напишем файл ресурсов,messages.fr.yml для французского языка.
I love Symfony: J'aime Symfony 
I love %name%: J'aime %name%Текст слева на английском языке, а текст справа на французском языке. Вторая строка показывает использование заполнителя. Информация-заполнитель может добавляться динамически при использовании перевода.
Применение
По умолчанию языковой стандарт по умолчанию для системы пользователя будет установлен веб-фреймворком Symfony. Если языковой стандарт по умолчанию не настроен в веб-приложении, он вернется к английскому языку. Языковой стандарт также можно указать в URL-адресе веб-страницы.
http://www.somedomain.com/en/index 
http://www.somedomain.com/fr/indexДавайте использовать в нашем примере локаль на основе URL-адресов, чтобы легко понять концепцию перевода. Создайте новую функцию,translationSample с маршрутом /{_locale}/translation/sampleв DefaultController (src / AppBundle / Controller / DefaultController.php). {_locale} - это специальное ключевое слово в Symfony для определения локали по умолчанию.
/** 
   * @Route("/{_locale}/translation/sample", name="translation_sample") 
*/ 
public function translationSample() { 
   $translated = $this->get('translator')->trans('I love Symfony'); 
   return new Response($translated); 
}Здесь мы использовали метод перевода, trans, который переводит содержимое в текущий языковой стандарт. В этом случае текущая локаль - это первая часть URL-адреса. Теперь запустите приложение и загрузите страницу,http://localhost:8000/en/translation/sample в браузере.
Результатом будет «Я люблю Symfony» на английском языке. Теперь загрузите страницуhttp://localhost:8000/fr/translation/sampleв браузере. Теперь текст будет переведен на французский следующим образом.
 
                Точно так же шаблон веточки имеет {% trans %}блок, чтобы включить функцию перевода также в представлениях. Чтобы проверить это, добавьте новую функцию,translationTwigSample и соответствующий вид на app/Resources/views/translate/index.html.twig.
/** 
   * @Route("/{_locale}/translation/twigsample", name="translation_twig_sample") 
*/ 
public function translationTwigSample() { 
   return $this->render('translate/index.html.twig'); 
}Посмотреть
{% extends 'base.html.twig' %}  
{% block body %} 
   {% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %} 
{% endblock %}Здесь блок trans также указывает местозаполнитель. Результат страницы следующий.
