티스토리 뷰
동기
Multi Language를 사용해야하는 서비스를 기획해서 구현을 해야 하는데 CodeIgniter에서 Multi Language는 지원 해주지만 Language 변경은 지원을 안해줌 -> 변경하는 걸 만들어서 쓰자!
구현
우선 View에서 해당 Language의 내용을 불러와야 됨 -> View를 로드하는 Controller에서 Language 작업이 끝나야 됨 -> Controller 이전에 로드되는 Hook을 이용해야 된다
소스
application/config/config.php 내용 추가
79번 째 줄 아래
$config['support_language'] = array('x-default' => 'ko_KR', 'ko-kr' => 'ko_KR', 'en' => 'en_US');
언어 추가시에 키에는 언어명 벨류에는 파일명&쿠키 내용 (x-default 는 필수)
application/hooks에 추가
View단에서도 Javascript를 통해 Language를 변경 할 수 있게 쿠키를 이용해서 Language 변경
class Language { function initialize() { $language = ''; $support_language = array(); $files = array('common'); // language 폴더 내 파일 명 (common_lang.php) $ci =& get_instance(); $ci->load->helper(array('language', 'cookie')); foreach($ci->config->item('support_language') as $value) { array_push($support_language, $value); } if (is_null($ci->input->get('l')) == FALSE) { $language = (in_array($ci->input->get('l'), $support_language) == FALSE) ? 'ko_KR' : $ci->input->get('l'); set_cookie('language', $language, 86500); } else { $language = (empty(get_cookie('language')) == TRUE) ? 'ko_KR' : get_cookie('language'); $language = (in_array($language, $support_language) == FALSE) ? 'ko_KR' : $language; } foreach ($files as $file) { $ci->lang->load($file, $language); } } }
application/config/hooks.php에 추가
$hook['post_controller_constructor'] = array( 'class' => 'Language', 'function' => 'initialize', 'filename' => 'Language.php', 'filepath' => 'hooks' );
View html head안에 추가
<?php foreach($this->config->item('support_language') as $region => $value): ?> <link rel="alternate" hreflang="<?=$region?>" href="<?=DEFAULT_PATH.'/?l='.$value?>"> <?php endforeach; ?>
Javascript에서 Language 변경 방법
function setLanguage(language) { var date = new Date(); date.setTime(date.getTime() + (86400 * 1000)); document.cookie = 'language=' + language + "; expires=" + date.toUTCString(); docation.reload(); } function getLanguage() { var cookies = document.cookie.split(';'); for (var i in cookies) { var cookie = cookies[i].trim(); if (cookie.indexOf('language') == 0) { return cookie.replace('language=', ''); } } }
PROFIT!
language
라는 이름의 쿠키의 내용을 변경하면 언어가 변경됨. 사용법은 CI Language 라이브러리 참조.
댓글
댓글펼치기