You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Yii2网站翻译方案咨询:复制子域名替换还是用官方I18n工具?

给Yii2新手的多语言方案建议

作为Yii2的过来人,我非常理解你作为新手啃官方i18n文档头大的感觉——当年我第一次碰这块的时候也懵了好一阵😅,先给你把两个方案的利弊掰扯清楚,再给你个官方翻译功能的极简入门指南,帮你少走弯路。

方案一:复制子域名改文字——应急可以,长期必坑

这个方案的优点就是零学习成本,上手快,如果是赶时间的小项目临时凑活还行,但缺点真的致命:

  • 维护噩梦:同一个功能要在两个域名下同步修改,比如改个按钮文字、修复个表单bug,都要重复操作两次,后期迭代多了绝对会疯
  • 资源浪费:重复部署整个项目,占服务器空间不说,运维起来也麻烦(比如备份、升级都要做两遍)
  • SEO拉胯:内容重复度极高,搜索引擎很可能判定为镜像站点,直接影响排名
  • 扩展性为零:以后要加第三种语言?又得复制一次,完全没法规模化

方案二:Yii2官方翻译功能——短期费点劲,长期省大心

虽然官方文档写得有点绕,但其实核心步骤没那么复杂,我给你捋个新手友好的极简流程:

1. 先配置翻译组件

打开config/web.php,在components数组里加一段i18n配置:

'components' => [
    // ...其他已有的组件(比如db、cache)
    'i18n' => [
        'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@app/messages', // 翻译文件存放的根目录
                'sourceLanguage' => 'zh-CN', // 你的原始网站语言
                'fileMap' => [
                    'app' => 'app.php', // 通用翻译文件
                    'app/error' => 'error.php', // 错误提示的翻译文件
                ],
            ],
        ],
    ],
],

2. 创建翻译文件

在项目根目录新建messages文件夹,比如要做英文翻译,就建messages/en-US/app.php,里面写键值对(键是原始语言文本,值是译文):

<?php
return [
    '欢迎访问我的网站' => 'Welcome to my website',
    '联系我们' => 'Contact Us',
    '提交' => 'Submit',
    // 所有需要翻译的文本都往这里加
];

3. 在代码里替换硬编码文本

把原来直接写死的文字,换成Yii::t('app', '你的原始文本'),比如视图里:

// 原来的写法
echo '<h1>欢迎访问我的网站</h1>';

// 改成翻译写法
echo '<h1>' . Yii::t('app', '欢迎访问我的网站') . '</h1>';

4. 实现语言切换功能

可以做个简单的切换按钮,比如在布局文件里加:

<a href="<?= Url::to(['site/set-language', 'lang' => 'zh-CN']) ?>">中文</a>
<a href="<?= Url::to(['site/set-language', 'lang' => 'en-US']) ?>">English</a>

然后在SiteController里加对应的方法:

public function actionSetLanguage($lang)
{
    // 支持的语言列表,防止乱传参数
    $allowedLangs = ['zh-CN', 'en-US'];
    if (in_array($lang, $allowedLangs)) {
        Yii::$app->language = $lang;
        Yii::$app->session->set('language', $lang); // 存在session里,下次打开自动生效
    }
    return $this->goBack(); // 切完语言回到之前的页面
}

最终建议

如果你的网站只是临时用两种语言,且未来半年内完全不会更新,那方案一可以凑活;但只要你打算长期维护、或者以后可能加新语言,强烈建议咬咬牙搞懂官方翻译功能——初期花1-2小时搞定基础配置,后面省的麻烦真的不是一点半点,而且i18n也是Yii2开发的必备技能,对以后的项目也有用。

内容的提问来源于stack exchange,提问作者G'ofur N

火山引擎 最新活动