Недавно я обновил CakePHP с 2.3.9 по 2.4.4. Насколько я помню (я не могу проверить сейчас) Timehelper::timeAgoInWords
хорошо работал в старом CakePHP. Но после этого обновления я получаю локальную проблему. Я меняю язык на английский, но время назад все еще приходит на турецкий язык.CakePHP 2.4 и Timehelper's timeAgoInWords locale
В core.php
я уже установлен язык по умолчанию Турецкий:
Configure::write('Config.language', 'tur');
Внутри моего файла просмотра я использую это:
$d = "2012-05-02 20:17:30"
$myString = $this->Time->timeAgoInWords($d, array('end' => '+10 year'));
я получаю результат на турецком языке, как это:
1 yıl, 8 ay, 4 hafta önce
Я хочу получить результат следующим образом:
1 year, 8 months, 4 weeks ago
Мои переменные сессии, как это:
[Config] => Array
(
[userAgent] => 35db889a82essb4e57b540d52e8a766d
[time] => 1391121684
[countdown] => 10
[language] => eng
)
Хотя я установил мой язык, как английский, результат АМСВО на турецком языке. Как я могу отладить/исправить это?
Редактировать:
Я проверил значения Configure-language. Результаты, как это:
echo Configure::read('Config.language');
result: tur
Но
echo $this->Session->read('Config.language');
result: eng
Как я уже отмечал в верхней части моего вопроса, я уже выставиться Настройка :: язык внутри моего core.php
файла. core.php
переопределяет значение моего сеанса?
Edit2:
И странное дело, хотя config.language выглядит как «TUR» и «рус», другие части внутри моего файла вида работает хорошо. Например, это хорошо работает:
__("string")
EDIT3: Относительно этой страницы: http://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html
Я добавил это:
class AppController extends Controller {
public function beforeFilter() {
if ($this->Session->check('Config.language')) {
Configure::write('Config.language', $this->Session->read('Config.language'));
}
}
}
После этого результаты изменения конфигурации языка, как это:
echo Configure::read('Config.language');
result: eng
echo $this->Session->read('Config.language');
result: eng
Но я все еще вижу результат timeAgo на турецком языке.
На прошлой неделе я перешел на новый сервер, возможно, некоторые настройки отсутствуют на английском или и т. Д.? Я не могу понять, почему timeAgo
не работает, пока __("string")
работает.
Edit4:
Я даже изменил core.php
так:
Configure::write('Config.language', 'eng');
setlocale(LC_TIME, 'en_US.utf8', 'eng', 'en', 'en_US', 'en_UK');
Похоже, в моей конфигурации ничего не меняет язык timeAgoInWords
«s. Я переопределяю в каждом beforeFilter, чтобы изменить Config.language на английский, но все же слова турецкие. Обратите внимание, что в моем php.ini
часовом поясе, как это:
date.timezone = Europe/Istanbul
Edit5:
Похоже, что проблема в переводах. Я проверил исходный код timeago, вот копия: https://github.com/cakephp/cakephp/blob/2.4.4/lib/Cake/Utility/CakeTime.php#L738
Кажется, что этот метод использует __d и __dn, поэтому я проверил результаты в своем коде. «az önce» означает «только сейчас» на турецком языке.
Я уверен, что Config.language является «eng». Итак:
echo __d('cake', 'just now', 'just now'); // results: "az önce"
echo __('just now'); // results: "just now"
echo __('az önce'); // results: "az önce"
$days=12;
echo __dn('cake', '%d day', '%d days', $days, $days); // results: "12 gün"
echo __('gün'); // results: "days"
Спасибо, Или, незадолго до этого времени. Я проверил для Config.language. Я получаю как английский, так и турецкий. Я добавил результаты к концу вопроса. – trante
ОК, в вашем перед фильтре замените свой код просто следующим образом: 'Configure :: write ('Config.language', 'eng')', чтобы принудительно вывести английский язык и проверить, как ведет себя timeAgo(). Если это работает, то где-то в вашем коде вы переходите на турецкий язык. –
Я добавил 'Configure :: write ('Config.language', 'eng')' to beforeFilters контроллеров. Я даже написал это непосредственно перед строкой 'timeAgoInWords' внутри моих файлов вида. Когда я проверяю, я вижу, что Config.language установлен на «eng». – trante