티스토리 뷰

동기

Multi Language를 사용해야하는 서비스를 기획해서 구현을 해야 하는데 CodeIgniter에서 Multi Language는 지원 해주지만 Language 변경은 지원을 안해줌 -> 변경하는 걸 만들어서 쓰자!

구현

우선 View에서 해당 Language의 내용을 불러와야 됨 -> View를 로드하는 Controller에서 Language 작업이 끝나야 됨 -> Controller 이전에 로드되는 Hook을 이용해야 된다

소스

  1. application/config/config.php 내용 추가

    79번 째 줄 아래 $config['support_language'] = array('x-default' => 'ko_KR', 'ko-kr' => 'ko_KR', 'en' => 'en_US');

    언어 추가시에 키에는 언어명 벨류에는 파일명&쿠키 내용 (x-default 는 필수)

  2. 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);
            }
        }
    }
  3. application/config/hooks.php에 추가

    $hook['post_controller_constructor'] = array(
        'class'    => 'Language',
        'function' => 'initialize',
        'filename' => 'Language.php',
        'filepath' => 'hooks'
    );
  4. 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; ?>
  5. 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=', '');
         }
      }
    }
  6. PROFIT!

    language라는 이름의 쿠키의 내용을 변경하면 언어가 변경됨. 사용법은 CI Language 라이브러리 참조.

댓글 댓글펼치기