O título deste post pode não ser o mais feliz, mas à falta de melhor tradução é que se pode arranjar.
O que quero eu dizer com localizar o conteúdo? Disponibilizar ao utilizador da aplicação/site informação no idioma que melhor se adeque, trocando por miúdos… multilíngua.
O Flash IDE de algumas versões para cá que incorpora uma ferramenta para o fazer, Strings Panel, mas nunca me predispus a perceber até que ponto era flexível para colocar a funcionar fora do ambiente Flash IDE.
Posto isto, há cerca de 6 meses resolvi tentar criar uma pequena livraria que simplifica o processo mas até há pouco tempo nunca tinha tido a oportunidade de a testar num ambiente de produção. Como fiquei satisfeito com o resultados resolvi abrir este projecto ao público para ter um maior feedback e conseguir evolui-lo.
A estrutura é a seguinte:
- A classe LocaleManager (Singleton) gere o carregamento dos diferentes ficheiros de linguagem, em xml, consoante a necessidade e informa todos as instâncias que estejam registadas.
- A classe LocaleContainer é a base dos elementos visuais que contenham elementos que necessitem de localização. Classes que a estendam apenas estão registadas no manager enquanto pertencem à Display List, e apenas assim recebem notificação quando é mudado o idioma. Sempre que uma classe que implemente o interface ILocaleComponent é adicionada à Display List o LocaleContainer guarda a sua referência para notificar quando for notificado pelo manager, uma espécie de notificações em cadeia.
- As classes que queiram ser notificadas quando ocorre uma mudança de idioma têm necessariamente de implementar o interface ILocaleComponent, garantido assim que dispõem de um método público através do qual podem ser notificadas e actualizarem o que necessitem.
Isto é a base e algo que é efectuado “under the hood“, o exemplo seguinte mostra a simplicidade em utilizar esta solução.
O plugin de syntax highlight da minha instalação do wordpress tirou o dia para me por fora do sério e parece-me mais saudável para o meu teclado que disponibilize o exemplo juntamente com a source e documentação.
Gostava de receber algum feedback se experimentarem com exemplos/sugestões/correcções que ajudem a melhorar o projecto.

0 Comments.