Yii2转换在config / params中不起作用

时间:2016-09-25 16:08:38

标签: internationalization yii2 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'],则应该在布局中打印出来,而当没有任何提供值时,它应该打印{{1}中定义的初始值。 1}}。

问题是,初始值是在没有翻译的情况下打印的。这个问题可以通过在主布局中翻译字符串来解决,如下所示:

config/params.php

由于上述解决方案,我有两个问题:

  1. 为什么字符串未在<meta name="description" content="<?= Yii::t('app',Yii::$app->params['meta-description']) ?>" />
  2. 中翻译
  3. config/params.php是否大量使用了许多未翻译的字符串(在我的情况下,当我决定覆盖视图中的值Yii::t()时)是否有任何性能问题?

2 个答案:

答案 0 :(得分:0)

数目:

  1. 因为config/params.php文件将在主应用程序初始化之前与主配置合并。对于翻译,将使用\yii\i18n\I18N组件。

  2. Yii2::t()并不重。但是,如果您遇到性能问题,可以覆盖此方法并仅对现有字符串执行Yii:$app->getI18n()->translate(),或者启用缓存此值。

答案 1 :(得分:0)

您可以使用类似的东西

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