Интернационализация (i18n) и локализация (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 также указывает местозаполнитель. Результат страницы следующий.