Histórico da Página
Localización es una tarea multifunción, que tiene como objetivo traducir los contenidos de texto de un software, adaptando la traducción a la cultura del país a la cual se destina, considerando costumbres, religión, sistemas de pesos y medidas, moneda, estandarización de fecha y hora, legislación y otras variables que puedan afectar al producto.
Internacionalización es la tarea de adaptar un software a un entorno no nativo, especialmente otras naciones o culturas.
...
La Línea Microsiga Protheus pone a disposición de sus usuarios clientes tres idiomas:
- Portugués.
- Inglés.
- Español.
Los idiomas se ponen a disposición independientemente del país en que el software está internacionalizado
Ejemplo:
El sistema internacionalizado para Brasil podrá ejecutarse utilizando uno de los tres idiomas mencionados anteriormente
En este punto, ya habrá notado que el idioma no tiene relación con las reglas de negocio. Sólo se aplica a este la traducción del software. El proceso de traducción del software toma en consideración algunos aspectos:
- Lenguaje
- Variaciones del mismo idioma entre países.
- Diferencia en el procesamiento del texto, como capitalización, abreviación, etc.
- Cultura
- Nombres y títulos
- Siglas gubernamentales (DI, RCPF, RCPJ, IE, etc.)
- Moneda
- Pesos y medidas
- Convenciones de escritura
- Formato de fecha y número
A pesar de su importancia, estos aspectos se tratan, de forma simple, por medio de la metodología de traducción adoptada en el software. Sin embargo, cabe al desarrollador crear las condiciones para que esto ocurra de la manera más transparente posible.
La línea Microsiga Protheus exige que todos los programas se traduzcan, independientemente de su internacionalización.
...
La preparación para la traducción de los programas de la línea Microsiga Protheus se realiza por medio de los headers (CH) de programa. Por estándar los headers de traducción deben tener el mismo nombre del programa, por ejemplo: MATA410.PRX el header de traducción de este programa será el MATA410.CH
// TranslateStructureSample.prw
#INCLUDE "MATA410.CH"
Function Mata410()
Return
El desarrollador debe localizar el STRING del programa y sustituirlos por el DEFINE/Constante STRxxxx, donde xxxx es un numerador secuencial. Para mantener la facilidad de lectura del código fuente, se recomienda que el string original se agregue como comentario al final de la línea de código, de acuerdo con el siguiente ejemplo:
// TranslateStructureSaySample.prw
@ nGetLin, aPosGet[1,1] Say If(M->C5_TIPO$"DB", STR0008, STR0009) Size 020, 09 Pixel //"Proveed.:"###"Cliente: "
La gran mayoría de los STRING son traducibles, sin embargo, hay strings que se refieren a códigos internos del sistema y no deben traducirse.
Los STRING utilizados en combos o listas deben tener el código numérico, en lugar de letras. Ejemplo: en lugar de S-Sí;N-No, utilice 1-Sí;2-No.
El archivo de header debe incluirse en la herramienta AtuSx. Esta es responsable por el control de traducción de idiomas, quedando prohibida la inclusión del header de traducción en la herramienta de control de fuentes.
A continuación, algunas prácticas de preparación de strings para traducción.
Las strings pueden tener palabras o frases, sin embargo, lo ideal es utilizar frases enteras en la elaboración de los strings, aunque existan partes móviles.
Para ilustrar esta situación, observe la frase: "La casa de João es amarilla", ahora imagine que la palabra João y amarilla se obtienen de la base de datos de la aplicación. En este caso una de las maneras de elaborar la frase en el código fuente sería: "La casa de "cNome" es "+"cCor". Ahora vamos a ver cómo esta frase quedaría después de la traducción al idioma inglés. "The house of João is amarilla". Es un hecho que cNome y cCor no se tradujeron ya que forman parte de la base de datos y no de la aplicación, sin embargo, la frase se elaboró sin seguir el estándar estadounidense de elaboración. Lo correcto sería: "João´s house is amarilla".
Para permitir este tipo de construcción en la elaboración de las frases, debe utilizarse la función I18N. Esta función permite la sustitución de las partes móviles y la instrucción de lo que sería la parte móvil, vea: I18N("La casa de #1[nombre de persona]# es #2[color]#",{cNombre,cColor}). Ahora la traducción sería: "João´s house is amarilla".
No debe incluirse un formato de números y fechas en la traducción. Si es necesario, retire este formato de la Picture del diccionario de datos.
No debe deducirse ninguna traducción directamente en el código fuente. La traducción debe tomar en consideración la diferencia de los países. En el idioma portugués, en Brasil se utiliza la palabra monitor (dispositivo de una computadora personal) y en Portugal, se utiliza ecrã.
No deben incluirse textos con imágenes. Estas dificultan el proceso de traducción.
Otro elemento de traducción es el diccionario de datos. Por ello, se recomienda que el dato mostrado en pantalla, proveniente del diccionario de datos se obtenga de este, utilizando las funciones:
- RetTitle()
- SixDescricao()
- XADescric ( )
- XBDescri()
- X1Pergunt ( )
- X2Nome ( )
- X3Titulo()
- X3Descric()
- X3CBox()
- X5Descri()
- RetExtMnu ( )
- RetExtHlp ( )
- RetAdminName ( )
- RetExtHls ( )
- XGDescri()
...
La internacionalización de la línea Microsiga Protheus se realiza mediante el parámetro de sistema (SX6) MV_PAISLOC. Este parámetro indica de cuál país proviene el diccionario de datos y con base en este se realiza la separación de los bloques de código internacionalizado. Ejemplo:
// InternationalizationSample.prw
Do Case
Case SuperGetMV("MV_PAISLOC") == "BRA"
//Cálculo del ICMS
Case SuperGetMV("MV_PAISLOC") == "ARG"
//Cálculo del IVA
OtherWise
//Cálculo del IVA
EndCase
Recuerde que la línea Microsiga Protheus tiene un diccionario de datos para cada país, en este caso es posible tener campos, índices, tablas, parámetros y preguntas diferentes para cada país.