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初学者们头痛的十四个问题
Jan 15 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
使用HMAC-SHA1签名方法详解
Jun 26 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
PHP函数积累总结
Mar 19 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的curl实现get和post的代码
2008/08/23 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
Python  连接字符串(join %)
2008/09/06 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
python 二维数组90度旋转的方法
2019/01/28 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
python实现在线翻译
2020/06/18 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
学生周末长期请假条
2014/02/15 职场文书
效能监察建议书
2014/05/19 职场文书
北京导游词
2015/02/12 职场文书