| 제목 | 다국어 처리관련 | ||
|---|---|---|---|
| 글쓴이 | 치아키 | 작성시각 | 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 키를 눌러야 하면 언어변경이 되는데 . 혹시 이런 상황 겪어본 분이 있어요? |
세번째 문서 아주 잘 설명해놨네요.