You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2项目需求:在同一页面展示所有翻译后的页面标题

解决Yii2多语言页面展示所有语言翻译标题的问题

看起来你遇到的问题是,想用循环输出当前页面各语言的对应URL和标题,但现在只能拿到当前页面的URL对吧?这大概率是因为你配置的languageUrls只是静态的基础语言路径,没有结合当前页面的路由和参数动态生成,而且直接输出$url也没法获取对应语言的翻译标题。我给你梳理下解决步骤:

第一步:确认多语言配置

首先确保你的项目里已经配置了可用语言列表,比如在config/params.php里:

return [
    // 可用语言,键是语言代码,值是语言名称(可选)
    'availableLanguages' => [
        'en' => 'English',
        'zh-CN' => '中文',
        'fr' => 'Français',
    ],
    // 如果是基于路径的多语言,比如example.com/en/xxx,这里可以存基础路径
    'languageUrls' => [
        'en' => '/en',
        'zh-CN' => '/zh-CN',
        'fr' => '/fr',
    ],
];

第二步:动态生成对应语言的URL和翻译标题

原代码的问题在于没有结合当前页面的路由参数,而且没法获取其他语言的标题。你可以用下面的代码来实现需求:

<?php
// 获取当前页面的路由和查询参数
$currentRoute = Yii::$app->requestedRoute;
$currentParams = Yii::$app->request->getQueryParams();

// 循环所有可用语言
foreach (\Yii::$app->params['availableLanguages'] as $code => $langLabel) {
    // 临时切换应用语言,获取对应翻译标题
    $originalLang = Yii::$app->language;
    Yii::$app->language = $code;
    // 这里假设你的页面标题是用Yii的i18n翻译的,$this->title是翻译键
    $translatedTitle = Yii::t('app', $this->title);
    // 恢复原来的应用语言,避免影响后续逻辑
    Yii::$app->language = $originalLang;

    // 生成对应语言的URL
    $langBaseUrl = \Yii::$app->params['languageUrls'][$code];
    // 拼接当前路由和参数到语言基础路径后
    $pageUrl = $langBaseUrl . \yii\helpers\Url::toRoute([$currentRoute] + $currentParams);

    // 输出标题和链接,样式可以自己调整
    echo "<div class='lang-title-item'>
            <a href='{$pageUrl}' hreflang='{$code}'>{$translatedTitle}</a>
          </div>";
}
?>

特殊情况处理:动态数据库标题

如果你的页面标题是从数据库读取的多语言字段(比如模型里有title_en、title_zh_cn这类字段),那不需要切换应用语言,直接读取对应字段即可:

// 假设$model是当前页面的模型实例
$translatedTitle = $model->{"title_" . str_replace('-', '_', strtolower($code))};

为什么原代码不行?

你的foreach (\Yii::$app->params['languageUrls'] as $code => $url) { echo $url; }只会输出配置里的静态语言路径,没有带上当前页面的路由(比如/article/123),所以当你在英文页面时,可能当前URL已经包含了/en,导致输出的都是当前页面的完整URL,而不是对应语言的页面地址。

内容的提问来源于stack exchange,提问作者user759235

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:07:08