Internacionalización y localización: función setlocale() y afines
Una razón para llamar a este proceso localización y no simplemente traducción es que hay muchas otras cosas que dependen del idioma, por ejemplo, el formato de las fechas o el signo monetario.
PHP dispone de un buen surtido de funciones para manejar esto. Todo comienza
por la función
setlocale()
que permite indicar el código de idioma/país que se desea usar. Es importante
notar que esta función no genera ningún error. Usualmente devolverá el mismo
código que se le ha indicado como segundo argumento, pero si no lo encuentra,
no devolverá nada, o devolverá el más aproximado que encuentre.
Una vez establecido el `locale´, hay una serie de funciones que permiten manipular textos, cifras, importes monetarios y fechas para distintos países e idiomas. El ejemplo muestra en una tabla el resultado de esas funciones para una serie de códigos de localización y ofrece también la posibilidad de ingresar un código adicional, que mostrará en la primera fila si estuviera disponible.
Al pié de la tabla se muestra el código fuente que la genera.
Las funciones usadas en el ejemplo son las siguientes:
-
setlocale() -
localeconv() -
strcoll() -
strtoupper() -
money_format() -
number_format() -
strftime() -
nl_langinfo()
La información de los nombres de los días de la semana y los nombres de los
meses que se obtuvieron mediante
nl_langinfo()
también están disponibles mediante
strftime()
indicando el formato que corresponda, pero mientras
strftime()requiere una fecha válida, con
nl_langinfo()
basta indicar (indirectamente, como se puede ver en el código) el número de 1
a 7 para los días de la semana o del 1 al 12 para los meses.
Las fechas, en la mayoría de los idiomas, se muestran en formato
dd/mm/aaaa, excepto para
en_US (mm/dd/aaaa) y japonés que, aunque no se puede
ver los símbolos que usa para indicar las partes de la fecha (no son
separadores simples, pues son distintos entre cada parte de la fecha y hora)
se ve que la fecha está en formato aaaa/mm/dd y, al parecer, no
tienen nombres para los meses sino que simplemente dicen `Mes 1´, `Mes 2´,
etc.
Es interesante que las tablas incluso contemplan costumbres locales, como el
caso del portugués (pt) de Portugal y Brasil donde los nombres de
los días de la semana y los meses aún siendo los mismos, en un caso estilan
escribirlos con mayúsculas y en el otro no.
Según el idioma,
strcoll()
puede o no saber qué hacer con la `ñ´, en la casilla se muestra el resultado
de comparar la `ñ´ con la `n´ que le antecede y la `o´ que le sucede y el
resultado no siempre es el correcto si la `ñ´ no existe en ese idioma. Otro
tanto ocurre con la muestra de
strtoupper(), donde para algunos idiomas no encuentra la mayúscula pedida.
En idiomas como griego o japonés, que usan otros alfabetos, el resultado para los textos no se puede mostrar directamente. Esto requiere usar otras codificaciones para la página y que el navegador los soporte. Eso no lo cubriré pues lo desconozco.
Viene de: Internacionalización y localización: recomendaciones
Continúa en: Internacionalización y localización: usando constantes