Errores comunes

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

25.4.1. Mismas cadenas, semánticas diferentes

Sometimes two English strings are identical but have different meanings in different contexts, so they would probably not be identical when translated. Since the English strings are used as look-up keys, this causes problems.

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]");

If you use Glib's support macros, it's easier. Use C_() instead of _(). For instance:

GLib::ustring text(C_("noun", "jumps"));

25.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?"));

So you should either avoid this situation or use Glib::ustring::compose() which supports syntax such as:

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));

25.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.

25.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».

25.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 (©).

To work around this, you could write a comment in the source code just before the string, telling the translators to use the special character if it is available in their languages. For English, you could then make an American English en_US.po translation which used that special character.