Sugerencias para la globalización

Este apartado proporciona sugerencias generales sobre la globalización en HCL Commerce.

Manejo de comillas simples y caracteres especiales

Los archivos de propiedades Java traducidos para algunos idiomas europeos occidentales como, por ejemplo, el francés y el italiano pueden contener algunos caracteres especiales como las comillas dobles (") y las comillas simples (') que es necesario incluir entre secuencias de escape cuando se importan a páginas JSP. Si estos caracteres especiales no se codifican con escape se producirán errores de JavaScript y las páginas de la GUI necesarias no se visualizarán.

Codificación con escape de caracteres especiales en los archivos JSP de las herramientas

El elemento de la IU "alert" de JavaScript utiliza las comillas simples y dobles como elementos de sintaxis y por lo tanto estos caracteres deben incluirse entre secuencias de escape para que una serie que los contenga se pase a una sentencia "alert".

Si el JSP contiene el siguiente fragmento de código:


<javascript><javascript>
alert('<%= myResouceBundle.get("alertMessage") %>');
</javascript>
</javascript>

El código se interrumpirá si la serie "alertMessage" del archivo de propiedades traducido contiene comillas simples o dobles. Un modo sencillo de solucionar esto es utilizar un método denominado toJavaScript en la clase com.ibm.commerce.tools.util.UIUtil:


<%@ page import="com.ibm.commerce.tools.util.*" %>
<javascript>
alert('<%= UIUtil.toJavaScript( (String)
myResouceBundle.get("alertMessage")) %>');
</javascript>

Este método util decodifica caracteres especiales como, por ejemplo, la barra invertida (\), comillas simples ('), comillas dobles (") y salto de línea (\n).

Nota: Solo los archivos JSP y los mandatos de vista que graban directamente en el objeto out:JspWriter necesitan observar la directriz anterior. Los archivos JavaScript no tienen este problema porque no incluyen directamente nada desde el paquete de recursos. Los mandatos del controlador (que devuelven mensajes de error al extremo del cliente) tampoco tienen este problema. La infraestructura de herramientas se ocupa de estos mensajes.

En la nueva lista dinámica, el código interno de la infraestructura de herramientas maneja todos estos caracteres especiales (es decir, ', ''), por lo que no es necesario procesarlos llamando a UIUtil.toJavascript().

Manejo de comillas simples con MessageFormat

Cuando se utiliza java.text.MessageFormat para crear mensajes que se pueden visualizar para los usuarios finales, los desarrolladores deben tener en cuenta que MessageFormat arranca todas las comillas simples del mensaje.

Si el mensaje tiene una variable entonces sustituya las comillas simples por comillas dobles:


baseMessage = EspUtil.replace(baseMessage, "'", "''");
String formattedMessage;
try {
formattedMessage = MessageFormat.format(baseMessage, args);
} catch (IllegalArgumentException e) { ... }

Donde EspUtil.replace() es un método que sustituye todas las apariciones de una serie por otra en una String, como se indica a continuación:

public final static String replace(String source, String pattern,
String
replacement)
{
if (source == null || pattern == null || replacement == null)
{
return null;
}
int pos = source.indexOf(pattern);
int count = -1;
while (pos != -1 && count != 0)
{
source = source.substring(0, pos) + replacement +
source.substring(pos + pattern.length());
pos = source.indexOf(pattern, pos + replacement.length());
count--;
}
return source;
}

Utilización de las hojas CSS (Hojas de estilo en cascada) dependientes del entorno local

Cada idioma necesita sus propios atributos personalizables como, por ejemplo, el tamaño de font, la familia de fonts, imágenes, etc. Para que pueda realizarse esta personalización, la infraestructura de herramientas proporciona un centre.css diferente para cada entorno local (por ejemplo, centre_en_US.css, centre_fr_FR.css, centre_ja_JP.css, etc.) Todos los desarrolladores de herramientas deben utilizar estos archivos CSS dependientes del entorno local para cada uno de los JSP.

Para cargar el archivo CSS dependiente del entorno local:

  1. Incluya com.ibm.commerce.tools.util.UIUtil
  2. Añada el código siguiente al JSP:
    
    <LINK REL=stylesheet HREF="<%= UIUtil.getCSSFile(locale)
    %>"
    TYPE="text/css">
    
  3. Nota: getCSSFile(locale) devuelve el nombre de archivo CSS dependiendo del entorno local y vuelve a centre.css si no existe center_locale.css.

Diálogos de alerta, confirmación y solicitud del idioma nacional

Las funciones alert(), confirm() y prompt() predeterminadas del navegador web no utilizan la codificación UTF-8 para visualizar mensajes. Por lo tanto, los mensajes de caracteres de doble byte resultan dañados si se visualizan en un navegador en inglés o en otro navegador de idiomas de un solo byte.

La infraestructura de herramientas proporciona un nuevo conjunto de diálogos para que estas funciones estén habilitadas para el idioma nacional. Estos diálogos son:

  • alertDialog (alerta de sustitución)
  • promptDialog (solicitud de sustitución)
  • confirmDialog (confirmación de sustitución)

La sintaxis para utilizar estos tres diálogos es la misma que para las funciones JavaScript estándar. El siguiente es un ejemplo de cómo se utiliza cada uno de estos tres diálogos:


alertDialog("message");
rval = promptDialog("prompt message"); // will return a string
rval = confirmDialog("confirm message"); // will return a boolean

Validación de campo de entrada de texto: Validación de entrada UTF-8

Con los idiomas DBCS como, por ejemplo, el chino y el japonés, hay miles de caracteres que resultan un número elevado para almacenar utilizando solamente 1 ó 2 bytes. Por lo tanto, la mayor parte de los caracteres DBCS tradicionales se codifican utilizando tres bytes en UTF-8.

Todos los campos de texto que se correlacionan con las columnas de base de datos deben validar el número de caracteres que se pueden especificar, teniendo en cuenta el número de bytes que se necesita para almacenar cada carácter en una base de datos UTF-8. Por ejemplo, si la longitud de la columna de base de datos es 10, el código debe comprobar si hay 10 caracteres ingleses pero solamente puede permitir aproximadamente tres caracteres japoneses. Para comprobar la longitud de la entrada, mediante la conversión a UTF-8, los desarrolladores de la infraestructura de herramientas deben utilizar la siguiente función JavaScript (Util.js):


function isValidUTF8length(UTF8String, maxlength)

Someter parámetros de mandatos del idioma nacional utilizando formatos ocultos

Se debe prestar una atención especial cuando se codifiquen los caracteres del idioma nacional como parte del proceso de someter parámetros de mandatos. Debido a que la serie de URL no puede codificar correctamente los caracteres nacionales, los parámetros del URL del idioma nacional deben someterse con un formato de formulario oculto (utilizando el método "Post" para someterlos). Cuando el navegador somete un formulario, se codifican automáticamente los datos basándose en el valor de codificación actual del navegador.

La infraestructura de herramientas de HCL Commerce proporciona el siguiente mecanismo para asegurarse de que los parámetros del URL (NVP) se someten con un formato de formulario oculto:

Cuando se establece un URL (si puede contener caracteres de doble byte) utilice siempre el método top.setContent(). No utilice window.location.replace() ni location.href=myURL. Otra ventaja de top.setContent() es que activa ToolsUICenter para visualizar correctamente el indicador de progreso. Llame al método como se indica a continuación:


top.setContent( String PanelName, String ViewCommand, Boolean
addToBreadCrumbTrail, String urlParameter);

Ejemplo:


var urlPara = new Object();
urlPara.XMLFile = "my.xml";
urlPara.Search = "japanese";
top.setContent("My Link", "MyViewCommand", true, urlPara)