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中使用DOM类读取XML文件的实现代码
Dec 14 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
基于php下载文件的详解
Jun 02 PHP
PHP多进程编程实例
Oct 15 PHP
php生成圆角图片的方法
Apr 07 PHP
php中header设置常见文件类型的content-type
Jun 23 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
PHP实现RTX发送消息提醒的实例代码
Jan 03 PHP
yii2-GridView在开发中常用的功能及技巧总结
Jan 07 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
定义php常量的详解
2013/06/09 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
python单元测试unittest实例详解
2015/05/11 Python
python编程实现希尔排序
2017/04/13 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
对python中return与yield的区别详解
2020/03/12 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Python日志处理模块logging用法解析
2020/05/19 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
几道Web/Ajax的面试题
2016/11/05 面试题
中英文求职信范文
2014/01/27 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
宣传标语大全
2014/07/01 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
债务纠纷起诉书
2015/05/20 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js