Django: Um Guia Rápido para Internacionalização

A tradução de um aplicativo em diferentes idiomas e sua localização é algo com o qual todos os desenvolvedores precisam lidar. O material, cuja tradução publicamos hoje, fornece um breve guia sobre a internacionalização de aplicativos Django.

Parte do que será discutido aqui se aplica à localização de qualquer projeto Python. Depois de examinar o básico, falaremos sobre a aceleração dos esforços de internacionalização. Em particular, sobre o uso da plataforma Phrase . Supõe-se que o leitor deste material tenha um aplicativo Django em funcionamento e que ele tenha um pacote instalado (você pode instalá-lo, por exemplo, com um comando ). Se você nunca usou o Django (a popular estrutura da Web baseada em Python) antes, pode ser útil dar uma olhada nisso primeiro.



gettextpip install gettextguia oficial e, em seguida, retorne a este artigo.

Configurações básicas do ambiente de trabalho


Então, suponha que você tenha um projeto Django mysitee um aplicativo chamado polls. A estrutura do projeto deve se parecer com isso:

/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

A primeira etapa do nosso trabalho é verificar se a opção de internacionalização está ativada na configuração do projeto. Para fazer isso, você precisa fazer as seguintes alterações em mysite/settings.py:

# mysite/settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

Internacionalização de modelos


Agora você precisa marcar todas as linhas que devem ser traduzidas para diferentes idiomas. Suponha que você tenha o seguinte arquivo de modelo polls/templates/polls/index.html:

<!-- polls/templates/polls/index.html -->
<h1>Welcome to our site!</h1>
<p>Here you find polls.</p>

Este arquivo precisa ser processado da seguinte maneira:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

Aqui importamos um pacote para localização e substituímos todo o texto pelas construções de exibição trans 'SomeTranslationKeyName'. Além disso, como alternativa a essa abordagem, você pode usar os textos de tradução usados ​​por padrão na forma de chaves de tradução. Com essa abordagem, você sempre terá um bom texto padrão se não houver tradução disponível para uma determinada chave.

Internacionalização em código Python


Se você deseja localizar seqüências de caracteres dentro do código Python (por exemplo, em um arquivo polls/views.py), é necessário importar a função para o arquivo ugettext. Para ela, o que é bastante normal, você pode atribuir um alias _. Aqui está a aparência de uma versão localizada de uma função simples de um arquivo views.py:

# polls/views.py
from django.http import HttpResponse
from django.utils.translation import ugettext as _
def index(request):
    output = _('StatusMsg')
    return HttpResponse(output)

Criando arquivos de tradução


Agora, precisamos criar arquivos de tradução para cada configuração de idioma que desejamos oferecer suporte. Para fazer isso, crie um diretório polls/localee pollsexecute o seguinte comando no diretório :

django-admin makemessage -l de

Aqui devocê pode substituir o código de localidade pelo idioma que você planeja adicionar ao aplicativo. Em nosso exemplo, a execução deste comando levará à criação de um gettextarquivo-com o polls/locale/de/LC_MESSAGES/django.poseguinte conteúdo:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr ""
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr ""

Agora você pode inserir feeds de linha neste arquivo:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr "Willkommen auf unserer Seite!"
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr "Hier findet Ihr Umfragen."

Quando a tradução estiver pronta, você precisará compilar tudo executando o seguinte comando:

$ django-admin compilemessages

Executar este comando novamente, no diretório polls.

Para verificar rapidamente a operacionalidade da tradução, você precisa alterar o código do idioma no arquivo mysite/settings.py. Por exemplo, assim:

# mysite/settings.py
LANGUAGE_CODE = 'de'

Se você abrir o aplicativo em um navegador, ele deverá ser traduzido para o alemão.

Acelere a localização de aplicativos usando Phrase


Se você usa o Phrase para organizar o trabalho em aplicativos de localização, realmente não precisa criar e editar manualmente os arquivos * .po! Você só precisa criar e transferir as chaves WelcomeHeadinge WelcomeMessagena frase e usar a função de exportação para baixar os arquivos * .po.

Se você possui nossa ferramenta de linha de comando instalada Phrase Client, seu trabalho é ainda mais simplificado. É suficiente criar um arquivo de configuração no diretório raiz do projeto .phraseapp.ymlcom o seguinte conteúdo:

# .phraseapp.yml
phraseapp:
  access_token: <your access token>
  project_id: <your project's id on PhraseApp>
  file_format: po
  pull:
    targets:
        file: "polls/locale/<locale_code>/LC_MESSAGES/django.po

Então você precisa executar o seguinte comando no diretório raiz do projeto:

phraseapp pull && django-admin compilemessages

Graças a isso, todas as traduções do projeto serão atualizadas.

Além disso, o uso do nosso Editor de Contexto no seu projeto Django pode simplificar ainda mais o trabalho . Para fazer isso, basta instalar django-phraseusando pip:

pip install django-phrase

Em seguida, edite os modelos ao trabalhar com o qual planeja usar In-Context-Editor:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
{% load phrase_i18n %}
{% phrase_javascript %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

Observe que o carregamento phrase_i18ndeve ser feito depois i18n.

Por fim, adicione o seguinte ao arquivo de configuração:

# mysite/settings.py
PHRASE_ENABLED = True
PHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'
PHRASE_PREFIX = '{{__'
PHRASE_SUFFIX = '__}}'

Depois disso, tudo estará pronto para ir.

Seleção de localidade


Normalmente, os desenvolvedores de aplicativos definem localidades com base nas configurações do navegador do usuário. Para fazer isso, você precisa trazer o arquivo mysite/settings.pypara o seguinte formulário:

# mysite/settings.py
from django.utils.translation import ugettext_lazy as _
...
MIDDLEWARE_CLASSES = (
    ...,
    'django.middleware.locale.LocaleMiddleware',
    ...,
)
...
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
    ('en-us', _('English')),
    ('de', _('German')),
)

Com essa abordagem, se o usuário tiver um código de idioma German, ele verá uma opção de tradução de. Caso contrário, a tradução padrão será usada en-us. Você pode verificar a operação correta desse mecanismo usando curl:

curl http://localhost:8000/polls -H "Accept-Language: de"

Este comando deve retornar algo como o seguinte:

<h1>Willkommen auf unserer Seite!</h1>
<p>Hier findet Ihr Umfragen.</p>

Sumário


Neste artigo, examinamos o básico da internacionalização de aplicativos Django. Aqui falamos sobre o serviço Phrase, que é capaz de acelerar e simplificar o trabalho. Esperamos que o que você aprendeu seja útil para você.

Queridos leitores! Como você aborda a internacionalização de seus projetos em Python?


All Articles