제목 | 다국어 처리관련 | ||
---|---|---|---|
글쓴이 | 치아키 | 작성시각 | 2015/02/25 15:21:23 |
|
|||
http://codeigniter-kr.org/user_guide_2.1.0/libraries/language.html http://codeigniter-kr.org/user_guide_2.1.0/libraries/user_agent.html http://www.sitepoint.com/multi-language-support-in-codeigniter/ 위 3개의 링크를 참고하고 다국어사이트를 개발하고있는데요. 포럼에 검색하던중에 $lang값을 전역변수로 넘기는 방법도 있다고 들었는데.. 위 링크들은 봐도 잘 모르겠고ㅠㅠ..접속된 위치에따라 kr뷰가 나오고 en뷰가 나오도록 능동적으로 처리하는것과 다국어 사이트개발을 어떤방법으로 하는게 좋을까요?? 참고할만한 예제소스나 방법을 좀 알수있을까요?? |
|||
다음글 | $CI = new $class(); 부분부터 아무것도 ... (5) | ||
이전글 | controller에서 post data 처리 (2) | ||
변종원(웅파)
/
2015/02/25 17:48:26 /
추천
0
|
치아키
/
2015/02/25 17:58:44 /
추천
0
웅파 // language 파일을 불러오는것과 위 링크처럼 hooks를 사용하는것은 어떤 차이점 인가요??
그리고 '최초 접속시 언어파일을 해당 나라의 것으로 로딩을 해주고 언어파일 내용을 불러오면 됩니다.' 이부분은 if문으로 하나의 view로 다국어 사이트를 만들때 분기하는 부분인가요?ㅠㅠ |
ci세상
/
2015/02/25 18:29:04 /
추천
0
Lang.php파일 코어 확장하면 좀더 쉽게 될것도 같네요
아래부분에 deifne처리해서 사용하는 방식입니다. 스트링은 가급적이면 대문자로 정의하면 좋겠네요 국가별분기방법 1. autoload에서 분기 2. 컨트롤러에서 분기 $this->lang->load("battle","korean"); 3. Lang.php 확장코어에서 코드분기 Lang (스트링) $lang["TITLE_NAME"] = "사이트명"; application/core/Lang.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * CodeIgniter * * An open source application development framework for PHP 5.1.6 or newer * * @package CodeIgniter * @author EllisLab Dev Team * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. * @copyright Copyright (c) 2014 - 2015, British Columbia Institute of Technology (http://bcit.ca/) * @license http://codeigniter.com/user_guide/license.html * @link http://codeigniter.com * @since Version 1.0 * @filesource */ // ------------------------------------------------------------------------ /** * Language Class * * @package CodeIgniter * @subpackage Libraries * @category Language * @author EllisLab Dev Team * @link http://codeigniter.com/user_guide/libraries/language.html */ class CI_Lang { /** * List of translations * * @var array */ var $language = array(); /** * List of loaded language files * * @var array */ var $is_loaded = array(); /** * Constructor * * @access public */ function __construct() { log_message('debug', "Language Class Initialized"); } // -------------------------------------------------------------------- /** * Load a language file * * @access public * @param mixed the name of the language file to be loaded. Can be an array * @param string the language (english, etc.) * @param bool return loaded array of translations * @param bool add suffix to $langfile * @param string alternative path to look for language file * @return mixed */ function load($langfile = '', $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = '') { $langfile = str_replace('.php', '', $langfile); if ($add_suffix == TRUE) { $langfile = str_replace('_lang.', '', $langfile).'_lang'; } $langfile .= '.php'; if (in_array($langfile, $this->is_loaded, TRUE)) { return; } $config =& get_config(); if ($idiom == '') { $deft_lang = ( ! isset($config['language'])) ? 'english' : $config['language']; $idiom = ($deft_lang == '') ? 'english' : $deft_lang; } // Determine where the language file is and load it if ($alt_path != '' && file_exists($alt_path.'language/'.$idiom.'/'.$langfile)) { include($alt_path.'language/'.$idiom.'/'.$langfile); } else { $found = FALSE; foreach (get_instance()->load->get_package_paths(TRUE) as $package_path) { if (file_exists($package_path.'language/'.$idiom.'/'.$langfile)) { include($package_path.'language/'.$idiom.'/'.$langfile); $found = TRUE; break; } } if ($found !== TRUE) { show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile); } } // CI세상 추가 foreach($lang as $key=>$value){ define($key,$value); } if ( ! isset($lang)) { log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile); return; } if ($return == TRUE) { return $lang; } $this->is_loaded[] = $langfile; $this->language = array_merge($this->language, $lang); unset($lang); log_message('debug', 'Language file loaded: language/'.$idiom.'/'.$langfile); return TRUE; } // -------------------------------------------------------------------- /** * Fetch a single line of text from the language array * * @access public * @param string $line the language line * @return string */ function line($line = '') { $value = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line]; // Because killer robots like unicorns! if ($value === FALSE) { log_message('error', 'Could not find the language line "'.$line.'"'); } return $value; } } // END Language Class /* End of file Lang.php */ /* Location: ./system/core/Lang.php */ C/V에서 echo TITLE_NAME; |
변종원(웅파)
/
2015/02/25 18:29:17 /
추천
0
치아키/ 세번째 문서 따라서 구현하세요.
제가 설명한 부분도 결국은 hook으로 한국인지 미국인지를 체크해서 언어를 로딩해야 합니다. |
치아키
/
2015/02/26 11:10:43 /
추천
0
웅파 // 그럼결과적으로 hook에서
hooks/LanguageLoader.php class LanguageLoader { function initialize() { $ci =& get_instance(); $ci->load->helper('language'); $site_lang = $ci->session->userdata('site_lang'); if ($site_lang) { $ci->lang->load('content',$ci->session->userdata('site_lang')); } else { $ci->lang->load('content','english'); } } } 이렇게 체크하고 컨트롤러에서 controllers/main.php if ($site_lang) { $this->load->view('korea/content_view'); } else { $this->load->view('english/content_view'); } 이렇게 하는게 맞나요?? |
아플바
/
2015/06/23 16:57:14 /
추천
0
저도 세번째 문서 따라서 해보고 있는데요 .
ci 2 버전 여러 메뉴(링크)가 있을때 각 메뉴 클릭시 화면 언어가 변경되지 않고 . 해당페이지에서 f5 키를 눌러야 하면 언어변경이 되는데 . 혹시 이런 상황 겪어본 분이 있어요? |
세번째 문서 아주 잘 설명해놨네요.