Java i18n – Internacionalização em Java

A internacionalização em Java, ou Java i18n, é uma funcionalidade muito importante. O Java oferece suporte à internacionalização (i18n) por meio de pacotes de recursos.

Internacionalização em Java

Para tornar o seu aplicativo compatível com diferentes idiomas, é necessário criar arquivos de propriedades específicos para cada localidade. Os nomes dos arquivos seguem o padrão do nome do pacote com o código do idioma e do país, por exemplo, ApplicationMessages_en_US.properties. Uma vez que os arquivos de propriedades para as localidades específicas estão prontos, tudo o que você precisa fazer é inicializar o pacote de recursos com a localidade correta. O Java fornece duas classes, java.util.ResourceBundle e java.util.Locale, que são usadas para esse propósito. O ResourceBundle lê o arquivo de propriedades específico da localidade e você pode obter o valor específico da localidade para qualquer chave. Isso é muito útil para tornar os textos do seu aplicativo da web específicos para cada localidade. Você pode obter as informações de localidade a partir da solicitação HTTP e gerar a página dinâmica com os arquivos de pacote de recursos dessa localidade. Você também pode oferecer a opção para o usuário escolher a localidade e atualizar as etiquetas dinamicamente.

Exemplo de i18n em Java

Para o exemplo de internacionalização em Java, criei o projeto cuja estrutura é como na imagem abaixo. Aqui está o código Java para a classe JavaInternationalizationExample.

package com.journaldev.i18n;

import java.util.Locale;
import java.util.ResourceBundle;

public class JavaInternationalizationExample {

    public static void main(String[] args) {
        //localidade padrão
        ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages");
        //Obtenha ResourceBundle com Locale já definidos
        ResourceBundle bundleFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE);
        //Obtenha ResourceBundle quando a Locale precisa ser criada
        ResourceBundle bundleSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE"));
        
        //vamos imprimir algumas mensagens
        printMessages(bundle);
        printMessages(bundleFR);
        printMessages(bundleSWE);
        
    }

    private static void printMessages(ResourceBundle bundle) {
        System.out.println(bundle.getString("CountryName"));
        System.out.println(bundle.getString("CurrencyCode"));
    }

}

Aqui o nome do pacote é ApplicationMessages e tenho 2 pacotes de recursos específicos de localidade e um pacote de recursos padrão. ApplicationMessages.properties

CountryName=USA
CurrencyCode=USD

ApplicationMessages_fr_FR.properties

CountryName=France
CurrencyCode=Euro

ApplicationMessages_sv_SE.properties

CountryName=Sweden
CurrencyCode=Kr

Observe o uso da classe Locale, existem algumas localidades já definidas, mas sempre podemos criar uma nova localidade passando o código do idioma e o código do país para o construtor. Quando executo o programa acima, aqui está a saída.

USA
USD
France
Euro
Sweden
Kr

Isso é tudo para um exemplo rápido de internacionalização em Java. A internacionalização em Java é muito útil em aplicativos da web para exibir páginas em idiomas específicos de localidade.

Source:
https://www.digitalocean.com/community/tutorials/java-i18n-internationalization-in-java