Internacionalización i18n y localización L10n

Stay hungry, stay foolish

Steve Jobs

La internacionalización es el proceso de diseñar software de manera tal que pueda adaptarse a diferentes idiomas y regiones sin la necesidad de realizar cambios de ingeniería ni en el código. La localización es el proceso de adaptar el software para una región específica mediante la adición de componentes específicos de un locale y la traducción de los textos, por lo que también se le puede denominar regionalización. No obstante la traducción literal del inglés es la más extendida.

Es una práctica común en el idioma inglés (sobre todo en el ámbito de la computación), abreviar internationalization con el numerónimo “i18n”. Ello se debe a que entre la primera i y la última ene de dicha palabra hay 18 letras. Lo mismo sucede con localization, que se abrevia “L10n”. La L mayúscula se utiliza para distinguirla de la i minúscula de i18n.

Los elementos que hay que adaptar son por lo general:

  • Traducciones de cadenas de textos
  • Formateo de números
  • Formateo de monedas (Y todo lo que tenga que ver con manejo de dinero)
  • Encodeos, charsets y collations
  • Sistemas métricos
  • Métodos de redondeo
  • Fuentes
  • Fechas y horas
  • Timezones
  • Imágenes y gestos

Para programar aplicaciones multilingües (I18N), hay un conjunto de códigos que definen cada país e idioma.
Ejemplos:
es:español
es_AR:español (Argentina)
es_BO:español (Bolivia)
es_CL:español (Chile)
es_CO:español (Colombia)
es_CR:español (Costa Rica)
es_DO:español (República Dominicana)
es_EC:español (Ecuador)
es_ES:español (España)
es_GT:español (Guatemala)
es_HN:español (Honduras)
es_MX:español (México)
es_NI:español (Nicaragua)
es_PA:español (Panamá)
es_PE:español (Perú)
es_PR:español (Puerto Rico)
es_PY:español (Paraguay)
es_SV:español (El Salvador)
es_US:español (Estados Unidos)
es_UY:español (Uruguay)
es_VE:español (Venezuela)

Cuando se trata de sitios complejos, dinámicos, y cuya traducción posiblemente se haya contratado a profesionales, es necesario entonces programar el sitio de manera que los textos traducidos sean independientes de la maquetación, para una fácil modificación de los mismos en caso de correcciones o erratas, permitiendo además que alguien ajeno al mundo de la programación sea capaz de actualizar ese texto (pues eso, i18n).

En PHP podemos usar gettext()

Ejemplo:

// Codigo normal
<label><?php echo "Name"; ?></label>
// Codigo gettext
<label><?php echo gettext('Name'); ?></label>
// Codigo con funcion alías de gettext
<label><?php echo _('Name'); ?></label>

Sin embargo el solo agregar la función de gettext no hará la traducción si no inicializamos su configuración.

// Idioma
$lang = ‘es_ES’;

// Dominio
$text_domain = ‘my_project_name’;

// Dependiendo de tu OS putenv/setlocale configurarán tu idioma.
putenv(‘LC_ALL=’.$lang);
setlocale(LC_ALL, $lang);

// La ruta a los archivos de traducción
bindtextdomain($text_domain, ‘./locale’ );

// El codeset del textdomain
bind_textdomain_codeset($text_domain, ‘UTF-8’);

// El Textdomain
textdomain($text_domain);

// Cadena de texto de prueba
echo _(“Hello World”);

Desarrolla toda tu aplicación en inglés y hasta que esté completa inicia el proceso de traducción, esto te ahorrará bastante el tiempo de desarrollo.

Para PHP tenemos una herramienta llamada https://poedit.net/ que nos ayuda a crear nuestras traducciones.

Si usamos algún framework la mayoría trae sus propias herramientas de idiomas, por ejemplo en codeigniter podemos usar la clase Language de CodeIgniter y las librería ci_i18n_library de Maestric:

<p><?php echo lang('test_hello') ?></p>