Я пытаюсь создать условный перевод внутренней функции 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);
и вы уходите.
Я уверен, что у вас есть, но вы считали, что просто используете числовые значения?
Кроме того, если вы их используете, помните, что у США есть месяцы в день, напротив Великобритании и других.