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 array_walk() 数组函数
Jul 12 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php提交post数组参数实例分析
Dec 17 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 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
PHP中常用的转义函数
2014/02/28 PHP
php实现word转html的方法
2016/01/22 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
javascript 获取表单file全路径
2009/12/31 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
Python中表示字符串的三种方法
2017/09/06 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
文秘专业毕业生就业推荐信
2013/11/08 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
同事去世追悼词
2015/06/23 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
vue 实现上传组件
2021/05/31 Vue.js
html5表单的required属性使用
2021/07/07 HTML / CSS
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫