Manual de Java

 
 
 

Mapa Web

 
borde   borde
Portada arrow Lista de Códigos Java arrow Construir un ResourceBundle con ficheros de propiedades

 

Construir un ResourceBundle con ficheros de propiedades Imprimir E-mail

Un fichero de propiedades es un simple fichero de texto que se puede crear y mantener con un sencillo editor de texto.

Siempre se debe crear un fichero de propiedades por defecto. El nombre de este fichero empieza por el nombre base y termina con el sufijo .properties. Este fichero contiene las siguientes líneas:

 

# Fichero.properties
campo1 = valor1
campo2 = valor2
campo3 = valor3

 

En este fichero las líneas de comentarios empiezan con una almohadilla (#), el resto contienen parejas de clave y valor que podrán ser usadas por nuestro programa.

 

Para crear ficheros de propiedades adicionales, o localizados para una región determinada, hay que entender el concepto de localidad, o Locale. Una localidad es un espacio determinado por un idioma, en ocasiones un país que especifíca aún más, e incluso, se puede indicar una variante dentro de un idioma y país.

Estas localidades determinan la forma de presentar la información (formatos de números, fechas, etc), pero tambíen determinan el fichero de propiedades a leer. Así, podremos usar es_ES para el español de España, es_MX para el de México, y es_AR para Argentina, por poner un ejemplo. Y aunque sea un poco anticuado, porque el Euro es ya la moneda oficial de España, podemos escoger la representación concreta con es_ES_EUR.

Para soportar una nueva Locale (es decir, una nueva localidad), los localizadores crearán un nuevo fichero de propiedades que contenga los valores traducidos. No se necesita cambiar el código fuente, ya que el programa referencia las claves, no los valores.

Por ejemplo, para añadir soporte para el idioma inglés, los localizadores tendrán que traducir los valores de Fichero.properties y situarlos en un fichero llamado Fichero_en_US.properties (que también termina con el sufijo .properties). Sin embargo, como el fichero se ha creado para una localidad específica, el nombre base es seguido por el código del idioma (en) y el código del país (US). El contenido de Fichero_en_US.properties es éste:

 

# Fichero_en_US.properties
campo1 = value1
campo2 = value2
campo3 = value3

 

 

Lanzamos, por ejemplo, tres ficheros de propiedades con el programa ProgramaProperties:

 

Fichero.properties
Fichero_en_US.properties
Fichero_fr.properties

 

 

En el programa ProgramaProperties hemos creado los objetos Locale de esta forma:

 

Locale[] supportedLocales = {
new Locale("fr","FR"),
new Locale("de","DE"),
new Locale("en","US")
}
Locale currentLocale = supportedLocales[0];

 

Para cada uno de estos objetos hemos específicado un código de idioma y un código de país. Esto códigos corresponden con los ficheros de propiedades creados en los pasos anteriores.

 

Éste es el paso que muestra como se relacionan, la localidad, los ficheros de propiedades y el ResourceBundle. Para crear el ResourceBundle, llamamos al método getBundle, especificando el nombre base (Fichero) y la localidad:

 

ResourceBundle labels =
ResourceBundle.getBundle("Fichero",currentLocale);

 

 

El método getBundle primero busca un fichero de clase que corresponda con el nombre base. Si no puede encontrar el fichero de clase, comprueba los ficheros de propiedades. En el programa ProgramaProperties, hemos constituido el ResourceBundle con ficheros de propiedades en vez de ficheros de clases. Cuando el método getBundle localiza el fichero de propiedades correcto, devuelve un objeto PropertyResourceBundle cargado con las parejas clave-valor del fichero de propiedades.

Si no existe un fichero de propiedades para la localidad específicada, getBundle selecciona el fichero de propiedades con la correspondencia más cercana (es decir, si buscamos en_US y no lo encuentra, pero sí el en, nos devolverá este último). La siguiente tabla identifica los ficheros de propiedades que buscará el programa ProgramaProperties para cada localidad:

Parámetros Locale fichero de propiedades Explicación
en US Fichero_en_US.properties Correspondencia exacta.
fr FR Fichero_fr.properties Fichero.properties_fr_FR no existe, esta es la correspondencia más cercana
de DE Fichero.properties Se selecciona el fichero por defecto porque los parámetros de la localidad no existen.

En lugar de llamar a getBundle, podríamos haber creado el objeto PropertyResourceBundle llamando a su constructor, que acepta un InputStream como argumento. Para crear el InputStream debemos específicar el nombre exacto del fichero de propiedades en la llamada al constructor de FileInputStream. Crear el PropertyResourceBundle llamando al método getBundle es más flexible, porque buscará los ficheros de propiedades con la correspondencia más cercana a la localidad específicada.

Para recuperar los valores traducidos desde el ResourceBundle, llamamos al método getString:

 

String value  = labels.getString(key);

 

El String devuelto por getString corresponde con la clave que hemos especificado. El String está en el idioma apropiado, proporcionado por un fichero de propiedades existente para la localidad específicada. Como las claves no cambian, los localizadores añaden ficheros de propiedades adicionales posteriormente. Nuestra llamada a getString no necesita cambiar.

 

Si queremos recuperar los valores para todas las claves de un ResourceBundle, necesitamos llamar al método getKeys. Este método devuelve una Enumeration con todas las claves de un ResourceBundle. Se puede iterar a través de la Enumeration y recuperar cada valor con el método getString. Las siguientes líneas de código del programa ProgramaProperties, muestran como se hace esto:

 

ResourceBundle labels = 
ResourceBundle.getBundle("Fichero",currentLocale); Enumeration bundleKeys = labels.getKeys(); while (bundleKeys.hasMoreElements()) { String key = (String)bundleKeys.nextElement(); String value = labels.getString(key); System.out.println("key = " + key + ", " + "value = " + value); }

 

 

 

 

// Clase BdConfig.java
import java.util.*;
public final class BdConfig {
private static ResourceBundle bundle =
ResourceBundle.getBundle("bdconfig");
public static String getValue(String key) {
return bundle.getString(key);
}
public static int getIntValue(String key) {
return Integer.parseInt(bundle.getString(key));
}
}

 

 

 

 

// Fichero de propiedades bdconfig.properties
jdbc_driver = xxxxxxxx
jdbc_url = yyyyyyy
jdbc_user = zzzzzz
jdbc_password = **** 

 

 

 

 

//Y desde el programa que crea las conexiones, 
//los datos se cogen así: BdConfig.getValue("jdbc_driver"); BdConfig.getValue("jdbc_url"); BdConfig.getValue("jdbc_user"); BdConfig.getValue("jdbc_password");
Mª Angeles Martinez
http://www.javahispano.org/articles.article.action?id=61

 

 
Portada
Capítulos del Manual de Java
Introducción a Java
Origen de Java
Características de Java
Instalación del JSDK
Conceptos Basicos
Programación
Control de Flujo
Clases
Variables y Métodos de Instancia
Alcance de Objetos y Reciclado de Memoria
Herencia
Control de Acceso
Variables y Métodos Estáticos
this y super
Clases Abstractas
Interfaces
Métodos Nativos
Paquetes
Referencias
Referencias y Arrays
Referencias y Listas
Una mínima aplicación
Compilación y Ejecución de Hola Mundo
Un Applet Básico
La Clase Math
La Clase Character
La Clase Float
La Clase Double
La Clase Integer
La Clase Long
La Clase Boolean
La Clase String
La Clase StringBuffer
Uso de Conversiones
Manejo de Excepciones
Generar Excepciones
Excepciones Predefinidas
Crear Excepciones
Capturar Excepciones
Propagación de Excepciones
Entrada/Salida Estándar
Ficheros
Streams de Entrada
Streams de Salida
Ficheros de Acceso Aleatorio
Practicar en línea
Lista de prácticas en línea
FAQ
Preguntas frecuentes
Códigos Java
Lista de Códigos Java
Foros
Foros Java
Otros Manuales
Manuales de otros lenguajes
 
   
 
 
Alojamiento web en Hostalia