Documentação do Symfony
Renderizada do repositório symfony-docs-pt-BR no Github

Internacionalização

Internacionalização e localização adaptam as aplicações e seus conteúdos para a região ou idioma específico dos usuários. No Symfony, esse é um recurso opt-in que precisa ser ativado antes de utilizar. Para fazer isso, remova o comentário da da configuração translator seguinte e defina a localidade da sua aplicação:

# app/config/config.yml
framework:
    # ...
    translator: { fallback: "%locale%" }

# app/config/parameters.yml
parameters:
    # ...
    locale:     en

Formato do Arquivo Origem de Tradução

O componente Translation do Symfony suporta vários formatos diferentes de tradução: PHP, Qt, .po, .mo, JSON, CSV, INI, etc.

De todos os formatos de tradução disponíveis, apenas o XLIFF e o gettext possuem amplo suporte nas ferramentas usadas por tradutores profissionais. E, uma vez que ele possui base no XML, você pode validar o conteúdo do arquivo XLIFF enquanto você o escreve.

O Symfony 2.6 adicionou suporte para notas dentro dos arquivos XLIFF, tornando-os mais user-friendly para os tradutores. No final, boas traduções tratam de contexto, e essas notas XLIFF permitem definir esse contexto.

Tip

O JMSTranslationBundle, com licença Apache, oferece uma interface web para visualizar e editar esses arquivos de tradução. Ele também tem extratores avançados que podem ler o seu projeto e atualizar automaticamente os arquivos XLIFF.

Localização do Arquivo Origem de Tradução

Tradicionalmente, os desenvolvedores Symfony criavam esses arquivos no diretório Resources/translations/ de cada bundle.

Mas, uma vez que o diretório app/Resources/ é considerado a localização global para os recursos da aplicação, armazenar as traduções no app/Resources/translations/ centraliza elas e lhes fornece prioridade sobre qualquer outro arquivo de tradução. Isso permite que você sobrescreva traduções definidas em bundles de terceiros.

Chaves de Tradução

Usar chaves simplifica o gerenciamento dos arquivos de tradução, porque você pode alterar o conteúdo original sem ter que atualizar todos os arquivo de tradução.

As chaves devem sempre descrever seu propósito e não sua localização. Por exemplo, se um formulário tem um campo com a label “Username”, então uma boa chave seria label.username e não edit_form.label.username.

Exemplo de Arquivo de Tradução

Aplicando todas as melhores práticas anteriores, o arquivo de tradução exemplo para Inglês na aplicação seria:

<!-- app/Resources/translations/messages.en.xliff -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" target-language="en" datatype="plaintext">
        <body>
            <trans-unit id="1">
                <source>title.post_list</source>
                <target>Post List</target>
            </trans-unit>
        </body>
    </file>
</xliff>