CakePHP Использование Set :: в сочетании с локализацией - PullRequest
0 голосов
/ 06 октября 2009

Я пытаюсь использовать функции локализации в cakephp. В app_model.php у меня есть метод, который получает различные способы оплаты.

function getDistinctFields($model, $field)
{
    $list = ClassRegistry::init($model)->find('all', array(
        'fields'=>array("DISTINCT $model.$field"), 
        'conditions' => array('not' => array("$model.$field" => null))
    ));
    debug($list);
    $translated = "{n}.$model.$field";
    $return = Set::combine($list, "{n}.$model.$field", __($translated, true));
    return $return;
}

Результат отладки ($ list) выглядит так:

[0] => Array
    (
        [InstantPaymentNotification] => Array
            (
                [payment_status] => Pending
            )
    )

[1] => Array
    (
        [InstantPaymentNotification] => Array
            (
                [payment_status] => Completed
            )
    )

[2] => Array
    (
        [InstantPaymentNotification] => Array
            (
                [payment_status] => Denied
            )
    )

[3] => Array
    (
        [InstantPaymentNotification] => Array
            (
                [payment_status] => Refunded
            )
    )

Вывод метода выглядит следующим образом:

> Array (
>     [Pending] => Pending
>     [Completed] => Completed
>     [Denied] => Denied
>     [Refunded] => Refunded
>     [Reversed] => Reversed
>     [Canceled_Reversal] => Canceled_Reversal )

Хорошее, но значение не переводится так, как должно быть. Я создал файл default.po в правильном месте и проверил, работает ли он на других страницах. Однако, похоже, он не работает с классом Set.

1 Ответ

0 голосов
/ 06 октября 2009

Вам необходимо вручную локализовать в foreach после вызова Set::combine. В данный момент вы локализуете строку «{n} .InstantPaymentNotification.payment_status», а затем отправляете это значение в функцию Set::combine.

Вам нужно сделать что-то более похожее на это:

function getDistinctFields($model, $field) {
    $list = ClassRegistry::init($model)->find('all', array(
        'fields'=>array("DISTINCT $model.$field"), 
        'conditions' => array('not' => array("$model.$field" => null))
    ));
    $list = Set::combine($list, "{n}.$model.$field", "{n}.$model.$field");
    foreach ($list as &$item) {
        $item = __($item, true);
    }
    return $list;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...