Перевод даты PHP () для многоязычного сайта

Я пытаюсь создать условный перевод внутренней функции date () PHP. Возможно ли каким-то образом переопределить внутренние переменные – например, – date ('M'), date ('y') и т. Д., Так что в оставшуюся часть функции PHP на основе этого теста будут добавлены разные строки:

if (ICL_LANGUAGE_CODE == 'fr') { } 

Ниже приведен рабочий пример кода, который я использую для модуля дат. Поскольку $date определяется многими переменными, содержащимися в этом определении, важно предварительно переопределить переменные в PHP date() , чтобы избежать переопределения переменной 100 раз или более в каждом ключе.

 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; 

Всякий раз, когда вам нужно манипулировать марками даты и времени на основе языка, вы должны использовать strftime :

 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; } 

Результаты:

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

Конечно, вам необходимо установить локали в вашей системе. В Ubuntu на пример:

 bash-4.1$ sudo locale-gen fr_CA.UTF-8 
  $date = date('F', $start).' '.date('j',$start).', '.date('Y', $start); 

Это довольно болезненный путь. Строка формата в date() не обязательно должна быть одним символом. Эта строка может быть уменьшена до

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

И учитывая это, вы могли бы иметь простой

 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); 

и вы уходите.

Я уверен, что у вас есть, но вы считали, что просто используете числовые значения?

Кроме того, если вы их используете, помните, что у США есть месяцы в день, напротив Великобритании и других.