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 whitespaceEste 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.