Utilizar un ListResourceBundle

Esta sección ilustra el uso de un objeto ListResourceBundle con un programa de ejemplo llamado ListDemo. Explicaremos cada paso involucrado en la creacción del programa ListDemo, junto con las subclases de ListResourceBundle que soporta. El código fuente del programa está en ListDemo.java. También podrías querer examinar la salida producida por el programa.

1. Crear las Subclases de ListResourceBundle

Un ListResourceBundle está constituido por un fichero de clase. Por lo tanto, nuestro primer paso es crear el fichero de clase para cada Localidad soportada. En el programa ListDemo, el nombre base del ListResourceBundle es StatsBundle. Cómo ListDemo soporta tres localidades diferentes, requiere los siguientes ficheros de clases:
StatsBundle_en_CA.class
StatsBundle_fr_FR.class
StatsBundle_ja_JA.class
La clase StatsBundle para Japón está definida en el código fuente de la siguiente forma. Observa que el nombre de la clase está construido añadiendo el código de idioma y del país al nombre base del ListResourceBundle. Dentro de la clase, se incializa un array de dos dimensiones contents con parejas de clave valor. Las claves son el primer elemento de cada pareja: GDP, Population, y Literacy. Las claves deben ser objetos String, y deben ser iguales en cada fichero class del conjunto StatsBundle. Los valores pueden ser cualquier tipo de objeto. En este ejemplo, los valores son dos objetos Integer y un objeto Float.
import java.util.*;

public class StatsBundle_ja_JA extends ListResourceBundle {

 public Object[][] getContents() {
     return contents;
 }

 private Object[][] contents = {
     {"GDP", new Integer(21300)},
     {"Population", new Integer(125449703)},
     {"Literacy", new Double(0.99)},
   };

} 

2. Especificar la Localidad

En el programa ListDemo, hemos definido los siguientes objetos Locale:
Locale[] supportedLocales = {
   new Locale("en","CA"),
   new Locale("ja","JA"),
   new Locale("fr","FR")
};
Cada objeto Locale corresponde a una clase de StatsBundle. Por ejemplo, la localidad Japonesa, que fue definida con los códigos ja y JA, corresponde con StatsBundle_ja_JA.class.

3. Crear el ResourceBundle

Para crear el ListResourceBundle, llamamos al método getBundle. En la siguiente línea de códido, observa que hemos específicado el nombre base de la clase (StatsBundle) y la Localidad.
ResourceBundle stats = 
   ResourceBundle.getBundle("StatsBundle",currentLocale);
El método getBundle buscará una clase cuyo nombre empiece con StatsBundle y esté seguido por los códigos de idioma y de páis específicados por la Locale. Por ejemplo, si currentLocale se crea con los códigos ja y JA, getBundle devuelve un objeto ListResourceBundle cargado con la clase StatsBundle_ja_JA.

4. Recuperar Objetos Localizados

Ahora que tenemos un ListResourceBundle para la Localidad apropiada, recuperaremos los objetos localizados por sus claves. En la siguiente línea de código, recuperarmos el ratio de alfabetización llamando al método getObject con el parámetro "Literacy". Como getObject devuelve un objeto, debemos tiparlo a Double:
Double lit = (Double)stats.getObject("Literacy");

Ozito