在线客服,智能在线客服,在线客服系统,客服机器人,智能客服,智能机器人客服,电商客服系统,智慧客服,免费电话,微信在线客服,网站在线客服软件,网络营销电话,手机在线客服,微客服,快商通

咨询热线:400-027-0592 

codeigniter多语言版本网站的解决方案

分类:快商学院 时间:2012-10-09 作者:


QQ空间 新浪微博 腾讯微博 更多

 

这边我要更正下几个错误,当前台和后台同时打开时,因为前后台都涉及到多语,后台用的是session,那么我的getswappre()在你前台页面存在session_start时就会出现问题,我们当然不希望把浏览器全部关闭再打开了,所以这边我要修改。在config页面添加一个配置项

$config['languages'] = array(
 'en' => 'english',
 'cn' => 'chinese'
);

对应下载的library下的MY_Language.php的languages属性.

首先,这个也是别人的智慧,用得很顺手,就分享下,当然自己还是要花心思使之方便我使用。

原文地址:http://maestric.com/doc/php/codeigniter_i18n,看英文原版好还是看我粘帖过来的好,自己斟酌。

我还是不粘帖了。请听我分解。 

首先:下载别人的扩展文件包ci_i18n_library.zip

MY_Language.php和 MY_Config.php放在 system/application/libraries下。此之谓之Installation也就是安装了。
接着配置了,我们这边假设,你已经进行了去codeigniter  index.php的操作,这个操作不懂?请看我补上的文章。配置route
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];
怎样,个人认为这样比原文更好,加几种语言,这个一个解决。
语言包文件的创建,这边不解释。加载我也不解释,做到这步的人应该都对codeigniter有一定的心得了。可参考原文
以上这些是前台部分,后台部分我们可能不要这样多语言路径。所以这边也提供了一个配置项过滤掉了比如
 var $special = array (
  "admin"
 );
这样后后台就不受route影响了。
以下这些是原文没有的,我自己的心得。
我数据库设计是en_  cn_这样,大家并不陌生。所以我修改了MY_Language.php文件,加上了红色部分
 function MY_Language()
 {
  parent::CI_Language();  
  
  global $CFG;
  global $URI;
  global $RTR;
  
  $segment = $URI->segment(1);
  
  if (isset($this->languages[$segment])) // URI with language -> ok
  {
   $language = $this->languages[$segment];
   $CFG->set_item('language', $language);
   $CFG->set_item('dblang',$segment.'_');

   if ($RTR->scaffolding_request === TRUE)
   {
    // hide language segment for scaffolding code
    $RTR->uri->segments = $RTR->uri->rsegments;
   }
  }
  else if($this->is_special($segment)) // special URI -> no redirect
  {
   return;
  }
  else // URI without language -> redirect to default_uri
  {
   // set default language
   $CFG->set_item('language', $this->languages[$this->default_lang()]);
   $CFG->set_item('dblang',$this->default_lang().'_');

   // redirect
   header("Location: " . $CFG->site_url($this->localized($this->default_uri)), TRUE, 302);
   exit;
  }
 }

但是这样还不够,后台也要用到这个设置项,怎么办呢
前台访问数据库用
$query=$this->db->get(getswappre().'abouts',$limit,$offset);

对了,我在这边建了个helper方法。MY_URI_Helper.php

if(!function_exists('getswappre')){

 function getswappre(){
  $CI=&get_instance();
  $segment = $CI->uri->segment(1);
  //echo $segment;
  //判断是否是languages内的值
  //print_r($CI->config->item('languages'));
  //echo array_key_exists($segment,$CI->config->item('languages'));
  if(array_key_exists($segment,$CI->config->item('languages'))){
   $swappre=$segment . '_';
  }else{
   if(isset($_SESSION['lang'])){
    $swappre=$_SESSION['lang'];
   }else{
    $swappre=$CI->config->item('dblang');
   }
  }

  return $swappre;
 }

}
后台用session前台用动态配置的项dblang。

以上这些就是我的解决方案,希望对你有所帮助,在国内是看不到这么清晰明了的解决方案的,很多都会浪费大家的时间,千篇一律

这篇文章老早我就想发表了,没时间,是假的,觉得费时,编辑文章没那么容易。呵呵

返回列表>>

上一篇:codeigniter url中含有中文的解决

下一篇:搞定cakephp乱码


相关新闻

快商软件喜获“全国中小企业生产经营运行监测厦门样本企业”称号

快商通【在线客服】v3.2.2.21版本升级公告

快商通【在线客服】移动版升级公告

浅析微信营销的六种模式

八个步骤让企业做好微信营销策略规划

客服一对一服务
30万成功案例
CCTV央视特别报道
国家高新技术企业
全国统一咨询热线:400-027-0592