ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CodeIgniter] 언어 클래스(Language Class) - 다국어
    프로그래밍/CodeIgniter 2018. 12. 12. 16:53

    ▶CodeIgniter 언어 클래스(Language Class) - 다국어



    ▶설명


    코드이그나이터(CodeIgniter)로 서버 또는 사이트를 만드는 경우,

    문구가 한국어, 영어 등 사용자가 원하는 언어로 표시가 필요할 때가 있습니다


    이 때 코드이그나이터에서 유용하게 사용할 수 있는게 언어 클래스(Language Class)입니다.

    기본적인 사용 방법을 알아보도록 하겠습니다.

    간단하게 한국어와 영어만을 예시로 들겠습니다.


    언어 클래스에 대한 자세한 내용은 아래의 매뉴얼을 참조하시기 바랍니다.


    예제 코드는 제가 자주 사용하는 방식으로 작성했습니다.


    ▶준비


    언어 클래스를 사용하기 위한 필요한 준비를 하도록 하겠습니다.

    코드이그나이터가 기본적으로 설치된 상황인 경우에 아래와 같은 폴더가 존재합니다.


    • application/language/english


    해당 폴더 안에는 직접적인 접근을 방지하기 위한 index.html이 존재하고 있습니다.


    application만이 아니라 system에도 동일한 폴더가 존재합니다.


    • system/language/english


    application과 system 있는 language 폴더의 차이점은 system 에 존재하는 폴더에는 

    코드이그나이터에서 기본적으로 지원하는 영어 문구 파일들이 존재합니다.


    일단 우리는 application 폴더에서만 작업하도록 하겠습니다.


    1. 폴더 정리

    저는 개인적으로 english라는 폴더명이 너무 길다고 생각합니다.

    그래서 아래와 같이 폴더명을 정하도록 하겠습니다.


    • 영어 : english → en
    • 한국어 : korean → ko


    en 폴더를 그대로 복사한 후에 폴더명만 ko로 변경합니다.

    ※ 폴더 복사 작업은 application과 system 폴더 모두에서 진행합니다.


    아래처럼 구성되면 됩니다.


    • application/language/en
    • application/language/ko


    2. 언어 파일 추가

    아래와 같이 두 개의 파일을 추가합니다.


    application/language/en/main_lang.php

    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    $lang['LOGIN'] = 'Login';
    


    application/language/ko/main_lang.php

    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    $lang['LOGIN'] = '로그인';
    


    3. 기본 언어 설정 변경

    코드이그나이터에서 기본 언어는 영어(english)로 설정되어 있으므로 아래와 같이 변경합니다.


    application/config/config.php

    /*
    |--------------------------------------------------------------------------
    | Default Language
    |--------------------------------------------------------------------------
    |
    | This determines which set of language files should be used. Make sure
    | there is an available translation if you intend to use something other
    | than english.
    |
    */
    $config['language']	= 'en';
    


    4. 예제 컨트롤러 추가

    예제를 작성할 컨트롤러를 추가하겠습니다.


    application/controller/Main.php

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Main extends CI_Controller {
    
        function __construct()
        {
            parent::__construct();
        }
    
        public function index()
        {
            echo "";
        }
    }
    


    이제 기본적인 준비는 마쳤습니다.


    ▶언어 파일 로딩


    이제 언어 파일을 로드하는 방법을 알아보도록 하겠습니다.


    한 개의 기본 언어 파일 로드

    한 개의 기본 언어 파일을 로드하는 방법을 알아보도록 하겠습니다. (현재 기본 언어 : en)

    ※ 로드하려는 언어 파일명에서 '_lang.php' 앞에 부분이 로드에 사용되는 이름입니다.


    $this->lang->load('main');


    한 개의 원하는 언어 파일 로드

    하나의 원하는 언어 파일을 로드하는 방법을 알아보도록 하겠습니다.


    $this->lang->load('main', 'ko');


    여러 개의 기본 언어 파일 로드

    여러 개의 기본 언어 파일을 로드하는 방법을 알아보도록 하겠습니다. (현재 기본 언어 : en)

    ※ main2는 예시를 위해 작성한 가상의 파일입니다.


    $this->lang->load(array('main', 'main2'));


    여러 개의 원하는 언어 파일 로드

    여러 개의 원하는 언어 파일을 로드하는 방법을 알아보도록 하겠습니다.


    $this->lang->load(array('main', 'main2'), 'ko');


    ▶언어 파일 텍스트 가져오기


    언어 파일이 로드했으면 이제 그 안에 들어있는 텍스트를 가져오는 방법을 알아보겠습니다.


    언어 파일에서 텍스트 한 줄 가져오기

    $this->lang->line('LOGIN');

    언어 파일에서 텍스트 한 줄 가져오기 (해당 키가 없어도 에러를 표시하지 않음)

    $this->lang->line('LOGIN', FALSE);


    언어 파일에서 텍스트 배열 가져오기

    $this->lang->language;


    ▶예제


    GET 파라미터로 언어 값을 받아서 보여주는 페이지 예시입니다.

    ※ 일일이 GET 파라미터를 전달하면 귀찮기 때문에 한 번 받으면 세션이나 쿠키에 저장하여 사용하는게 좋다고 생각합니다.


    코드

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Main extends CI_Controller {
    
        function __construct()
        {
            parent::__construct();
    
            $support_lang_list = array('en', 'ko');
            $lang_code = $this->input->get('lang', true);
            if(in_array($lang_code, $support_lang_list) == false)
                $lang_code = $this->config->item('language');
    
            $this->lang->load('main', $lang_code);
        }
    
        public function index()
        {
            echo $this->lang->line('LOGIN');
    
            // $lang = $this->lang->language;
            // echo $lang['LOGIN'];
        }
    }
    

    생성자에서 언어 파일을 로드하도록 처리했습니다.

    지원하지 않는 언어의 경우 설정 파일에 있는 현재 기본 언어 값 가져오도록 처리했습니다.


    실행 결과 (/main?lang=en)

    Login


    실행 결과 (/main?lang=ko)

    로그인


    댓글

Designed by Tistory.