Encontrar string no traducibles a los que les falta ! en fuentes Genexus.

GeneXus tiene la posibilidad de generar aplicaciones multi-idioma de una forma bastante fácil. 
Como es GeneXus el que genera el código, va a traducir todas los labels de las pantallas, los strings dentro de los programas, mensajes, etc.  Realmente es una solución sencilla a un problema realmente complejo. 

Pero, hay strings o constantes que no deben traducirse, porque si se traducen la aplicación puede funcionar mal. 

Por ejemplo, si leo un XML y busco dentro una etiqueta especifica, con el nombre que viene en el archivo y no con el nombre traducido. 

La forma de decirle a GeneXus que no traduzca, es ponerle un signo de exclamación delante del string, por ejemplo el string !'ETIQUETA'  no sera traducido. 

Esto trae un lindo problema cuando tenemos código GeneXus que fue desarrollado para ser utilizado en un único idioma y se incorpora a una KB que es multi-idioma. Hay que buscar y cambiar los strings que no deben traducirse. 

Como encontrar strings que no debo traducir en el código GeneXus? 

Una heurística que funciona es buscar la expresion regular:


[^!]['"][a-zA-Z]{1,8}['"]

Explicación:

  1. [^!]: Coincide con cualquier carácter que no sea !.
  2. ['"]: Coincide con una comilla simple (') o una comilla doble (").
  3. [a-zA-Z]{1,8}: Coincide con entre 1 y 8 caracteres que sean letras (mayúsculas o minúsculas).
  4. ['"]: Coincide con una comilla simple (') o una comilla doble (") al final.
Esto va a encontrar todos los strings que no tengan un ! delante, con comillas que sean hasta largo 8, con letras mayusculas y minusculas (solo letras, no numeros ni espacios),  y terminen con comillas. 

En el buscador de código  GeneXus (Ctrl-F en el editor)  hay que poner:


Si se quieren buscar strings mas largos, se puede cambiar el 8 por el largo que quieras.

Hay que tener cuidado con el nombre de las subrutinas que no deben llevar signos de exclamación, porque nunca se traducen. 

Si lo que se quiere es hacer una búsqueda para identificar cuales son los objetos de la KB que tienen strings que necesitan ser marcados como no traducibles, GeneXus no trae en forma nativa un buscador, pero si se puede usar las LSI Extensiones 



Lsi.Extensions/Tool Windows / Search on GeneXus Sources 


y se puede buscar la misma expresión regular en todos los fuentes GeneXus. 

Esta bueno que no utilice el índice FullTextSearch de GeneXus porque tenerlo prendido enlentece muchísimo el salvado de objetos en KB grandes.  Este buscador demora bastante pero se lo puede dejar buscando y trabajar en la KB en simultaneo sin problemas. 

Este es un metodo que me ha permitido incorporar código que estaba programado para funcionar en un solo idioma y cambiarlo a multi-idioma sin tanto esfuerzo. 



TAREA PARA EL LECTOR: Se puede sofisticar mas la expresion regular, para que excluya los casos de 
SUB '<NombreSubrutina>'
DO '<NombreSubrutina>' 

de forma que la busqueda no de tantos falsos positivos. 

Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.