Errores comunes

Hay algunos errores comunes que eventualmente descubriría por sí mismo. Pero esta sección le ayudará a evitarlos.

27.4.1. Mismas cadenas, semánticas diferentes

A veces, dos cadenas en inglés son idénticas pero tienen distintos significados en distintos contextos, por lo que probablemente no serían idénticas al traducirlas. Dado que las cadenas en inglés se usan como claves de búsqueda, esto causa problemas.

En estos casos, debe agregar caracteres adicionales a las cadenas. Por ejemplo, use "jumps[noun]" y "jumps[verb]" en lugar de sólo "jumps" y límpielas de nuevo fuera de la llamada a gettext. Si añade caracteres adicionales también debe añadir un comentario para los traductores antes de la llamada a gettext. Tales comentarios se mostrarán en los archivos .po. Por ejemplo:

// note to translators: don't translate the "[noun]" part - it is
// just here to distinguish the string from another "jumps" string
text = strip(gettext("jumps[noun]"), "[noun]");

27.4.2. Composición de cadenas

Los programadores de C usan sprintf() para componer y concatenar cadenas. C++ favorece los flujos, pero desafortunadamente, este enfoque hace la traducción difícil, porque cada fragmento de texto se traduce separadamente, sin permitirle a los traductores reordenarlos de acuerdo a la gramática del lenguaje.

Por ejemplo, este código podría ser problemático:

std::cout << _("Current amount: ") << amount
          << _(" Future: ") << future << std::endl;

label.set_text(_("Really delete ") + filename + _(" now?"));

Por lo que debe evitar esta situación o usar Glib::ustring::compose() que soporta sintaxis como:

std::cout << Glib::ustring::compose(
             _("Current amount: %1 Future: %2"), amount, future) << std::endl;

label.set_text(Glib::ustring::compose(_("Really delete %1 now?"), filename));

27.4.3. Asumir el tamaño de las cadenas mostradas

Nunca sabe cuánto espacio ocupará una cadena en la pantalla cuando se haya traducido. Bien podría duplicar el tamaño de la cadena original en inglés. Afortunadamente, la mayoría de los widgets de gtkmm se expandirán en tiempo de ejecución al tamaño requerido.

27.4.4. Palabras poco frecuentes

Debe evitar abreviaciones crípticas, lenguaje vulgar o técnico. Estos son generalmente difíciles de traducir e incluso les pueden resultar difíciles de entender a los hablantes nativos. Por ejemplo, es preferible «application» antes que «app».

27.4.5. Usar caracteres no ASCII en cadenas

Actualmente, gettext no soporta caracteres no ASCII (es decir, cualquier carácter con un código superior a 127) en el código fuente. Por ejemplo, no puede usar el signo de derechos de autor (©).

Para solucionar temporalmente esto, puede escribir un comentario en el código fuente justo antes de la cadena, diciéndole a los traductores que usen el carácter especial si está disponible en sus lenguajes. Para el inglés, después puede hacer una traducción a inglés americano en_US.po que use ese carácter especial.