Yii2 翻译在 config/params 中不起作用
Yii2 translation does not work in config/params
我的 yii2-basic-app 中有以下 config/params.php
:
<?php
$siteName = Yii::t('app','Site Name'); //previously, this value had been placed directly in the array just a try to make it available to the translation
return [
'adminEmail' => 'admin@example.com',
'siteName' => $siteName,
'textToPrint' => null,
'meta-description' => $siteName,
];
消息 Site Name
已经在 @app/messages/ar/app.php
中进行了翻译,翻译在网站上运行良好。
但是,当我尝试在主布局中使用元标记描述时,如下所示:
<meta name="description" content="<?= Yii::$app->params['meta-description'] ?>" />
因此,在任何视图中,如果我将值设置为 Yii::$app->params['meta-description']
,它应该在布局中打印出来,而当没有任何提供的值时,它应该打印定义的初始值config/params.php
.
问题是,打印的初始值没有翻译。这个问题可以通过翻译主布局中的字符串来解决,如下所示:
<meta name="description" content="<?= Yii::t('app',Yii::$app->params['meta-description']) ?>" />
由于上述解决方案,我有两个问题:
- 为什么
config/params.php
中的字符串没有被翻译?
- 大量使用
Yii::t()
和许多未翻译的字符串(在我的例子中,当我决定覆盖视图中的值 Yii::$app->params['meta-description']
时)是否有任何性能问题?
答案:
因为 config/params.php
文件将在 主应用程序初始化之前与主配置 合并。翻译将使用 \yii\i18n\I18N
组件。
Yii2::t()
不是重法。但是如果你有任何性能问题,你可以覆盖这个方法并只对现有字符串执行 Yii:$app->getI18n()->translate()
,或者启用缓存这个值。
你可以使用这样的东西
public static function translateParams($param)
{
if (is_array($param)) {
array_walk($param, function (&$value) {
$value = \Yii::t("app", $value);
});
return $param;
} else {
return \Yii::t("app", $param);
}
}
我的 yii2-basic-app 中有以下 config/params.php
:
<?php
$siteName = Yii::t('app','Site Name'); //previously, this value had been placed directly in the array just a try to make it available to the translation
return [
'adminEmail' => 'admin@example.com',
'siteName' => $siteName,
'textToPrint' => null,
'meta-description' => $siteName,
];
消息 Site Name
已经在 @app/messages/ar/app.php
中进行了翻译,翻译在网站上运行良好。
但是,当我尝试在主布局中使用元标记描述时,如下所示:
<meta name="description" content="<?= Yii::$app->params['meta-description'] ?>" />
因此,在任何视图中,如果我将值设置为 Yii::$app->params['meta-description']
,它应该在布局中打印出来,而当没有任何提供的值时,它应该打印定义的初始值config/params.php
.
问题是,打印的初始值没有翻译。这个问题可以通过翻译主布局中的字符串来解决,如下所示:
<meta name="description" content="<?= Yii::t('app',Yii::$app->params['meta-description']) ?>" />
由于上述解决方案,我有两个问题:
- 为什么
config/params.php
中的字符串没有被翻译? - 大量使用
Yii::t()
和许多未翻译的字符串(在我的例子中,当我决定覆盖视图中的值Yii::$app->params['meta-description']
时)是否有任何性能问题?
答案:
因为
config/params.php
文件将在 主应用程序初始化之前与主配置 合并。翻译将使用\yii\i18n\I18N
组件。Yii2::t()
不是重法。但是如果你有任何性能问题,你可以覆盖这个方法并只对现有字符串执行Yii:$app->getI18n()->translate()
,或者启用缓存这个值。
你可以使用这样的东西
public static function translateParams($param)
{
if (is_array($param)) {
array_walk($param, function (&$value) {
$value = \Yii::t("app", $value);
});
return $param;
} else {
return \Yii::t("app", $param);
}
}