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.