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实现WEB动态网页静态
Oct 09 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
PHP速成大法
Jan 30 PHP
php操作MongoDB类实例
Jun 17 PHP
php需登录的文件上传管理系统
Mar 21 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
Yii多表联合查询操作详解
Jun 02 PHP
Laravel多用户认证系统示例详解
Mar 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
PHP 递归效率分析
2009/11/24 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
ScrollDown的基本操作示例
2013/06/09 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
关于python的list相关知识(推荐)
2017/08/30 Python
Python格式化输出%s和%d
2018/05/07 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
解决python3输入的坑——input()
2020/12/05 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
校三好学生主要事迹
2014/01/11 职场文书
党员党性分析材料
2014/02/17 职场文书
班级活动总结格式
2014/08/30 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python
Hive常用日期格式转换语法
2022/06/25 数据库