Dae galera, quem visita o blog com frequência sabe que eu me dedico aqui a postar coisas sobre Java e sobre MySQL.
Sobre Java porque é o que eu faço profissionalmente e sobre MySQL porque é o SGBD que mais uso nos meus projetos particulares.
Depois de anos participando da lista MySQL-Br do Yahoo! Brasil o pessoal criou uma página de Wiki para facilitar buscas por conteúdos e artigos.
Bem, o site do Wiki começou hoje, e não tem nada ainda. Mas vale a pena ficar de olho e de vez em quando dar uma passadinha por lá.
Os endereços:
Da lista no Yahoo! Brasil: http://br.groups.yahoo.com/group/mysql-br/
Do Wiki: http://mysql-br.wikidot.com.
Colaborações serão sempre bem-vindas!
quarta-feira, setembro 19, 2007
quarta-feira, setembro 05, 2007
Internacionalização em Java
Dae pessoal, não faz tanto tempo assim que postei algum “drop” de sabedoria aqui. Então vamos a mais um: internacionalização!
Diretamente das definições da Sun: “internacionalização é o processo de projetar uma aplicação, de modo que ela possa ser adaptada a varias linguagens e regiões sem mudanças de engenharia.” – leia-se mudanças no código.
Bom, você já deve ter ouvido ou lido em algum código o prefixo “i18n” ou “l10n”. i18n é a abreviação de internationalization, pois do primeiro i ao último n há 18 letras. O l10n é a abreviação de localization e segue a mesma regra do número de caracteres entre l e n.
Existem certas características em um programa internacionalizado, como:
• Dado uma localização (Locale), o mesmo binário do programa deve funcionar em qualquer lugar;
• Os dados textuais do programa (mensagens de erro, mensagens de tela, rótulos, etc...) não devem estar atribuídos de forma “hardcode” aos elementos dentro dos códigos do programa e sim externados em um arquivo apropriado;
• Suporte a outros idiomas não deve requerer nova compilação do programa;
• Dados dependentes de localização, como formatação de datas e campos monetários, devem ser apresentados de acordo com a região do usuário e seu idioma;
Bom, se você tiver sons e imagens que possam fazer sentido internacionalizar, é uma boa idéia!
Vamos cortar o nhe nhe nhe e partir para a ação.
Vamos a um simples exemplo. Uma classe que deva imprimir:
Nome: Jean Jorge Michel
Nome de usuário: jmichel
Senha: minhasenhaultrasecreta
Porém os rótulos (nome, nome de usuário e senha) devem ser impressos corretamente para cada idioma (tá, não exageremos, vamos testar com português e inglês apenas).
Então vamos começar pelos fatos primeiros (como diria o grande sábio), criando os arquivos com a tradução do nosso programa. Para isso, no pacote estudo.internacionalizacao criei dois arquivos:
• ResourceBundle_pt_BR.properties;
• ResourceBundle_en_US.properties.
E o conteúdo de cada um deles (na ordem de criação):
name=Nome
password=Senha
username=Nome de usuário
name=Name
password=Password
username=Username
Agora no mesmo pacote criei a classe Internacionalizada.java:
package estudo.internacionalizacao;
import java.util.Locale;
import java.util.ResourceBundle;
public class Internacionalizada {
public static void main(String[] args) {
final Locale defaultLocale = Locale.getDefault();
final ResourceBundle rbDefault = ResourceBundle.getBundle("estudo.internacionalizacao.ResourceBundle", defaultLocale);
System.out.println(new StringBuilder().append(rbDefault.getString("name")).append(": Jean Jorge Michel"));
System.out.println(new StringBuilder().append(rbDefault.getString("username")).append(": jmichel"));
System.out.println(new StringBuilder().append(rbDefault.getString("password")).append(": minhasenhaultrasecreta").append("\n\n"));
final Locale otherLocale = new Locale("en", "GB");
final ResourceBundle rb = ResourceBundle.getBundle("estudo.internacionalizacao.ResourceBundle", otherLocale);
System.out.println(new StringBuilder().append(rb.getString("name")).append(": Jean Jorge Michel"));
System.out.println(new StringBuilder().append(rb.getString("username")).append(": jmichel"));
System.out.println(new StringBuilder().append(rb.getString("password")).append(": minhasenhaultrasecreta"));
}
}
Agora é só rodar e ver o resultado das duas saídas que devem parecer com isso:
Nome: Jean Jorge Michel
Nome de usuário: jmichel
Senha: minhasenhaultrasecreta
Name: Jean Jorge Michel
Username: jmichel
Password: minhasenhaultrasecreta
Lembra daquela Enum do post anterior? Poderia ser internacionalizada não? :)
Até mais! Bons códigos
Diretamente das definições da Sun: “internacionalização é o processo de projetar uma aplicação, de modo que ela possa ser adaptada a varias linguagens e regiões sem mudanças de engenharia.” – leia-se mudanças no código.
Bom, você já deve ter ouvido ou lido em algum código o prefixo “i18n” ou “l10n”. i18n é a abreviação de internationalization, pois do primeiro i ao último n há 18 letras. O l10n é a abreviação de localization e segue a mesma regra do número de caracteres entre l e n.
Existem certas características em um programa internacionalizado, como:
• Dado uma localização (Locale), o mesmo binário do programa deve funcionar em qualquer lugar;
• Os dados textuais do programa (mensagens de erro, mensagens de tela, rótulos, etc...) não devem estar atribuídos de forma “hardcode” aos elementos dentro dos códigos do programa e sim externados em um arquivo apropriado;
• Suporte a outros idiomas não deve requerer nova compilação do programa;
• Dados dependentes de localização, como formatação de datas e campos monetários, devem ser apresentados de acordo com a região do usuário e seu idioma;
Bom, se você tiver sons e imagens que possam fazer sentido internacionalizar, é uma boa idéia!
Vamos cortar o nhe nhe nhe e partir para a ação.
Vamos a um simples exemplo. Uma classe que deva imprimir:
Nome: Jean Jorge Michel
Nome de usuário: jmichel
Senha: minhasenhaultrasecreta
Porém os rótulos (nome, nome de usuário e senha) devem ser impressos corretamente para cada idioma (tá, não exageremos, vamos testar com português e inglês apenas).
Então vamos começar pelos fatos primeiros (como diria o grande sábio), criando os arquivos com a tradução do nosso programa. Para isso, no pacote estudo.internacionalizacao criei dois arquivos:
• ResourceBundle_pt_BR.properties;
• ResourceBundle_en_US.properties.
E o conteúdo de cada um deles (na ordem de criação):
name=Nome
password=Senha
username=Nome de usuário
name=Name
password=Password
username=Username
Agora no mesmo pacote criei a classe Internacionalizada.java:
package estudo.internacionalizacao;
import java.util.Locale;
import java.util.ResourceBundle;
public class Internacionalizada {
public static void main(String[] args) {
final Locale defaultLocale = Locale.getDefault();
final ResourceBundle rbDefault = ResourceBundle.getBundle("estudo.internacionalizacao.ResourceBundle", defaultLocale);
System.out.println(new StringBuilder().append(rbDefault.getString("name")).append(": Jean Jorge Michel"));
System.out.println(new StringBuilder().append(rbDefault.getString("username")).append(": jmichel"));
System.out.println(new StringBuilder().append(rbDefault.getString("password")).append(": minhasenhaultrasecreta").append("\n\n"));
final Locale otherLocale = new Locale("en", "GB");
final ResourceBundle rb = ResourceBundle.getBundle("estudo.internacionalizacao.ResourceBundle", otherLocale);
System.out.println(new StringBuilder().append(rb.getString("name")).append(": Jean Jorge Michel"));
System.out.println(new StringBuilder().append(rb.getString("username")).append(": jmichel"));
System.out.println(new StringBuilder().append(rb.getString("password")).append(": minhasenhaultrasecreta"));
}
}
Agora é só rodar e ver o resultado das duas saídas que devem parecer com isso:
Nome: Jean Jorge Michel
Nome de usuário: jmichel
Senha: minhasenhaultrasecreta
Name: Jean Jorge Michel
Username: jmichel
Password: minhasenhaultrasecreta
Lembra daquela Enum do post anterior? Poderia ser internacionalizada não? :)
Até mais! Bons códigos
Marcadores:
i18n,
internacionalização,
java,
l10n,
locale,
localização
Assinar:
Postagens (Atom)