Textos “localizados” (L10n) via Javascript

English

Introdução

Uma das preocupações dos desenvolvedores é prover conteúdo nos idiomas dos visitantes e conforme informações em Internet World Stats - Internet World Users by Language, há grandes chances de que suas páginas sejam visitadas por um estrangeiro e se ele não tem algum conhecimento do idioma utilizado no documento, certamente vai desprezá-lo mesmo que haja conteúdo de valor...lamentável.

Infelizmente há poucas soluções como criar documentos alternativos ao menos para a audiência estrangeira mais frequente, mas considerando estes fatos sobre o idioma Inglês:

Fica evidente que ter uma tradução mínima em Inglês é de grande importância e não sendo possível tradução integral, ao menos que hajam mensagens e textos chave nesta língua (e em outras com um pouco mais de esforço e interesse).

Proposta

“Um objeto para montar strings no idioma do visitante, substituindo palavras e frases pesquisadas num dicionário carregado a tempo de execução.”

Para ser mais preciso, na língua detectada no agente que acessa a página, basicamente provendo a língua nativa e o Inglês. O objeto implementado em Javascript, entra em funcionamento com a sequência de procedimentos:

A partir daí, estão disponíveis dois métodos para montagem das strings:

O objeto pode ser instanciado ilimitadas vezes e cada instância pode ter seu próprio “dicionário” associado com formato/conteúdo definido pela DTD (dict.dtd):

<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT dicts (item+)>
  <!ELEMENT item (en|pt|es|it|fr|de)*>
    <!ELEMENT en (#PCDATA)>
    <!ELEMENT pt (#PCDATA)>
    <!ELEMENT es (#PCDATA)>
    <!ELEMENT it (#PCDATA)>
    <!ELEMENT fr (#PCDATA)>
    <!ELEMENT de (#PCDATA)>

Observe que cada elemento “item” possui elementos filhos nomeados com o código ISO-639-1 de duas letras por simplicidade e para compatibilidade com o código de língua detectado no navegador.

Exemplo de “dicionário” conforme DTD:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE dicts SYSTEM "dict.dtd">
<dicts>
  <item>
    <en>smooth</en>
    <pt>suave</pt>
    <es>suave</es>
    <it>liscio</it>
    <fr>lisse</fr>
    <de>glatte</de>
  </item>
  <item>
    <en>scrolling</en>
    <pt>rolagem</pt>
    <es>desplazar</es>
    <it>scorrere</it>
    <de>Bildlauf</de>
  </item>
  <item>
    <en>to</en>
    <pt>para</pt>
    <es>a</es>
    <it>a</it>
    <de>zu</de>
  </item>
</dicts>

A estrutura simples do XML garante fácil manutenção do dicionário e favorece o uso de DOM ou XPath na montagem do “hash table”. Podem ser adicionados vários códigos de idiomas e não há obrigatoriedade de uma palavra/frase estar presente em todos os idiomas, o default é o Inglês e na ausência da palavra/frase nesta língua será usado o argumento (o próprio termo) de busca no dicionário.

Utilização

Apêndice

Formatos para método “printf”

tipo de argumento formato resultante
chave identidade
%s %S nenhum
%c %C Capitalizado
%l %L minúsculas
%u %U MAIÚSCULAS

Referências