strftotime spanish lc_all language hora formato fecha español es_es php date setlocale

spanish - PHP setlocale no tiene efecto



strftime español (9)

La función setlocale() no establece el idioma deseado (alemán).

El objetivo es generar nombres de mes.

Este es mi código de prueba con pruebas hasta el momento:

<?php date_default_timezone_set(''Europe/Berlin''); setlocale(LC_ALL, ''de_DE.utf8''); // Or setlocale(LC_ALL, ''de_DE@euro''); // Or setlocale(LC_ALL, ''de_DE''); // Or setlocale(LC_ALL, ''de''); // Or setlocale(LC_ALL, ''ge''); echo strftime(''%B'');

Salida:

junio

en lugar de

Juni

¿Alguna sugerencia?

  • No tengo ssh u otro acceso de shell.
  • La secuencia de comandos se ejecuta en un servidor de Linux.

PHP versión 5.6




Gracias a Rico Neitzel por la pista. En lugar de intentar formatear la fecha php, use strftime. Para ver las primeras 3 letras del nombre del mes en su idioma (por ejemplo, Dez en lugar de Dic a partir de Dezembro y no en diciembre), siga las instrucciones de instalación de la localidad anterior y luego:

comando de fecha: date (''d M Y'') // imposible de cambiar de inglés

setlocale( LC_ALL, "pt_BR"); // Portuguese, replace with your locale echo strftime(''%e %b %G''); result: "4 Dez 2016" /** * datelo funcion (date with locale) * Credits: Sergio Abreu * http://sites.sitesbr.net * NOTE: Depend on availability of the locale in server. * */ function datelo( $str, $locale=''en_US'', $time=null){ if( $time === null){ $time = time(); } if ( preg_match("/[DlFM]/", $str)){ setlocale(LC_ALL, $locale); $dict = array( ''d''=>''%d'', ''D''=>''%a'', ''j''=>''%e'', ''l''=>''%A'', ''N''=>''%u'', ''w''=>''%w'', ''F''=>''%B'', ''m''=>''%m'', ''M''=>''%b'', ''Y''=>''%G'', ''g''=>''%l'', ''G''=>''%k'', ''h''=>''%I'', ''H''=>''%H'', ''i''=>''%M'', ''s''=>''%S'', ''S''=>'''', ''z''=>''%j'', ''n''=>''%m'', '' ''=>'' '', ''-''=>''-'', ''/''=>''/'', '':''=>'':'', '',''=>'',''); $chars = preg_split("//", $str); $nstr = ''''; foreach ($chars as $c){ if ($c){ //skip empties $nc = $dict[$c]; if( $c === ''n''){ // Fixes the extra zero $nc = preg_replace("/^0+/", '''', strftime( $nc)); } elseif( $c === ''z''){ // Fixes the extra zero and decrease 1 $nc = preg_replace("/^0+/", '''', strftime( $nc)); // 023 turns 23 $nc = intval($nc) - 1; } $nstr .= $nc; } } return strftime( $nstr); }else{ // not localized return date( $str, $time); } }


Para los que vienen aquí buscando la fecha () no se localizan los nombres de mes y día de la semana:

== Preste atención ==

date () solo puede devolver nombres de mes / día en inglés y no podrá darle traducciones para otros idiomas.


Prueba este:

date_default_timezone_set(''Europe/Berlin''); $loc=setlocale(LC_ALL, ''de_DE@euro'', ''de_DE'', ''deu_deu''); echo strftime(''%B'');


Si estás en una máquina de Red Hat , puedes ejecutar:

localedef -v -c -i de_DE -f UTF-8 de_DE.UTF-8

Luego reinicia tu servidor Apache


Tu código es correcto Probablemente solo tenga que instalar el paquete de idioma correcto en el servidor en el que está ejecutando el script.

En la terminal, si el idioma que desea utilizar no aparece en la lista cuando ejecuta el comando sudo locale -a , deberá instalarlo ejecutando el siguiente comando:

sudo /usr/share/locales/install-language-pack de_DE

( sudo aquí es opcional si su usuario tiene permisos de root)

Luego, si compruebas dos de_DE.utf8 con sudo locale -a , deberías ver de_DE.utf8 .

Si desea instalar el paquete en francés, ejecute

sudo /usr/share/locales/install-language-pack fr_FR

Luego podrá establecer su idioma en PHP utilizando setlocale(...) exactamente como lo hizo.


Nota: Si se encuentra en un proyecto que no es utf8, deberá generar otros formatos a partir de los paquetes instalados. Aquí está cómo proceder en ubuntu (este trabajo en Debian también):

edite /var/lib/locales/supported.d/cs y agregue las siguientes líneas

fr_FR.iso88591 ISO-8859-1 fr_CA.iso88591 ISI-8859-1

y correr

sudo dpkg-reconfigure locales

Luego, al volver a ejecutar sudo locale -a , debería ver tanto fr_FR.iso88591 como fr_CA.iso88591 en la lista y puede usarlo en php llamando a setlocale(LC_ALL, ''fr_FR.iso88591'');


Página de manual de PHP para sais ''setlocale'' :

Nota: El valor de retorno de setlocale () depende del sistema que PHP está ejecutando. Devuelve exactamente lo que devuelve la función setlocale del sistema.

Si tiene acceso de administrador (debian) aquí está la solución:

editar

/etc/locale.gen

Puede agregar / eliminar las configuraciones regionales que necesita usar. Después de guardar el archivo ejecute:

locale-gen

y deberías estar bien. En mi servidor tuve que reiniciar Apache para ver los cambios.


Esta solución podría ser útil si no tiene acceso de shell al servidor.

Si tiene acceso de shell, ¡la respuesta de Benjamin Seiller es la mejor!

Como no tengo otras posibilidades (shell), he encontrado una solución solo con PHP utilizando la clase IntlDateFormatter .

<?php // Example vars $month = ''6''; // 1-12 $year = ''2014''; // four digit year $fmt = new IntlDateFormatter(''de_DE'', IntlDateFormatter::FULL, IntlDateFormatter::FULL, ''Europe/Berlin'', IntlDateFormatter::GREGORIAN); $lastMonth = mktime(0, 0, 0, $month -1, 1, $year); $showLastMonth = $fmt->format($lastMonth); echo $showLastMonth;