2012-09-24 32 views
6

Mi código:setlocale y strftime no traducir meses

setlocale(LC_TIME, 'ca_ES'); 
echo strftime("%#d %B", strtotime($ticket->date_created)); 

salidas algo como:

28 August 

en lugar de mi expectativa:

28 Agost 

espero "Agost", ya que es Lengua catalana (establecida a través del setlocale()).

¿Es así como se supone que setlocale y strftime funcionan?

FYI: Mi equipo de desarrollo local es Windows 7, se establece en la configuración regional: en-PH

Respuesta

16

Los nombres de configuración regional son diferentes en Windows. Parece que está predeterminado en inglés.

Prueba el nombre de longitud completa (puede probar varios y se recogerá la primera encontrado):

setlocale(LC_TIME, 'ca_ES', 'Catalan_Spain', 'Catalan'); 

Usted puede mirar en esta tabla, que puede ser útil: http://docs.moodle.org/dev/Table_of_locales

+0

Gracias! 'Catalan_Spain' funcionó! – Obay

+0

@Obay No olvide mantener el ''ca_ES'' para compatibilidad con otros sistemas – Sherbrow

+0

yup Mantuve los tres – Obay

2

strftime da versiones localizadas de formatos de fecha. Si obtiene resultados inesperados, lo más probable es que la versión localizada que espera no esté en su sistema.

No tengo experiencia con Windows, pero en mi servidor Debian Linux, tuve que instalar las cadenas localizadas que quería.

3

En Ubuntu 14.04 setlocale(LC_TIME, 'de_DE.UTF8'); hizo el truco para que consiga un formato mes/nombre alemán :)

0

para todos aquellos que, como yo, que todavía no puede hacer strftime función debido a las restricciones del servidor ... no es perfecto, pero funciona.

$months[1] = "gennaio"; 
$months[2] = "febbraio"; 
$months[3] = "marzo"; 
$months[4] = "aprile"; 
$months[5] = "maggio"; 
$months[6] = "giugno"; 
$months[7] = "luglio"; 
$months[8] = "agosto"; 
$months[9] = "settembre"; 
$months[10] = "ottobre"; 
$months[11] = "novembre"; 
$months[12] = "dicembre"; 

// giorni 
$weekdays[0] = "domenica"; 
$weekdays[1] = "lunedì"; 
$weekdays[2] = "martedì"; 
$weekdays[3] = "mercoledì"; 
$weekdays[4] = "giovedì"; 
$weekdays[5] = "venerdì"; 
$weekdays[6] = "sabato"; 

function strftimeIta($format, $timestamp){ 

    global $weekdays, $months; 

    preg_match_all('/%([a-zA-Z])/', $format, $results); 

    $originals = $results[0]; 
    $factors = $results[1]; 


    foreach($factors as $key=>$factor){ 
     switch($factor){ 
      case 'a': 
       /*** Abbreviated textual representation of the day ***/ 
       $n = date('w', $timestamp); // number of the weekday (0 for sunday, 6 for saturday); 
       $replace = ucfirst($weekdays[$n]); 
       $replace = substr($replace, 0, 3); 
       break; 
      case 'A': 
       /*** Full textual representation of the day ***/ 
       $n = date('w', $timestamp); // number of the weekday (0 for sunday, 6 for saturday); 
       $replace = ucfirst($weekdays[$n]); 
       break; 
      case 'h': 
      case 'b': 
       /*** Abbreviated month name ***/ 
       $n = date('n', $timestamp); // Numeric representation of a month, without leading zeros 
       $replace = ucfirst($months[$n]); 
       $replace = substr($replace, 0, 3); 
       break; 
      case 'B': 
       /*** Full month name ***/ 
       $n = date('n', $timestamp); // Numeric representation of a month, without leading zeros 
       $replace = ucfirst($months[$n]); 
       break; 
      default: 
       /*** Use standard strftime function ***/ 
       $replace = strftime("%".$factor, $timestamp); 
       break; 
     } 
     $search = $originals[$key]; 
     $format = str_replace($search, $replace, $format); 
    } 
    return $format; 
} 
0

En Debian 9 setlocale(LC_TIME, 'fr_FR.UTF8'); hicieron el trabajo para que consiga pantalla muy bien francés con formato día/mes. Asegúrese de tener los locales instalados con la siguiente secuencia:

apt-get install locales

dpkg-reconfigure locales

0

Sé que esto es una vieja pregunta, pero pensé Contribuir de todos modos.

Si puede SSH en el servidor en el que está trabajando, escriba: locale -a y luego podrá ver las configuraciones regionales disponibles. Si su idioma no figura en la lista, debe estar instalado.

Para mí, vi el que estaba buscando: nb_NO.utf8 en la lista, así que lo escribí exactamente cómo fue escrito: setlocale(LC_ALL, 'nb_NO.utf8') y eso funcionó para mí.