Show Menu
TEMAS×

Internacionalización de cadenas de IU

Las API de Java y Javascript permiten internacionalizar cadenas en los siguientes tipos de recursos:
  • Archivos de origen Java.
  • Secuencias de comandos JSP.
  • Javascript en bibliotecas del lado del cliente o en el origen de la página.
  • Valores de propiedad de nodo JCR utilizados en cuadros de diálogo y propiedades de configuración de componentes.
Para obtener una descripción general del proceso de internacionalización y localización, consulte Internacionalización de componentes .

Internacionalización de cadenas en código Java y JSP

El paquete com.day.cq.i18n Java le permite mostrar cadenas localizadas en la interfaz de usuario. La I18n clase proporciona el get método que recupera las cadenas localizadas del diccionario AEM. El único parámetro requerido del get método es el literal de cadena en inglés. El inglés es el idioma predeterminado para la interfaz de usuario. El ejemplo siguiente localiza la palabra Search :
i18n.get("Search");
La identificación de la cadena en el idioma inglés difiere de los marcos de internacionalización típicos donde un ID identifica una cadena y se utiliza para hacer referencia a la cadena en tiempo de ejecución. El uso del literal de cadena en inglés ofrece las siguientes ventajas:
  • El código es fácil de entender.
  • La cadena en el idioma predeterminado siempre está disponible.

Determinación del idioma del usuario

Existen dos maneras de determinar el idioma que prefiere el usuario:
  • Para los usuarios autenticados, determine el idioma en las preferencias de la cuenta de usuario.
  • La configuración regional de la página solicitada.
La propiedad language de la cuenta de usuario es el método preferido porque es más fiable. Sin embargo, el usuario debe iniciar sesión para utilizar este método.

Creación del objeto Java I18n

La clase I18n proporciona dos constructores. La forma en que se determina el idioma preferido del usuario determina el constructor que se va a utilizar.
Para presentar la cadena en el idioma especificado en la cuenta de usuario, utilice el constructor siguiente (después de importar com.day.cq.i18n.I18n) :
I18n i18n = new I18n(slingRequest);

El constructor utiliza el SlingHTTPRequest para recuperar la configuración de idioma del usuario.
Para utilizar la configuración regional de la página para determinar el idioma, primero debe obtener ResourceBundle para el idioma de la página solicitada:
Locale pageLang = currentPage.getLanguage(false);
ResourceBundle resourceBundle = slingRequest.getResourceBundle(pageLang);
I18n i18n = new I18n(resourceBundle);

Internacionalización de una cadena

Utilice el get método del I18n objeto para internacionalizar una cadena. El único parámetro requerido del get método es la cadena que se va a internacionalizar. La cadena corresponde con una cadena en un diccionario de traductores. El método get busca la cadena en el diccionario y devuelve la traducción del idioma actual.
El primer argumento del get método debe cumplir las siguientes reglas:
  • El valor debe ser un literal de cadena. No se puede aceptar una variable de tipo String .
  • El literal de cadena debe expresarse en una sola línea.
  • La cadena distingue entre mayúsculas y minúsculas.
i18n.get("Enter a search keyword");

Uso de sugerencias de traducción

Especifique la sugerencia de traducción de la cadena internacionalizada para distinguir entre cadenas duplicadas en el diccionario. Utilice el segundo parámetro opcional del get método para proporcionar la sugerencia de traducción. La sugerencia de traducción debe coincidir exactamente con la propiedad Comment del elemento del diccionario.
Por ejemplo, el diccionario contiene la cadena Request dos veces: una vez como verbo y otra como sustantivo. El código siguiente incluye la sugerencia de traducción como argumento en el get método:
i18n.get("Request","A noun, as in a request for a web page");

Inclusión de variables en frases localizadas

Incluya variables en la cadena localizada para crear un significado contextual en una frase. Por ejemplo, después de iniciar sesión en una aplicación web, la página principal muestra el mensaje "Welcome back Administrator" (Bienvenido administrador). Tienes 2 mensajes en tu bandeja de entrada". El contexto de página determina el nombre de usuario y el número de mensajes.
En el diccionario , las variables se representan en cadenas como índices entre corchetes. Especifique los valores de las variables como argumentos del get método. Los argumentos se colocan siguiendo la sugerencia de traducción y los índices se corresponden con el orden de los argumentos:
i18n.get("Welcome back {0}. You have {1} messages.", "user name, number of messages", user.getDisplayName(), numItems);

La cadena internacionalizada y la sugerencia de traducción deben coincidir exactamente con la cadena y el comentario del diccionario. Puede omitir la sugerencia de localización proporcionando un null valor como segundo argumento.

Uso del método Get estático

La I18N clase define un get método estático que resulta útil cuando se necesita localizar un pequeño número de cadenas. Además de los parámetros del get método de un objeto, el método estático requiere el SlingHttpRequest objeto o el ResourceBundle que está utilizando, según cómo esté determinando el idioma preferido del usuario:
  • Utilice la preferencia de idioma del usuario: Proporcione SlingHttpRequest como el primer parámetro.
    I18n.get(slingHttpRequest, "Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);
  • Utilice el idioma de la página: Proporcione ResourceBundle como el primer parámetro.
    I18n.get(resourceBundle,"Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);

Internacionalización de cadenas en código Javascript

La API de Javascript permite localizar cadenas en el cliente. Al igual que con el código Java y JSP , la API de Javascript permite identificar cadenas para localizar, proporcionar sugerencias de localización e incluir variables en las cadenas localizadas.
La carpeta granite.utils de biblioteca de Uso de bibliotecas del lado del cliente cliente proporciona la API de JavaScript. Para utilizar la API, incluya esta carpeta de la biblioteca de cliente en la página. Las funciones de localización utilizan el Granite.I18n espacio de nombres.
Antes de presentar cadenas localizadas, debe establecer la configuración regional mediante la Granite.I18n.setLocale función . La función requiere el código de idioma de la configuración regional como argumento:
Granite.I18n.setLocale("fr");

Para presentar una cadena localizada, utilice la Granite.I18n.get función:
Granite.I18n.get("string to localize");

El siguiente ejemplo internacionaliza la cadena "Welcome back" (Bienvenido de nuevo):
Granite.I18n.setLocale("fr");
Granite.I18n.get("string to localize", [variables], "localization hint");

Los parámetros de función son diferentes al método Java I18n.get:
  • El primer parámetro es el literal de cadena que se va a localizar.
  • El segundo parámetro es una matriz de valores que se inyectarán en el literal de cadena.
  • El tercer parámetro es la sugerencia de localización.
En el siguiente ejemplo se utiliza Javascript para localizar el administrador de bienvenida. Tienes 2 mensajes en tu bandeja de entrada". frase:
Granite.I18n.setLocale("fr");
Granite.I18n.get("Welcome back {0}. You have {1} new messages in your inbox.", [username, numMsg], "user name, number of messages");

Internacionalización de cadenas de nodos JCR

Las cadenas de interfaz de usuario suelen basarse en propiedades de nodo JCR. Por ejemplo, la jcr:title propiedad de una página generalmente se utiliza como contenido del h1 elemento en el código de la página. La I18n clase proporciona el getVar método para localizar estas cadenas.
En el siguiente ejemplo, la secuencia de comandos JSP recupera la jcr:title propiedad del repositorio y muestra la cadena localizada en la página:
<% title = properties.get("jcr:title", String.class);%>
<h1><%=i18n.getVar(title) %></h1>

Especificación de sugerencias de traducción para nodos JCR

De forma similar a las sugerencias de traducción de la API de Java, puede proporcionar sugerencias de traducción para distinguir las cadenas duplicadas en el diccionario. Proporcione la sugerencia de traducción como una propiedad del nodo que contiene la propiedad internacionalizada. El nombre de la propiedad de sugerencia está compuesto por el nombre de la propiedad internacionalizada con el _commentI18n sufijo:
${prop}_commentI18n
Por ejemplo, un cq:page nodo incluye la propiedad jcr:title que se está localizando. La sugerencia se proporciona como el valor de la propiedad denominada jcr:title_commentI18n.

Prueba de cobertura de internacionalización

Compruebe si ha internacionalizado todas las cadenas de la interfaz de usuario. Para ver qué cadenas están cubiertas, establezca el idioma del usuario en zz_ZZ y abra la interfaz de usuario en el explorador web. Las cadenas internacionalizadas aparecen con una traducción stub en el siguiente formato:
USR_*Default-String*_尠
La siguiente imagen muestra la traducción de código auxiliar de la página de inicio de AEM:
Para establecer el idioma del usuario, configure la propiedad language del nodo de preferencias para la cuenta de usuario.
El nodo de preferencias de un usuario tiene una ruta de acceso como esta:
/home/users/<letter>/<hash>/preferences