Перевод даты PHP() для многоязычного сайта
Я пытаюсь создать условный перевод внутренней функции date() PHP. Возможно ли каким-то образом переопределить внутренние переменные - например. - дата ('M'), дата ('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;
Ответы
Ответ 1
Всякий раз, когда вам нужно манипулировать метками даты и времени на основе языка, вы должны использовать 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
Ответ 2
$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);
и от вас.
Ответ 3
Я уверен, что у вас есть, но вы считали, что используете только числовые значения?
Кроме того, если вы их используете, помните, что у США есть месяцы в день, напротив Великобритании и других.
Ответ 4
Может быть сделано довольно легко либо с помощью определения, либо с помощью переключателя.
ОПРЕДЕЛИТЬ (PHP 7)
<?php
// With Define
$untranslated_date = $date('D');
translate_date($untranslated_date);
function translate_date($untranslated_date)
{
define('translated_days', array(
'Mon' => 'Ma',
'Tue' => 'Di',
'Wed' => 'Wo',
'Thu' => 'Do',
'Fri' => 'Vr',
'Sat' => 'Za',
'Sun' => 'Zo')
);
echo translated_days[$untranslated_date];
}