Este artigo apresenta uma metodologia para se criar classes cuja função é encapsular mensagens que necessitam de internacionalização (I18N). A abordagem apresentada permite que sejam eliminados pontos de tipagem fraca em partes do código.
ArtigosJavaRevisitando Internacionalização – Parte 1
Artigo do tipo Tutorial
Recursos especiais neste artigo: Artigo no estilo Curso Online
Revisitando
Internacionalização – Parte 1 Este
artigo apresenta uma metodologia para se criar classes cuja função é encapsular
mensagens que necessitam de internacionalização (I18N). A abordagem apresentada
permite que sejam eliminados pontos de tipagem fraca em partes do código, as
quais frequentemente fazem referência a diversas chaves (Strings) e tendem a se
espalhar nas classes de uma aplicação.
Em que situação o tema é
útil Para desenvolvedores que
precisam expor conteúdo de texto condicionado a Localese querem eliminar estruturas como
ResourceBundles/Maps assim como trechos de código do tipo
bundle.get('alguma.chave.para.label.email'), substituindo-os por chamadas
fortemente tipadas e expressivas, como myMessages.emailLabel(), em suas classes
de apresentação ou negócio.
Algumas aplicações devem servir
clientes que se situam em regiões ou países diferentes. Como consequência é
esperado que nem todos os usuários sejam capazes de compreender o conteúdo
apresentado, a menos que o mesmo seja exibido em sua forma nativa, tanto na escrita como na
utilização de símbolos. Na maioria dos países de cultura ocidental, por
exemplo, é comum utilizar o símbolo √ para
representar que algo está correto, porém no Japão o mesmo quer dizer justamente
o oposto.
Internacionalização (I18N) e localização (L10N) são técnicas
utilizadas nessas situações, nas quais uma
aplicação deve ser desenvolvida para dar suporte a mais de um idioma e/ou
região. A fusão desses termos é conhecida como globalização. Embora
sejam eventualmente confundidos, a rigor, I18N
refere-se ao mecanismo utilizado para tornar possível a L10N. No coração da
L10N está a funcionalidade de se apresentar texto traduzido para determinados
idiomas, porém o escopo geral da L10N pode ser muito maior, por ventura
demandando a especialização de recursos como imagens, arquivos CSS, entre
outros, visando prover um sistema ou serviço que possa ser consumido de forma “nativa”
por clientes de diferentes regiões. Por exemplo, se uma aplicação contém um
componente do tipo Calendário que destaca feriados, além da tradução dos nomes
dos meses e dias da semana, será necessário também especializar a lógica
demarcadora de feriados para cada região suportada.
A maioria dos frameworks web para
a plataforma Java provê suporte à I18N em diversos níveis. Alguns se preocupam
apenas com a parte da localização de mensagens traduzidas e outros, como o
Apache Wicket, fornecem também um mecanismo para a inclusão de outros recursos
como arquivos JavaScript, CSS e imagens de acordo com a instância de java.util.Localeutilizada pelo cliente (navegador).
Em uma arquitetura em camadas, onde a camada de negócio é
desacoplada da camada de apresentação, uma aplicação tende a utilizar
diferentes modelos de I18N, empregando os mecanismos suportados pelo framework
adotado na camada de apresentação e outros na camada de negócio.
Consideremos como exemplo o
seguinte cenário: existe um formulário para o cadastro de um cliente que valida
alguns dados como e-mail, nome e idade, exibindo mensagens de erro caso sejam
submetidos dados com valores inválidos. Ao mesmo tempo existe um serviço de
cadastro de clientes em lote, o qual é realizado através da importação de
arquivos TXT. Este processo é realizado de forma assíncrona (e.g. como um
batch) e além da inclusão dos registros, o mesmo também deve gerar um arquivo
de log com um sumário (total de registros, mensagens de erro de formato – como
limite do número de caracteres excedido para o nome ou máscara de e-mail
inválida – para cada linha, etc.) para posterior consulta.
A geração deste log pode estar
condicionada ao idioma do cliente que submeteu o arquivo para importação e o
escopo de mensagens a serem apresentadas é similar ao do cadastro unitário, ou
seja, idealmente ambos os componentes (apresentação e negócio) devem ter acesso
ao mesmo conjunto de dados para prover feedback ao usuário. Porém, qual seria a
forma ideal de compartilhar estas mensagens entre a apresentação e o negócio?
Estratégias típicas de I18N para a camada de apresentação podem envolver
taglibs (JSPs), referências a ResourceBundles em faces-config.xml (JSF), StringResourceModels (Wicket), etc. Já a
camada de negócio pode, por exemplo, empregar MessageSources (Spring).
Independentemente dos frameworks
utilizados, deve-se pensar em um mecanismo que possibilite o compartilhamento
deste conteúdo de I18N entre essas camadas. E mesmo quando bem compartilhado, qual a melhor maneira de
se reconhecer que uma mensagem está associada a um contexto específico? À
medida que um projeto cresce, se estas questões não forem levantadas, a lógica
de internacionalização poderá ficar fragmentada entre as camadas, fazendo com
que o escopo de mensagens não seja transparente, dificultando a manutenção
tanto do código quanto do conteúdo de I18N.
A maioria dos frameworks aborda
I18N, no contexto da resolução de Strings
para Locales específicos, através de estruturas de dados do tipo
dicionário (Maps e ResourceBundles), ou seja, o código tende a ficar poluído
com expressões do tipo map.get(“chave.para.algum.contexto”).
Embora aceitável para um número pequeno de mensagens, esta técnica tende a
degradar a expressividade do código que a utiliza na medida em que o número de
chaves se multiplica. Para lidar com este tipo de situação, o framework GWT
introduziu uma nova abordagem: Contêineres de mensagens. A ideia fundamental
consiste em definir quais mensagens serão utilizadas em um determinado escopo e
utilizar interfaces para representá-las, de tal
forma que as mesmas possam ser obtidas através de invocações de métodos,
caracterizando um mecanismo expressivo, type-safe.
Neste artigo, vamos apresentar uma
solução simples para lidar com mensagens, similar à utilizada no GWT, que pode
ser incorporada em qualquer framework e empregada em qualquer camada da
aplicação. Inicialmente vamos expor como criar esse mecanismo, e ao longo do
artigo mostraremos um exemplo de como utilizá-lo
via injeção de dependências num ambiente de CDI e JSF 2, além de entrar em
detalhes técnicos como Serialização, que podem ser relevantes dependendo do
ambiente de publicação e do ponto de vista não-funcional de uma aplicação.
Criando contêineres de mensagens
Para trabalhar de forma segura com internacionalização,
vamos adotar a seguinte prática: dado um conjunto de dados que necessitem de
tradução para determinados Locales, criaremos uma interface para representá-los. A ideia é utilizar esta interface para substituir as
chamadas a um ResourceBundle ou Map em um determinado escopo, por exemplo, em
um backing bean ou tela. Por exemplo, se o escopo possuir dois pontos de I18N,
um label e um texto para cumprimentar o usuário, esses dois pontos podem ser
representados como métodos de uma interface conforme a Listagem 1, isto é, ao invés de utilizar myResourceBundle.get('labelName') ...
Recomendamos começar pelo Plano de Estudo Carreira Programador Front-End. Essa área da programação é mais visual e intuitiva, tornando-a ideal para iniciantes. No Front-End, você aprenderá a criar a parte visual dos sites, como layout, cores e interatividade. Depois de dominar o Front-End, você pode avançar para Programador Back-End, onde aprenderá a lidar com a lógica e o funcionamento interno dos sites, e, finalmente, para Programador Mobile, focando no desenvolvimento de aplicativos para smartphones. Nossa metodologia é estruturada de forma progressiva para garantir que você desenvolva confiança e experiência ao criar projetos reais, como sites estáticos e dinâmicos.
Em quanto tempo vou me tornar um programador?
O tempo necessário para se tornar um programador varia de acordo com a dedicação de cada estudante. Com nossa metodologia, que inclui um Plano de Estudo detalhado e suporte contínuo, você pode se tornar um programador de 6 meses a um ano, dependendo do seu ritmo e esforço. Nossa abordagem prática e orientada a projetos ajudará a acelerar seu aprendizado.
Eu preciso de um diploma de faculdade para começar a atuar como programador?
Não. Ser programador é uma excelente oportunidade para quem não possui diploma de faculdade. Muitas empresas contratam baseadas nas habilidades técnicas e experiência prática, não necessariamente em diplomas. Após conquistar uma vaga, você pode optar por complementar sua formação com um diploma.
Por que a programação se tornou a profissão mais promissora da atualidade?
A necessidade de programadores cresceu exponencialmente, especialmente após a pandemia de Covid-19, que forçou muitas empresas a se adaptarem ao digital. Com o crescimento das empresas de tecnologia, a demanda por programadores aumentou. Atualmente, há mais de 200 mil vagas abertas no Brasil devido à falta de profissionais qualificados.
Metodologia
Quais são os principais diferenciais da DevMedia?
Didática e Metodologia
Com mais de 20 anos de experiência, nossa metodologia foca em menos aulas e mais prática. Desenvolvemos dezenas de projetos e exercícios para ajudar você a se tornar um programador completo. Nossos projetos são desafiadores e autênticos, não apenas exercícios repetitivos.
Projetos reais e exercícios
Você desenvolverá diversos projetos práticos em cada carreira (Front-End, Back-End e Mobile), recebendo mentoria e suporte contínuo. A prática é essencial, e oferecemos milhares de exercícios para ajudar você a fixar o conteúdo e melhorar sua posição no ranking.
Suporte ao aluno
Nossa plataforma oferece suporte dedicado com professores experientes, respondendo suas dúvidas em menos de uma hora. Isso garante que você receba a ajuda necessária durante toda a sua jornada de aprendizado.
Gamificação
A DevMedia utiliza gamificação para tornar o aprendizado mais envolvente e motivador. Você acumula pontos e moedas por acertos, que podem ser trocados por produtos e customizações no seu card pessoal. Além disso, o sistema de ranking mensal incentiva a competição amigável e a melhoria contínua.
O que eu irei aprender estudando pela DevMedia?
Ao estudar conosco, você se tornará um programador Full Stack, dominando Front-End, Back-End e Mobile. Utilizamos a linguagem JavaScript, a mais utilizada no mercado, preparando você para criar sistemas webs e aplicativos celulares. Nossa abordagem prática inclui exercícios para fixar o conhecimento e desenvolvimento de projetos reais que te preparam, para o mercado de trabalho.
Quais as vantagens de aprender programação através da linguagem JavaScript?
Ela é Multiplataforma, ela vai te permitir programar para web e para celulares utilizando praticamente a mesma sintaxe.
Elá é Full Stack. Ela te permite criar aplicações Front-end, Back-end e Mobile. Isso acelera muito sua carreira e aumenta suas possibilidades de pegar trabalhos autônomos e conquistar uma vaga no mercado.
Ela é fácil de aprender. Como ela não exige conhecimento inicial em “Orientação a Objetos” ela se torna mais simples com uma curva de aprendizado suave e vai te permitir começar a programar mais rápido do que outras linguagens
A plataforma oferece certificados?
Sim, oferecemos dois tipos de certificados: o certificado de conclusão, que você adquire ao consumir o conteúdo, e o certificado de autoridade, que você obtém ao acertar exercícios. Ambos possuem carga horária, que pode ser utilizada para fins acadêmicos, como atividades complementares na faculdade, e também para comprovações em processos seletivos ou no seu currículo.
A plataforma tem suporte ao aluno, como funciona?
Sim, temos uma equipe de programadores pronta para ajudar com todas as suas dúvidas! Durante o horário comercial, o tempo médio de resposta é de até 10 minutos. E não se preocupe, também oferecemos suporte à noite e nos finais de semana, com um prazo de resposta um pouco maior.
A DevMedia me forma como programador Full Stack?
Sim! Oferecemos uma formação completa, do zero até Full Stack. Nosso foco é na prática, então você vai encontrar muitos exercícios e projetos reais ao longo do curso. Garantimos que você sairá com a autonomia necessária para desenvolver seus próprios projetos com confiança!
Tem horário para as aulas?
Não, não temos horários fixos para as aulas. Todo o nosso conteúdo está disponível para você acessar a qualquer momento, permitindo que você estude conforme sua própria disponibilidade e ritmo. Dessa forma, você pode integrar o aprendizado à sua rotina de maneira mais flexível e eficaz.
Por que a DevMedia não usa videoaulas em sua didática?
Nosso foco principal é formar programadores de verdade. Sabemos que o dia a dia de um programador envolve muita leitura, interpretação e escrita de código. Por isso, nosso conteúdo é desenvolvido para ambientar você nesse processo desde o início, proporcionando mais autonomia e acelerando seu aprendizado.
Na vídeo-aula é o professor que está lendo, interpretando e escrevndo o código para você, isso limita o seu progresso. Ao ler e interagir diretamente com o conteúdo, você exercita sua capacidade de leitura e concentração, além de poder avançar no seu próprio ritmo. Dessa forma, você se torna um programador mais independente e preparado para os desafios reais do mercado.
Preciso de um computador específico para estudar na DevMedia?
Não é necessário nada específico. Qualquer computador com processador atual e memória de 8 GB é suficiente.
Eu consigo estudar pelo celular?
Sim, a DevMedia possui um aplicativo que te permite seguir com seus estudos de qualquer lugar.
A DevMedia tem aplicativo?
Sim, nosso aplicativo está disponível na Play Store e na Apple Store, permitindo que você estude de forma prática e conveniente em qualquer lugar.
Preciso estar na faculdade para acompanhar os estudos na DevMedia?
Não, a faculdade não é necessária. Você não precisa de nenhum conhecimento prévio para iniciar os estudos na nossa plataforma.
Assinatura e Pagamentos
Quais são os planos de assinatura disponíveis?
Oferecemos o plano anual, o valor total é lançado no cartão de crédito, parcelado em 12 vezes, e você precisa dispor do valor total no limite do seu cartão. Você também pode optar por pagar no PIX
Adquirindo o plano, terei acesso a todo o conteúdo?
Sim, ao assinar nossa plataforma, você desbloqueia acesso total a todo o nosso conteúdo, sem precisar comprar nada separadamente.
A plataforma tem planos vitalícios?
Não, nossos planos são anuais, garantindo que você tenha acesso contínuo às atualizações mais recentes e aos novos conteúdos. A tecnologia evolui rapidamente, e um plano vitalício oferece um conteúdo estático que se tornará ultrapassado em pouco tempo. Com nossos planos anuais, você está sempre à frente, aprendendo as novidades e tendências mais atuais no mundo da programação.
A DevMedia tem fidelidade?
Sim, nosso plano tem uma fidelidade de 12 meses, o que garante o tempo ideal para você explorar nosso conteúdo e desenvolver a autonomia necessária para trabalhar com programação.
Como funciona o cancelamento?
Nós garantimos seu direito de cancelamento com reembolso total dentro dos primeiros 7 dias.
Para que você aproveite ao máximo seu investimento, oferecemos suporte personalizado para orientá-lo na utilização da plataforma. Também temos a opção de transferência de titularidade do plano, permitindo que outra pessoa aproveite o restante do seu período de assinatura.
Cadastro
Como excluir meus dados da plataforma?
Para excluir seus dados da plataforma, acesse o link : https://www.devmedia.com.br/fale-conosco/ e abra um protocolo de 'Exclusão de dados'. Nossa equipe processará a solicitação e removerá todas as informações do seu cadastro.
Compartilhe esse conteúdo com um amigo!
Faça login para ganhar recompensas.
Ou
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.