Yii2.0.48多语言包配置与切换【国际化】

大明姑娘_2377

大明姑娘_2377

2026-08-07

925人浏览

原创

必须在应用初始化前设置语言,否则组件已固化默认语言;配置i18n组件、创建zh-cn/en-us语言包、设默认语言、在web/index.php中动态赋值$application->language、添加校验的language动作、视图中用yii::t()和动态链接切换。

yii2.0.48多语言包配置与切换【国际化】

要在Yii2.0.48中让网站支持中文、英文等多语言显示,并能通过链接一键切换,必须确保语言设置在应用初始化前完成,否则视图、验证器、日期格式器等组件已按默认语言固化,后续修改完全无效。

配置i18n组件与语言包路径

打开 common/config/main.php(高级模板)或 frontend/config/main.php(基础模板),在 'components' 数组内添加 'i18n' 配置:

'i18n' => [
  'translations' => [
    'app*' => [
      'class' => 'yii\i18n\PhpMessageSource',
      'basePath' => '@app/messages',
      'fileMap' => [
        'app' => 'app.php',
        'app/error' => 'error.php',
      ],
    ],
  ],
],

注意:这里用 app* 表示匹配所有以 app 开头的翻译类别,比单写 app 更灵活;【basePath 必须是 @app/messages,不能漏掉 @ 符号,否则 Yii 找不到目录】。

创建语言文件目录与内容

在项目根目录下创建 messages 文件夹(若使用 @app/messages 路径),再分别建两个子目录:zh-CN 和 en-US。

在 messages/zh-CN/ 下新建 app.php,内容为纯返回数组:

<?php return [
  'Home' => '首页',
  'About' => '关于',
  'Login' => '登录',
  'Hello' => '你好',
];

在 messages/en-US/ 下新建同名 app.php,内容为:

<?php return [
  'Home' => 'Home',
  'About' => 'About',
  'Login' => 'Login',
  'Hello' => 'Hello',
];

文件名和目录名必须严格区分大小写,zh-CN 不能写成 zh_cn 或 ZH-CN,否则 Yii 不识别。

设置默认语言并注入运行时语言

第一步:在 common/config/main.php 中添加全局默认语言:

'language' => 'zh-CN',

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载

第二步:最关键的一步——修改入口文件 web/index.php,把语言设置放在 $application->run() 之前:

$application = new yii\web\Application($config);
$language = \Yii::$app->request->cookies->get('lang') ? \Yii::$app->request->cookies->get('lang')->value : 'zh-CN';
$application->language = $language;
$application->run();

这一步不可跳过。如果只在控制器里改 Yii::$app->language,Formatter 已初始化完毕,日期、数字格式仍按旧语言输出,页面文字却变了,会造成严重不一致。

编写语言切换控制器动作

在 frontend/controllers/SiteController.php(或对应模块控制器)中添加:

public function actionLanguage($lang)
{
  if (in_array($lang, ['zh-CN', 'en-US'])) {
    $cookies = \Yii::$app->response->cookies;
    $cookies->add(new \yii\web\Cookie([
      'name' => 'lang',
      'value' => $lang,
      'expire' => time() + 3600 * 24 * 30,
    ]));
  }
  $this->goBack(\Yii::$app->request->headers['Referer'] ?: \Yii::$app->homeUrl);
}

注意:必须校验 $lang 值是否合法,防止任意字符串注入 cookie;【Referer 头可能为空,需提供 fallback 地址,否则 goBack 会报错】。

在视图中添加切换链接并调用翻译

方法一:直接写死链接(适合简单项目)

= \Yii::t('app', 'Home') ?>
@#@#@#@#@#@#@#@#@#@0
@#@#@#@#@#@#@#@#@#@1

方法二:动态生成(推荐)

$langs = [
  'zh-CN' => \Yii::t('app', 'Chinese'),
  'en-US' => \Yii::t('app', 'English'),
];
foreach ($langs as $code => $label) {
  echo \yii\helpers\Html::a($label, ['site/language', 'lang' => $code]);
}

所有内部 URL 必须显式传入 'lang' => Yii::$app->language,否则 Url::to() 完全不感知语言上下文,生成的链接永远不含语言前缀。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

2990

22

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

0

20

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

2026.10.15

0

18

Vue.js 中 ref 和 reactive 的区别
Vue.js 中 ref 和 reactive 的区别

Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

2026.10.15

0

20

VS Code 怎么配置开发环境
VS Code 怎么配置开发环境

VS Code开发环境专题汇集编辑器安装、语言扩展、编译器、解释器、终端和调试配置文章,覆盖Java、Python、C++和PHP等常见语言的入门设置。

2026.10.15

0

18

C++ 开发环境怎么搭建
C++ 开发环境怎么搭建

C++开发环境专题汇集Windows、Linux下的编译器与IDE安装配置教程,涵盖GCC、Clang、Visual Studio、CLion和VS Code,以及编译运行首个程序的步骤。

2026.10.15

0

19

Python 虚拟环境是什么
Python 虚拟环境是什么

Python虚拟环境专题介绍项目依赖隔离的作用,汇集venv与uv创建、激活、退出及解释器切换的相关文章,并覆盖Windows、Linux和VS Code中的常见配置问题。

2026.10.15

0

15

Python 怎么安装并配置环境变量
Python 怎么安装并配置环境变量

Python安装与环境变量配置专题汇集Windows、macOS和Linux的安装步骤、PATH设置、pip配置及常见报错排查文章,帮助完成解释器安装并验证命令行可以正常运行。

2026.10.15

0

15

PHP 连接 MySQL 失败怎么办
PHP 连接 MySQL 失败怎么办

PHP连接MySQL失败专题汇集PDO与MySQLi扩展配置、账号权限、主机端口、套接字和认证方式等排查文章,覆盖连接报错、密码变更与容器环境配置,帮助按错误提示定位原因并修复。

2026.10.15

0

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习