Symfony - internacjonalizacja
Internationalization (i18n) i Localization (l10n)pomagają zwiększyć objęcie klientów aplikacją internetową. Symfony zapewnia doskonały komponent tłumaczeniowy do tego celu. Nauczmy się, jak korzystać z komponentu Tłumaczenie w tym rozdziale.
Włącz tłumaczenie
Domyślnie framework sieciowy Symfony wyłącza komponent Translation. Aby to włączyć, dodaj sekcję tłumacza w pliku konfiguracyjnym app / config / config.yml.
framework: translator: { fallbacks: [en] }
Plik tłumaczenia
Komponent tłumaczenia tłumaczy tekst przy użyciu pliku zasobów tłumaczeniowych. Plik zasobów może być napisany w PHP, XML i YAML. Domyślna lokalizacja pliku zasobów toapp/Resources/translations. Potrzebuje jednego pliku zasobów na język. Napiszmy plik zasobów,messages.fr.yml dla języka francuskiego.
I love Symfony: J'aime Symfony
I love %name%: J'aime %name%
Tekst po lewej stronie jest w języku angielskim, a tekst po prawej stronie w języku francuskim. Druga linia pokazuje użycie symbolu zastępczego. Informacje zastępcze można dodawać dynamicznie podczas korzystania z tłumaczenia.
Stosowanie
Domyślnie domyślne ustawienia regionalne systemu użytkownika zostaną ustawione przez framework sieciowy Symfony. Jeśli domyślne ustawienia regionalne nie są skonfigurowane w aplikacji internetowej, powrócą do języka angielskiego. Lokalizację można również ustawić w adresie URL strony internetowej.
http://www.somedomain.com/en/index
http://www.somedomain.com/fr/index
Użyjmy w naszym przykładzie ustawień regionalnych opartych na adresach URL, aby łatwo zrozumieć koncepcję tłumaczenia. Utwórz nową funkcję,translationSample z trasą /{_locale}/translation/samplew DefaultController (src / AppBundle / Controller / DefaultController.php). {_locale} jest specjalnym słowem kluczowym w Symfony do określenia domyślnych ustawień regionalnych.
/**
* @Route("/{_locale}/translation/sample", name="translation_sample")
*/
public function translationSample() {
$translated = $this->get('translator')->trans('I love Symfony');
return new Response($translated);
}
Tutaj użyliśmy metody tłumaczenia, trans, który tłumaczy treść na aktualne ustawienia regionalne. W tym przypadku bieżące ustawienia regionalne są pierwszą częścią adresu URL. Teraz uruchom aplikację i załaduj stronę,http://localhost:8000/en/translation/sample w przeglądarce.
Rezultatem będzie „I love Symfony” w języku angielskim. Teraz załaduj stronęhttp://localhost:8000/fr/translation/samplew przeglądarce. Teraz tekst zostanie przetłumaczony na francuski w następujący sposób.
Podobnie, szablon gałązki ma {% trans %}blok, aby włączyć funkcję tłumaczenia również w widokach. Aby to sprawdzić, dodaj nową funkcję,translationTwigSample i odpowiedni widok pod adresem 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');
}
Widok
{% extends 'base.html.twig' %}
{% block body %}
{% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %}
{% endblock %}
Tutaj blok trans określa również symbol zastępczy. Wynik strony jest następujący.