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之第八天
Oct 09 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
PHP 开源框架22个简单简介
Aug 24 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
php cli 小技巧
Jun 03 PHP
php设置允许大文件上传示例代码
Mar 10 PHP
PHP实现通过get方式识别用户发送邮件的方法
Jul 16 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 14 PHP
PHP的new static和new self的区别与使用
Nov 27 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
SONY ICF-SW55的电路分析
2021/03/02 无线电
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
详解django2中关于时间处理策略
2019/03/06 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
电子商务专员岗位职责
2013/12/11 职场文书
学校介绍信范文
2014/01/14 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
银行授权委托书样本
2014/10/13 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
债务追讨律师函
2015/06/24 职场文书
董事长新年致辞
2015/07/29 职场文书
爱国主义教育主题班会
2015/08/13 职场文书