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 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
php 定义404页面的实现代码
Nov 19 PHP
php curl_init函数用法
Jan 31 PHP
php生成短网址示例
May 05 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
PHP获取文件夹内文件数的方法
Mar 12 PHP
php计算整个目录大小的方法
Jun 01 PHP
WordPress网站性能优化指南
Nov 18 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
浅谈PHP中的那些魔术常量
Dec 02 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
经验几则 推荐
2006/09/05 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python2.7实现邮件发送功能
2018/12/12 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
学期自我鉴定范文
2013/10/01 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2014年底工作总结
2014/12/15 职场文书
英语教师个人总结
2015/02/09 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
MySQL创建管理KEY分区
2022/04/13 MySQL