Internacionalización de Programas Java

Muchos programas no son internacionalizados cuando se escriben por primera vez. Estos programas podr�an haber empezado como prototipos, o quiz�s no se hubiera pensado en su distribuci�n internacional. Si se necesita internacionalizar un programa existente, se deber�an realizar las siguientes tareas.

  • Identificar los datos dependientes de la cultura.

    Los mensajes de texto son la forma m�s obvia de datos que var�an con la cultura, porque deben ser traducidos. Sin embargo, hay otros tipos de datos que podr�an variar con la regi�n o el idioma. La siguiente lista contiene ejemplos de datos dependientes de la cultura.

    • mensajes
    • etiquetas de componentes GUI
    • ayuda online
    • sonidos
    • colores
    • grafuicos
    • iconos
    • fechas
    • horas
    • n�meros
    • monedas
    • medidas
    • n�meros de tel�fono
    • honores y t�tulos
    • direcciones
    • distribuciones de p�gina

    Para m�s informaci�n puedes ver Datos sensibles a la Cultura

  • Aislar texto traducible en fardos de recursos.

    La traducci�n es costosa. Se puede ayudar a reducir los costes aislando el texto que debe ser traducido en objetos ResourceBundle. El texto traducible incluye mensajes de estado, mensajes de error, entradas de diario, y etiquetas de componentes GUI. Este texto est� codificado dentro de los programas que no han sido internacionalizados. Se necesitar� localizar las ocurrencias del texto escrito que se muestra a los usuarios finales. Por ejemplo, se necesitar� limpiar c�digo como �ste.

    String buttonLabel = "OK";
    ...
    Button okButton = new Button(buttonLabel);
    

    Puedes ver Aislar Objetos espec�ficos de la Localidad en un ResourceBundle.

  • Tratar con mensajes compuestos

    Los mensajes compuestos contienen datos variables. En el mensaje, "El disco contiene 1100 ficheros," el entero 1100 podr�a variar. Este mensaje es d�ficil de traducir porque la posici�n del entero en la sentencia no es la misma en todos los idiomas. El siguiente mensaje no es traducible porque el orden de los elementos de la sentencia est� codificado por concatenaci�n.

    Integer fileCount;
    ...
    String diskStatus = "The disk contains " + fileCount.toString() + " files.";
    

    Siempre que sea posible, se deber�a evitar construir mensajes compuestos porque son dif�ciles de traducir. Sin embargo, si la aplicaci�n necesita mensajes compuestos se pueden manejar con las t�cnicas descritas en Formatear Mensajes.

  • Formatear N�meros y Monedas

    Si la aplicaci�n muestra n�meros y monedas, necesitaremos formatearlas de una forma independiente de la Localidad. El siguiente c�digo todav�a no est� internacionalizado porque no muestra corectamente los n�meros en todos los paises.

    Double amount;
    TextField amountField;
    ...
    String displayAmount = amount.toString();
    amountField.setText(displayAmount);
    

    Necesitaremos reemplazar el c�digo anterior con una rutina que formatee correctamente los n�meros. El lenguaje de programaci�n Java proporciona varias clases que formatean n�meros y monedas. Estas clases se explicaron en la secci�n, Formatear N�meros y Moneda.

  • Formatear Fechas y Horas

    La fecha y la hora var�an con la regi�n y el idioma, Si el c�digo contiene sentencias como la siguiente, necesitaremos cambiarlas.

    Date currentDate = new Date();
    TextField dateField;
    ...
    String dateString = currentDate.toString();
    dateField.setText(dateString);
    

    Si utilizamos las clases de formateo de fechas nuestra aplicaci�n podr� mostrar la fecha y la hora de la forma correcta en todo el mundo. Para ejemplos e instrucciones, puedes ver Formatear Fechas y Horas.

  • Manejar mensajes de Excepci�n

    Deber�amos evitar a nuestros usuarios finales los mensajes de excepci�n codificados en nuestro propio idioma. La secci�n Trabajar con Excepciones muestra como atajar este problema.

  • Comparaci�n de Cadenas

    Cuando se ordena o se busca texto, se necesita comparar cadenas. Si el texto se muestra, no deber�amos utilizar los m�todos de comparaci�n de la clase String. Un programa que no haya sido internacionalizado podr�a comparar las cadenas de esta forma.

    
    String target;
    String candidate;
    ...
    if (target.equals(candidate)) {
    ...
    if (target.compareTo(candidate) < 0) {
    ...
    
    

    Los m�todos String.equals String.compareTo realizan comparaciones binarias. que no son efectivas cuando se ordena o se busca en algunos idiomas. En su lugar, deber�amos utilizar la clase Collator, que se describe en la secci�n Comparar Strings.

  • Utilizar Atributos de Caracteres Unicode

    Los desarrolladores acostrumbrados a programar en otros lenguajes podr�an determinar los atributos de un caracter compar�ndolo con un caracter constante. Por ejemplo, podr�an escribir c�digo como �ste.

    
    char ch;
    ...
    if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
      // ch is a letter
    ...
    if (ch >= '0' && ch <= '9') {
      // ch is a digit
    ...
    if ((ch == ' ') || (ch == '\n') || (ch == '\t')) {
      // ch is a whitespace
    
    

    Este tipo de c�digo no funciona en todos los idiomas, Deber�amos reemplazar esta comparaci�n de caracteres con llamadas a los m�todos proporcionados por la clase Character. Por ejemplo, podr�amos reemplazar el c�digo anterior con las siguientes sentencias.

    char ch;
    ...
    if (Character.isLetter(ch)) {
    ...
    if (Character.isDigit(ch)) {
    ...
    if (Character.isSpaceChar(ch)) {
    
  • Convertir Texto No-Unicode

    Los caracteres en el lenguaje de programaci�n Java est�n codificados en Unicode. Si nuestras aplicaciones manejan texto no-Unicode, debemos traducirlo a Unicode. Para m�s informaci�n, puedes ver Convertir texto No-Unicode.

  • Reservar espacio suficiente en el GUI

    Normalmente el texto se expande cuando se traduce del ingl�s a otros idiomas. Tambi�n la anchura de los caracteres no es la misma para todos los juegos de caracteres y tipos de fuentes. Debemos asegurarnos de dise�ar el GUI con espacio de sobra.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP