Skip to content

Internationalization Guide [PT BR]

Gustavo edited this page Dec 10, 2016 · 9 revisions

A internacionalização do Amadeus permite que o mesmo conteúdo seja disponibilizado em diferentes línguas e formatos de acordo com a preferência do usuário, sem a necessidade de reestruturar ou reescrever a aplicação.

É importante entender que o Amadeus reproduz o conteúdo de acordo com a configuração do navegador. Na ausência de tradução, o conteúdo será fornecido por padrão em inglês.

Dependências

Para utilizar a internacionalização, é necessário adicionar rótulos aos códigos em Python e nos templates. Estes rótulos irão demarcar os textos que devem ser traduzidos ou não.

Uma vez rotulado, é possível gerar arquivos de tradução. Esses arquivos permitem que tradutores preencham com a tradução adequada para cada campo.

O sistema de internacionalização está ativo por padrão. Em caso de otimizações, é possível desativá-lo no arquivo /amadeuslms/amadeus/settings.py e modificar para USE_I18N = False

Como usar

  • Adicionando rótulos ao código em Python

Para demarcar que texto deve ser traduzido no código Python, é utilizado a função ugettext_lazy , importada do django.utils.translation. É uma prática comum utilizar o alias _ ao importar para facilitar a escrita. O ugettext_lazy pode ser utilizada para traduzir constantes e variáveis tanto em models, quanto em views, como no exemplo a seguir:

1 from django.db import models
2 from django.utils.translation import ugettext_lazy as _
3 
4 class MyThing(models.Model):
5     name = models.CharField(help_text=_('This is the help text'))
  • Adicionando rótulos ao template

Os templates são marcados através de template tags. A primeira template tag é {% load i18n %} e deve ser inserida no topo de cada template o qual deve ser traduzido, ainda que esse template herde de um template que já possua a tag.

Em seguida, cada termo que deve ser traduzido deve possuir a template tag {% trans %}, como por exemplo:

1 <title>{% trans "This is the title." %}</title>
2 <title>{% trans myvar %}</title>

A template tag {% trans %} pode ser inserida em valores constantes ou variáveis.

  • Gerando arquivos de tradução

Para gerar os arquivos de tradução, basta executar através do diretório raíz o comando:

$ django-admin makemessages -l pt_BR

Onde "pt_BR" é a língua desejada para obter a tradução. Como resultado, será gerado dentro de cada app do Amadeus o arquivo locale/pt_BR/LC_MESSAGES/django.po

  • Traduzindo

Cada arquivo locale/pt_BR/LC_MESSAGES/django.po contém um cabeçalho iniciado por '#', em seguida algumas informações sobre a versão do arquivo e do tradutor responsável. Por fim, cada linha contém a seguinte sequência:

1 #:origin directory
2 msgid:"Some phrase"
3 msgstr:""

Onde '#' corresponde ao local de origem do arquivo, msgid é a mensagem original a ser traduzida e msgstr é a tradução referente na aquela língua. Basta adicionar a tradução entre as aspas da linha 3.

  • Atualizando os arquivos de tradução

Caso sejam adicionados novos rótulos após gerado o arquivo inicial de tradução, é necessário executar o comando responsável por reexaminar todos códigos Python e Templates procurando por novos rótulos e atualizações:

$ django-admin makemessages -a
  • Concluindo o processo de tradução

Após concluídas todas modificações e edições, é necessário rodar o comando(dentro de cada app) responsável por compilar as mudanças realizadas de maneira a tornar mais eficiente o processo de tradução:

$ django-admin compilemessages

Depois desse processo, as traduções estão prontas para serem usadas!

Exemplo

1 # SOME DESCRIPTIVE TITLE.
2 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5 #
6 #, fuzzy
7 msgid ""
8 msgstr ""
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2016-10-26 14:47-0300\n"
12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14 "Language-Team: LANGUAGE <[email protected]>\n"
15 "Language: \n"
16 "MIME-Version: 1.0\n"
17 "Content-Type: text/plain; charset=UTF-8\n"
18 "Content-Transfer-Encoding: 8bit\n"
19 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
20 
21 #: files/forms.py:12 files/forms.py:29
22 msgid "File too large (Max 10MB)"
23 msgstr "Arquivo muito grande (máximo de 10MB)"
24 
25 #: files/models.py:20
26 msgid "Professors"
27 msgstr "Professores"
28 
29 #: files/models.py:21
30 msgid "Description"
31 msgstr "Descrição"
32 
33 #: files/models.py:22 files/models.py:27
34 msgid "File"
35 msgstr "Arquivo"
36 
37 #: files/models.py:23
38 msgid "Type file"
39 msgstr "Tipo de arquivo"
40 
41 #: files/models.py:28
42 msgid "Files"
43 msgstr "Arquivos"
44 
45 #: files/templates/files/create_file.html:10
46 msgid "Add File"
47 msgstr "Adicionar arquivo"
48 
49 #: files/templates/files/create_file.html:38
50 #: files/templates/files/update_file.html:40
51 msgid "Choose your file..."
52 msgstr "Escolha seu arquivo..."
53 
54 #: files/templates/files/create_file.html:68
55 #: files/templates/files/update_file.html:73
56 msgid "The file size shouldnt exceed 10MB"
57 msgstr "O tamanho máximo não pode exceder 10MB"
58 
59 #: files/templates/files/create_file.html:74
60 #: files/templates/files/delete_file.html:34
61 #: files/templates/files/update_file.html:79
62 msgid "Close"
63 msgstr "Fechar"
64 
65 #: files/templates/files/create_file.html:75
66 #: files/templates/files/update_file.html:80
67 msgid "Submit"
68 msgstr "Enviar"
69 
70 #: files/templates/files/delete_file.html:12
71 msgid "Delete File"
72 msgstr "Deletar arquivo"
73 
74 #: files/templates/files/delete_file.html:30
75 msgid "Are you sure to delete "
76 msgstr "Tem certeza que deseja deletar "
77 
78 #: files/templates/files/delete_file.html:35
79 msgid "Delete"
80 msgstr "Deletar"
81 
82 #: files/templates/files/update_file.html:12
83 msgid "Edit File"
84 msgstr "Editar arquivo"
85 
86 #: files/templates/files/update_file.html:48
87 msgid "See current file"
88 msgstr "Visualizar arquivo atual"