Internalización de Java - Guía rápida

Internalización

Internalización o I18N se refiere a la capacidad de una Aplicación para poder servir a los usuarios en múltiples y diferentes idiomas. Java tiene soporte incorporado para internalización. Java también proporciona formato de números, monedas y ajuste de fecha y hora en consecuencia.

La internacionalización de Java ayuda a que una aplicación de Java maneje diferentes idiomas, formatos de números, monedas y formato de hora específico de la región.

Localización

La localización o L10N es la adaptabilidad de una aplicación, es decir, cómo una aplicación se adapta a un idioma específico, formatos de números, configuraciones de fecha y hora, etc.

Una aplicación java debe internacionalizarse para poder localizarse.

Información culturalmente dependiente

Los siguientes elementos de información a menudo varían según las diferentes zonas horarias o culturas.

  • Messages

  • Date

  • Time

  • Number

  • Currency

  • Measurements

  • Números de teléfono

  • Direcciones postales

  • Etiquetas GUI

Clases de internacionalización

Java tiene un conjunto de clases integradas que ayudan en la internacionalización de una aplicación. Estas clases son las siguientes:

No Señor. Clase y descripción
1

Locale

Representa un idioma junto con el país / región.

2

ResourceBundle

Contiene texto u objetos localizados.

3

NumberFormat

Úselo para formatear números / monedas según la configuración regional.

4

DecimalFormat

Úselo para formatear números según el formato personalizado y según la configuración regional.

5

DateFormat

Úselo para dar formato a las fechas según la configuración regional.

6

SimpleDateFormat

Úselo para formatear fechas según el formato personalizado y según la configuración regional.

Internalización de Java: configuración del entorno

En este capítulo, discutiremos los diferentes aspectos de la configuración de un entorno agradable para Java.

Configuración del entorno local

Si todavía está dispuesto a configurar su entorno para el lenguaje de programación Java, esta sección lo guía sobre cómo descargar y configurar Java en su máquina. Los siguientes son los pasos para configurar el entorno.

Java SE está disponible gratuitamente desde el enlace Descargar Java . Puede descargar una versión basada en su sistema operativo.

Siga las instrucciones para descargar Java y ejecutar el .exepara instalar Java en su máquina. Una vez que haya instalado Java en su máquina, deberá configurar las variables de entorno para que apunten a los directorios de instalación correctos:

Configuración de la ruta para Windows

Suponiendo que haya instalado Java en el directorio c: \ Archivos de programa \ java \ jdk -

  • Haga clic derecho en 'Mi PC' y seleccione 'Propiedades'.

  • Haga clic en el botón 'Variables de entorno' en la pestaña 'Avanzado'.

  • Ahora, modifique la variable 'Ruta' para que también contenga la ruta al ejecutable de Java. Por ejemplo, si la ruta está configurada actualmente en 'C: \ WINDOWS \ SYSTEM32', cambie su ruta para que lea 'C: \ WINDOWS \ SYSTEM32; c: \ Archivos de programa \ java \ jdk \ bin'.

Configuración de la ruta para Linux, UNIX, Solaris, FreeBSD

La variable de entorno PATH debe establecerse para que apunte a dónde se han instalado los binarios de Java. Consulte la documentación de su shell, si tiene problemas para hacer esto.

Por ejemplo, si usa bash como su shell, entonces agregaría la siguiente línea al final de su '.bashrc: export PATH = / path / to / java: $ PATH'

Editores populares de Java

Para escribir sus programas Java, necesitará un editor de texto. Hay IDE aún más sofisticados disponibles en el mercado. Pero por ahora, puede considerar uno de los siguientes:

  • Notepad - En una máquina con Windows, puede usar cualquier editor de texto simple como el Bloc de notas (recomendado para este tutorial), TextPad.

  • Netbeans - Un IDE de Java que es de código abierto y gratuito que se puede descargar desde https://www.netbeans.org/index.html.

  • Eclipse - Un IDE de Java desarrollado por la comunidad de código abierto eclipse y se puede descargar desde https://www.eclipse.org/.

¿Lo que sigue?

El próximo capítulo le enseñará cómo escribir y ejecutar su primer programa Java y algunas de las sintaxis básicas importantes en Java necesarias para desarrollar aplicaciones.

Internalización de Java - Clase de configuración regional

Un objeto Locale representa una región geográfica / política / cultural específica. Cualquier operación que requiera que un entorno local realice su tarea se denomina operación sensible al entorno local y utiliza el entorno local para dominar la información relativa al usuario. Por ejemplo, mostrar un número es una operación que depende de la configuración regional. El número debe tener el formato de las costumbres y convenciones del país, región o cultura nativa del usuario.

Contenido de la configuración regional

Un objeto Locale contiene lo siguiente:

  • Language- Código de idioma ISO 639 alpha-2 o alpha-3, o subetiquetas de idioma registrado de hasta 8 letras alfabéticas. Se debe usar el código alpha-2 si están presentes tanto el código alpha-2 como el alpha-3. El campo de idioma no distingue entre mayúsculas y minúsculas, pero Locale siempre se canoniza a minúsculas.

  • Script- Código de script ISO 15924 alpha-4. El campo de secuencia de comandos no distingue entre mayúsculas y minúsculas, pero Locale siempre se canoniza al título.

  • Country (region)- Código de país ISO 3166 alfa-2 o código de área UN M.49 numérico-3. El campo del país no distingue entre mayúsculas y minúsculas, pero Locale siempre se canoniza a mayúsculas.

  • Variant- Cualquier valor arbitrario utilizado para indicar una variación de una configuración regional. Cuando hay dos o más valores variantes, cada uno de los cuales indica su propia semántica, estos valores deben ordenarse por importancia, con los más importantes primero, separados por un guión bajo ('_'). El campo de variantes distingue entre mayúsculas y minúsculas.

  • Extensions- Un mapa de claves de un solo carácter a valores de cadena, indicando extensiones además de la identificación del idioma. Las extensiones en Locale implementan la semántica y la sintaxis de las subetiquetas de extensión BCP 47 y las subetiquetas de uso privado. Las extensiones no distinguen entre mayúsculas y minúsculas, pero Locale canonicaliza todas las claves y valores de extensión a minúsculas.

Internalización de Java - Ejemplo - Detalles de la configuración regional

En este ejemplo, obtendremos la configuración regional predeterminada e imprimiremos sus detalles. Luego cree una configuración regional para "fr" e imprima sus detalles.

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());  
   }
}

Salida

Imprimirá el siguiente 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

Internalización de Java - Ejemplo - Lenguaje de visualización

En este ejemplo, obtendremos el idioma de visualización por configuración regional pasada como 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));
   }
}

Salida

Imprimirá el siguiente resultado.

English
anglais
inglés

Internalización de Java - Clase ResourceBundle

La clase ResourceBundle se usa para almacenar texto y objetos que son sensibles a la configuración regional. Generalmente usamos archivos de propiedades para almacenar texto específico de la configuración regional y luego representarlos usando el objeto ResourceBundle. Los siguientes son los pasos para usar el archivo de propiedades específicas de la configuración regional en una aplicación basada en Java.

Paso 1: crear archivos de propiedades.

Supongamos que necesitamos un archivo de propiedades para la configuración regional en inglés. A continuación, cree un nombre de archivo de propiedades XXX_en_US.properties donde XXX es el nombre del archivo y en_US representa la configuración regional para inglés (EE. UU.).

Messages_en_US.properties

message=Welcome to TutorialsPoint.COM!

Creemos ahora un archivo de propiedades para la configuración regional francesa. A continuación, cree un nombre de archivo de propiedades XXX_fr_FR.properties donde XXX es el nombre del archivo y fr_FR representa la configuración regional para francés (Francia).

Messages_fr_FR.properties

message=Bienvenue sur TutorialsPoint.COM!

Aquí puede averiguar que la clave es la misma, pero el valor es específico de la configuración regional en ambos archivos de propiedades.

Paso 2: Crear objeto ResourceBundle

Cree el objeto ResourceBundle con el nombre del archivo de propiedades y la configuración regional utilizando la siguiente sintaxis.

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

Paso 3: Obtenga el valor del objeto ResourceBundle.

Obtenga el valor del objeto ResourceBundle pasando la clave.

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

Ejemplo

El siguiente ejemplo ilustra el uso de objetos ResourceBundle para mostrar valores específicos de la configuración regional de los archivos de propiedades.

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"));
   }
}

Salida

Imprimirá el siguiente resultado.

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

Notas para las convenciones de nomenclatura

A continuación se muestran las convenciones de nomenclatura para el archivo de propiedades.

  • Para el archivo de propiedades asignado a la configuración regional predeterminada, no es obligatorio ningún prefijo. message_en_US.properties es equivalente a message.properties.

  • Para el archivo de propiedades asignado a la configuración regional, el prefijo se puede adjuntar de dos maneras. message_fr.properties es equivalente a message_fr_FR.properties.

Internalización de Java - Clase NumberFormat

La clase java.text.NumberFormat se utiliza para formatear números y monedas según una configuración regional específica. Los formatos numéricos varían de un país a otro. Por ejemplo, en Dinamarca las fracciones de un número se separan de la parte entera usando una coma, mientras que en Inglaterra usan un punto como separador.

Ejemplo: formato de números

En este ejemplo, estamos formateando números según la configuración regional de EE. UU. Y la configuración regional danesa.

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));
   }
}

Salida

Imprimirá el siguiente resultado.

100,76
100.76

Internalización de Java: formato de monedas

En este ejemplo, estamos formateando monedas según la configuración regional de EE. UU. Y la configuración regional danesa.

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));
   }
}

Salida

Imprimirá el siguiente resultado.

kr 100,76
$100.76

Internalización de Java - Porcentajes de formato

En este ejemplo, estamos formateando números en formato de porcentaje.

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));    
   }
}

Salida

Imprimirá el siguiente resultado.

76%

Internalización de Java - Establecer precisión mínima / máxima

En este ejemplo, estamos configurando dígitos mínimos y máximos tanto para el entero como para la parte fraccionaria de un 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));
   }
}

Salida

Imprimirá el siguiente resultado.

234.763

Internalización de Java: establecer el modo de redondeo

En este ejemplo, mostramos el modo de redondeo.

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));
   }
}

Salida

Imprimirá el siguiente resultado.

100
99

Internalización de Java: análisis de números

En este ejemplo, mostramos el análisis de números presentes en diferentes configuraciones regionales.

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"));
   }
}

Salida

Imprimirá el siguiente resultado.

100.76
10076

Internalización de Java - Clase DecimalFormat

La clase java.text.DecimalFormat se utiliza para formatear números según el formato personalizado y según la configuración regional.

Ejemplo: formato de números

En este ejemplo, estamos formateando números según un patrón determinado.

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));
   }
}

Salida

Imprimirá el siguiente resultado.

1.23456789123E8
1,2345,6789.12

Internalización de Java - Patrones de formato

Lo siguiente es el uso de caracteres en patrones de formato.

No Señor. Clase y descripción
1

0

Para mostrar 0 si hay menos dígitos presentes.

2

#

Para mostrar dígitos omitiendo ceros iniciales.

3

.

Separador decimal.

4

,

Separador de agrupamiento.

5

E

Separador de mantisa y exponente para formatos exponenciales.

6

;

Separador de formato.

7

-

Prefijo de número negativo.

8

%

Muestra el número como porcentaje después de multiplicar por 100.

9

?

Muestra el número como mil después de multiplicar por 1000.

10

X

Para marcar un carácter como prefijo / sufijo numérico.

11

'

Para marcar comillas alrededor de caracteres especiales.

En este ejemplo, estamos formateando números basados ​​en diferentes patrones.

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));           
   }
}

Salida

Imprimirá el siguiente resultado.

1.23456789123E8
1,2345,6789.12

Internalización de Java: formato decimal específico de la configuración regional

De forma predeterminada, el objeto DecimalFormat utiliza la configuración regional de la JVM. Podemos cambiar la configuración regional predeterminada mientras creamos el objeto DecimalFormat usando la clase NumberFormat. En el siguiente ejemplo, usaremos el mismo patrón para dos configuraciones regionales diferentes y puede detectar la diferencia en la salida.

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));     
   }
}

Salida

Imprimirá el siguiente resultado.

123.45
123,45

Internalización de Java - Clase DecimalFormatSymbols

Usando la clase DecimalFormatSymbols, se pueden cambiar los símbolos separadores predeterminados, los símbolos separadores de agrupación, etc. El siguiente ejemplo ilustra lo mismo.

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));
   }
}

Salida

Imprimirá el siguiente resultado.

126,473.457
126:473;457

Internalización de Java: agrupación de dígitos

Usando el método setGroupingSize () de DecimalFormat, se puede cambiar la agrupación predeterminada de números. El siguiente ejemplo ilustra lo mismo.

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));
   
   }
}

Salida

Imprimirá el siguiente resultado.

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

Internalización de Java - Clase DateFormat

La clase java.text.DateFormat da formato a las fechas según la configuración regional. Como los diferentes países utilizan diferentes formatos para mostrar las fechas. Esta clase es extremadamente útil para tratar las fechas en la internalización de la aplicación. El siguiente ejemplo muestra cómo crear y usar la clase 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()));
   }
}

Salida

Imprimirá el siguiente resultado.

Nov 29, 2017
29-11-2017

Internalización de Java: formato de fechas

La clase DateFormat proporciona varios formatos para formatear la fecha. A continuación se muestra una lista de algunos de los formatos.

  • DateFormat.DEFAULT

  • DateFormat.SHORT

  • DateFormat.MEDIUM

  • DateFormat.LONG

  • DateFormat.FULL

En el siguiente ejemplo mostraremos cómo usar diferentes formatos.

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()));
  
  
   }
}

Salida

Imprimirá el siguiente resultado.

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

Internalización de Java: tiempo de formato

La clase DateFormat proporciona varios formatos para formatear la hora. Se utilizará el método DateFormat.getTimeInstance (). Vea el ejemplo a continuación.

En el siguiente ejemplo, mostraremos cómo usar diferentes formatos para formatear la 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()));
  
  
   }
}

Salida

Imprimirá el siguiente resultado.

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

Internalización de Java: formateo de fecha y hora

La clase DateFormat proporciona varios formatos para formatear la fecha y la hora juntas. Se utilizará el método DateFormat.getDateTimeInstance (). Vea el ejemplo a continuación.

En el siguiente ejemplo, mostraremos cómo usar diferentes formatos para formatear la fecha y la 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()));
  

   }
}

Salida

Imprimirá el siguiente 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

Internalización de Java - Clase SimpleDateFormat

La clase java.text.SimpleDateFormat formatea las fechas según el patrón dado. También se utiliza para analizar las fechas de una cadena donde la cadena contiene la fecha en el formato mencionado. Vea el siguiente ejemplo de uso de la clase 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));
   }
}

Salida

Imprimirá el siguiente resultado.

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

Internalización de Java: SimpleDateFormat específico de la configuración regional

La configuración regional se puede utilizar para crear un formato específico de la configuración regional sobre un patrón en la clase SimpleDateFormat. Vea el siguiente ejemplo del uso de la clase SimpleDateFormat específica de la configuración regional.

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));
   }
}

Salida

Imprimirá el siguiente resultado.

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

Internalización de Java - Clase DecimalFormatSymbols

Usando la clase DecimalFormatSymbols, se pueden cambiar los símbolos separadores predeterminados, los símbolos separadores de agrupación, etc. El siguiente ejemplo ilustra lo mismo.

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));
   }
}

Salida

Imprimirá el siguiente resultado.

126,473.457
126:473;457

Internalización de Java - Patrones de formato de fecha

Lo siguiente es el uso de caracteres en patrones de formato de fecha.

No Señor. Clase y descripción
1

G

Para mostrar Era.

2

y

Para mostrar el año. Valores válidos yy, yyyy.

3

M

Para mostrar el mes. Valores válidos MM, MMM o MMMMM.

4

d

Para mostrar el día del mes. Valores válidos d, dd.

5

h

Para mostrar la hora del día (1-12 AM / PM). Valor válido hh.

6

H

Para mostrar la hora del día (0-23). Valor válido HH.

7

m

Para mostrar los minutos de la hora (0-59). Valor válido mm.

8

s

Para mostrar el segundo del minuto (0-59). Valor válido ss.

9

S

Para mostrar milisegundos de minuto (0-999). Valor válido SSS.

10

E

Para mostrar el día de la semana (p. Ej., Lunes, martes, etc.)

11

D

Para mostrar el día del año (1-366).

12

F

Para mostrar el día de la semana en el mes (por ejemplo, el primer jueves de diciembre).

13

w

Para mostrar la semana del año (1-53).

14

W

Para mostrar la semana en el mes (0-5)

15

a

Para mostrar AM / PM

dieciséis

k

Para mostrar la hora del día (1-24).

17

K

Para mostrar la hora del día, AM / PM (0-11).

18

z

Para mostrar la zona horaria.

En este ejemplo, estamos formateando fechas en función de diferentes patrones.

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));
}
}

Salida

Imprimirá el siguiente resultado.

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

Internalización de Java - UTC

UTC significa Hora Universal Coordinada. Es estándar de tiempo y se usa comúnmente en todo el mundo. Todas las zonas horarias se calculan comparativamente con UTC como compensación. Por ejemplo, la hora en Copenhague, Dinamarca es UTC + 1, lo que significa la hora UTC más una hora. Es independiente del horario de verano y debe usarse para almacenar la fecha y la hora en bases de datos.

Conversión de husos horarios

El siguiente ejemplo mostrará la conversión de varias zonas horarias. Imprimiremos la hora del día y la hora en milisegundos. El primero variará y el segundo seguirá siendo el mismo.

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());
   }
}

Salida

Imprimirá el siguiente resultado.

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

Zonas horarias disponibles

El siguiente ejemplo mostrará las zonas horarias disponibles con el 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);
      }
   }
}

Salida

Imprimirá el siguiente resultado.

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

Internalización de Java - Conversión Unicode de / a String

En java, el texto se almacena internamente en formato Unicode. Si la entrada / salida tiene un formato diferente, se requiere conversión.

Conversión

El siguiente ejemplo mostrará la conversión de una cadena Unicode a un byte UTF8 [] y un byte UTF8 [] a un 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]);
          
      }
   }
}

Salida

Imprimirá el siguiente 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

Internalización de Java - Conversión Unicode de / a Reader / Writer

Las clases Reader y Writer son clases de flujo orientadas a caracteres. Estos se pueden utilizar para leer y convertir caracteres Unicode.

Conversión

El siguiente ejemplo mostrará la conversión de una cadena Unicode a un byte UTF8 [] y un byte UTF8 [] a un byte Unicode [] utilizando las clases Reader y 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);
   }  
}

Salida

Imprimirá el siguiente resultado.

This is a sample text
This is a sample text
Impresión