2011-02-12 20 views
8

PHP iç date() işlevinin koşullu çevirisi oluşturmaya çalışıyorum. İç değişkenleri bir şekilde yeniden tanımlamak mümkün mü? - tarihi ('E'), tarih vs. ('y') çok farklı şeritler bu test bazında PHP fonksiyon geri kalan kısmına beslenmesi: Çok dilli site için PHP date() çevirme

if (ICL_LANGUAGE_CODE == 'fr') { } 

aşağıdaki

bir çalışma örneği kod bir tarih modülü için kullanıyorum. $date, bu tanımda yer alan birçok değişkenle tanımlandığından, her bir anahtarda 100 kez veya daha fazla değişkeni yeniden tanımlamaktan kaçınmak için ilk olarak PHP'nin date() içindeki değişkenleri yeniden tanımlamak önemlidir. hakkında gitmek için oldukça acı verici bir yol var

if($start <= $end): 
    if($start == $end): 
     //Month Day, Year 
     $date = date('F', $start).' '.date('j',$start).', '.date('Y', $start); 
    else: 
     if($start_year == $end_year): 
      if($start_month == $end_month): 

       //Month Day - Day, Year 
       $date = date('F', $start).' '.date('j',$start).' - '.date('j', $end).', '.date('Y', $start); 
      else: 
       //Month Day - Month Day, Year 
       $date = date('F', $start).' '.date('j',$start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $start); 
      endif; 
     else: 
      //Month Day, Year - Month Day, Year 
      $date = date('F', $start).' '.date('j',$start).', '.date('Y', $start).' - '.date('F', $end).' '.date('j', $end).', '.date('Y', $end); 
     endif; 
    endif; 
endif; 

cevap

21

, sen strftime kullanmalıdır Tabii

February 11, 2011 // en 
11 février 2011 // fr 

, sen yüklü yerel ayarları olması gerekir senin sistemi. Örneğin başına Ubuntu: Bu harika görünüyor

bash-4.1$ sudo locale-gen fr_CA.UTF-8 
+1

Bu en iyi cevap IMO'dur. 'bir şey için ama sayısal değerler için kullanmaya çalıştığınızda ayrı düşüyor – Mike

+0

Müthiş ... Teşekkür ederim. Her ikisi de yeni bir yerel ayarın nasıl kurulacağı ile ilgili soruları yanıtlamak için –

+0

Yerel bölgelere göre% B% G –

8
$date = date('F', $start).' '.date('j',$start).', '.date('Y', $start); 

. date()'daki biçim dizgisinin tek bir karakter olması gerekmez. Bu hat

$date = date('F j Y'); 

düşürüldü Ve gittiğiniz basit

switch($whats_my_locale) { 
    case 'FR': 
     $format = 'date format characters for a french date'; 
     break 
    case 'EN' : 
     $format = 'format chars for english date' 
     break 
    case etc.... 
    default: 
     $format = 'default date format string here'; 
} 

$local_date_string = date($format, $start); 

ve kapalı olabilir, o verilebilir.

+0

, benim sorum - = 'tarih biçimi karakterler ... fr' $ formatında 'bağlamında;' nasıl bu değişkenler (örneğin 'm' vardır, 'd ',' M ') vs. Fransızca'ya yeniden tanımlanıyor mu? – Brian

+0

Ve yoğun olmasından dolayı özür dilerim! :( – Brian

+0

"date()" man sayfası (http://php.net/date), ingilizce olmayan tarihler için "setlocale()" ve "strftime()' işlevlerini kullanır. Ancak, aynı biçim dize kuralları temel olarak geçerlidir. orada - tek bir char olmak zorunda kalmaz, biçimlendirici karakter dizisi olabilir –

0

Eminim var, ama yalnızca sayısal değerleri kullanmayı düşündünüz mü? Ayrıca, eğer bunları kullanırsanız, Birleşik Krallık'ın ve diğerlerinin tersine ABD'nin ay/gün olduğunu hatırlayın.

switch ($lang) { 
    case 'en': 
     setlocale(LC_TIME, 'en_CA.UTF-8'); 
     echo strftime("%B %e, %G"); 
     break; 
    case 'fr': 
     setlocale(LC_TIME, 'fr_CA.UTF-8'); 
     echo strftime("%e %B %G"); 
     break; 
} 

Sonuçlar: Eğer yerel ayara göre tarih/saat damgaları işlemek için gerektiğinde

+0

Bu bir düşünce. Kesinlikle bunu engellemeyi umuyorum ama o beni kaçtı ... Bunu bir yedekleme planı olarak sayacağım Teşekkürler, – Brian

+0

Evet, tam bir tarih olması daha güzel, ancak kullanıcılar kesinlikle bir fonksiyonel sayısal birini tercih ederdi.Heck, hatta sadece rasgele bir javascript tarihini kullanabilirsiniz. – JakeSteam