Sufijos TL y VL

EBS tiene la capacidad de ser multilenguaje, esto permite que las pantallas o fronted tengan esta característica de traducción; por defecto y estándar el idioma es inglés. (algunos valores a nivel de backend permanecen en idioma estándar)

Los sufijos significan:

¿Cómo EBS logra la traducción de un valor en varios idiomas?

Se almacena la información en una tabla independiente por cada entidad o concepto; veamos un ejemplo con un modelo:

Podemos observar que la "tabla base" tiene una relación de "uno a muchos" con la "tabla traductora". El diagrama anterior es tomado de un ejemplo real del ERP; podríamos concluir de el:

"La tabla que representa los programas concurrentes "fnd_concurrent_programs" (tabla base) tiene la capacidad de almacenar sus datos en varios lenguajes, pues contiene su propia tabla traductora fnd_concurrent_programs_tl

Con el diagrama anterior de la tabla base y de lenguaje podríamos realizar un JOIN/UNION, dando como resultado todas las traducciones que tiene la tabla base, miremos un ejemplo:

Se puede observar en la consulta anterior, que se está realizando el JOIN/UNION por la columna concurrent_program_id y application_idtambién de programas que contengan como nombre corto "GL" y se ordenó por esta columna y la de lenguaje.

Puede suceder que un programa no este traducido en algún idioma o se hubiera almacenado con la misma traducción para varios idiomas, tal caso debería corregirse.

Ya se resolvió el TL, ¿Ahora, cómo es la vista de lenguaje VL?

Primero que nada, debes entender que es una vista, de lo contrario podrías confundirte, por tanto:

Hasta el momento este JOIN nos traería todos los lenguajes disponibles, ¿pero cómo EBS realiza el filtro para un solo lenguaje dependiendo de la sesión del usuario?, ¿Cómo se podría añadir este filtro en la clausura WHERE, la respuesta se encuentra en dos puntos:

SELECT USERENV('LANG') FROM dual;

Veremos que retorna el código corto del lenguaje, dependiendo del idioma de nuestra sesión, por ejemplo:

Sesión con idioma Portugués

Sesión con Idoma American

2. Las tablas de lenguaje tiene una columna "LANGUAGE", esta almacena el código corto del lenguaje. Entonces, aquí está la clave en la cláusula WHERE, se filtra la columna "LANGUAGE" de la tabla traductora "TL" igualando con esta función que hemos visto en el punto uno (USERENV). 

Modificando la sentencia de JOIN/UNION y agregando esta funcionalidad tendríamos algo similar a esto:

Podemos determinar varias cosas de la consulta:

De esta manera dependiendo el idioma de la sesión actual, nos retornaría el valor correspondiente de idioma. 

Conclusión: Una Vista de lenguaje (VL) su núcleo o fundamento sería el JOIN de la "tabla base" unida con su "tabla traductora", añadiendo a este JOIN, la condición o filtro del leguaje de la sesión por medio de la función USERNV, de esta manera, la vista retorna solo un valor según el idioma de la sesión en que se conecta el usuario a la base de datos.

Práctica:

Te invito a ver la siguiente vista: "fnd_concurrent_programs_vl" y explora que pasa si ejecutas una consulta cambiando el idioma de la sesión.

Algunas dudas, para aclarar: