【问题标题】:yii2 - How to translate a word dependent both on plurals and gendersyii2 - 如何翻译一个取决于复数和性别的单词
【发布时间】:2019-09-25 10:27:52
【问题描述】:

如何实现对单个单词的复数和性别的依赖翻译。

我知道如何根据复数来翻译这个词:

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

还有性别:

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

【问题讨论】:

    标签: php yii2 localization internationalization


    【解决方案1】:

    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

    【讨论】:

    • 我想知道是否可以嵌套,我尝试了你的建议,但我得到了 "n,plural,=1{Approved} other{Approved}"
    • @tsanchev 我修正了我的示例,请重试。
    【解决方案2】:

    没有办法直接做到这一点。您可以通过创建将两个参数连接在一起的辅助方法来解决问题。

    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)
        ]
    );
    
    

    如果您需要更复杂的复数规则,您可以在 countToString 方法中使用 Yii::t 来应用正确的复数规则。

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

    我建议将这种类型的“内部”翻译保留在不同的类别中,以防止与标准翻译发生冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多