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 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
PHP查询网站的PR值
Oct 30 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
PHP常用技巧汇总
Mar 04 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
Oct 24 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 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
德劲1104的电路分析与改良
2021/03/01 无线电
php minixml详解
2008/07/19 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python使用进程Process模块管理资源
2020/03/05 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
金融与证券专业求职信
2014/06/22 职场文书
社区活动策划方案
2014/08/21 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技