Ir para o conteúdo

Suporte multilíngue

A pygeoapi suporta multilingualismo a três níveis:

  • Na configuração da pygeoapi pode fornecer títulos e resumos do serviço e coleções em múltiplas linguagens.
  • Um conjunto de strings de texto traduzíveis que são traduzidas e introduzidas como parte dos formatos de saída JSON e HTML. As traduções são geridas pela framework Babel
  • Nomes/valores de colunas em conjuntos de dados baseados em funcionalidades. Se um conjunto de dados contém colunas em múltiplas línguas, a pygeoapi tentará devolver respostas de dados na língua solicitada

Note

As mensagens de erro não são traduzidas, para facilitar copy-paste do erro para o stackoverflow e GitHub issues.

A negociação de língua é acionada pelo cabeçalho HTTP Accept-Language enviado pelo cliente, e pode sempre ser substituída com o parâmetro URL ?lang=fr.

Configuração multilíngue

Na configuração da pygeoapi podemos indicar as línguas suportadas pela instância. A primeira língua é a língua padrão. Para a maioria das propriedades de configuração textuais podemos fornecer uma tradução em línguas alternativas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
lakes:
  type: collection
  title:
      en: Large Lakes
      pt: Grandes Lagos
  description:
      en: lakes of the world, public domain
      pt: lagos do mundo, domínio público
  keywords:
      en:
          - lakes
          - water bodies
      pt:
          - lagos
          - corpos de água

Strings de texto dentro de templates HTML Jinja2

A maioria das strings de texto traduzíveis existe dentro dos templates HTML Jinja2. As strings de texto a serem traduzidas são colocadas numa tag trans, da seguinte forma:

1
<title>{% trans %}Page title{% endtrans %}</title>

O Babel fornece um utilitário que extrai todas as chaves a serem traduzidas dos templates para um único ficheiro .pot.

pybabel extract -F babel-mapping.ini -o locale/messages.pot ./

pybabel extract -F babel-mapping.ini -o locale/messages.pot ./

O ficheiro .pot resultante é usado para criar ou atualizar ficheiros .po existentes, que existem para cada língua, contendo as traduções atuais.

pybabel init -d locale -l it -i locale/messages.pot

pybabel init -d locale -l it -i locale/messages.pot

Os ficheiros .po são armazenados no repositório de código fonte da pygeoapi no GitHub. Pode criar um Pull Request para adicionar ou atualizar as suas linguagens favoritas. Os ficheiros .po também podem ser adicionados a software de tradução como transifex.com.

Editar um ficheiro .po

Abra um ficheiro .po da pasta locale num editor de texto. Edite alguns valores. Guarde o ficheiro e reinicie o serviço. Verifique se o conteúdo atualizado está disponível. Também pode tentar adicionar uma nova chave a um template e traduzi-la através do mecanismo .po.

Anotar a língua das colunas de dados

A pygeoapi inclui um mecanismo para influenciar as respostas da API baseado na língua solicitada. Se o nosso serviço opera com requisitos multilíngues, pode fazer sentido adicionar colunas textuais em múltiplas línguas. Por exemplo, na configuração da pygeoapi podemos então indicar qual coluna deve ser usada como o campo título, para qual língua.

Publicar um conjunto de dados multilíngue

Para este workshop, preparámos um conjunto de dados multilíngue de hotspots de wifi gratuitos em Florença (workshop/exercises/data/free-wifi-florence.csv). Vamos adicionar o conjunto de dados à configuração da pygeoapi usando o provedor CSV. Vamos adicionar uma configuração title-field com para cada coluna traduzida a língua relevante.

1
2
3
4
5
6
data: /data/free-wifi-florence.csv
id_field: id
title_field: 
  en: name-en
  it: name-it
  de: name-de

Vamos testar a configuração navegando para a página de itens da coleção e mudando a língua anexando ?lang=it, ?lang=de ao URL.

Resumo

Parabéns! Personalizámos a pygeoapi para suportar múltiplas línguas.