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学习之数组值的操作
Apr 17 PHP
PHP插入排序实现代码
Apr 04 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
php中异常处理方法小结
Jan 09 PHP
php绘制一条弧线的方法
Jan 24 PHP
php邮件发送的两种方式
Apr 28 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
在laravel中实现事务回滚的方法
Oct 10 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
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
Javascript 构造函数详解
2014/10/22 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
Python实现简单截取中文字符串的方法
2015/06/15 Python
python运行其他程序的实现方法
2017/07/14 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
python使用KNN算法识别手写数字
2019/04/25 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
食品安全检查制度
2014/02/03 职场文书
小班开学寄语
2014/04/04 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python