Перевод комбинаций «месяц-день» в CakePHP

Я могу прекрасно перевести отдельный месяц или день, используя мои .po файлы:

echo __('December'); //becomes diciembre
echo __('Thursday'); //becomes jueves
//...etc

Но когда я использую формат даты следующим образом:

 echo __(date("j F, Y"));  //becomes 20 December 2012

Это не перевод - я предполагаю, потому что у меня есть переводы для каждого месяца и дня в отдельных строках.

Обычно я бы просто сделал что-то вроде этого:

__(date('j')) . ' ' . __(date('F')) . ' ' . __(date('Y'));

Но в CMS администратору разрешено изменять дату в любом формате. Итак, это может быть "j F, Y", или "Y-m-d", или... что-то еще.

Я подумал, может быть, я мог бы сделать помощник или что-то в этом роде, которое разбивает дату на части и возвращает каждую часть в виде __(), но это кажется излишним. Есть простой способ сделать это?

Я устанавливаю свою локаль в AppController:

setlocale(LC_ALL, $currentLanguage['locale']);
Configure::write('Config.language', $currentLanguage['code2']);

person Dave    schedule 20.12.2012    source источник
comment
не могли бы вы проанализировать строку формата, введенную администраторами, и добавить функцию __() вокруг каждой буквы?   -  person nIcO    schedule 21.12.2012
comment
каково значение $currentLanguage['locale']?   -  person mark    schedule 21.12.2012


Ответы (2)


Оказывается, в CakePHP есть функция TimeHelper i18nFormat:

$time = time();
$timestring = $this->Time->format('Y-m-d H:i:s', $time);
$this->Time->i18nFormat($timestring, "%A %e %B %Y");

Создайте файл «LC_TIME» (без расширения) и поместите его в свою папку /Locale/ara/ (или замените «ara» любым трехсимвольным кодом языка, который вы хотите)

Скопируйте содержимое файла CakePHP time_test LC_TIME и поместите его в свой (затем сохраните, конечно).

Затем измените его содержимое на любой язык, который вы хотите (я полагаю, что пример на испанском языке).

Вот и все!

Примечания:

Подробнее о файле LC_TIME здесь: http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.files%2Fdoc%2Faixfiles%2FLC_TIME.htm

person Dave    schedule 20.12.2012

Класс CakeTime (и, следовательно, TimeHelper) использует домен 'cake' для перевода названий дней и месяцев. Так что поместите эти переводы в cake.po файл вместо default.po

person ADmad    schedule 20.12.2012
comment
ну, для того, чтобы можно было использовать файл cake po, тогда нужно было бы использовать echo __d('cake', 'December'); и т. д. - person mark; 21.12.2012