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