Skip to content

Instantly share code, notes, and snippets.

@rubenrua
Last active June 27, 2019 07:21
Show Gist options
  • Save rubenrua/e9ba5c12ac237a5e5eea081fcb9eb769 to your computer and use it in GitHub Desktop.
Save rubenrua/e9ba5c12ac237a5e5eea081fcb9eb769 to your computer and use it in GitHub Desktop.
PHP e i18n de fechas

Hola chicos.

En la clase de hoy estudiaremos como funciona la internacionalización (i18n) de fechas en PHP.

La i18n de fechas en PHP recae sobre el sistema operativo. Se puede ver ejecutando:

# php -a
> setlocale(LC_ALL, 'es_ES.UTF8');
> var_dump(strftime("%d de %B de %Y", 1));
string(21) "01 de January de 1970"

El problema es que no tienes configurado "es_ES.UTF8" en el SO. En linux se puede ver con:

# locale -a
C
C.UTF-8
en_US.utf8
POSIX

Para configurar los locales en ubuntu/debian se hace con dpkg-reconfigure locales. Tras añadir "es_ES.utf8" ya funciona:

# locale -a
C
C.UTF-8
en_US.utf8
es_ES.utf8
POSIX

# php -a
php > var_dump(strftime("%d de %B de %Y", 1));
string(21) "01 de January de 1970"
php > setlocale(LC_ALL, 'es_ES.UTF8');
php > var_dump(strftime("%d de %B de %Y", 1));
string(19) "01 de enero de 1970"

dpkg-reconfigure locales en ubuntu/debian usa locale-gen. Pero ni uno, ni otro funcionan en CentOD/Fedora. Para CentOS existe localedef [1].

Y esto en linux; en windows y os X es otro infierno. Por esto la gente de PHP creo el módulo intl [2] y internacionaliza una fecha se puede hacer con IntlDateFormatter [3].

En Teltek si, pero desgraciadamente no todos los hostings/distros tenían dicho modulo, por eso la gente de Symfony creo "the Intl Component": A PHP replacement layer for the C intl extension that also provides access to the localization data of the ICU library. But the replacement layer is limited to the locale "en". If you want to use other locales, you should install the intl extension instead. [4]

PD: En Python es algo parecido.[5]

[1] https://unix.stackexchange.com/questions/140299/locale-gen-command-in-centos6
[2] http://php.net/manual/en/book.intl.php
[3] http://php.net/manual/en/intldateformatter.create.php
[4] https://symfony.com/doc/current/components/intl.html
[5] https://stackoverflow.com/questions/18593661/how-do-i-strftime-a-date-object-in-a-different-locale

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment