Aplicación multilenguaje con paquete de recursos | Java

Java puede trabajar con paquetes de recursos (Java resource bundle) es un archivo con extensión .properties y tiene la forma clave - valor nos permite guardar datos de tipo String y podemos obtenerlo mediante la clave (key).

En el caso de la utilización de ficheros de propiedades, si nuestra aplicación requiere de localizar cadenas de texto a varios idiomas, se definirán varios de estos ficheros, uno para cada idioma:

  • Bundle.properties es el principal y por lo general recomiendo que sea en inglés, si no encuentra un archivo de la localización actual del sistema se usará este por default.
  • Bundle_es.properties en este caso contendrá todo lo traducido a español.
Existen varios idiomas y sufijos que le puedes agregar de acuerdo al país e idioma del mismo, alguno de ellos son los siguientes:
  • _es especifica la configuración para el español sin tener en cuenta el país.
  • _es_ES especifica la configuración para el español de España.
  • _de especifica la configuración para el alemán sin tener en cuenta el país.
  • _de_CH especifica la configuración para el alemán en Suiza.
  • _fr_FR especifica la configuración para el francés en Francia.
  • _fr especifica la configuración para el francés en todos los países que sea dominante este lenguaje.
Vamos a añadir dos recursos uno en inglés y otro en español; recuerda que un # significa un comentario y no afecta en nada al archivo de propiedades, solo nos sirve como un guía. Ten en cuenta que la clave esta a lado izquierdo del signo = y el valor esta a lado derecho, lo único que podemos cambiar en todos los archivos de propiedades es el valor más no la llave fíjate en los siguientes ejemplos.
#Buttons
addButton=Add
cancelButton=Cancel
saveButton=Save

#Labels
addressLabel=Address:
creationDateLabel=Creation date:
dateBirthLabel=Date of birth:
dateFormatLabel=dd/MM/yyyy
descriptionLabel=Description:
emailLabel=Email:
errorLabel=Error
idCardLabel=Id card:
lastNameLabel=Last name:
nameLabel=Name:
phoneLabel=Phone:
postalCodeLabel=Postal code:
sexEmptyLabel=Empty
sexFemaleLabel=(F) Female
sexLabel=Sex:
sexMaleLabel=(M) Male
statusLabel=Status:
successLabel=Success
updateDateLabel=Update date:

#Titles
addCustomerTitle=Add customer
addModuleTitle=Add system module
addProductCategoryTitle=Add product category
addProductTitle=Add product
addProviderTitle=Add provider

#Error Messages
moduleDescriptionErrorMessage=The description must be between 5 and 100 characters
moduleNameErrorMessage=The name must be between 5 and 50 characters long
productCategoryDescriptionErrorMessage=The description must be between 4 and 100 characters
productCategoryNameErrorMessage=The name must be between 3 and 50 characters long
uniqueIdCardErrorMessage=A record with that ID already exists
uniqueNameErrorMessage=A record with the same name already exists

#Success Messages
recordSaveSuccessMessage=The record has been saved successfully
#Buttons
addButton=A\u00F1adir
cancelButton=Cancelar
saveButton=Guardar

#Labels
addressLabel=Direcci\u00F3n:
creationDateLabel=Fecha de creaci\u00F3n:
dateBirthLabel=Fecha de nacimiento:
dateFormatLabel=dd/MM/aaaa
descriptionLabel=Descripci\u00F3n:
emailLabel=Correo electr\u00F3nico:
errorLabel=Error
idCardLabel=C\u00E9dula:
lastNameLabel=Apellido:
nameLabel=Nombre:
phoneLabel=Tel\u00E9fono:
postalCodeLabel=C\u00F3digo Postal:
sexEmptyLabel=Vac\u00EDo
sexFemaleLabel=(F) Femenino
sexLabel=Sexo:
sexMaleLabel=(M) Masculino
statusLabel=Estado:
successLabel=\u00C9xito
updateDateLabel=Fecha de actualizaci\u00F3n:

#Titles
addCustomerTitle=A\u00F1adir cliente
addModuleTitle=A\u00F1adir m\u00F3dulo del sistema
addProductCategoryTitle=A\u00F1adir categor\u00EDa de productos
addProductTitle=A\u00F1adir producto
addProviderTitle=A\u00F1adir proveedor

#Error Messages
moduleDescriptionErrorMessage=La descripci\u00F3n debe tener entre 5 y 100 caracteres
moduleNameErrorMessage=El nombre debe tener entre 5 y 50 caracteres
productCategoryDescriptionErrorMessage=La descripci\u00F3n debe tener entre 4 y 100 caracteres
productCategoryNameErrorMessage=El nombre debe tener entre 3 y 50 caracteres
uniqueIdCardErrorMessage=Ya existe un registro con esa identificaci\u00F3n
uniqueNameErrorMessage=Ya existe un registro con el mismo nombre

#Success Message
recordSaveSuccessMessage=El registro se ha guardado correctamente
Los anteriores son un ejemplo de como se usa un paquete de recursos en Java, el primero es el Bundle.properties y el segundo es el Bundle_es.properties, este último al tener caracteres especiales como tildes y ñ se debe utilizar la codificación Unicode para que se pueda interpretar.

Una vez realizado ahora vamos a utilizarlo en un ejemplo simple para obtener el texto del ResourceBundle.
public static void main(String[] args) {
    ResourceBundle bundle = ResourceBundle.getBundle("com/abigsite/facturationsystem/bundle/Bundle");
    JOptionPane.showMessageDialog(null, bundle.getString("recordSaveSuccessMessage"), bundle.getString("successLabel"), JOptionPane.INFORMATION_MESSAGE);
}
En el código anterior simplemente estamos utilizando la clase ResourceBundle para obtener el archivo dándole como parámetro la ubicación que en este caso se ha agregado en src/main/resources/com/abigsite/facturationsystem/bundle.

Para obtener los datos simplemente se llama a la función getString y se le pasa la llave o key y nos traerá el valor.

Comentarios

Entradas populares