2012-09-24 16 views
6

Il mio codice:setlocale e strftime non tradurre mese

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

uscite qualcosa di simile:

28 August 

invece di mia aspettativa:

28 Agost 

mi aspetto "Agost", perché questo è Lingua catalana (impostata su setlocale()).

È così che dovrebbe funzionare setlocale e strftime?

FYI: La mia macchina di sviluppo locale è Windows 7, insieme al locale: en-PH

risposta

16

I nomi delle impostazioni internazionali sono diversi su Windows. Sembra che per impostazione predefinita sia inglese.

Prova il nome completo di lunghezza (si può provare diversi e si riprenderà il primo trovato):

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

si può guardare a questo tavolo, che può essere utile: http://docs.moodle.org/dev/Table_of_locales

+0

Grazie! 'Catalan_Spain' ha funzionato! – Obay

+0

@Obay Non dimenticare di mantenere il ''ca_ES'' per la compatibilità con altri sistemi – Sherbrow

+0

yup Ho tenuto tutti e tre – Obay

2

strftime dà le versioni localizzate di formati di data. Se ottieni risultati imprevisti, molto probabilmente la versione localizzata che ti aspetti non è sul tuo sistema.

Non ho esperienza con Windows, ma sul mio server Debian Linux, ho dovuto installare le stringhe localizzate che volevo.

3

Su Ubuntu 14.04 setlocale(LC_TIME, 'de_DE.UTF8'); ha ottenuto il formato/nome del mese tedesco :)

0

Per tutti quelli, come me, che non possono ancora eseguire la funzione strftime a causa di restrizioni del server ... Non perfetta ma funziona.

$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

Su Debian 9 setlocale(LC_TIME, 'fr_FR.UTF8'); ha fatto il lavoro per me arrivare ben francese di visualizzazione formattato giorno/mese. Assicurarsi di avere le versioni locali installate con la seguente sequenza:

apt-get install locali

dpkg-reconfigure locales

0

So che questa è una vecchia questione, ma ho pensato che comunque contribuire.

Se è possibile eseguire SSH nel server su cui si sta lavorando, quindi scrivere: locale -a e quindi è possibile visualizzare le impostazioni locali disponibili. Se la lingua non è elencata, è necessario installarla.

Per me, ho visto quello che stavo cercando: nb_NO.utf8 nell'elenco, quindi l'ho scritto esattamente come è stato scritto: setlocale(LC_ALL, 'nb_NO.utf8') e quello ha funzionato per me.