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 htmlspecialchars加强版
Feb 16 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
请离开include_once和require_once
Jul 18 PHP
yii实现创建验证码实例解析
Jul 31 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
php封装的验证码类分享
Feb 26 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 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
Terran剧情介绍
2020/03/14 星际争霸
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
2017/08/03 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
python生成器generator用法实例分析
2015/06/04 Python
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
python装饰器的特性原理详解
2019/12/25 Python
python机器学习库xgboost的使用
2020/01/20 Python
京东国际站:JOYBUY
2017/11/23 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
中海讯通笔试题
2015/09/15 面试题
应征英语教师求职信
2013/11/27 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
检讨书范文500字
2015/01/28 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
志愿者工作心得体会
2016/01/15 职场文书
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers