2012-09-24 15 views
6
Kodum

:setlocale ve strftime sonuçlanmayan ay

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

çıkışları gibi bir şey: yerine benim beklenti

28 August 

: O

28 Agost 

beklediğim "Agost" olduğu için Katalanca dili (setlocale() üzerinden ayarlanır).

bu setlocale ve strftime çalışmak gerekiyordu böyle mi?

Bilginize: My yerel kalkınma makine yerel ayarı olarak ayarlanmış Windows 7:

cevap

16

yerel isimleri Windows üzerinde farklı. İngilizce varsayılan gibi görünüyor.

tam boy adı deneyin (birkaç deneyebilirsiniz ve ilk bulundu bulacaktır):

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

Bu masada görünebilir, yararlı olabilen: http://docs.moodle.org/dev/Table_of_locales

+0

teşekkürler! Catalan_Spain çalıştı! – Obay

+0

@Obay Diğer sistemler ile uyumluluk için '' ca_ES '' özelliğini saklamayı unutma – Sherbrow

+0

yup tüm bu üç – Obay

2

strftime tarih biçimleri lokalize sürümlerini verir tr-PH. Beklenmeyen sonuçlar alırsanız, büyük olasılıkla beklediğiniz yerel sürüm sisteminizde değil.

Ben pencereli hiçbir deneyimi var, ama benim Debian Linux sunucu üzerinde, istediğim yerelleştirilmiş dizeleri yüklemek zorunda kaldı.

3

Ubuntu 14.04 Açık setlocale(LC_TIME, 'de_DE.UTF8'); benim için bir Alman ay formatı/adı almak için hile yaptı

0

Benim gibi herkes için sunucu kısıtlamaları nedeniyle strftime işlevi yapamazsınız ... Mükemmel değil ama çalışır. Debian 9 setlocale(LC_TIME, 'fr_FR.UTF8'); günü

$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

bana güzel fransız biçimlendirilmiş gün/ay görüntüsünü almak için bir iş yaptı. Emin aşağıdaki dizisi ile yüklü yörelere sahip olun:

apt-get

dpkg-reconfigure yerel ayarlar

Ben bu eski bir soru olduğunu biliyorum
0

yerel ayarları yüklemek, ama ben düşündüm ki Yine de katkıda bulunur. locale -a ve sonra da kullanılabilir olan yerel görebilirsiniz: Eğer üzerinde çalıştığınız sunucunun SSH Eğer

ardından yazın. Dil listede yoksa, yüklü olması gerekir.

Benim için aradığımı gördüm: Listede nb_NO.utf8, tam olarak nasıl yazıldığını yazdım: setlocale(LC_ALL, 'nb_NO.utf8') ve bu benim için çalıştı.