iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 14
0

上次我們寫到回傳缺少哪些參數,然而這次我們要加入語系部分,讓他判斷是哪個語系來回傳不同語言的內容。

設定檔案

首先我們先打開config/global.php設定目前可用的語系:

  // 語系設定
  $config['lang'] = array(
      'zh-tw', 'en-us'
  );

第三方服務

下一步我們打開models/Mod_config.php檔案加入判斷語系:

// 取得當前語系
function getLanguage() {
    // 語系設定
    $this->load->helper('cookie');
    $lang = $this->input->get('lang');
    if ($lang) {
        // 設定
        if (in_array($lang, $this->config->item('lang'))) {
            $this->language = $lang;
            $this->input->set_cookie('language', $lang, 86400);
        } else {
            $this->language = 'zh-tw';
            $this->input->set_cookie('language', 'zh-tw', 86400);
        }
    } else {
        // 正常
        if ($this->input->cookie('language')) {
            $this->language = $this->input->cookie('language');
        } else {
            $this->language = 'zh-tw';
        }
    }
    return $this->language;
}

如此一來我們可以透過這個函式來判斷當前語系,如果沒有當下語系則直接使用預設值,未來可以帶入?lang=xxx來切換語系,接著我們回到Unit.php來修改原先的內容:

第一步我們先掛載語系,讓他辨別當前的語系,到最上方的__construct加入內容:


  public function __construct() {
    parent::__construct();
    
    // 語系設定
    $this->language = $this->mod_config->getLanguage();
  }

接著我們在修改下方的參數:

修改前

    if ($data) {
      // 正確
      $json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'PROCESS_SUCCESS', 'zh-tw');
    } else {
      // 回報缺少的內容
      $json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'MISSING_DATA', 'zh-tw');
      $json_arr['requred'] = $this->getpost->report_required($requiredData, 'GET');
    }

修改後

if ($data) {
  // 正確
  $json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'PROCESS_SUCCESS', $this->language);
} else {
  // 回報缺少的內容
  $json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'MISSING_DATA', $this->language);
  $json_arr['requred'] = $this->getpost->report_required($requiredData, 'GET');
}

也就是把後方帶入zh-tw替換成language的參數,因為是全域變數所以要透過$this來呼叫,接著我們在用網址去測試:
http://ip-address/unit/test_getpost?product_id=P1231425621&product_name=灰熊印貓罐頭
中文回傳值

接著我們多加個&lang=en-us的參數:
http://ip-address/unit/test_getpost?product_id=P1231425621&product_name=灰熊印貓罐頭&lang=en-us
英文回傳值

他就會成功回傳英文,那我們試著把多餘的參數拿掉讓他錯誤看看:
http://ip-address/unit/test_getpost?product_id=P1231425621
錯誤英文回傳值

如此一來它就真正的修改了語系,除非再透過參數讓他變回中文,不然他就會以英文為主,這次我們就到這裡,明天我們再新增有關於網站的語系吧!

Next station ... CI內建語系


上一篇
[Day13] 回傳錯誤與成功
下一篇
[Day15] CI內建語系
系列文
你說Codeigniter還能怎麼做?30

尚未有邦友留言

立即登入留言