Cómo traducir los mensajes internos de APEX

Hoy en día en el que vivimos en un mundo globalizado es tan importante poder tener nuestras aplicaciones bien traducidas.

En esta entrega quiero mostrarte cómo podemos utilizar la función Message de Oracle APEX para traducir cadenas de texto (o mensajes) generados a partir de procedimientos almacenados, funciones, disparadores, procedimientos empaquetados y funciones de PL/SQL.

Recordemos que Oracle APEX se encuentra traducido en 10 idiomas incluido el español 😊

Pero cuando llamamos a procedimientos dentro de nuestra aplicación, los mensajes internos de APEX están en inglés, y es por ello que utilizamos esta funcionalidad de APEX llamada “Text Message” para realizar la traducción de esos mensajes.

Existen alrededor de 126 mensajes internos que son necesarios traducir, como vemos en el extracto de la siguiente tabla:

Esta tabla la puedes ver completamente en la documentación de Oracle APEX en el siguiente enlace.

Además, también existen mensajes que requieren traducción que corresponden a la Grilla Interactiva.

Y claro como no puede ser de otra manera también existes mensajes que deben ser traducidos que corresponden al Reporte Interactivo.

Por otro lado, si usamos la nueva funcionalidad de APEX Progressive Web App (PWA) también necesitamos traducir los mensajes.

Al utilizar en nuestra aplicación los filtros inteligentes y las búsquedas por faceta también es necesario traducir los mensajes.

Veamos entonces a continuación un ejemplo de cómo traducir un mensaje en APEX.

Abrimos nuestra aplicación en Oracle APEX.

Para esta demostración he creado una aplicación sencilla en Oracle APEX.

Es importante destacar que Oracle Application Express está traducido de forma predeterminada a 10 idiomas, como lo mencioné anteriormente (inglés, alemán, español, francés, italiano, japonés, coreano, portugués brasileño, chino simplificado y chino tradicional). Desafortunadamente, si nuestra aplicación usa un idioma diferente, debemos traducir nosotros mismos los mensajes internos que muestra el motor de informes de APEX, como el botón Acciones, el buscar o los enlaces “siguiente/anterior, etc.

Pero antes de aprender a traducir los mensajes internos de APEX vamos a conocer cómo se trabaja en APEX con la funcionalidad “Mensajes de Texto”.

Ante todo, definimos el lenguaje de nuestra aplicación en la sección de globalización dentro de la definición de la aplicación.

Guardamos los cambios.

Seguidamente, podemos crear un mensaje de saludo para el usuario.

Para realizar esto, ingresamos a Componentes Compartidos => Mensajes de Texto

Hacemos clic en el botón Crear Mensaje de Texto.

Se abre la ventana modal para crear el Mensaje de Texto.

En primer lugar, ingresamos el nombre del mensaje de texto, por ejemplo, GREETING_MSG, seguidamente seleccionamos el idioma inglés y en el recuadro de texto colocamos: <h1>Good morning %0!</h1>.

Seguidamente, realizamos el mismo procedimiento para crear el texto en español, como sigue: <h1>Buen día %0!</h1>.

Hacemos clic en el botón Crear Mensaje de Texto.

Lo que hemos realizado es crear un mensaje llamado GREETING_MSG en nuestra aplicación en español como Buen Día %0 y en inglés como Good morning %0.

Veamos cómo ahora podemos invocar este mensaje:

BEGIN
--
-- Print the greeting
--
HTP.P(APEX_LANG.MESSAGE('GREETING_MSG', V('APP_USER')));
END;

La forma en que se define el atributo p_lang depende de cómo el motor APEX deriva el idioma principal de la aplicación. Por ejemplo, si estamos ejecutando la aplicación en español y la llamada anterior se realiza a la API APEX_LANG.MESSAGE, el motor APEX primero busca un mensaje llamado GREETING_MSG con un LANG_CODE de es. Si no encuentra nada, se revierte al atributo Application Primary Language. Si aún no encuentra nada, el motor APEX busca un mensaje con este nombre con un código de idioma de en.

Sintaxis de la función:

APEX_LANG.MESSAGE (
    p_name            IN VARCHAR2 DEFAULT NULL,
    p0                IN VARCHAR2 DEFAULT NULL,
    p1                IN VARCHAR2 DEFAULT NULL,
    p2                IN VARCHAR2 DEFAULT NULL,
    ...
    p9                IN VARCHAR2 DEFAULT NULL,
    p_lang            IN VARCHAR2 DEFAULT NULL,
    p_application_id  IN NUMBER   DEFAULT NULL )
RETURN VARCHAR2;

Significado de los Parámetros

ParámetroDescripción
p_nameNombre del mensaje como se define en Mensajes de texto en Componentes compartidos de su aplicación en Oracle APEX .
p0 a través de p9Valor de sustitución dinámico: p0 corresponde a %0 en la cadena de traducción; p1 corresponde a %1 en la cadena de traducción; p2 corresponde a %2 en la cadena de traducción, y así sucesivamente.
p_langCódigo de idioma del mensaje a recuperar. Si no se especifica, APEX usa el idioma actual para el usuario como se define en el atributo Application Language Derived From.
p_application_idSe utiliza para especificar el ID de la aplicación dentro del espacio de trabajo actual que posee el mensaje traducido que desea devolver. Útil cuando se codifican paquetes que pueden llamarse fuera del alcance de APEX, como paquetes llamados desde un trabajo de base de datos.
Descripción de parámetros

Ahora que conocemos esta función, veamos como implementarlo en nuestra aplicación.

Por ejemplo, en la página 1 de nuestra aplicación vamos a saludar al usuario que inició sesión.

En la región del breadcrumb bar creamos una región de contenido dinámico e ingresamos el siguiente código:

BEGIN
--
-- Print the greeting
--
HTP.P(APEX_LANG.MESSAGE('GREETING_MSG', V('APP_USER')));
END;

Como nuestra aplicación esta definida en el lenguaje primario como Español (Estados Unidos) (es-us), al ejecutar la aplicación, veremos el saludo al usuario en español:

Ahora si cambiamos el lenguaje primario de la aplicación a inglés, veremos que al ejecutar la página se mostrará el mensaje en inglés.

Ahora que conocemos el funcionamiento de los mensajes de Texto en APEX, veamos cómo podemos traducir los mensajes internos de APEX.

Para esta segunda demostración vamos a definir nuestra aplicación con el lenguaje Ucraniano (uk). (Elijo este idioma porque soy orgullosamente descendiente de ucraniana, mi madre nació en Poltawa, Ucrania, y tengo un cariño enorme por la tierra de mi madre, además un amor muy grande por mi tierra Argentina donde nací y crecí y ahora que vivo y disfruto en Estados Unidos me siento muy globalizada 😊)

Al ejecutar nuestra aplicación, nada estará en ucraniano, ¿verdad? 😊 entonces vamos a crear el mensaje de texto para el saludo en ucraniano. (confío en el traductor de google 😊 )

Y al ejecutar vemos el saludo 😊

Ahora por otro lado, tengo el reporte interactivo de Empleados en la página 2.

Lo que puedo traducir yo en mi aplicación lo realizo por mi cuenta, por ejemplo el nombre de la entrada de la ruta de navegación lo traducimos de Empleados a Співробітники.

Indudablemente todo lo que podemos traducir como los encabezados del reporte, o cuando se encuentra más datos o si no hay registros en el reporte, todo eso lo podemos traducir desde el mismo diseñador de páginas sin problemas.

Pero cómo podemos traducir por ejemplo el nombre del botón Acciones o el botón Ir del reporte interactivo? ya que ahora al no encontrar el motor de APEX una traducción al ucraniano lo mostrará en inglés.

Entonces veamos un ejemplo de cómo traducir el nombre del botón Actions, y el nombre del botón Go de la barra de buscar al idioma ucraniano.

Mensajes del Reporte Interactivo

Creamos dos mensajes de textos:

Mensaje de TextoEn inglésEn ucraniano
APEXIR_GOGoЗнайти
APEXIR_ACTIONSActionsДії
Descripción de los mensajes de texto

Estos mensajes de textos lo podemos encontrar en la tabla 21-3 de la documentación de Oracle APEX referente al tema de traducción de los mensajes internos que mencioné más arriba en este artículo.

Ahora ejecutamos la aplicación y vemos que en el reporte interactivo de empleados ya podemos visualizar la traducción del botón Ir y del botón Acciones.

De esta forma podemos traducir mensajes internos en APEX utilizando esta funcionalidad de “Mensajes de Texto”.

Te comparto este link donde se encuentran los scripts de traducción de muchos idiomas realizado por el equipo de Pretius.

¡Espero haya sido de utilidad este artículo!

¡Hasta Pronto!

Publicado por Ing. Clarisa Maman Orfali

Clarisa es Oracle ACE Director, con más de 27 años de experiencia como desarrolladora, docente, autora y consultora en Tecnologías de la Información. Clarisa es de Argentina que vive y trabaja en Irvine, California, en los Estados Unidos. Ella es autora de los primeros tres libros de Oracle APEX. También es co-fundadora del Grupo de Usuarios de Oracle de Argentina (AROUG) y se ha especializado los últimos 13 años en el desarrollo de aplicaciones web con Oracle Application Express (APEX).

Un comentario en “Cómo traducir los mensajes internos de APEX

Deja un comentario

Descubre más desde Kiú

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo