Учебники

Symfony — Интернационализация

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

Я люблю Symfony

Аналогично, шаблон ветки имеет блок {% 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 также указывает местозаполнитель. Результат страницы следующий.