Symfony - Uluslararasılaştırma
Internationalization (i18n) ve Localization (l10n)bir web uygulamasının müşteri kapsamını artırmaya yardımcı olur. Symfony, bu amaç için mükemmel bir Çeviri bileşeni sağlar. Bu bölümde Çeviri bileşenini nasıl kullanacağımızı öğrenelim.
Çeviriyi Etkinleştir
Symfony web çerçevesi, Translation bileşenini varsayılan olarak devre dışı bırakır. Bunu etkinleştirmek için, app / config / config.yml yapılandırma dosyasına çevirmen bölümünü ekleyin.
framework: translator: { fallbacks: [en] }
Çeviri Dosyası
Çeviri bileşeni, çeviri kaynak dosyasını kullanarak metni çevirir. Kaynak dosyası PHP, XML ve YAML'de yazılabilir. Kaynak dosyasının varsayılan konumuapp/Resources/translations. Her dil için bir kaynak dosyasına ihtiyacı vardır. Bir kaynak dosyası yazalım,messages.fr.yml Fransız dili için.
I love Symfony: J'aime Symfony
I love %name%: J'aime %name%
Sol taraftaki metin İngilizce ve sağ taraftaki metin Fransızca'dır. İkinci satır, bir yer tutucunun kullanımını gösterir. Yer tutucu bilgileri çeviri kullanılırken dinamik olarak eklenebilir.
Kullanım
Varsayılan olarak, kullanıcının sisteminin varsayılan yerel ayarı Symfony web çerçevesi tarafından ayarlanacaktır. Varsayılan yerel ayar web uygulamasında yapılandırılmamışsa, İngilizceye dönecektir. Yerel ayar, web sayfasının URL'sinde de ayarlanabilir.
http://www.somedomain.com/en/index
http://www.somedomain.com/fr/index
Çeviri kavramını kolayca anlamak için örneğimizde URL tabanlı yerel ayarı kullanalım. Yeni bir işlev oluşturun,translationSample rota ile /{_locale}/translation/sampleDefaultController'da (src / AppBundle / Controller / DefaultController.php). {_locale}, Symfony'de varsayılan yerel ayarı belirtmek için özel bir anahtar kelimedir.
/**
* @Route("/{_locale}/translation/sample", name="translation_sample")
*/
public function translationSample() {
$translated = $this->get('translator')->trans('I love Symfony');
return new Response($translated);
}
Burada çeviri yöntemini kullandık, trans, içeriği geçerli yerel ayara çeviren. Bu durumda, mevcut yerel ayar, URL'nin ilk kısmıdır. Şimdi uygulamayı çalıştırın ve sayfayı yükleyin,http://localhost:8000/en/translation/sample tarayıcıda.
Sonuç, İngilizce dilinde "Symfony'yi seviyorum" olacak. Şimdi sayfayı yükleyinhttp://localhost:8000/fr/translation/sampletarayıcıda. Şimdi metin aşağıdaki gibi Fransızcaya çevrilecektir.
Benzer şekilde, dal şablonunda {% trans %}Görünümlerde de çeviri özelliğini etkinleştirmek için engelleyin. Kontrol etmek için yeni bir işlev ekleyin,translationTwigSample ve adresindeki ilgili görünüm 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');
}
Görünüm
{% extends 'base.html.twig' %}
{% block body %}
{% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %}
{% endblock %}
Burada, trans bloğu yer tutucuyu da belirtir. Sayfa sonucu aşağıdaki gibidir.