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版(4)
Oct 09 PHP
PHP提取中文首字母
Apr 09 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
PHP开发的一些注意点总结
Oct 12 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
PHP的拦截器实例分析
Nov 03 PHP
php自动给网址加上链接的方法
Jun 02 PHP
php实现微信发红包
Dec 05 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 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
深入掌握include_once与require_once的区别
2013/06/17 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
javascript 常用功能总结
2012/03/18 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
巴西手表购物网站:eclock
2019/03/19 全球购物
节能减排倡议书
2014/04/15 职场文书
建筑工地宣传标语
2014/06/18 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
工作推荐信模板
2015/03/25 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
实习证明模板
2015/06/16 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL