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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
php中日期加减法运算实现代码
Dec 08 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
PHP实现的多维数组去重操作示例
Jul 21 PHP
PHP匿名函数(闭包函数)详解
Mar 22 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
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
php简单提示框alert封装函数
2010/08/08 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
Js 本页面传值实现代码
2009/05/17 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
在Django的视图中使用form对象的方法
2015/07/18 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
python打包成so文件过程解析
2019/09/28 Python
python实现单机五子棋
2020/08/28 Python
应聘护士自荐信
2013/10/21 职场文书
经济管理专业毕业生推荐信
2013/11/11 职场文书
学术会议邀请函范文
2014/01/22 职场文书
公司寄语大全
2014/04/10 职场文书
学期评语大全
2014/04/30 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
婚前协议书标准版
2014/10/19 职场文书
志愿者个人总结
2015/03/03 职场文书
2015年国庆节慰问信
2015/03/23 职场文书