- dictionary.properties, este sería el archivo por defecto
- dictionary_es.properties, este sería específicamente para el español
Especificar un país se haría agregando otro "_" seguido de dos letras del código de países ISO 3166-1-Alpha-2 antes de la extensión del archivo
- dictionary_pt_BR.properties, este sería para el portugués de Brasil.
- dictionary_en_UK.properties, este sería para el inglés de Reino Unido.
NOTA: Lo ideal es que los nombres de los archivos y las claves se encuentren en un solo idioma y por recomendación el inglés. Aún cuando la aplicación no sea usada por personas que hablen ese idioma.
Creando un diccionario para español e inglés
Dentro de los paquetes del código fuente se creará un paquete con el nombre "bundles", dentro de este se crearán documentos con la extensión *.properties que serán:- text.properties
- text_es.properties
text.properties | text_es.properties |
---|---|
title=JSF with resource bundles greeting=Hello my friend button=Go to the app |
title=JSF con paquetes de recursos greeting=Hola amigo mío button=Ve a la aplicación |
Dependiendo del IDE empleado se visualizará y editará de diversas formas. Por ejemplo en Netbeans se puede apreciar ambos a la vez, mientras en otros se ven y editan por separado.
Llamar a un recurso desde una página de JSF
Estos recursos se comportan de la misma forma como una colección del tipo MAP, por lo que se les llamará de la misma forma con la siguiente sintaxis #{variable['identificador']}, pero antes de ello se debe definir la forma como se hará referencia a estos recursos. Existen dos formas, una es la llamada local mediante una etiqueta de prefijo "f" y la otra desde el archivo de configuración "faces-config.xml"Llamado local a un recurso
Supongamos el siguiente archivo *.xhtml<!DOCTYPE html>
<html lang="#{view.locale.toLanguageTag()}"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<f:loadBundle basename="bundles.text" var="texto" />
<title>#{texto['title']}</title>
</h:head>
<h:body>
<h2>#{texto['greeting']}</h2>
<h:button value="#{texto['button']}"/>
</h:body>
</html>
Observemos la línea 2 #{view.locale.toLanguageTag()}, esta permite que se establezca el lenguaje como el mismo del navegador, además se puede emplear para conocer cuál es el que se tiene.
La línea 7 es la etiqueta que hace el llamado al recurso, para ello dispone de dos atributos que son:
- basename, este tiene como valor la ubicación del recurso dentro del proyecto.
- var, este indica el "alias" que empleará dentro de la página xhtml
Así en las líneas 8, 11 y 12 se aprecia como se llama a los recursos como si se tratara de una colección del tipo MAP. En un navegador que tiene al español como predefinido la salida sería en el cuerpo de la página el encabezado "Hola amigo mío" seguido del botón con el texto "Ve a la aplicación"
Llamada al recurso desde faces-config
Para poder realizar el llamado desde cualquier página sin usar "f:loadBundle" se debe agregar la referencia en el archivo faces-config.xml de la siguiente forma<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"
version="2.2">
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>es</supported-locale>
</locale-config>
<resource-bundle>
<base-name>bundles.text</base-name>
<var>texto</var>
</resource-bundle>
</application>
</faces-config>
Ahí indicamos el lenguaje por defecto (en) y los lenguajes soportados, en este caso el español, luego se indica la ubicación y variable que se empleará.
Se debe tener algunas consideraciones como no usar como variable el que emplee un Bean, ya que se puede causar conflicto y resultados no deseados.
No hay comentarios:
Publicar un comentario