Как добавить перевод в массив
есть сайт на базе levels-ranks-web. На одной из страниц есть такие функции
function declension($digit,$expr,$onlyword=false)
{
if(!is_array($expr)) $expr = array_filter(explode(' ', $expr));
if(empty($expr[2])) $expr[2]=$expr[1];
$i=preg_replace('/[^0-9]+/s','',$digit)%100;
if($onlyword) $digit='';
if($i>=5 && $i<=20) $res=$digit.' '.$expr[2];
else
{
$i%=10;
if($i==1) $res=$digit.' '.$expr[0];
elseif($i>=2 && $i<=4) $res=$digit.' '.$expr[1];
else $res=$digit.' '.$expr[2];
}
return trim($res);
}
function to_date ($date){
$date1 = date('Y-m-d H:i:s', time());
$date2 = date('Y-m-d H:i:s', $date);
$date1 = strtotime($date1);
$date2 = strtotime($date2);
$check_time = $date2 - $date1;
if($check_time <= 0){
return false;
}
$days = floor($check_time/86400);
$hours = floor(($check_time%86400)/3600);
$minutes = floor(($check_time%3600)/60);
$seconds = $check_time%60;
$str = '';
if($days > 0) $str .= declension($days,array('день','дня','дней')).' ';
if($hours > 0) $str .= declension($hours,array('час','часа','часов')).' ';
if($minutes > 0) $str .= declension($minutes,array('минута','минуты','минут')).' ';
if($seconds > 0) $str .= declension($seconds,array('секунда','секунды','секунд'));
return $str;
}
Сайт поддерживает перевод на разные языки, но если я меняю
if($days > 0) $str .= declension($days,array('день','дня','дней')).' ';
на
if($days > 0) $str .= declension($days,array($Translate->get_translate_module_phrase('module_page_vips','_Day'),$Translate->get_translate_module_phrase('module_page_vips','_Days'),$Translate->get_translate_module_phrase('module_page_vips','_Dayss'))).' ';
то почему-то не работает... Как сделать, чтоб работало?)
Ответы (1 шт):
Вы пытаетесь обратиться к переменной $Translate внутри функции to_date(), но внутри функции эта переменная не определена.
Вариант 1
Нужно добавить параметр в функцию:
function to_date ($date, $Translate){
$date1 = date('Y-m-d H:i:s', time());
$date2 = date('Y-m-d H:i:s', $date);
$date1 = strtotime($date1);
$date2 = strtotime($date2);
$check_time = $date2 - $date1;
if($check_time <= 0){
return false;
}
$days = floor($check_time/86400);
$hours = floor(($check_time%86400)/3600);
$minutes = floor(($check_time%3600)/60);
$seconds = $check_time%60;
$str = '';
if($days > 0) $str .= declension($days,array($Translate->get_translate_module_phrase('module_page_vips','_Day'),$Translate->get_translate_module_phrase('module_page_vips','_Days'),$Translate->get_translate_module_phrase('module_page_vips','_Dayss'))).' ';
if($hours > 0) $str .= declension($hours,array('час','часа','часов')).' '; // Аналогично
if($minutes > 0) $str .= declension($minutes,array('минута','минуты','минут')).' '; // Аналогично
if($seconds > 0) $str .= declension($seconds,array('секунда','секунды','секунд')); // Аналогично
return $str;
}
Так же нужно найти все места, где вызывается функция to_date и передать в неё вторым параметром этот $Translate (не забывая, что в том контексте, где вызывается функция, эта переменная тоже должна быть)
Вариант 2
Сделать быстро, но НЕ ПРАВИЛЬНО (Настролько не правильно, что в порядочном обществе можно за такое получить по рукам железной линейкой)
в index.php найти $Translate = new Translate; и добавить перед этой строкой global $Translate;
Получится так
// Создание экземпляра класса работающего с языками и переводами.
global $Translate;
$Translate = new Translate;
и такую же строчку добавить в первой строке функции to_date:
function to_date ($date){
global $Translate;
$date1 = date('Y-m-d H:i:s', time());
$date2 = date('Y-m-d H:i:s', $date);
$date1 = strtotime($date1);
$date2 = strtotime($date2);
$check_time = $date2 - $date1;
if($check_time <= 0){
return false;
}
$days = floor($check_time/86400);
$hours = floor(($check_time%86400)/3600);
$minutes = floor(($check_time%3600)/60);
$seconds = $check_time%60;
$str = '';
if($days > 0) $str .= declension($days,array($Translate->get_translate_module_phrase('module_page_vips','_Day'),$Translate->get_translate_module_phrase('module_page_vips','_Days'),$Translate->get_translate_module_phrase('module_page_vips','_Dayss'))).' ';
if($hours > 0) $str .= declension($hours,array('час','часа','часов')).' '; // Аналогично
if($minutes > 0) $str .= declension($minutes,array('минута','минуты','минут')).' '; // Аналогично
if($seconds > 0) $str .= declension($seconds,array('секунда','секунды','секунд')); // Аналогично
return $str;
}
Повторяю, такой способ может вызвать ненависть программистов, которые столкнутся с этим кодом. Они могут знать ваш адрес!