首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2转换在配置/params中不起作用

Yii2转换在配置/params中不起作用
EN

Stack Overflow用户
提问于 2016-09-25 16:08:38
回答 2查看 649关注 0票数 0

我的基本-app中有下面的基本-app

代码语言:javascript
复制
<?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中有了一个翻译,并且翻译在网站上运行良好。

但是,当我尝试在主布局中使用元标记描述时,如下所示:

代码语言:javascript
复制
<meta name="description" content="<?= Yii::$app->params['meta-description'] ?>" />

因此,在任何视图中,如果我将一个值设置为Yii::$app->params['meta-description'],那么它应该在布局中打印出来,而当没有任何提供的值时,它应该打印在config/params.php中定义的初始值。

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

代码语言:javascript
复制
<meta name="description" content="<?= Yii::t('app',Yii::$app->params['meta-description']) ?>" />

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

  1. 为什么没有在config/params.php中翻译字符串
  2. 大量使用带有许多未翻译字符串的Yii::t() (在我的例子中,当我决定在视图中覆盖值Yii::$app->params['meta-description']时),是否存在性能问题?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-25 19:21:49

答案:

  1. 因为config/params.php文件在主应用程序的初始化之前将与主配置合并。翻译时将使用\yii\i18n\I18N组件。
  2. Yii2::t()法不重。但是,如果性能有任何问题,则可以重写此方法,并仅对现有字符串执行Yii:$app->getI18n()->translate(),或启用缓存此值。
票数 0
EN

Stack Overflow用户

发布于 2019-03-03 20:08:42

你可以用这样的东西

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39688993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档