Internalização Java - Guia rápido

Internalização

Internalização ou I18N refere-se à capacidade de um Aplicativo de servir aos usuários em vários e diferentes idiomas. Java tem suporte integrado para internalização. Java também fornece formatação de números, moedas e ajuste de data e hora de acordo.

A internacionalização Java ajuda a fazer um aplicativo java lidar com diferentes linguagens, formatos de números, moedas, formatação de hora específica de região.

Localização

Localização ou L10N é a adaptabilidade de um aplicativo que é como um aplicativo se adapta a um idioma específico, formatos de número, configurações de data e hora, etc.

Um aplicativo java deve ser internacionalizado para ser capaz de se localizar.

Informações culturalmente dependentes

Os itens de informações a seguir geralmente variam com os diferentes fusos horários ou culturas.

  • Messages

  • Date

  • Time

  • Number

  • Currency

  • Measurements

  • Números de telefone

  • Endereços postais

  • Rótulos GUI

Aulas de internacionalização

Java possui um conjunto de classes integradas que auxiliam na internacionalização de uma aplicação. Essas classes são as seguintes:

Sr. Não. Classe e descrição
1

Locale

Representa um idioma junto com o país / região.

2

ResourceBundle

Contém texto ou objetos localizados.

3

NumberFormat

Use para formatar números / moedas de acordo com o local.

4

DecimalFormat

Use para formatar números de acordo com o formato personalizado e de acordo com a localidade.

5

DateFormat

Use para formatar datas de acordo com o local.

6

SimpleDateFormat

Use para formatar datas de acordo com o formato personalizado e de acordo com a localidade.

Internalização Java - configuração do ambiente

Neste capítulo, discutiremos os diferentes aspectos da configuração de um ambiente adequado para Java.

Configuração de ambiente local

Se você ainda deseja configurar seu ambiente para a linguagem de programação Java, esta seção o orienta sobre como fazer download e configurar o Java em sua máquina. A seguir estão as etapas para configurar o ambiente.

Java SE está disponível gratuitamente no link Download Java . Você pode baixar uma versão com base em seu sistema operacional.

Siga as instruções para baixar o Java e executar o .exepara instalar o Java em sua máquina. Depois de instalar o Java em sua máquina, você precisará definir as variáveis ​​de ambiente para apontar para os diretórios de instalação corretos -

Configurando o caminho para o Windows

Supondo que você tenha instalado o Java no diretório c: \ Arquivos de programas \ java \ jdk -

  • Clique com o botão direito em 'Meu Computador' e selecione 'Propriedades'.

  • Clique no botão 'Variáveis ​​de ambiente' na guia 'Avançado'.

  • Agora, altere a variável 'Path' para que também contenha o caminho para o executável Java. Por exemplo, se o caminho está definido atualmente para 'C: \ WINDOWS \ SYSTEM32', altere seu caminho para 'C: \ WINDOWS \ SYSTEM32; c: \ Arquivos de programas \ java \ jdk \ bin'.

Configurando o caminho para Linux, UNIX, Solaris, FreeBSD

A variável de ambiente PATH deve ser definida para apontar para onde os binários Java foram instalados. Consulte a documentação do shell, se tiver problemas para fazer isso.

Por exemplo, se você usar bash como seu shell, então você adicionaria a seguinte linha ao final de seu '.bashrc: export PATH = / path / to / java: $ PATH'

Editores Java populares

Para escrever seus programas Java, você precisará de um editor de texto. Existem IDEs ainda mais sofisticados disponíveis no mercado. Mas, por enquanto, você pode considerar um dos seguintes -

  • Notepad - Na máquina Windows, você pode usar qualquer editor de texto simples como o Notepad (recomendado para este tutorial), TextPad.

  • Netbeans - Um IDE Java que é de código aberto e gratuito, que pode ser baixado de https://www.netbeans.org/index.html.

  • Eclipse - Um IDE Java desenvolvido pela comunidade de código aberto eclipse e pode ser baixado de https://www.eclipse.org/.

O que vem a seguir?

O próximo capítulo ensinará como escrever e executar seu primeiro programa Java e algumas das importantes sintaxes básicas em Java necessárias para o desenvolvimento de aplicativos.

Internalização Java - classe local

Um objeto Locale representa uma região geográfica / política / cultural específica. Qualquer operação que requeira um Locale para realizar sua tarefa é chamada de operação com distinção de local e usa o Locale para dominar as informações relativas ao usuário. Por exemplo, exibir um número é uma operação que diferencia o local. O número deve ser formatado de acordo com os costumes e convenções do país, região ou cultura de origem do usuário.

Conteúdo local

Um objeto Locale contém o seguinte:

  • Language- Código de idioma ISO 639 alpha-2 ou alpha-3, ou subtags de idioma registrado com até 8 letras alfa. O código alfa-2 deve ser usado se os códigos alfa-2 e alfa-3 estiverem presentes. O campo de idioma não diferencia maiúsculas de minúsculas, mas Locale sempre canoniza para minúsculas.

  • Script- Código de script ISO 15924 alfa-4. O campo de script não diferencia maiúsculas de minúsculas, mas Locale sempre canoniza para maiúsculas e minúsculas.

  • Country (region)- código de país ISO 3166 alfa-2 ou código de área UN M.49 numérico-3. O campo do país não diferencia maiúsculas de minúsculas, mas Locale sempre canoniza para maiúsculas.

  • Variant- Qualquer valor arbitrário usado para indicar uma variação de um Local. Onde houver dois ou mais valores variantes, cada um indicando sua própria semântica, esses valores devem ser ordenados por importância, com o mais importante primeiro, separado por sublinhado ('_'). O campo variante diferencia maiúsculas de minúsculas.

  • Extensions- Um mapa de chaves de um único caractere para valores de string, indicando extensões além da identificação do idioma. As extensões no Locale implementam a semântica e a sintaxe das subetiquetas de extensão BCP 47 e subetiquetas de uso privado. As extensões não diferenciam maiúsculas de minúsculas, mas Locale canoniza todas as chaves e valores de extensão para minúsculas.

Internalização Java - Exemplo - Detalhes de localidade

Neste exemplo, obteremos a localidade padrão e imprimiremos seus detalhes. Em seguida, crie um local para "fr" e imprima seus detalhes.

I18NTester.java

import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale locale =Locale.getDefault();  

      System.out.println("Default Locale Properties:\n");

      System.out.println(locale.getDisplayCountry());  
      System.out.println(locale.getDisplayLanguage());  
      System.out.println(locale.getDisplayName());  
      System.out.println(locale.getISO3Country());  
      System.out.println(locale.getISO3Language());  
      System.out.println(locale.getLanguage());  
      System.out.println(locale.getCountry());  

      Locale frenchLocale = new Locale("fr","fr");

      System.out.println("\nfr Locale Properties:\n");
      System.out.println(frenchLocale.getDisplayCountry());  
      System.out.println(frenchLocale.getDisplayLanguage());  
      System.out.println(frenchLocale.getDisplayName());  
      System.out.println(frenchLocale.getISO3Country());  
      System.out.println(frenchLocale.getISO3Language());  
      System.out.println(frenchLocale.getLanguage());  
      System.out.println(frenchLocale.getCountry());  
   }
}

Resultado

Irá imprimir o seguinte resultado.

Default Locale Properties:

United States
English
English (United States)
USA
eng
en
US

fr Locale Properties:

France
French
French (France)
FRA
fra
fr
FR

Internalização Java - Exemplo - Linguagem de exibição

Neste exemplo, obteremos o idioma de exibição por localidade passado como um argumento.

I18NTester.java

import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale defaultLocale = Locale.getDefault();
      Locale enLocale = new Locale("en", "US");  
      Locale frLocale = new Locale("fr", "FR");  
      Locale esLocale = new Locale("es", "ES");

      System.out.println(defaultLocale.getDisplayLanguage(enLocale));
      System.out.println(defaultLocale.getDisplayLanguage(frLocale));
      System.out.println(defaultLocale.getDisplayLanguage(esLocale));
   }
}

Resultado

Irá imprimir o seguinte resultado.

English
anglais
inglés

Internalização Java - classe ResourceBundle

A classe ResourceBundle é usada para armazenar texto e objetos que são sensíveis ao local. Geralmente usamos arquivos de propriedade para armazenar texto específico do local e, em seguida, representá-los usando o objeto ResourceBundle. A seguir estão as etapas para usar o arquivo de propriedades específicas do código do idioma em um aplicativo baseado em java.

Etapa 1: Criar arquivos de propriedades.

Suponha que precisamos do arquivo de propriedades para o local em inglês. Em seguida, crie um nome de arquivo de propriedades XXX_en_US.properties em que XXX é o nome do arquivo e en_US representa o código do idioma para inglês (EUA).

Messages_en_US.properties

message=Welcome to TutorialsPoint.COM!

Vamos agora criar um arquivo de propriedades para o local francês. Em seguida, crie um nome de arquivo de propriedades XXX_fr_FR.properties em que XXX é o nome do arquivo e fr_FR representa o código do idioma para francês (França).

Messages_fr_FR.properties

message=Bienvenue sur TutorialsPoint.COM!

Aqui você pode descobrir que a chave é a mesma, mas o valor é específico da localidade em ambos os arquivos de propriedades.

Etapa 2: crie o objeto ResourceBundle

Crie o objeto ResourceBundle com o nome do arquivo de propriedades e local usando a seguinte sintaxe.

ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);

Etapa 3: obtenha o valor do objeto ResourceBundle.

Obtenha o valor do objeto ResourceBundle passando a chave.

String value = bundle.getString("message");

Exemplo

O exemplo a seguir ilustra o uso de objetos ResourceBundle para exibir valores específicos de local a partir de arquivos de propriedades.

IOTester.java

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

public class I18NTester {
   public static void main(String[] args) {
      ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);  
      System.out.println("Message in "+Locale.US +": "+bundle.getString("message"));  

      bundle = ResourceBundle.getBundle("Messages", Locale.FRANCE);  
      System.out.println("Message in "+Locale.FRANCE +": "+bundle.getString("message"));
   }
}

Resultado

Irá imprimir o seguinte resultado.

Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!

Notas para convenções de nomenclatura

A seguir estão as convenções de nomenclatura para o arquivo de propriedades.

  • Para o arquivo de propriedades mapeado para o código do idioma padrão, nenhum prefixo é obrigatório. message_en_US.properties é equivalente a message.properties.

  • Para o arquivo de propriedades mapeado para o local, o prefixo pode ser anexado de duas maneiras. message_fr.properties é equivalente a message_fr_FR.properties.

Internalização Java - classe NumberFormat

A classe java.text.NumberFormat é usada para formatar números e moedas de acordo com um local específico. Os formatos de número variam de país para país. Por exemplo, na Dinamarca, as frações de um número são separadas da parte inteira por vírgula, enquanto na Inglaterra usam um ponto como separador.

Exemplo - Formatar números

Neste exemplo, formatamos números com base na localidade dos EUA e na localidade dinamarquesa.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getInstance(daLocale);

      System.out.println(numberFormat.format(100.76));

      numberFormat = NumberFormat.getInstance(enLocale);

      System.out.println(numberFormat.format(100.76));
   }
}

Resultado

Irá imprimir o seguinte resultado.

100,76
100.76

Internalização Java - formato de moedas

Neste exemplo, estamos formatando moedas com base na localidade dos EUA e na localidade dinamarquesa.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getCurrencyInstance(daLocale);

      System.out.println(numberFormat.format(100.76));

      numberFormat = NumberFormat.getCurrencyInstance(enLocale);

      System.out.println(numberFormat.format(100.76));
   }
}

Resultado

Irá imprimir o seguinte resultado.

kr 100,76
$100.76

Internalização Java - Porcentagens de formato

Neste exemplo, estamos formatando números em formato de porcentagem.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");        

      NumberFormat numberFormat = NumberFormat.getPercentInstance(enLocale);

      System.out.println(numberFormat.format(0.76));    
   }
}

Resultado

Irá imprimir o seguinte resultado.

76%

Internalização Java - Definir precisão mínima / máxima

Neste exemplo, estamos definindo dígitos mínimo e máximo para o inteiro e também para a parte fracionária de um número.

IOTester.java

import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  

      NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
      numberFormat.setMinimumIntegerDigits(2);
      numberFormat.setMaximumIntegerDigits(3);

      numberFormat.setMinimumFractionDigits(2);
      numberFormat.setMaximumFractionDigits(3);

      System.out.println(numberFormat.format(12234.763443));
   }
}

Resultado

Irá imprimir o seguinte resultado.

234.763

Internalização Java - Definir modo de arredondamento

Neste exemplo, estamos apresentando o Modo de arredondamento.

IOTester.java

import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale enLocale = new Locale("en", "US");  
 
      NumberFormat numberFormat = NumberFormat.getInstance(enLocale);

      numberFormat.setMinimumFractionDigits(0);
      numberFormat.setMaximumFractionDigits(0);

      System.out.println(numberFormat.format(99.50));

      numberFormat.setRoundingMode(RoundingMode.HALF_DOWN);

      System.out.println(numberFormat.format(99.50));
   }
}

Resultado

Irá imprimir o seguinte resultado.

100
99

Internalização Java - análise de números

Neste exemplo, estamos mostrando a análise do número presente em diferentes localidades.

IOTester.java

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
      Locale enLocale = new Locale("en", "US");  
      Locale daLocale = new Locale("da", "DK");

      NumberFormat numberFormat = NumberFormat.getInstance(daLocale);

      System.out.println(numberFormat.parse("100,76"));

      numberFormat = NumberFormat.getInstance(enLocale);

      System.out.println(numberFormat.parse("100,76"));
   }
}

Resultado

Irá imprimir o seguinte resultado.

100.76
10076

Internalização Java - classe DecimalFormat

A classe java.text.DecimalFormat é usada para formatar números de acordo com o formato personalizado e de acordo com o local.

Exemplo - Formatar números

Neste exemplo, estamos formatando números com base em um determinado padrão.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "####,####.##";
      double number = 123456789.123;
      
      DecimalFormat numberFormat = new DecimalFormat(pattern);

      System.out.println(number);
      
      System.out.println(numberFormat.format(number));
   }
}

Resultado

Irá imprimir o seguinte resultado.

1.23456789123E8
1,2345,6789.12

Internalização Java - padrões de formato

A seguir está o uso de caracteres em padrões de formatação.

Sr. Não. Classe e descrição
1

0

Exibir 0 se menos dígitos estiverem presentes.

2

#

Para exibir o dígito omitindo os zeros à esquerda.

3

.

Separador decimal.

4

,

Separador de agrupamento.

5

E

Mantissa e separador de expoentes para formatos exponenciais.

6

;

Separador de formato.

7

-

Prefixo de número negativo.

8

%

Mostra o número como porcentagem após a multiplicação por 100.

9

?

Mostra o número em mil após a multiplicação por 1000.

10

X

Para marcar o caractere como um prefixo / sufixo numérico.

11

'

Para marcar citação em torno de caracteres especiais.

Neste exemplo, formatamos números com base em padrões diferentes.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "###.###";
      double number = 123456789.123;

      DecimalFormat numberFormat = new DecimalFormat(pattern);

      System.out.println(number);

      //pattern ###.###
      System.out.println(numberFormat.format(number));

      //pattern ###.#
      numberFormat.applyPattern("###.#");
      System.out.println(numberFormat.format(number));

      //pattern ###,###.##
      numberFormat.applyPattern("###,###.##");
      System.out.println(numberFormat.format(number));

      number = 9.34;

      //pattern 000.###
      numberFormat.applyPattern("000.##");
      System.out.println(numberFormat.format(number));           
   }
}

Resultado

Irá imprimir o seguinte resultado.

1.23456789123E8
1,2345,6789.12

Internalização de Java - DecimalFormat específico de local

Por padrão, o objeto DecimalFormat está usando o locale da JVM. Podemos alterar a localidade padrão ao criar o objeto DecimalFormat usando a classe NumberFormat. No exemplo abaixo, usaremos o mesmo padrão para duas localidades diferentes e você pode identificar a diferença na saída.

IOTester.java

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "###.##";
      double number = 123.45;

      Locale enlocale  = new Locale("en", "US");
      Locale dalocale  = new Locale("da", "DK");

      DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(enlocale);
      decimalFormat.applyPattern(pattern);

      System.out.println(decimalFormat.format(number));
   

      decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(dalocale);
      decimalFormat.applyPattern(pattern);

      System.out.println(decimalFormat.format(number));     
   }
}

Resultado

Irá imprimir o seguinte resultado.

123.45
123,45

Internalização Java - classe DecimalFormatSymbols

Usando a classe DecimalFormatSymbols, os símbolos separadores padrão, símbolos separadores de agrupamento etc. podem ser alterados. O exemplo a seguir ilustra o mesmo.

IOTester.java

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "#,###.###";
      double number = 126473.4567;

      DecimalFormat decimalFormat = new DecimalFormat(pattern);

      System.out.println(decimalFormat.format(number));
   

      DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
      decimalFormatSymbols.setDecimalSeparator(';');
      decimalFormatSymbols.setGroupingSeparator(':');

      decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);

      System.out.println(decimalFormat.format(number));
   }
}

Resultado

Irá imprimir o seguinte resultado.

126,473.457
126:473;457

Internalização Java - Agrupando dígitos

Usando o método setGroupingSize () de DecimalFormat, o agrupamento padrão de números pode ser alterado. O exemplo a seguir ilustra o mesmo.

IOTester.java

import java.text.DecimalFormat;

public class I18NTester {
   public static void main(String[] args) {
      double number = 121223232473.4567;

      DecimalFormat decimalFormat = new DecimalFormat();

      System.out.println(number);
      System.out.println(decimalFormat.format(number));
   

      decimalFormat.setGroupingSize(4);
      System.out.println(decimalFormat.format(number));
   
   }
}

Resultado

Irá imprimir o seguinte resultado.

1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457

Internalização Java - classe DateFormat

A classe java.text.DateFormat formata datas de acordo com o local. Como países diferentes usam formatos diferentes para exibir datas. Essa classe é extremamente útil para lidar com datas na internalização de aplicativos. O exemplo a seguir mostra como criar e usar a classe DateFormat.

IOTester.java

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) {
      Locale locale = new Locale("da","DK");

      DateFormat dateFormat = DateFormat.getDateInstance();

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);

      System.out.println(dateFormat.format(new Date()));
   }
}

Resultado

Irá imprimir o seguinte resultado.

Nov 29, 2017
29-11-2017

Internalização Java - Datas de formatação

A classe DateFormat fornece vários formatos para formatar a data. A seguir está uma lista de alguns dos formatos.

  • DateFormat.DEFAULT

  • DateFormat.SHORT

  • DateFormat.MEDIUM

  • DateFormat.LONG

  • DateFormat.FULL

No exemplo a seguir, mostraremos como usar formatos diferentes.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {
   
      DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  
  
   }
}

Resultado

Irá imprimir o seguinte resultado.

Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017

Internalização Java - Tempo de formatação

A classe DateFormat fornece vários formatos para formatar a hora. O método DateFormat.getTimeInstance () deve ser usado. Veja o exemplo abaixo.

No exemplo a seguir, mostraremos como usar diferentes formatos para formatar a hora.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {
   
      DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getTimeInstance(DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  
  
   }
}

Resultado

Irá imprimir o seguinte resultado.

4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST

Internalização Java - Formatando Data e Hora

A classe DateFormat fornece vários formatos para formatar a data e a hora juntas. O método DateFormat.getDateTimeInstance () deve ser usado. Veja o exemplo abaixo.

No exemplo a seguir, mostraremos como usar diferentes formatos para formatar data e hora.

IOTester.java

import java.text.DateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) {

      DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

      System.out.println(dateFormat.format(new Date()));

      dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

      System.out.println(dateFormat.format(new Date()));
  

   }
}

Resultado

Irá imprimir o seguinte resultado.

Nov 29, 2017 4:16:13 PM
11/29/17 4:16 PM
Nov 29, 2017 4:16:13 PM
November 29, 2017 4:16:13 PM IST
Wednesday, November 29, 2017 4:16:13 PM IST

Internalização Java - classe SimpleDateFormat

A classe java.text.SimpleDateFormat formata datas de acordo com o padrão fornecido. Ele também é usado para analisar datas de string em que string contém data no formato mencionado. Veja o seguinte exemplo de uso da classe SimpleDateFormat.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
   
      String pattern = "dd-MM-yyyy";

      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

      Date date = new Date();

      System.out.println(date);
      System.out.println(simpleDateFormat.format(date));

      String dateText = "29-11-2017";

      date = simpleDateFormat.parse(dateText);

      System.out.println(simpleDateFormat.format(date));
   }
}

Resultado

Irá imprimir o seguinte resultado.

Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017

Internalização de Java - SimpleDateFormat específico do local

Locale pode ser usado para criar formatação específica de localidade sobre um padrão na classe SimpleDateFormat. Veja o seguinte exemplo de uso da classe SimpleDateFormat específica do local.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class I18NTester {
   public static void main(String[] args) throws ParseException {

      Locale locale = new Locale("da", "DK");
      String pattern = "EEEEE MMMMM yyyy";

      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

      Date date = new Date();

      System.out.println(date);
      System.out.println(simpleDateFormat.format(date));

      simpleDateFormat = new SimpleDateFormat(pattern,locale);

      System.out.println(simpleDateFormat.format(date));
   }
}

Resultado

Irá imprimir o seguinte resultado.

Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017

Internalização Java - classe DecimalFormatSymbols

Usando a classe DecimalFormatSymbols, os símbolos separadores padrão, símbolos separadores de agrupamento etc. podem ser alterados. O exemplo a seguir ilustra o mesmo.

IOTester.java

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class I18NTester {
   public static void main(String[] args) {
      String pattern = "#,###.###";
      double number = 126473.4567;

      DecimalFormat decimalFormat = new DecimalFormat(pattern);

      System.out.println(decimalFormat.format(number));
   

      DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
      decimalFormatSymbols.setDecimalSeparator(';');
      decimalFormatSymbols.setGroupingSeparator(':');

      decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);

      System.out.println(decimalFormat.format(number));
   }
}

Resultado

Irá imprimir o seguinte resultado.

126,473.457
126:473;457

Internalização Java - padrões de formato de data

A seguir está o uso de caracteres em padrões de formatação de data.

Sr. Não. Classe e descrição
1

G

Para exibir Era.

2

y

Para exibir o ano. Valores válidos yy, yyyy.

3

M

Para exibir o mês. Valores válidos MM, MMM ou MMMMM.

4

d

Para exibir o dia do mês. Valores válidos d, dd.

5

h

Para exibir a hora do dia (1-12 AM / PM). Valor válido hh.

6

H

Para exibir a hora do dia (0-23). Valor válido HH.

7

m

Para exibir os minutos da hora (0-59). Valor válido mm.

8

s

Para exibir os segundos do minuto (0-59). Valor válido ss.

9

S

Para exibir milissegundos de minuto (0-999). Valor válido SSS.

10

E

Para exibir o dia da semana (por exemplo, segunda, terça, etc.)

11

D

Para exibir o dia no ano (1-366).

12

F

Para exibir o dia da semana no mês (por exemplo, 1ª quinta-feira de dezembro).

13

w

Para exibir a semana no ano (1-53).

14

W

Para exibir a semana no mês (0-5)

15

a

Para exibir AM / PM

16

k

Para exibir a hora do dia (1-24).

17

K

Para exibir a hora do dia, AM / PM (0-11).

18

z

Para exibir o fuso horário.

Neste exemplo, formatamos datas com base em padrões diferentes.

IOTester.java

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class I18NTester {
   public static void main(String[] args) throws ParseException {

      String pattern = "dd-MM-yy";
      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
      Date date = new Date();
      System.out.println(simpleDateFormat.format(date));

      pattern = "MM-dd-yyyy";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));

      pattern = "yyyy-MM-dd HH:mm:ss";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));

      pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
      simpleDateFormat = new SimpleDateFormat(pattern);
      System.out.println(simpleDateFormat.format(date));
}
}

Resultado

Irá imprimir o seguinte resultado.

29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530

Internalização Java - UTC

UTC significa Tempo Universal Coordenado. É o padrão de tempo e é comumente usado em todo o mundo. Todos os fusos horários são calculados comparativamente com o UTC como compensação. Por exemplo, o horário em Copenhague, na Dinamarca, é UTC + 1, significa o horário UTC mais uma hora. É independente do horário de verão e deve ser usado para armazenar data e hora em bancos de dados.

Conversão de fusos horários

O exemplo a seguir mostrará a conversão de vários fusos horários. Imprimiremos a hora do dia e a hora em milissegundos. O primeiro irá variar e o segundo permanecerá o mesmo.

IOTester.java

import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
   
      Calendar date = new GregorianCalendar();

      date.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
      date.set(Calendar.HOUR_OF_DAY, 12);

      System.out.println("UTC: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("UTC: " + date.getTimeInMillis());

      date.setTimeZone(TimeZone.getTimeZone("Europe/Copenhagen"));
      System.out.println("CPH: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("CPH: " + date.getTimeInMillis());

      date.setTimeZone(TimeZone.getTimeZone("America/New_York"));
      System.out.println("NYC: " + date.get(Calendar.HOUR_OF_DAY));
      System.out.println("NYC: " + date.getTimeInMillis());
   }
}

Resultado

Irá imprimir o seguinte resultado.

UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540

Fusos horários disponíveis

O exemplo a seguir mostrará os fusos horários disponíveis com o sistema.

IOTester.java

import java.text.ParseException;
import java.util.TimeZone;

public class I18NTester {
   public static void main(String[] args) throws ParseException {
      String[] availableIDs = TimeZone.getAvailableIDs();

      for(String id : availableIDs) {
         System.out.println("Timezone = " + id);
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST

Internalização Java - Conversão Unicode de / para String

Em java, o texto é armazenado internamente no formato Unicode. Se a entrada / saída estiver em um formato diferente, a conversão será necessária.

Conversão

O exemplo a seguir mostrará a conversão de uma String Unicode para byte UTF8 [] e byte UTF8 [] para byte Unicode [].

IOTester.java

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.ParseException;

public class I18NTester {
   public static void main(String[] args) throws ParseException, UnsupportedEncodingException {

      String unicodeString = "\u00C6\u00D8\u00C5" ;

      //convert Unicode to UTF8 format
      byte[] utf8Bytes = unicodeString.getBytes(Charset.forName("UTF-8"));
      printBytes(utf8Bytes, "UTF 8 Bytes");

      //convert UTF8 format to Unicode
      String converted = new String(utf8Bytes, "UTF8");
      byte[] unicodeBytes = converted.getBytes();
      printBytes(unicodeBytes, "Unicode Bytes");
   }

   public static void printBytes(byte[] array, String name) {
      for (int k = 0; k < array.length; k++) {
         System.out.println(name + "[" + k + "] = " + array[k]);
          
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

UTF 8 Bytes[0] = -61
UTF 8 Bytes[1] = -122
UTF 8 Bytes[2] = -61
UTF 8 Bytes[3] = -104
UTF 8 Bytes[4] = -61
UTF 8 Bytes[5] = -123
Unicode Bytes[0] = -58
Unicode Bytes[1] = -40
Unicode Bytes[2] = -59

Internalização Java - Conversão Unicode de / para Leitor / Escritor

As classes Reader e Writer são classes de fluxo orientadas a caracteres. Eles podem ser usados ​​para ler e converter caracteres Unicode.

Conversão

O exemplo a seguir mostrará a conversão de uma String Unicode em UTF8 byte [] e UTF8 byte [] em Unicode byte [] usando as classes Reader e Writer.

IOTester.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.ParseException;

public class I18NTester {
   public static void main(String[] args) throws ParseException, IOException {

      String input = "This is a sample text" ;

      InputStream inputStream = new ByteArrayInputStream(input.getBytes());

      //get the UTF-8 data
      Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));

      //convert UTF-8 to Unicode
      int data = reader.read();
      while(data != -1){
         char theChar = (char) data;
         System.out.print(theChar);
         data = reader.read();
      }
      reader.close();

      System.out.println();

      //Convert Unicode to UTF-8 Bytes
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
      Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));

      writer.write(input);
      writer.close();

      String out = new String(outputStream.toByteArray());
   
      System.out.println(out);
   }  
}

Resultado

Irá imprimir o seguinte resultado.

This is a sample text
This is a sample text
Impressão