Cómo trabajar con mensajes compuestos

En este artículo examinamos las prácticas de diseño y desarrollo que pueden generar problemas importantes en la traducción. Los diseñadores deben ser muy cuidadosos cuando dividen y reutilizan texto en pantalla, debido a que las diferencias lingüísticas entre los idiomas pueden provocar verdaderos dolores de cabeza para los localizadores y, en algunos casos, pueden hacer que sea imposible lograr una traducción razonable.

Después de revisar los conceptos y las cuestiones relativas a la fragmentación de texto y reutilización de cadenas, examinaremos lo que funciona y lo que no funciona.

Mensajes compuestos

Los mensajes compuestos forman dinámicamente un solo mensaje a partir de más de una cadena de texto. La razón habitual para crear mensajes compuestos es que una o más partes del mensaje compuesto cambiarán según el contexto.

Los mensajes compuestos normalmente adoptan uno de estos dos tipos de disposición: la primera es una disposición tipo oración; la segunda, es una disposición tema-comentario.

Las partes de un mensaje compuesto que varían se denominarán aquí subcadenas.

Disposición tipo oración

El ejemplo que se incluye a continuación pertenece a un mensaje compuesto tipo oración. Esta disposición expresa una idea usando una sintaxis similar a la de una oración. Generalmente es el enfoque más problemático.

{ printer }
The stacker has been disabled.
stapler options

En este ejemplo, el diseñador ha creado una sola cadena que sirve para las partes comunes de tres oraciones, es decir The ... has been disabled.. Se han creado también tres subcadenas alternativas y se sustituye la adecuada en tiempo de ejecución para crear el mensaje adecuado para el contexto.

Por lo general ésta es una idea popular entre los diseñadores, ya que reducir las partes idénticas de una serie de mensajes a una sola cadena parece ofrecer una forma de reducir el trabajo del autor de texto, mejorar la coherencia de los mensajes y optimizar la memoria.

Desafortunadamente, incluso cuando funciona para un idioma, puede resultar difícil o imposible trabajar con tales mensajes compuestos en otros idiomas, debido a las distintas reglas que existen para la estructura de las oraciones y la concordancia, entre otras cuestiones.

El problema de la concordancia ya quedó ilustrado en el ejemplo en inglés. Si se usara la cadena alternativa stapler options en tiempo de ejecución, la palabra has estaría incorrecta - debería decir have.

El problema fundamental es que, dado que en este momento solamente existe una sola cadena que contiene la palabra has, no se podrá leer have cuando sea necesario.

Esto a menudo se vuelve incluso más complicado cuando lo traducimos a otros idiomas. Por ejemplo, en francés la palabra para the debería traducirse como le, la, les o l', según lo que le sigue inmediatamente. De modo similar, la palabra disabled debería traducirse como désactivé, désactivés, désactivée, désactivées, según el género y número del sujeto. Aun si stapler options no hubiese sido una opción, y los mensajes compuestos hubiesen parecido adecuados en inglés, el traductor de francés se hubiera encontrado frente a un trabajo imposible.

Disposición tema-comentario

La disposición tema-comentario indica un tema (el sujeto) y luego indica algo acerca de él (el comentario), generalmente de manera concisa. Por ejemplo: Impresora: activada. Observe que los dos puntos se usan comúnmente para separar el tema y el comentario en este tipo de disposición.

A continuación, se incluye un ejemplo que muestra algunas variaciones en el tema de la disposición tipo tema-comentario.

Pantalla que muestra el texto descrito.

Los temas son cadenas que no cambian, tales como impresión doble faz, [Bandeja] 1 y Encuadernador. A cada tema le sigue al menos un conjunto de cadenas de comentarios alternativos (y predefinidos). Por ejemplo, al tema impresión doble faz le sigue el comentario Encendido. Observe cómo el tema y el comentario se encuentran en distintas áreas de visualización, a pesar de que este no siempre es el caso.

La mayoría de los mensajes anteriores se dividen en dos áreas de visualización de texto. El mensaje que se refiere al encuadernador, sin embargo, se divide en tres áreas de visualización, es decir, el tema tiene dos comentarios: El encuadernador está Activado y Encendido. Este es un enfoque perfectamente válido y no plantea problemas de traducción.

Estos son algunos otros ejemplos de mensajes compuestos con disposición tema-comentario.

Los comentarios que se presentan aquí también son subcadenas de texto que pueden traducirse, aunque en este caso, todos los comentarios pueden verse al mismo tiempo, es decir, este es un ejemplo de una lista de subcadenas. En muchos idiomas, las palabras tales como lighter y darker tienen que concordar en género con el tema (Image quality).

Calidad de la imagen

Más claro/ más oscuro


En este caso, estamos trabajando con un menú que fluye hacia abajo, pero los conceptos permanecen iguales. Las palabras Left, Centre y Right son subcadenas de texto que pueden traducirse y en muchos idiomas deben concordar con el tema Alignment en la traducción.

Imagen de una lista desplegable, que muestra la secuencia de comandos, Formato > Alineación > Izquierda/ Centro/ Derecha

Los mensajes de este conjunto se implementan como variables integradas en cadenas padre. De todos modos, conservan la disposición tema-comentario. Observe que en la última línea, el tema nuevamente tiene dos comentarios: la prueba ha sido completada y aprobada.

Directorio: C:/Workgroup/Scan
Nombre del archivo: MyFile.tif
Calidad de la imagen: Texto
Tamaño original: Auto
Resolución: 300 dpi
Prueba de comunicación: Completada: Aprobada

Tipos de subcadenas

Existen diversos tipos de subcadenas, cada uno de las cuales introduce requisitos ligeramente distintos para la traducción. En este artículo, nos referiremos a los siguientes tipos de subcadena:

Texto predefinido, que puede traducirse. Las palabras o frases predefinidas en el conjunto del mensaje que deberán traducirse, tales como las palabras printer, stacker o binder incluidas en el ejemplo anterior.

Texto definido en tiempo de ejecución, que no puede traducirse. Una cadena que no puede traducirse y que no es numérica, generada por el usuario en tiempo de ejecución, o un nombre que no puede traducirse, como en Se produjo un error al procesar la tarea %s, donde %s es el nombre de la tarea según la suministró el usuario.

Cadenas numéricas. Una cadena numérica que es generada en tiempo de ejecución por el producto o pertenece a un conjunto de valores fijos, tales como Páginas impresas: %d, donde %d es la cantidad de páginas que contó hasta el momento la máquina.

Gráfico. Un gráfico seleccionado de una serie de alternativas como parte de un mensaje compuesto, por ejemplo un símbolo de una bandeja de papel incorporado en un texto relacionado con bandejas de papel. Ésta no es estrictamente una subcadena, aunque podemos considerarla como tal, dado que puede usarse de modo similar.

Problemas relativos a la internacionalización

Sintaxis inflexible

Los siguientes problemas son una característica común de los mensajes compuestos tipo oración. El texto original adopta un orden en particular para las palabras de una oración y es posible que ese orden deba ser diferente en otro idioma.

En distintas áreas de visualización.

Un problema común surge cuando los componentes de un mensaje compuesto se distribuyen en distintas áreas de visualización, lo que hace difícil volver a ordenarlos fácilmente.

El siguiente ejemplo muestra un mensaje compuesto cuyas partes se distribuyen en distintas celdas de la tabla debido a la disposición. (Una línea de puntos muestra los límites de la celda).

Regresar a páginas web actualizadas

Para lograr una traducción efectiva, el traductor deberá correr el texto de una celda de la tabla hacia otra. Esto puede cambiar la disposición que el diseñador que implementó la tabla pretendía tener originalmente. Por ejemplo, el orden de palabras en alemán puede dar lugar a una traducción como la siguiente:

veränderte Webseiten abrufen.

Si un traductor no puede ordenar nuevamente el mensaje de este modo, es posible que pueda usar una disposición tema-comentario para resolver este problema. De lo contrario, es muy probable que el resultado sea, en el mejor de los casos, una muy mala traducción. Por ejemplo, el texto puede redactarse de otra manera en el idioma de llegada para que indique:

Período de tiempo para páginas web encontradas:

Variables que no pueden volver a ordenarse.

Debe ser posible poder volver a ordenar las variables de la disposición tipo oración así como volver a colocarlas de cualquier forma en relación con el texto.

Por ejemplo, al programar en PHP es posible codificar la cadena "Hubo <número> errores de ortografía en el archivo <nombre del archivo>." de la siguiente manera:

printf( "Hubo %d errores de ortografía en el archivo %s.", spellerrors, filename)

Desafortunadamente, si lo hace, y si el traductor traduce al alemán "Datei <nombre del archivo> enthält <número> Rechtschreibfehler." es probable que se introduzca así un error en el código. Esto se debe a que PHP no le permite volver a ordenar los valores de las variables %d y %s.

En su lugar, deberá codificar el texto de la siguiente manera:

printf( "Hubo %1\$d errores de ortografía en el archivo %2\$s.", spellerrors, filename)

Esto le permitirá al traductor volver a ordenar las variables evitando posiblemente introducir un error.

La cadena traducida, integrada nuevamente en el código, se leerá de la siguiente manera:

printf( "Datei %2\$s enthält %1\$d Rechtschreibfehler.", spellerrors, filename)

Este problema no es en absoluto específico de PHP. Muchos lenguajes de programación permiten colocarle a una variable un identificador exclusivo, de modo que no se genere ambigüedad cuando se muevan las variables. Debe intentar aprovechar esta ventaja en todo momento.

Mensajes compuestos que son cadenas incompletas.

Una situación mucho más seria puede surgir con un ejemplo como el que se presenta a continuación:

print( "Recuperando últimas " );
print( entradasDeseadas);
print( " de " );
print( totalEntradas);
print( " total de entradas del registro." );

La traducción al japonés colocaría Total de entradas en el registro al inicio de la oración y recuperando últimas al final. Lo que sería más importante aún, es que sería necesario invertir el orden de print(entradasDeseadas) e print(totalEntradas). (En el ejemplo que se incluye a continuación, agregué las traducciones para ilustrar cómo debería ordenarse nuevamente el texto).

print( "エラーログ" );        // traducción: 'registro de errores'
print( totalEntradas);
print( "件から最新" );        // traducción: 'de las últimas'
print( entradasDeseadas);
print( "件を取り出します。" ); // traducción: 'recuperando'

El problema es que habitualmente se les impide a los traductores, con mucha razón, cambiar cualquier cosa salvo las cadenas en código. De lo contrario una edición accidental podría introducir un error grave. Por lo tanto, es probable que un traductor se encuentre con el siguiente texto para traducir:

1: "Recuperando últimas"
2: " de "
3: " total de entradas del registro."

El principal problema aquí es que el traductor debería editar el código para lograr la traducción más adecuada al japonés. Se debe tratar por todos los medios de evitar esto. Además, se corre el riesgo de que el traductor tenga dificultad para identificar el comienzo y el final de tales mensajes, especialmente si no se le proporcionan al traductor las cadenas juntas y en orden.

Observe que pueden surgir problemas similares en un código parecido al ejemplo, que se presenta a continuación. Aunque se trata una declaración de impresión única, esto no mejora las cosas.

print( "Recuperando últimas " + entradasRequeridas + " de " + totalEntradas + " total de entradas del registro." );

Un mejor enfoque sería usar una función de impresión que permita especificar las variables como parte de la cadena para imprimir. Por ejemplo:

print( "Recuperar últimas $entradasRequeridas de $totalEntradas total de entradas del registro." );

Concordancia y mapeos de palabras/ conceptos

Concordancia en género.

Las subcadenas de texto predefinido que pueden traducirse presentadas con una disposición tipo oración pueden crear dificultades imposibles de superar para el traductor debido a las propiedades lingüísticas de muchos idiomas.

El siguiente ejemplo muestra una cadena padre tipo oración en la cual se insertará una subcadena predefinida adecuada, en tiempo de ejecución.

The %s has been disabled.

Se reemplazará %s en tiempo de ejecución con una de las siguientes opciones:

printer

stacker

stapler options

El problema aquí ya puede verse incluso en inglés, dado que la palabra has debería cambiar por have con la subcadena stapler options. En francés, las subcadenas anteriores son, respectivamente, femenino singular, masculino singular y femenino plural, y requerirían tres traducciones muy diferentes de la cadena padre:

L'imprimante a été désactivée.

Le module de reception a été désactivé.

Les options d'agrafage ont été désactivées.

La palabra the también puede ser la en francés si la siguiente palabra es de género femenino y comienza con una consonante; y la palabra disabled debería traducirse como désactivés para un sustantivo masculino plural. Este tipo de concordancia es sumamente común en otros idiomas que no sean el inglés o el japonés, y puede ser a menudo, más complicado que en francés.

El problema clave aquí es que, dado que únicamente tenemos una cadena para traducir, es imposible aplicar las diversas traducciones adecuadas en francés para la cadena padre.

Esta implementación probablemente surgió de los intentos del diseñador o del desarrollador para mejorar la situación, pero desafortunadamente la falta de conocimiento acerca de lo que sucedería en la traducción, creó un problema importante para las versiones extranjeras del producto.

Un mejor enfoque en este caso sería usar cadenas distintas, o bien, usar una disposición tema-comentario como Función desactivada: impresora, etc. Observe que en el último caso, la palabra desactivada se refiere a la función y por lo tanto no cambia.

Mapeos de palabras y conceptos.

Los mapeos de palabras y conceptos también pueden plantear problemas. Tome, por ejemplo, la secuencia:

Turn on the %s.

Se reemplazará %s en tiempo de ejecución con una de las siguientes opciones:

printer

stacker

stapler options

En algunos idiomas, la traducción adecuada de Turn on puede variar según lo que se deba encender. Por ejemplo, en español puede traducirse esta idea con distintos términos, tales como conectar, encender o activar. Asimismo, habría cuatro traducciones posibles para la palabra the. Dado que solo hay una versión de la cadena inicial, nuevamente es imposible brindar una traducción de calidad.

Siempre debe asegurarse de que la parte invariable se exprese como un tema.

Subcadenas con tiempo de ejecución definido y concordancia en género.

En este caso, nos referimos específicamente al texto suministrado en tiempo de ejecución — como nombre de un archivo, nombre de una tarea, nombre de una persona, entre otros — o a los nombres que no pueden traducirse. No son subcadenas predefinidas que pueden traducirse.

Habitualmente, incluso en una disposición tipo oración, estos tipos de subcadenas no generan problemas de internacionalización. Por ejemplo, las oraciones que se tradujeron más adelante no necesitan concordar con la subcadena de texto, debido a que el sujeto de la oración (es decir, en este caso archivo o sección) ya está definido o se infiere claramente como algo distinto de la subcadena en sí misma.

El archivo <nombre_de_archivo> ha sido escaneado.

La sección <título_de_sección> brinda más información.

En términos lingüísticos, esto funciona debido a que el texto de la variable se proporciona en aposición del sujeto.

Se recomienda usar palabras como sección y archivo, en lugar de inferirlas. Esto le ayuda al traductor a comprender el significado del mensaje.

Sin embargo, hay una excepción a esta regla. Si la variable de texto se refiere a una persona en lugar de un objeto, en muchos idiomas será necesario realizar cambios de todas formas, a otras partes de la oración según el sexo de la persona. Por ejemplo:

The patient <person's_name> is ready.

Las traducciones al español para este texto podrían ser:

El paciente Richard está listo.

o

La paciente Julia está lista.

En otras palabras, las subcadenas incorporadas con tiempo de ejecución definido solo funcionan con una disposición tipo oración si no se refieren a un sustantivo propio. Es mejor usar una disposición tema-comentario para estos tipos de mensaje.

Concordancia en número.

Las subcadenas numéricas no funcionan bien con la disposición tipo oración.

En muchos idiomas, la palabra que está calificada por un número cambia según la cantidad de la que hablemos. Veamos por ejemplo el mensaje %d pages were printed.

En inglés, pages were debería cambiar a page was si solamente se imprimiera una página. A veces, los autores tratan de resolver este problema diciendo %d page(s) printed.

Desafortunadamente, no es tan simple en otros idiomas. Por ejemplo, el árabe tiene terminaciones distintas para verbos y sustantivos cuando se trata de una página, dos páginas y más de dos páginas, es decir, tienen dos tipos distintos de plural.

El ruso es aún más complicado. La tabla que se incluye a continuación indica las terminaciones distintas para la palabra página en ruso, cuando se la asocia con distintos números.

Cantidad de páginas Palabra en ruso para 'página'
1 страница
2-4 страницы
5-10 страниц
11-20 (irregular) страниц
21 страница
22-24 страницы
25-30 страниц
> 30 Repetir el patrón de terminaciones del 1 al 10.

Como resultado, es sumamente difícil trabajar con un mensaje de esta naturaleza expresado en una disposición tipo oración. Por lo tanto, es mejor expresar siempre los mensajes que contienen números como el anterior con una disposición tema-comentario. En una disposición tema-comentario, la palabra páginas permanece sin variaciones. El equivalente en ruso que significa Páginas impresas: %d, se muestra a continuación.

Отпечатано страниц: %d

Subcadenas que no pueden distinguirse

Si un traductor debe cambiar el orden de las subcadenas en un mensaje, debe quedar claro cuál es el nuevo orden previsto.

Analicemos el siguiente ejemplo:

%s cerca de '%s' en la línea %d

Una traducción al japonés sería

%d 行の%s近くに%s

Lo que no queda claro al mirar el ejemplo es que el traductor pretendió invertir las dos variables denominadas %s. Esto, por supuesto, no quedó claro para el software tampoco.

Por lo tanto, conviene usar un identificador único para cada variable en una cadena. Hemos visto anteriormente que, en PHP por ejemplo, se podría lograr esto si de codifica el inglés de la siguiente manera:

%1\$s cerca de '%2\$s' en la línea %3\$d

En japonés quedaría así:

%3\$d 行の%2\$s近くに%1\$s

La necesidad de contexto

El traductor debe contar con una forma de asociar un comentario con su tema, para poder lograr una traducción.

Para muchos idiomas, generalmente no es posible traducir la parte del comentario de un mensaje tipo tema-comentario, salvo que se conozca cuál es el tema. La palabra enabled en francés se traduce en una de cuatro maneras distintas, teniendo en cuenta si el tema es masculino, femenino, singular o plural:

Tema Parte del lenguaje Traducción de 'enabled'
apilador masculino, singular activé
impresora femenino, singular activée
bar codes masculino, plural activés
opciones de la engrapadora femenino, plural activées

En otros idiomas existen muchas otras posibilidades, dado que hay más de dos géneros y pueden tener inflexiones.

Si el traductor tuviera que traducir la palabra inglès enabled por sí sola, no tendría idea de cómo debería traducirla. Por ejemplo, si se presenta al traductor un texto con el siguiente orden, sería muy difícil para el traductor trabajar con él.

enabled
disabled
enabled
enabled
disabled
stacker
printer
enabled
bar codes
stacker
disabled
etc.
				

La única forma para resolverlo sería intentar una traducción, ver el resultado en una interfaz completada y luego volver a traducir según sea necesario. Este es un proceso que demanda mucho tiempo. Sería mucho mejor asegurarse de que el traductor pueda ver directamente cómo se relacionan estos elementos.

Hay varias formas de lograr esto:

Las diferencias también pueden ser de características semánticas. Por ejemplo, si se usara la palabra on en lugar de enabled, la traducción adecuada en español sería encendida para la impresora, pero activadas para las opciones de la engrapadora. conectado es otra traducción para la palabra on. Cada una de estas tres palabras tiene cuatro formas de concordancia. Como resultado tenemos 12 traducciones posibles.

Recomendaciones

Se debe usar un enfoque tema-comentario siempre que sea posible. Los mensajes compuestos tipo tema-comentario funcionan bien ya sea que las partes estén en un sólo visor o en varios y con cualquier tipo de subcadena.

Se debe evitar la disposición tipo oración cuando contiene subcadenas que son texto predefinido que puede traducirse o texto numérico.

Se debe usar la disposición tipo oración con cuidado, si hay subcadenas de texto que no es numérico y que no puede traducirse (por ejemplo, texto creado en tiempo de ejecución). No se debe usar si la subcadena se refiere a un sustantivo propio. Además, se deben implementar mensajes tipo oración en los que el texto y las subcadenas puedan cambiar de posición en cualquier orden durante la traducción. Al escribir el código de un programa, esto generalmente significa utilizar cadenas de formato para salida de tal manera que cada variable pueda identificarse de manera única.

Cuando las partes de un mensaje compuesto aparecen en distintas ubicaciones, se le debe proporcionar al traductor información sobre el contexto para que pueda ver cómo se relacionan entre sí las distintas partes del mensaje compuesto, especialmente qué subcadenas se relacionan con qué otras partes del mensaje compuesto. Preferentemente, las partes del mensaje compuesto deben agruparse para enviárselas al traductor.

Se debe proporcionar información al traductor, cuando sea necesario, para aclarar a qué se refiere una subcadena (por ejemplo, un texto como "%s cerca de '%s' en la línea %d" puede representar un desafío para el traductor). Para este propósito, se debe considerar el uso de la categoría de datos ITS Localization Note.

Cuando el grupo de localización así lo solicite, se le debe proporcionar información acerca del tamaño de cada subcadena para ayudarle a comprobar si la traducción encaja en un espacio de tamaño fijo. Para este propósito, se debe considerar el uso del atributo ITS Storage Size.

En otro artículo, también analizamos una serie de cuestiones importantes para recordar con respecto a la reutilización de cadenas de texto.