在yii2 i18n中对同一个键使用不同的值

在yii2 i18n中对同一个键使用不同的值,yii2,Yii2,我正在尝试将多语言功能整合到我的项目中,我遇到了一种情况,即同一个键有多种含义,我想知道如何解决这个问题,例如我在项目中遇到的问题 return[ 'Home' => '首页', //meaning ‘Home page’ ]` 现在的情况是,我也有一些以“家”为关键的词,但还有另一个意思,像这样 'Home' => '主队', //meaning ‘Home team’ 如何使用相同的键“Home”实现这一点,但在我的项目的不同部分赋予它们不同的含义有两种方法可以处理

我正在尝试将多语言功能整合到我的项目中,我遇到了一种情况,即同一个键有多种含义,我想知道如何解决这个问题,例如我在项目中遇到的问题

return[
    'Home' => '首页', //meaning ‘Home page’
 ]`
现在的情况是,我也有一些以“家”为关键的词,但还有另一个意思,像这样

'Home' => '主队', //meaning ‘Home team’

如何使用相同的键“Home”实现这一点,但在我的项目的不同部分赋予它们不同的含义

有两种方法可以处理类似的情况

return[
    'Home' => '首页', //meaning ‘Home page’
 ]`
使用类别 正确的方法是使用不同的类别来表达不同的意思。为此,您必须为两个(或更多)不同的类别配置翻译,例如

“组件”=>[
// ...
‘i18n’=>[
“翻译”=>[
“应用*”=>[
'class'=>'yii\i18n\PhpMessageSource',
“文件映射”=>[
'app'=>'app.php',
'app/match'=>'match.php',
],
],
],
],
],
您的app.php翻译文件如下所示

返回[
'主页'=>'首页', //意思是“主页”
];
您的match.php翻译文件如下所示:

返回[
'主页'=>'主队', //意思是“主队”
];
然后,您可以这样称呼翻译,意思是主页:

Yii::t('app','Home');
这里的意思是主队:

Yii::t('app/match','Home');
如果使用
yii message
命令生成翻译文件,则可能需要在其配置中设置
fileMap
,以确保正确生成所有文件

强制源语言的翻译 这种方法更像是黑客,而不是正确的解决方案。即使源语言和应用程序语言相同,也可以强制i18n组件翻译文本。您可以使用它来拥有两个不同的键,这两个键在英语翻译中相同,但在其他语言中不同

配置如下所示:

'components' => [
    // ...
    'i18n' => [
        'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'forceTranslation' => true,
                'fileMap' => [
                    'app' => 'app.php',
                ],
            ],
        ],
    ],
],
英文app.php翻译文件:

返回[
“主页”=>“主页”,
“主队”=>“主队”,
];
中文app.php翻译文件:

返回[
'主页'=>'首页',
“主队”=>“主队', 
];

你将在你的代码中使用
Yii::t('app','Home page')
Yii::t('app','Home team')

你是说用
Yii::t()
方法翻译字符串吗?@Michal Hynčica是的,我是说用Yii::t()方法翻译,我有一个在中文中有两种意思的键我如何使用同一个键,又如何实现不同意思的翻译谢谢你的帮助,我将采用第一种方法,因为我认为它最能解决我的问题,但我尝试了,我得到了这个错误信息,我想我遗漏了一些东西,我将match.php文件放在与app.php相同的目录中,该目录为“zh CN”,现在我得到了这个错误,缺少:app/match。语言ZH-CN的主页请告诉我我应该在哪里放置match.php文件您可以将i18n组件配置添加到问题中吗?当我将match.php文件放在app.php所在的同一目录中时,它对我来说效果很好。但是
yii message
命令在
app
子文件夹中创建match.php文件。如果您计划使用该命令,最好将该类别的文件映射设置为
'app/match'=>'app/match.php'
,并将其保留在该子文件夹中。