| 제목 | 다국어를 디비와 파일 혼용으로 쓰기. | ||
|---|---|---|---|
| 글쓴이 | 방문넷 | 작성시각 | 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
                             
                                좋은 정보 감사합니다.
                             | 
검토를 해 봐야겠습니다. ^^
좋은 정보 감사 합니다.