제목 | 다국어를 디비와 파일 혼용으로 쓰기. | ||
---|---|---|---|
글쓴이 | 방문넷 | 작성시각 | 2014/08/26 05:28:33 |
|
|||
원문 : https://github.com/EllisLab/CodeIgniter/wiki/Language-Class-Extended-DB 원문을 보면 Lang파일을 검색하여 파일이 없을경우 디비에 있는걸 가져다 쓰는 구조로 되어있습니다. 그러나 저는 HMVC를 사용하기에 이 파일을 고대로 적용하니 모듈폴더에있는 랭귀지 파일을 못불러오는 사태가 발생하였습니다 그래서 따로 수정을 하여 지금은 잘쓰고있습니다! 필독! 이팁은 HMVC사용자에게만 해당되는 내용입니다. HMVC사용안하시는분은 원문대로 진행해주세요! -- -- 테이블 구조 `language` -- CREATE TABLE `language` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(255) NOT NULL, `nation` varchar(255) NOT NULL, `filename` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; PHP 코드는 Core 확장해서 써주세용~~ 상속하실때 CI_Lang이 아닌 MX_Lang 으로 하셔야합니당. class MY_Lang extends MX_Lang { var $language = array(); var $is_loaded = array(); var $idiom; var $set; var $line; var $CI; function __construct() { parent::__construct(); log_message('debug', "HMVC Language"); } public function load($langfile = array(), $lang = '', $return = FALSE, $add_suffix = TRUE, $alt_path = '', $_module = '') { if (is_array($langfile)) { foreach($langfile as $_lang) $this->load($_lang); return $this->language; } $deft_lang = CI::$APP->config->item('language'); $idiom = ($lang == '') ? $deft_lang : $lang; //앱폴더 검색. if (in_array($langfile.'_lang'.EXT, $this->is_loaded, TRUE)) { return $this->language; } //시스템폴더 검색. if (file_exists(BASEPATH."language/".$idiom.'/'.$langfile.'_lang'.EXT)) { include(BASEPATH."language/".$idiom.'/'.$langfile.'_lang'.EXT); $this->is_loaded[] = BASEPATH."language/".$idiom.'/'.$langfile.'_lang'.EXT; $this->language = array_merge($this->language, $lang); unset($lang); log_message('debug', 'Language file loaded: language/'.$idiom.'/'.$langfile); return $this->language; } //모듈폴더 검색. $_module OR $_module = CI::$APP->router->fetch_module(); list($path, $_langfile) = Modules::find($langfile.'_lang', $_module, 'language/'.$idiom.'/'); if ($path === FALSE) { //모듈 폴더까지 파일이 없고 디비까지 체크해주자. $database_lang = $this->_get_from_db($langfile, $idiom); if (!empty($database_lang)) { $lang = $database_lang; $this->language = array_merge($this->language, $lang); $this->is_loaded[] = $langfile.'_lang'.EXT; return $lang; } //재귀 호출. if ($lang = parent::load($langfile, $lang, $return, $add_suffix, $alt_path)) return $lang; } else { if($lang = Modules::load_file($_langfile, $path, 'lang')) { if ($return) return $lang; $this->language = array_merge($this->language, $lang); $this->is_loaded[] = $langfile.'_lang'.EXT; unset($lang); } } return $this->language; } /** * Load a language from database * * @access private * @return array */ private function _get_from_db($langfile, $idiom) { $return = array(); $CI =& get_instance(); log_message('debug', "이거슨 디비에...".$langfile.'/'.$idiom); $CI->db->select ('*'); $CI->db->from ('language'); $CI->db->where ('nation', $idiom); $CI->db->where ('filename', $langfile); $query = $CI->db->get()->result(); foreach ( $query as $row ) { $return[$row->code] = $row->value; log_message('debug', "주입중..."); } unset($CI, $query); return $return; } } 이렇게 해서 쓰시면 디비랑 파일 혼용해서 다국어 관리를 할수있습니다!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
다음글 | config.php 를 확장해봅시다! (11) | ||
이전글 | 디비로 동적 라우팅 구성하기. (5) | ||
한대승(불의회상)
/
2014/08/26 09:14:04 /
추천
0
|
letsgolee
/
2014/08/26 11:58:26 /
추천
0
좋은 정보 감사합니다.
|
검토를 해 봐야겠습니다. ^^
좋은 정보 감사 합니다.