Localización e internacionalización del software

Se entiende[8] por «internacionalización» (abreviado «i18n») la operación por medio de la cual se modifica un programa, o conjunto de programas en un paquete, para que pueda adecuarse a múltiples idiomas y convenciones culturales. [9]

Por «localización» («l10n»), nos referimos a la operación por la que, sobre un conjunto de programas que ya han sido internacionalizados, se le proporciona al programa toda la información necesaria para que pueda manejar su entrada y su salida de un modo que sea correcto respecto a determinados hábitos lingüísticos y culturales (por ejemplo el signo de la moneda de un país, el orden en que se expresan mes, día y año en una fecha…).

Utilizaremos la expresión «adaptación a la pluralidad lingüística» (traducción improvisada de Native Language Support, NLS), para hablar de las actividades o rasgos genéricos que engloban tanto la internacionalización como la localización, de manera que sean posibles interacciones plurilingüísticas en un programa.

Juegan los locales

LOCALE is a basic concept introduced into ISO C (ISO/IEC 9899:1990). The standard is expanded in 1995 (ISO 9899:1990 Amendment 1:1995). In LOCALE model, the behaviour of some C functions are dependent on LOCALE environment. LOCALE environment is divided into a few categories and each of these categories can be set independently using setlocale().

POSIX also determines some standards around i18n. Almost all of POSIX and ISO C standards are included in XPG4 (X/Open Portability Guide) standard and all of them are included in XPG5 standard. Note that XPG5 is included in UNIX specifications version 2. Thus support of XPG5 is mandatory to obtain Unix brand. In other words, all versions of Unix operating systems support XPG5. [10]

Un ejemplo vale más que mil explicaciones. date es un programa internacionalizado, que devuelve la fecha y la hora del sistema. Para un usuario que no ha configurado sus locales o que ha elegido el locale POSIX la salida sería igual a la de un programa no internacionalizado, con mensajes probablemente en inglés:

	    [Mi_maquina]$ 
	    LC_ALL=C date
	    Wed May  8 20:46:09 CEST 2002
	    [Mi_maquina]$ 
	  

Un usuario español habrá configurado su cuenta de manera que reciba los mensajes en español (para el ejemplo usamos variables de entorno para cambiar de locale).

	    [Mi_maquina]$ 
	    LC_ALL=es_ES@euro date
	    mié may  8 20:46:22 CEST 2002
	    [Mi_maquina]$ 
	  

Podemos ver que la salida es en español. Para ver la salida en francés basta con usar

	    [Mi_maquina]$ 
	    LC_ALL=fr_FR date
	    mer mai  8 20:46:31 CEST 2002
	    [Mi_maquina]$ 
	  

¿Cómo se logra esto?

[ToDo. Explicar brevemente funcionamiento del sistema]

Un ejemplo de Santiago Vila [11] servirá, porque además no se refiere a un programa en c: sino a un script de shell


      #!/bin/sh
      if [ -x /usr/bin/gettext ]; then
           echo=/usr/bin/gettext
      else
           echo="echo -n"
      fi
      export TEXTDOMAIN=libc
      $echo "cheese"
      echo ""
    

	      [Mi_maquina]$
	      LANG=es_ES; ./test-script
	      queso
	    


[8] Bibliografía: (p)info gettext, man Locale::Maketext(3pm), man Locale::Maketext:TPJ13(3pm), http://www.debian.org/doc/manuals/intro-i18n/ .

[9] Sobre el tema se puede consultar «li18nux» ( http://www.li18nux.org/ ).

[11] En mensaje a la lista de 16 de mayo de 2002.