Yii框架多语言站点配置方法分析【中文/英文切换站点】


Posted in PHP onApril 07, 2020

本文实例讲述了Yii框架多语言站点配置方法。分享给大家供大家参考,具体如下:

这里假设我们要建立 中文/英文 切换的站点

1. 设置全局默认的语言

文件添加代码:protected/config/main.php

'language' => 'zh_cn',

2. 控制器根据用户选择动态切换语言

一般来说,我们所有的控制器都是继承于 protected/components/Controller.php 这个类。因此,我们可以在
这个类里面进行语言的定义来影响当前的请求。

public function init()
{
  if(isset($_GET['lang']) && $_GET['lang'] != "")
  {
    Yii::app()->language = $_GET['lang'];
    Yii::app()->request->cookies['lang'] = new CHttpCookie('lang', $_GET['lang']);
  }
  else if(!empty(Yii::app()->request->cookies['lang']))
  {
    Yii::app()->language = Yii::app()->request->cookies['lang'];
  }
  else
  {
    $lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
    Yii::app()->language = strtolower(str_replace('-', '_', $lang[0]));
  }
}

3. 页面提供切换语言选项

在公用的 layouts 头部,加入

<?php echo CHtml::link('中文', Yii::app()->createUrl('/', array('lang' => 'zh_cn')));?>
<?php echo CHtml::link('English', Yii::app()->createUrl('/', array('lang' => 'en_us')));?>

4. 多语言描述文字

//common是对应的语言文件,路径:protected/messages/zh_cn/common.php
Yii::t('common', 'Hello, world!');

5. 数据库内容多语言

假设我们有这样的数据表:

CREATE TABLE IF NOT EXISTS `news` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `lang` VARCHAR(4) NOT NULL DEFAULT ‘en', /* 这个用来区分不同语言的内容 */
  `title` VARCHAR(255) NOT NULL,
  `text` TEXT NOT NULL,
  PRIMARY KEY (`id`)
);

在 model里面添加一些代码,可以根据当前语言加载不同语言的 news。

class News extends CActiveRecord
{
  /**
   * 这里会在查询数据的时候,合并条件,根据当前语言查出数据
   *
   */
  public function defaultScope()
  {
    return array(
      'condition' => "lang=:lang",
      'params' => array(
        ':lang' => Yii::app()->language,
      ),
    );
  }
  
  /**
   * 提供这个方法,作一个例子说明,可以指定加载哪个语言的数据
   *
   */
  public function lang($lang)
  {
    $this->getDbCriteria()->mergeWith(array(
      'condition' => "lang=:lang",
      'params' => array(
        ':lang' => $lang,
      ),
    ));
    return $this;
  }
}

使用方法:

// 加载默认语言的数据。
$posts = Post::model()->findAll();
// Get posts written in German
// 加载 en_us 语言的数据。
$posts = Post::model()->lang('en_us')->findAll();

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
在php MYSQL中插入当前时间
Apr 06 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
TP5框架安全机制实例分析
Apr 05 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 #PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
Apr 07 #PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 #PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 #PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 #PHP
Laravel 5+ .env环境配置文件详解
Apr 06 #PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 #PHP
You might like
apache+php+mysql安装配置方法小结
2010/08/01 PHP
PHP 实现explort() 功能的详解
2013/06/20 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
Python使用multiprocessing创建进程的方法
2015/06/04 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
softmax及python实现过程解析
2019/09/30 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
python给list排序的简单方法
2020/12/10 Python
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
计算机应用专业毕业生求职信
2013/10/24 职场文书
集团公司人力资源部岗位职责
2014/01/03 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
联欢晚会主持词
2014/03/25 职场文书
节能环保口号
2014/06/12 职场文书
商家认证委托书格式
2014/10/16 职场文书
python - asyncio异步编程
2021/04/06 Python
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
Python基础之变量的相关知识总结
2021/06/23 Python
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技