yii2 - Как перевести слово, зависящее как от множественного числа, так и от пола - PullRequest
0 голосов
/ 25 сентября 2019

Как мне добиться зависимого перевода как во множественном числе, так и по полу одного слова.

Я знаю, как можно перевести слово в зависимости от множественного числа:

Yii::t('app', '{n,plural,=1{Approved} other{Approved}}', ['n' => 0])

, а также по полу:

Yii::t('app', '{gender,select,feminine{Approved} masculine{Approved} other{Approved}', ['gender' => 'feminine']);

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Yii 2 использует ICU, что позволяет вам вложить правила пола и множественного числа.Примерно так должно работать:

Yii::t(
    'app',
    '{gender,select,'
    . 'feminine{{n,plural,=1{Approved} other{Approved}}} '
    . 'masculine{{n,plural,=1{Approved} other{Approved}}} '
    . 'other{{n,plural,=1{Approved} other{Approved}}}'
    . '}',
    [
        'gender' => 'feminine',
        'n' => 0,
    ]
);

См. Также пример в документации ICU: http://userguide.icu -project.org / formatparse / messages

0 голосов
/ 25 сентября 2019

Нет способа сделать это напрямую.Вы можете обойти эту проблему, создав вспомогательный метод, который бы соединял два параметра вместе.

class TranslationHelper
{
    protected static function countToString($count)
    {
        if ($count === 1) {
          return 'sin';
        }
        retrun 'plu';
    }

    public static function joinGenderAndCount($gender, $count)
    {
        return $gender . '-' . static::countToString($count);
    }
}

Затем вы бы использовали его в трансляции с выбором, подобным этому

Yii::t(
    'app',
    '{genderPl,select,feminine-plu{Approved} feminine-sin{Approved} masculine-plu{Approved} masculine-sin{Approved} other{Approved}',
    [
        'genderPl' => TranslationHelper::joinGenderAndCount('feminine', 1)
    ]
);

Если вам нужноболее сложные правила множественного числа, которые вы можете использовать Yii::t внутри метода countToString, чтобы применить правильные правила множественного числа.

protected static function countToString($count)
{
    return Yii::t(
        'other-category',
        '{n,plural,=1{sin} one{sin} few{few} many{plu} other{plu}'
        ['n' => $count]
    );  
}

Я бы предложил сохранить этот тип «внутреннего» перевода в другой категории, чтобы избежать конфликтовсо стандартными переводами.

...