用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5496|回复: 14
收起左侧

[已解决] 有關於ci語系的切換

  [复制链接]
发表于 2011-4-1 15:40:10 | 显示全部楼层 |阅读模式
因客戶的需求,所以正在作一個根據網址不同來自動切換語系的功能

類似於www.xxxx.com就自動切換英文版,www.xxxx.cn就自動切換中文版

折騰了好一段時間,最後作法是把英文網址及中文網址先記錄在數據庫裡

在進入網站的時候再把網址跟數據庫內的資料作比對,依據比對結果來載入語系檔

完成後卻有些問題,不管比對結果如何,在瀏覽器第一次進入網站時都會載入成config內的預設語系,要重新整理後才會轉成正確的語系

這有可能是什麼問題呢?

下面是我寫在libraries/MY_Controller檔裡的比對語法,跪求解決方法

          $web = $this->db->query("SELECT * FROM config")->first_row('array');
          $this->session->set_userdata('urlchs',$web['url_chs']);
          $this->session->set_userdata('urleng',$web['url_eng']);

          if ($web['url_chs'] == 'http://'.$_SERVER['HTTP_HOST'].'/')
          {
               $this->config->set_item('base_url',$web['url_chs']);
               $this->config->set_item('language','_chs');
               $this->session->set_userdata('lng','_chs');
          }
          elseif ($web['url_eng'] == 'http://'.$_SERVER['HTTP_HOST'].'/')
          {
               $this->config->set_item('base_url',$web['url_eng']);
               $this->config->set_item('language','_eng');
               $this->session->set_userdata('lng','_eng');
          }
 楼主| 发表于 2011-4-6 09:33:07 | 显示全部楼层
呃…沒有人能指點一下嗎
发表于 2011-4-6 09:44:41 | 显示全部楼层
代码还是太少了,不太了解你接下来是如何做的
发表于 2011-4-6 09:45:54 | 显示全部楼层
帮你顶一下吧。我是新手。
你的想法是把网址装在数据库里面,然后通过访问的域名来判断该执行哪一个语系。
个人觉得这个方法也是可以的。
不过你说在浏览器第一次进入的时候会载入成config中的预设语系,
那么你有没有想过去在config里面做判断呢?
发表于 2011-4-6 10:43:51 | 显示全部楼层
这样会给服务器造成负担吧
 楼主| 发表于 2011-4-6 13:07:33 | 显示全部楼层
目前功能運作上似乎是沒有問題,問題在於似乎沒辦法讓這段代碼在開啟網站的時候立即運作

原本也想過在config裡作判斷,但是config裡不知道如何調用database…
发表于 2011-4-6 13:44:46 | 显示全部楼层
对 CI 做些扩展吧,你应该在 loader.php 里做文章!
或者用 hook
 楼主| 发表于 2011-4-6 14:55:40 | 显示全部楼层
本帖最后由 sgeta 于 2011-4-6 14:57 编辑

試著把代碼移到hooks來跑,結果出現錯誤…
A PHP Error was encountered
Severity: Notice
Message: Undefined property: LangClass:session

hooks的插入點我選擇post_controller_constructor

這樣是否表示這個插入點還沒有載入session的功能呢?
发表于 2011-4-6 16:01:36 | 显示全部楼层
是的,挂钩点要选好,某些挂钩点是没有这些东西的。
发表于 2011-4-6 16:47:34 | 显示全部楼层
PHP复制代码
 
$url = current_url();
$url = explode('.',$url);
if($url[2]=='cn'){
        $this->lang->load('language_file','chinese');
}else{
        $this->lang->load('language_file','english');
}
 
复制代码

这样可以麽?根据当前url的.com还是cn来加载语言文件
把他放在页面头里面

本版积分规则