Symfony - Internacionalização
Internationalization (i18n) e Localization (l10n)ajudam a aumentar a cobertura do cliente de um aplicativo da web. Symfony fornece um excelente componente de tradução para este propósito. Vamos aprender como usar o componente Tradução neste capítulo.
Habilitar tradução
Por padrão, o framework web Symfony desabilita o componente Tradução. Para habilitá-lo, adicione a seção do tradutor no arquivo de configuração, app / config / config.yml.
framework: translator: { fallbacks: [en] }
Arquivo de Tradução
O componente de tradução traduz o texto usando o arquivo de recursos de tradução. O arquivo de recurso pode ser escrito em PHP, XML e YAML. A localização padrão do arquivo de recurso éapp/Resources/translations. Ele precisa de um arquivo de recurso por idioma. Vamos escrever um arquivo de recurso,messages.fr.yml para o idioma francês.
I love Symfony: J'aime Symfony
I love %name%: J'aime %name%
O texto do lado esquerdo está em inglês e o texto do lado direito está em francês. A segunda linha mostra o uso de um espaço reservado. As informações do espaço reservado podem ser adicionadas dinamicamente ao usar a tradução.
Uso
Por padrão, a localidade padrão do sistema do usuário será definida pela estrutura da web Symfony. Se a localidade padrão não estiver configurada no aplicativo da web, ele voltará para o inglês. O local também pode ser definido no URL da página da web.
http://www.somedomain.com/en/index
http://www.somedomain.com/fr/index
Vamos usar a localidade baseada em URL em nosso exemplo para entender facilmente o conceito de tradução. Crie uma nova função,translationSample com rota /{_locale}/translation/sampleem DefaultController (src / AppBundle / Controller / DefaultController.php). {_locale} é uma palavra-chave especial no Symfony para especificar o local padrão.
/**
* @Route("/{_locale}/translation/sample", name="translation_sample")
*/
public function translationSample() {
$translated = $this->get('translator')->trans('I love Symfony');
return new Response($translated);
}
Aqui, usamos o método de tradução, trans, que traduz o conteúdo para o local atual. Nesse caso, o local atual é a primeira parte da URL. Agora, execute o aplicativo e carregue a página,http://localhost:8000/en/translation/sample no navegador.
O resultado será "I love Symfony" em inglês. Agora, carregue a páginahttp://localhost:8000/fr/translation/sampleno navegador. Agora, o texto será traduzido para o francês da seguinte maneira.
Da mesma forma, o modelo twig tem {% trans %}bloco para habilitar o recurso de tradução nas visualizações também. Para verificar isso, adicione uma nova função,translationTwigSample e a visualização correspondente em 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');
}
Visão
{% extends 'base.html.twig' %}
{% block body %}
{% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %}
{% endblock %}
Aqui, o bloco trans especifica o espaço reservado também. O resultado da página é o seguinte.