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 相关文章推荐
第五节--克隆
Nov 16 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
ThinkPHP视图查询详解
Jun 30 PHP
Yii框架登录流程分析
Dec 03 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 PHP
PHP时间处理类操作示例
Sep 05 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
常用的javascript function代码
2008/05/23 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python中的计时器timeit的使用方法
2017/10/20 Python
python 平衡二叉树实现代码示例
2018/07/07 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
Python上下文管理器全实例详解
2019/11/12 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
优秀干部获奖感言
2014/01/31 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
校本教研活动总结
2014/07/01 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
2014年除四害工作总结
2014/12/06 职场文书
小学语文教学反思范文
2016/03/03 职场文书