Criar um site multilíngue

Introdução: o que é um site multilíngue?

A intenção desta matéria não é ser um tutorial completo sobre sites multilíngues: por um lado, há certamente muitas outras «visões» do que chamamos de «multilinguísmo»; por outro,
não temos ainda a perspectiva necessária para definir «o melhor método».

Você encontrará abaixo uma análise das diferentes ferramentas que o SPIP oferece para gerir sites multilíngues, cabe a si adotá-los, e vamos discutí-los nos espaços previstos para esse efeito (fórums, wiki, listas de discussão etc.)

Mas, antes de ler, afaste-se um pouco do seu projeto do dia e pense nas situações a seguir:
-  um site de poesias, classificadas por temas (seções);
-  um site de documentação para, por exemplo, um software como o SPIP;
-  um site institucional em 25 idiomas;
-  um site corporativo bilíngue;
-  o site de uma associação búlgara, com algumas páginasem inglês.

O site de poesia escolherá os seus idiomas, artigo a artigo; a documentação do SPIP, por seu lado, fivide-os por «setores« (seções de primeiro nível), e exibe as traduções disponíveis para cada matéria, quando essas traduções estão disponíveis. O site institucional em 25 idiomas não poderá, sem dúvida, fornecer as 25 traduções ao mesmo tempo, mas procurará ainda assim conservar hierarquias paralelas; o site corporativo bilíngue terá obrigatoriamente uma tradução correspondente a cada matéria, e uma hierarquia de seções em duas partes, sendo a parte em inglês «clonada» da parte em português; a associação búlgara dedicará um setor particular do seu site ao inglês, com os restantes setores todos em búlgaro (por padrão).

Princípio

Para possibilitar estas situações diferentes, e mesmo outras, o modelo adotado no SPIP consiste em determinar uma linkgua para cada matéria, cada seção e cada nota. No espaço público, como na área restrita, esse idioma determina o modo de correção tipográfica que é aplicado aos textos; no espaço público isso determina igualmente o idioma dos elementos inseridos pelo SPIP em volta desses «objetos»: datas e formulários principalmente.

Para criar um site multilíngue com o SPIP, é preciso primeiro configurar o site adequadamente: na configuração do site, na área «idiomas», claro. Lá, você poderá ativar a gestão do multilinguísmo e selecionar os idiomas que você usará no seu site.

Configurar a área restrita

Para gerir mais facilmente o site, pode-se escolher na configuração do site com que grau de precisão se realizará as definições de idioma, o que lhe permite ocultar a interface onde ela não é necessária e de limitar os riscos de erros [1]. O SPIP oferece três níveis de interface diferentes para selecionar os idiomas atribuídos às matérias (e notas etc.); por ordem crescente de complexidade:

-  Por setor (seção de primeiro nível): a cada setor do site atribui-se um idioma alterável pelos administradores, que afetará todas as suas subseções bem como as matérias e notas que lá serão publicadas; esta configuraçãodeverá satisfazer as necessidades da maior parte dos sites multilíngues, conservando uma estrutura e uma interface simples.

-  Por seção: de maneira mais detalhada, com esta configuração, pode-se alterar o idioma de cada seção do site, não apenas as de primeiro nível.

-  Por matéria: o idioma pode ser alterado ao nível de cada matéria; esta escolha é compatível com as precedentes (pode-se, por exemplo, escolher o idioma por seção mas aplicar exceções a certas matérias) e permite toda a granularidade imaginável, mas tenha cuidado para não criar um site com uma estrutura incompreensível...

Blocos multilíngues

Certos objetos, como os autores ou as palavras-chave, podem ser escritos de forma diferente, dependendo de estarem associados a matérias de um ou outro idioma. Contudo, seria absurdo conceber «traduções de uma palavra-chave» ou «tradução de um autor», já que é sempre um mesmo autor a assinar uma matéria ou a mesma palavra-chave (mesmo «conceito») que se vincula. Estes objetos não possuem idioma no âmbito do SPIP, mas é ainda assim possível, com a ajuda de «blocos multi», de os exibir no idioma do contextoem que eles são invocados (ou mais simplesmente: fazer com que a palavra-chave «Iraque» seja exibida como «Iraq» quando ela está vinculada a uma matéria em inglês).

O «bloco multi» é um atalho do SPIP, em que a estrutura é relativamente intuitiva:

<multi>string 1 [xx] string 2 [yy] string 3 ...</multi>

Retomando o exemplo da palavra-chave, o seu título será codigicado da seguinte forma, na área restrita:

<multi>[pt]Iraque [en]Iraq</multi>

Se um bloco multi for chamado num idiomaque não tenha sido previsto, é sempre a primeira parte do bloco que será exibida («string 1» no primeiro exemplo, «Iraque» no segundo). Isso, para não ocorrer nunca uma exibição vazia [2].

Para facilitar o uso desses blocos multi pelos redatores, é possível instalar o plugin multilang. Este plugin inclui um menu de idiomas do tipo [pt] [fr] [en] [it] acima de cada formulário, em função dos idiomas ativados na configuração do site.

Nota: os blocos podem também se usados, de acordo com a mesma estrutura, nos templates, Consulte Internationalizar os templates.

Loops e tags: como fazer

Depois que a área restrita estiver perfeitamente configurada, passemos agora para o site público. Sim, mesmo que cada matéria disponha agora do seu próprio idioma judiciosamente selecionada (de acordo com o mecanismoexplicado acima), os templates precisam levá-los em conta na exibição do site.

1. Uma boa notícia, para começar: o multilinguísmo dos templates é na grande maioria dos casos totalmente natural: N#ao é preciso criar templates diferentes para exibir idiomas diferentes. Um mesmo template adapta (automaticamente) a sua exibição ao idioma corrente.

Deste modo, todos os elementos exibidos à volta e dentro de uma matéria serão exibidos neste idioma. Isso também afeta quer a data de publicação da matéria, quer os formulários de resposta do fórum, de assinatura de uma petição etc. De uma forma mais geral: todas as tags do SPIP inclusive edentro de um loop ARTICLES serão exibidas no idioma da matéria (o mesmo para as seções e notas).

Exemplo: se a sua página principal contém um sumário mostrando as dez últimas matérias publicadas com as respectivas datas de publicação, a data das matérias em vietnamita serão exibidas em vietnamita, as de uma matéria em crioulo da Reunião serão exibidas em crioulo da Reunião etc.

Nota: este funcionamentosupõe que o idioma da matéria possua uma tradução no SPIP. Assim, se uma matéria for redigida em volapück mas a sua versão de SPIP ainda não foi traduzida para volapück (evidentemente, nós o convidamos a corrigir esta lacuna, participando do esforço de tradução), a data na matéria será exibida corretamente, mas no idioma padrão configurada.

2. O sentido da escrita

Se o seu site possiu idiomas que se escrevem da esquerda para a direita (a maioria dos idiomas) mas também idiomas que se escrevem da direita para a esquerda (como o árabe, o hebreu ou o farsi), serão necessários pequenos complementos ao código HTML para que a exibição ocorra sem problemas [3]

O SPIP oferece para este efeito umatag específica: #LANG_DIR, que define o sentido de escrita do idioma corrente. Esta tag é usável como valor de atributo dir na maior parte das tags HTML (o que dá «ltr» para os idiomas que se escrevem da esquerda para a direita, e «rtl» para as outras [4]).

Um loop de exibição do sumário seria, então:

<ul>
<BOUCLE_sumario(ARTICLES){par date}{inverse}{0,10}>
  <li dir="#LANG_DIR">
    [(#DATE|affdate) ]: <a href="#URL_ARTICLE">#TITRE</a>
  </li>
</BOUCLE_sumario>
</ul>

Se o layout apoia-se em elementos alinhados à direita ou à esquerda, estes deverão ser invertidos para os idiomas escritos da direita para a esquerda: pode-se em seguida pensar em substituir tous [5] os elementos do template marcados left ou right pelas tags #LANG_LEFT e #LANG_RIGHT. Para o que faz parte da própria definição de página, é recomendável começar por indicar o idioma do elemento solicitado, e a direção geral da página:

<html dir="#LANG_DIR" lang="#LANG">
  <head>
    ...
  </head>
  <body>
    ...
  </body>
</html>

3. Os links de tradução

O SPIP oferece um sistema de tradução entre matérias: pode-se especificar quais são as diferentes traduções de uma matéria (nota: essas traduções são por si mesmas matérias completas). O critério {traduction} permite, dentro de um loop ARTICLES, recuperar todas as versões de uma mesma matéria.

Por exemplo, para exibir todas as traduções da matéria corrente:

<BOUCLE_traducoes(ARTICLES){traduction}{exclus}>
  [<a href="#URL_ARTICLE" rel="alternate" hreflang="#LANG">(#LANG|traduire_nom_langue)</a>]
</BOUCLE_traducoes>

Repare no critério {exclus}, que permite excluir da exibição a versão corrente, e no filtro |traduire_nom_langue que fornece o nome verdadeiro do idioma a partir do seu código informático (isto permite exibir « français » em vez de «fr», «English» em vez de «en» etc.).

-  Um critério complementar {origine_traduction} (para os mais obstinados) permite selecionar unicamente a «versão original» da matéria corrente.

Uma página do wiki do spip-contrib compila os exemplos de loops que usam estes critérios: http://www.spip-contrib.net/-Carnet....

4. Elementos suplementares

Outros elementos permitem construir sites multilíngues:

— o critério {lang_select} serve para foçar a seleção do idioma para o loop (AUTEURS), o que normalmente não é feito (ao contrário, o critério {lang_select=non} permite indicar aos loops (ARTICLES), (RUBRIQUES) ou (BREVES) para não selecionar o idioma).


Exemplo para exibir um texto que inclui um bloco <multi> no idioma do contexto lang do template com um loop ARTICLES:

<BOUCLE_a(ARTICLES){id_article}{lang_select=non}>
#TEXTE
</BOUCLE_a>

— a variável de personalização $forcer_lang. Ela indica ao SPIP duas coisas:

  1. que ele deve verificar se o visitante dispõe de um cookie de idioma e, se sim, encaminhá-lo à página correspondente. É isto que é feito na página de conexão aà área restrita fornecida como padrão com o SPIP
  2. que as strings de idioma da interface devem ser exibidas no idioma do visitante, e não no idioma das matérias ou seções.

— as tags #MENU_LANG (e #MENU_LANG_ECRIRE) exibem um menu de idioma que permite ao visitante escolher «esta página em ...». A primeira tag exibe a lista de idiomas do site; a segunda, a lista de idiomas da área restrita (ela é usada na página de conexão à área restrita).

— por fim, os critérios opcionais permitem usar um mesmo lopp (na realidade, um mesmo template) para exibir seja todas as matérias do site em todos os idiomas, seja apenas as matérias no idioma passado no URL. Isto pode ser útil nos backends, por exemplo, ou nos loops de busca:

<BOUCLE_recentes(ARTICLES){lang?}{par date}{inverse}{0,10}>
<BOUCLE_busca(ARTICLES){lang?}{recherche}{par points}{inverse}{0,10}>

Templates internacionais para um site massivamente multilíngue

O acima exposto permitiu-nos tornar multilíngue a parte SPIP, propriamente dita, do nosso template: tudo o que é gerado pelos loops exibe-se no sentido correto, com a tipografia certa, e os elementos produzidos pelo SPIP (formulários, datas...) no idioma solicitado.

Para um site que apresenta um número modesto de idiomas (bilíngue, por exemplo), ou para aqueles que têm um idioma principal e alguns idiomas anexos, pode-se ficar por aí. Os textos fixos presentes nos templates, ou seja, as menções escritas diretamente em HTML como «Mapa do site», «Espaço de redação», «Responder a esta mensagem»... podem em certos casos permanecer em um único idioma; ou então, um site bilíngue poderia usar templates separados para cada um dos seus idiomas.

No entanto, se você quiser realizar e gerir eficazmente um site que apresente completamente um grande número de idiomas, torna-se ilusório manter templates separados, ou impor uma navegação num idioma único (mesmo em inglês ou em esperanto...). Para criar um conjunto de templates único que funcione em todos os idiomas, é preciso internacionalizar os templates de modo a alterar os textos independentemente do código HTML que os contém (que permanece fixo de um idioma a outro). Esta tarefa exige que se «suje um pouco as mãos» e é objeto de uma matéria separada.

Detalhes anexos

-  Os atalhos tipográficos <code> e <cadre> produzem um texto escrito da esquerda para a direita, mesmo se o idioma da matéria se escreva da direita para a esquerda. Com efeito, estes dois atalhos são destinados a exibir código ou dados informáticos, que são até hoje escritos sempre da esquerda para a direita (e, na maioria do tempo, em caractéres ocidentais).

-  Sempre, no que concerne ao sentido de escrita, notemos que os atributos left e right do HTML estão também presentes nas folhas de estilo. Isto que dizer que você deverá talvez incluir a parte correspondente da folha de estilo nos seus templates (para usar as tags #LANG_LEFT e #LANG_RIGHT) em vez de a colocar numficheiro separado.

Eis um resumo do comportamento das tags SPIP ligadas ao sentido da escrita:

Idioma#LANG_LEFT#LANG_RIGHT#LANG_DIR
idiomas escritos da esquerda para a direita left right ltr
árabe, farsi, hebreu... right left rtl

-  Um filtro |direction_css permite «inverter» um ficheiro CSS para os idiomas que se escrevem da direita para a esquerda. Se a folha de estilo CSS a inverter chamar-se, por exemplo, style.css, esse filtro usa (no caso em que o idioma corrente se escreve da direita para a esquerda) uma eventual folha de estilo style_rtl.css; se esta não existir, ele cria automaticamente uma folha RTL substituindo todas as ocurrências de left por right e vice-versa (e armazena-a no diretório IMG/cache-css/). Ele aplica-se normalmente a uma tag #CHEMIN, da maneira a seguir:

[(#CHEMIN{style.css}|direction_css)]

Notas

[1Especificamos aqui que na configuração de origem, o SPIP permanece monolíngue, para não complicar demasiado a interface.

[2Se em todo o caso desejar uma exibição vazia, será preciso criar explicitamente uma primeira parte vazia com um nome de idioma qualquer.

[3Teoricamente o HTML deveria controlar esses detalhes automaticamente, mas o resultado nem sempre fica à altura, sobretudo nas quebras de linha ou se se mistura idiomas que têm sentido de escrita diferentes.

[4Infelizmente, as instâncias de normalização parecem ignorar de momento o Bustrofédon, o que impede a sua utilização em HTML.

[5Todos, ou quase todos, deixamos-lhe descobrir se o seu layout apresenta casos particulares...

Autor Ricardo Porto Publié le :

Traductions : عربي, català, English, Español, français, italiano, Nederlands, Português, Türkçe