<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java Simples &#187; idiomas</title>
	<atom:link href="http://www.javasimples.com.br/tag/idiomas/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javasimples.com.br</link>
	<description>Porque Java não precisa ser difícil...</description>
	<lastBuildDate>Mon, 07 May 2012 00:36:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Internacionalização – Um software, vários idiomas!</title>
		<link>http://www.javasimples.com.br/core-java/internacionalizao-um-software-vrios-idiomas</link>
		<comments>http://www.javasimples.com.br/core-java/internacionalizao-um-software-vrios-idiomas#comments</comments>
		<pubDate>Sat, 20 Mar 2010 17:17:44 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Core Java]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[idiomas]]></category>
		<category><![CDATA[internacionalizacao]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linguas]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/</guid>
		<description><![CDATA[Tudo bem, eu admito. Esse nome é muito grande e chato de pronunciar (porém muito útil!). Imagine que você desenvolveu um super software (em Java é claro…) para atender um determinado nicho de mercado, levou 1 ano da sua vida para fazer isso. Quando você começou a vendê-lo foi o maior sucesso, seus clientes falaram [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Tudo bem, eu admito. Esse nome é muito grande e chato de pronunciar (porém muito útil!).</p>
<p>Imagine que você desenvolveu um super software (em Java é claro…) para atender um determinado nicho de mercado, levou 1 ano da sua vida para fazer isso. Quando você começou a vendê-lo foi o maior sucesso, seus clientes falaram bem do seu software pra todo mundo. Cada dia apareciam mais clientes, maravilha!</p>
<p>Até que um certo dia um americano ouviu falar do seu software e diz que paga um preço 5x maior do que você está acostumado a cobrar, porém o software tem que ser totalmente em Inglês…</p>
<p>E agora José???? Vai copiar o projeto e sair mudando todas as strings? Boa sorte…</p>
<p>Se tivesse pensado nisso antes, você teria planejado melhor o seu software e teria utilizado as facilidades que o Java oferece para Internacionalizar seu programa.</p>
<p>Mais chega de história, vamos a algo um pouco mais prático. Vamos criar uma pequena aplicação apenas para demonstrar como é fácil e útil internacionalizar seu programa em Java.</p>
<p><!--:--><span id="more-131"></span><!--:pt--></p>
<p>Crie um novo projeto Java para Área de Trabalho no NetBeans e apague tudo que ele já cria. Crie 2 pacotes: internacionalizacao e internacionalizacao.linguas:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image7.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb7.png" border="0" alt="image" width="226" height="128" /></a></p>
<p>Dentro do pacote internacionalizacao crie um JFrame e o deixe parecido com este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image11.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb11.png" border="0" alt="image" width="205" height="150" /></a></p>
<p>Eu mudei os nomes dos JLabel’s e do JComboBox para:</p>
<ul>
<li>jL_Lingua</li>
<li>jL_Nome</li>
<li>jL_Telefone</li>
<li>jL_Email</li>
<li>jCB_Lingua</li>
</ul>
<p><br/><br />
Fique a vontade para nomear como achar melhor.</p>
<p>Essa vai ser a cara do nosso aplicativo. Quando o usuário selecionar uma língua no combobox, todos os JLabel’s e o título do JFrame vão mudar para a língua escolhida.</p>
<p>Como as coisas não caem do céu, as informações de cada idioma devem estar armazenadas em algum lugar. E esse lugar é um arquivo que vai ficar no pacote internacionalizacao.linguas. Um arquivo para cada idioma.</p>
<p>O nome dos arquivos devem serguir um padrão: <strong>&lt;nome*&gt;_&lt;idioma&gt;_&lt;país&gt;.properties<br />
</strong>O padrão pode variar um pouco pois existem alguns parâmetros opcionais, porém o que nos interessa é este mesmo.</p>
<p>* O nome de todos os arquivos devem ser iguais. Ex:</p>
<ul>
<li>Idioma_pt_BR</li>
<li>Idioma_en_US</li>
</ul>
<p><br/><br />
Sabendo disso, adicione 4 arquivos ao pacote internacionalizacao.linguas. Para adicioná-los clique com o botão direito no projeto e em Novo &gt; Outro. Selecione a categoria “Java” e o tipo de arquivo “Arquivo de Propriedade”.</p>
<p>Adicione os seguintes arquivos:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image21.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb21.png" border="0" alt="image" width="251" height="218" /></a></p>
<p>Eu dei o nome padrão de “Linguas” aos meus arquivos. Como já foi dito, cada arquivo é responsável por um idioma:</p>
<ul>
<li>Linguas_de_DE –&gt; Alemão</li>
<li>Linguas_en_US –&gt; Inglês</li>
<li>Linguas_fr_FR –&gt; Francês</li>
<li>Linguas_pt_BR –&gt; Português</li>
</ul>
<p><br/><br />
Segue o conteúdo de cada arquivo de Línguas:</p>
<p>Linguas_de_DE.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span> Internationalisierung  <span style="color: #339933;">-</span> EinfacheJava
lingua <span style="color: #339933;">=</span> Sprache
nome <span style="color: #339933;">=</span> <span style="color: #003399;">Name</span>
telefone <span style="color: #339933;">=</span> Telefon
email <span style="color: #339933;">=</span> E<span style="color: #339933;">-</span>Mail</pre></div></div>

<p>Linguas_en_US.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span> Internationalization <span style="color: #339933;">-</span> SimpleJava
lingua <span style="color: #339933;">=</span> Language
nome <span style="color: #339933;">=</span> <span style="color: #003399;">Name</span>
telefone <span style="color: #339933;">=</span> Phone
email <span style="color: #339933;">=</span> Email</pre></div></div>

<p>Linguas_fr_FR.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span>  Internationalisation <span style="color: #339933;">-</span> SimpleJava
lingua <span style="color: #339933;">=</span> Langue
nome <span style="color: #339933;">=</span> Nom
telefone <span style="color: #339933;">=</span> Téléphone
email <span style="color: #339933;">=</span> Email</pre></div></div>

<p>Linguas_pt_BR.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span>  Internacionalização <span style="color: #339933;">-</span> JavaSimples
lingua <span style="color: #339933;">=</span> Língua
nome <span style="color: #339933;">=</span> Nome
telefone <span style="color: #339933;">=</span> Telefone
email <span style="color: #339933;">=</span> Email</pre></div></div>

<p>Uma vez que os arquivos de idioma já contenham tudo o que vamos precisar, vamos atualizar o combobox. Mude a propriedade “model”  e adicione os seguintes itens:</p>
<ul>
<li>pt_BR</li>
<li>en_US</li>
<li>fr_FR</li>
<li>de_DE</li>
</ul>
<p><br/><br />
Agora só falta adicionar o evento que vai cuidar da mudança dos idiomas de acordo com a seleção do usuário. Adicione o seguinte código ao evento <strong>ActionPerfomed </strong>do jCB_Linguas:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> selecionado <span style="color: #339933;">=</span> jCB_Lingua.<span style="color: #006633;">getSelectedItem</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;_&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">Locale</span>.<span style="color: #006633;">setDefault</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Locale</span><span style="color: #009900;">&#40;</span>selecionado<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>,selecionado<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
internacionaliza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O vetor de String “selecionado” recebe o item que o usuário selecionou, porém separado pelo _ (underscore). Ex: se o usuário selecionar “pt_BR” –&gt; “selecionado = {pt , BR}”.</p>
<p>Depois o Locale** default é setado para o que o usuário selecionou e é chamada a função <strong>internacionaliza()</strong>.</p>
<p>** <strong>A</strong> <code><strong>Locale</strong></code> <strong>object represents a specific geographical, political, or cultural region. </strong>Um objeto Locale representa uma região geográfica, política ou cultural específica. (de acordo com a <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Locale.html" target="_blank">Documentação</a>). Por default é a configuração do sistema operacional no qual a JVM foi instalada, ex: se o seu Windows é em português do Brasil, provavelmente sua Locale default será pt_BR.</p>
<p>Por fim, vamos ao código da função <strong>internacionaliza()</strong>, que é onde a mágica acontece:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> internacionaliza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">Locale</span> locale <span style="color: #339933;">=</span> <span style="color: #003399;">Locale</span>.<span style="color: #006633;">getDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">ResourceBundle</span> palavras <span style="color: #339933;">=</span> <span style="color: #003399;">ResourceBundle</span>.<span style="color: #006633;">getBundle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;internacionalizacao.linguas.Linguas&quot;</span>, locale<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;titulo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Lingua.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;lingua&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Nome.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Telefone.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;telefone&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Email.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;email&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Primeiro é recuperado o Locale atual do computador e depois é instaciado o objeto <strong>palavras</strong> da classe <strong>ResouceBundle</strong> através do método estático <strong>ResourceBundle.getBundle(String,Locale)</strong>. O que este método faz é procurar o arquivo cujo nome seja igual o passado no primeiro parâmetro e o Locale seja igual ao passado no segundo parâmetro.</p>
<p>Ex: A execução desse método:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">ResourceBundle</span>.<span style="color: #006633;">getBundle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;internacionalizacao.linguas.Linguas&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Locale</span><span style="color: #009900;">&#40;</span>“pt”,”BR”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Vai resultar na escolha do arquivo “Linguas_pt_BR.properties” do pacote “internacionalizacao.linguas”.</p>
<p>OBS Importante: É necessário passar o caminho completo do arquivo, ou seja: “pacote.NomePadrao”.</p>
<p>Agora que o objeto <strong>palavras</strong> contém a referência para todas as palavras daquele idioma, basta atribuí-las aos respectivos JLabels e ao título.<br />
<center><br />
<a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image31.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb31.png" border="0" alt="image" width="240" height="124" /></a> <a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image41.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb41.png" border="0" alt="image" width="240" height="124" /></a> <a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image51.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb51.png" border="0" alt="image" width="240" height="124" /></a> <a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image61.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb61.png" border="0" alt="image" width="240" height="126" /></a><br />
</center><br />
Muito legal não?</p>
<p>Quem quiser pode baixar o projeto através desse <a href="http://dl.dropbox.com/u/4918828/Internacionalizacao.rar" target="_blank">link</a>.</p>
<p>É isso ai galera, qualquer dúvida é só deixar um comentário e prometo que respondo o mais rápido possível.</p>
<p>[]s,</p>
<p>Saab.</p>
<p>PS: Esse post também foi dica do Dang do <a href="http://www.programei.org" target="_blank">Programei.org</a>. Valew!<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/core-java/internacionalizao-um-software-vrios-idiomas/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

