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.