TIP게시판

제목 다국어 처리에 대한 제가 적용한 방식입니다.
글쓴이 뻘글쟁이 작성시각 2015/12/05 18:42:34
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 13295   RSS
안녕하세요. 몇일 전부터 새로운걸 만들게 되어 코드 이그나이터를 선택하게 되었고 또 잘 개발중에 있습니다.
포럼에서 너무 많은 정보를 받아 제가 사용하고 있는 다국어 처리방으로 도움을 드릴 분들이 있다면 드리기 위해 팁을 몇자 적습니다.

url에 kr,en등을 넣어 처리 하는 방식은 사용하기 번거로워서
subdomain방식으로 처리 하는건 subdomain사용할 곳이 많아서 패스 했습니다.
지금은 cookie저장 방식으로 사용 하고 잇습니다.

application -> core -> controllers -> AuthorityController.php
                                                 BaseController.php
                                                 DefaultUserUIController.php
                                                 LanguageController.php

상속 과정은 다음과 같습니다.
DefaultUserUIController -> LanguageController -> AuthorityController -> BaseController
이 패키지를 application -> controllers 에서 사용 하기 위해선
system->core->CodeIgniter.php 최하단에
 

​function __autoload($className)
 {
     if(file_exists(APPPATH.'core/controllers/'.$className.'.php'))
     {
         require_once(APPPATH.'core/controllers/'.$className.'.php');
     }
     return true;
 }

을 추가 합니다.

다 설명을 드리고 싶지만 시간이 없어 다국어 처리만 설명 드리겠습니다.
일반적인 UIController들은 DefaultUserUIController를 상송 합니다.

LanguageController 소스는 다음과 같습니다.
    // 다국어 처리
   
var $languages = array(
        'kr' => 'korean',
        'en' => 'english',
        'jp' => 'japanese',
        'cn' => 'chanese'
    );
    
    /**
     *
     */
    public function __construct()
    {
        parent::__construct();
        
        $lang = $this->cookie("lang");
        if(!empty($lang) && !empty($this->languages[$lang]))
        {
            global $CFG;
        
            $language = $this->languages[$lang];
            $CFG->set_item('language', $language);
            $CFG->set_item('lang', $lang);
        }
        
        $this->load->helper('language');
    }
    
    /**
     * 언어 설정을 변경한다.
     */
    protected function language_change($lang)
    {
        if(!empty($lang) && !empty($this->languages[$lang]))
        {
            $this->setCookie("lang", $lang, 60 * 60 * 24 * 365);
        }
    }


언어 설정 컨트롤러는 다음과 같습니다.

    
 // 언어 변환.
     public function index()
     {
        parent::language_change($this->get("lang"));
        
        // REFERER가 존재 한다면 REFERER로 이동한다
        $referer = $this->input->server("HTTP_REFERER");
        if(!empty($referer))
        {
            $this->location($referer);
        }
     }


사용하는 페이지 소스는 다음과 같습니다.
 
public function __construct()
     {
         $this->agreeNotLoged = true;
         
         parent::__construct();
         
         $this->lang->load("login");
     }
     
     /**
      * 로그인 페이지 매인 화면 
      */
     public function index()
     {
         echo $this->lang->line("login.login");
         
         $this->loadView("login_view");
     }

html 페이지 언어 변환 

<a href="/language?lang=kr">한글</a>
<a href="/language?lang=en">English</a>
 다음글 모바일웹에서 사이드 메뉴 열 때, 메뉴만 스크롤 되도록... (2)
 이전글 MySQL 5.7 설치시 알아둬야 할 사항 (1)

댓글

변종원(웅파) / 2015/12/07 11:16:27 / 추천 0
팁 감사합니다.
말씀하신 방법 이외에 hook으로 해당언어를 상수로 선언하고 각 페이지에서 그 상수에 따른 언어파일을 가져와서
처리하는 방법도 있습니다.