added language detection functionality
This commit is contained in:
		| @ -31,9 +31,11 @@ ldap_userid_format = "${userid}" | ||||
| ldap_password_format = "${password}" | ||||
|  | ||||
| ;------------------------------------------------------------------------------ | ||||
| ; language to use | ||||
| ; default langage to use. set it to 'auto' to detect it automatically. | ||||
| ; available languages are:  | ||||
| ;  english, korean, indonesian | ||||
| ;------------------------------------------------------------------------------ | ||||
| lang = "english" | ||||
| language = "auto" | ||||
|  | ||||
| ;------------------------------------------------------------------------------ | ||||
| ; When set to yes, viewing pages require a user to sign in. | ||||
|  | ||||
| @ -7,6 +7,7 @@ www_DATA =  \ | ||||
| 	doctypes.php \ | ||||
| 	hooks.php \ | ||||
| 	index.html \ | ||||
| 	lang_detect.php \ | ||||
| 	mimes.php \ | ||||
| 	routes.php \ | ||||
| 	smileys.php \ | ||||
|  | ||||
| @ -170,6 +170,7 @@ www_DATA = \ | ||||
| 	doctypes.php \ | ||||
| 	hooks.php \ | ||||
| 	index.html \ | ||||
| 	lang_detect.php \ | ||||
| 	mimes.php \ | ||||
| 	routes.php \ | ||||
| 	smileys.php \ | ||||
|  | ||||
| @ -39,7 +39,7 @@ | ||||
| |	$autoload['libraries'] = array('database', 'session', 'xmlrpc'); | ||||
| */ | ||||
|  | ||||
| $autoload['libraries'] = array('database'); | ||||
| $autoload['libraries'] = array('database', 'lang_detect'); | ||||
|  | ||||
|  | ||||
| /* | ||||
| @ -79,7 +79,7 @@ $autoload['plugin'] = array(); | ||||
| | | ||||
| */ | ||||
|  | ||||
| $autoload['config'] = array(); | ||||
| $autoload['config'] = array('lang_detect'); | ||||
|  | ||||
|  | ||||
| /* | ||||
|  | ||||
| @ -69,7 +69,7 @@ $config['url_suffix'] = ""; | ||||
| | than english. | ||||
| | | ||||
| */ | ||||
| $config['language']	= "english"; | ||||
| $config['language']	= 'english'; | ||||
|  | ||||
| /* | ||||
| |-------------------------------------------------------------------------- | ||||
|  | ||||
							
								
								
									
										33
									
								
								codepot/src/codepot/config/lang_detect.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								codepot/src/codepot/config/lang_detect.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| <?php  if (!defined('BASEPATH')) exit('No direct script access allowed'); | ||||
|  | ||||
| /* SVN FILE: $Id: lang_detect.php 135 2008-11-09 05:49:10Z Roland $ */ | ||||
| /* | ||||
| |----------------------------------------------------------------------------- | ||||
| | Configure language detect mechanism | ||||
| |----------------------------------------------------------------------------- | ||||
| | | ||||
| */ | ||||
|  | ||||
| // Mapping browser's primary language id to supported language directory. | ||||
|  | ||||
| $config['lang_avail'] = array( | ||||
| 	'en'    => 'english', | ||||
| 	'ko'    => 'korean', | ||||
| 	'id'    => 'indonesian' | ||||
| ); | ||||
|  | ||||
| // define the default language code. This language MUST be supported! | ||||
| $config['lang_default'] = 'en'; | ||||
|  | ||||
| // the selected language code. Is set by the language detection | ||||
| $config['lang_selected'] = 'en'; | ||||
|  | ||||
| // Language cookie parameters: | ||||
| // 'lang_cookie_name' = the name you want for the cookie | ||||
| // 'lang_expiration'  = the number of SECONDS you want the language to be | ||||
| //                      remembered. by default 2 years.  | ||||
| //                      Set zero for expiration when the browser is closed. | ||||
| $config['lang_cookie_name'] = 'lang_select_language'; | ||||
| $config['lang_expiration']  = 63072000; | ||||
|  | ||||
| ?> | ||||
							
								
								
									
										287
									
								
								codepot/src/codepot/libraries/Lang_detect.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										287
									
								
								codepot/src/codepot/libraries/Lang_detect.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,287 @@ | ||||
| <?php  if (!defined('BASEPATH')) exit('No direct script access allowed'); | ||||
| /* SVN FILE: $Id: Lang_detect.php 148 2009-01-13 19:09:20Z Roland $ */ | ||||
| /** | ||||
| |------------------------------------------------------------------------ | ||||
| | Code Igniter Language Detect Library | ||||
| | | ||||
| | Functionality: determine user's language from the browser's language | ||||
| | preference settings and store its ISO code in the configuration entry  | ||||
| | 'lang_selected'. | ||||
| | The directory of the language files for the CI Language class is stored | ||||
| | in the standard CI configuration entry 'language'. | ||||
| | | ||||
| | This class reads the following configuration entries: | ||||
| |   $config['avail_lang'] = array( | ||||
| |     'en'    => 'english', | ||||
| |     'en_us' => 'english', | ||||
| |     'de'    => 'german', | ||||
| |     'es'    => 'spanish' | ||||
| |   ); | ||||
| |   $config['lang_default'] = 'en'; | ||||
| |   $config['lang_selected'] = 'en'; | ||||
| | | ||||
| | Full language codes such as en_uk, de_at are supported. If there is no | ||||
| | configuration entry for them, their base language, i.e. en, de, etc. is used. | ||||
| | If no match was found, the configured default language is taken. | ||||
| | | ||||
| | The selected ISO language code is included as URI segment in all links that | ||||
| | are generated by the site_url function of the MY_Config class. Additionally | ||||
| | a cookie is set that stores the selected code for a longer time period. | ||||
| | The cookie can be configured by the following configuration values (all  | ||||
| | other cookie parameters are taken from the standard CodeIgniter  | ||||
| | configuration items): | ||||
| |	$config['lang_cookie_name'] = 'xxx_language'; | ||||
| |	$config['lang_expiration']  = 63072000; // 2 years | ||||
| | | ||||
| | @package    CodeIgniter | ||||
| | @subpackage Libraries | ||||
| | @category	  I18N | ||||
| | @copyright  Copyright (C) 2007 Roland Blochberger | ||||
| | @author     Roland Blochberger | ||||
| | | ||||
| | @inpiredFrom Code Igniter Mini-App, Language Detect Library by George Dunlop | ||||
| | @inpiredlink http://mini-app.peccavi.com | ||||
| | | ||||
| | | ||||
| | This library is free software; you can redistribute it and/or | ||||
| | modify it under the terms of the GNU Lesser General Public | ||||
| | License as published by the Free Software Foundation; either | ||||
| | version 2.1 of the License, or (at your option) any later version. | ||||
| |  | ||||
| | This library is distributed in the hope that it will be useful, | ||||
| | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
| | Lesser General Public License for more details. | ||||
| |  | ||||
| | You should have received a copy of the GNU Lesser General Public | ||||
| | License along with this library; if not, write to the Free Software | ||||
| | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||
| | | ||||
| */ | ||||
| // Lang_detect Version | ||||
| define('LANG_DETECT_VERSION',    '1.1.0'); | ||||
|  | ||||
| class Lang_detect  | ||||
| { | ||||
| 	var $obj; | ||||
| 	// make config item available locally | ||||
| 	var $lang_avail; | ||||
| 	// the user's language (directory name) | ||||
| 	var $lang_dir = ''; | ||||
|  | ||||
| 	/** | ||||
| 	 * Constructor | ||||
| 	 */ | ||||
| 	function Lang_detect() | ||||
| 	{ | ||||
| 		$this->obj =& get_instance(); | ||||
| 		// get list of supported languages | ||||
| 		$this->lang_avail = $this->obj->config->item('lang_avail'); | ||||
|  | ||||
| 		if (empty($this->lang_dir)) | ||||
| 		{ | ||||
| 			$this->lang_dir = $this->detectLanguage(); | ||||
| 			if (!defined('CODEPOT_LANG')) | ||||
| 			{ | ||||
| 				if (strcasecmp(CODEPOT_LANGUAGE, 'auto') == 0) | ||||
| 					define ('CODEPOT_LANG', $this->lang_dir); | ||||
| 				else | ||||
| 					define ('CODEPOT_LANG', CODEPOT_LANGUAGE); | ||||
| 			} | ||||
| 		} | ||||
| 		log_message('debug', __CLASS__." class ".LANG_DETECT_VERSION." initialized (using $this->lang_dir)"); | ||||
| 	} | ||||
|  | ||||
| 	// -------------------------------------------------------------------- | ||||
|      | ||||
| 	/** | ||||
| 	 * determine user's language. | ||||
| 	 * Use either the URI segment's or the cookie's language code or  | ||||
| 	 * determine the best match of the browser's languages with the  | ||||
| 	 * available languages. | ||||
| 	 * If no match s found, the configured default language is taken. | ||||
| 	 * | ||||
| 	 * @return language directory name, e.g 'english' | ||||
| 	 */ | ||||
| 	function detectLanguage()  | ||||
| 	{ | ||||
| 		$language = false; | ||||
|  | ||||
| /* | ||||
| 		// obtain language code from URI segment if available | ||||
| 		$langu = $this->_uri_lang_detect(); | ||||
| 		if ($langu !== false) | ||||
| 		{ | ||||
| 			// check the URI's language code | ||||
| 			$language = $this->_checkLang($langu); | ||||
| 			if ($language !== false) | ||||
| 			{ | ||||
| 				$lang = $langu; | ||||
| 				//log_message('debug', __CLASS__.".detectLanguage(): Use URI segment language: $langu ($language)"); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// if a language cookie available get its sanitized info | ||||
| 		$langc = $this->obj->input->cookie($this->obj->config->item('cookie_prefix').$this->obj->config->item('lang_cookie_name'), true); | ||||
| 		if ($langc !== false) | ||||
| 		{ | ||||
| 			if (($language !== false) && ($langu !== $langc)) | ||||
| 			{ | ||||
| 				// URI has valid language but cookie has wrong language: | ||||
| 				// update cookie | ||||
| 				$this->_set_lang_cookie($langu); | ||||
| 			} | ||||
| 			if ($language === false) | ||||
| 			{ | ||||
| 				// invalid or no URI language code: check the cookie's language | ||||
| 				$language = $this->_checkLang($langc); | ||||
| 				if ($language !== false) | ||||
| 				{ | ||||
| 					 $lang = $langc; | ||||
| 					//log_message('debug', __CLASS__.".detectLanguage(): Use cookie language: $langc ($language)"); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| */ | ||||
|  | ||||
| 		if ($language === false) | ||||
| 		{ | ||||
| 			// no cookie/URI language code: check browser's languages | ||||
| 			$accept_langs = $this->obj->input->server('HTTP_ACCEPT_LANGUAGE'); | ||||
| 			if ($accept_langs !== false) | ||||
| 			{ | ||||
| 				//explode languages into array | ||||
| 				$accept_langs = strtolower($accept_langs); | ||||
| 				$accept_langs = explode(",", $accept_langs); | ||||
| 				//log_message('debug', __CLASS__.".detectLanguage(): browser languages: ".print_r($accept_langs, true)); | ||||
| 				// check all of them | ||||
| 				foreach ($accept_langs as $lang) | ||||
| 				{ | ||||
| 					//log_message('debug', __CLASS__.".detectLanguage(): Check lang: $lang"); | ||||
| 					// remove all after ';' | ||||
| 					$pos = strpos($lang,';'); | ||||
| 					if ($pos !== false) | ||||
| 					{ $lang = substr($lang,0,$pos); } | ||||
| 					// get CI language directory | ||||
| 					$language = $this->_checkLang($lang); | ||||
| 					// finish search if we support that language | ||||
| 					if ($language !== false) | ||||
| 					{ | ||||
| 						// set cookie | ||||
| 						$this->_set_lang_cookie($lang); | ||||
| 						//log_message('debug', __CLASS__.".detectLanguage(): Use browser language: $lang ($language)"); | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if ($language === false) | ||||
| 		{ | ||||
| 			// no base language available or no browser language match: use default | ||||
| 			$lang = $this->obj->config->item('lang_default'); | ||||
| 			// XXX Of course the default language has to be supported! | ||||
| 			$language = $this->lang_avail[$lang]; | ||||
| 			// set cookie | ||||
| 			$this->_set_lang_cookie($lang); | ||||
| 			//log_message('debug', __CLASS__.".detectLanguage(): Use default language: $lang ($language)"); | ||||
| 		} | ||||
|  | ||||
| /* | ||||
| 		// set the configuration for the CI_Language class | ||||
| 		$this->obj->config->set_item('language', $language); | ||||
| */ | ||||
|  | ||||
| 		// store the language code too | ||||
| 		$this->obj->config->set_item('lang_selected', $lang); | ||||
| 		//log_message('debug', __CLASS__.".detectLanguage(): Use language: $lang ($language)"); | ||||
| 		return $language; | ||||
| 	} | ||||
|  | ||||
| 	// -------------------------------------------------------------------- | ||||
|      | ||||
| 	/** | ||||
| 	 * set the language cookie. | ||||
| 	 * | ||||
| 	 * @access  private | ||||
| 	 * @param string $lang the language code, e.g. en | ||||
| 	 */ | ||||
| 	function _set_lang_cookie($lang) | ||||
| 	{ | ||||
| 		//log_message('debug', __CLASS__."._set_lang_cookie($lang)"); | ||||
| 		if (!function_exists('set_cookie')) | ||||
| 		{ | ||||
| 			$this->obj->load->helper('cookie'); | ||||
| 		} | ||||
| 		set_cookie($this->obj->config->item('lang_cookie_name'),  | ||||
| 			$lang, | ||||
| 			$this->obj->config->item('lang_expiration'), | ||||
| 			$this->obj->config->item('cookie_domain'), | ||||
| 			$this->obj->config->item('cookie_path'), | ||||
| 			$this->obj->config->item('cookie_prefix')); | ||||
| 	} | ||||
|  | ||||
| 	// -------------------------------------------------------------------- | ||||
|      | ||||
| 	/** | ||||
| 	 * fetch language code from URI segment if available. | ||||
| 	 * | ||||
| 	 * @access  private | ||||
| 	 * @return  mixed the language code; or FALSE if not found. | ||||
| 	 */ | ||||
| 	function _uri_lang_detect() | ||||
| 	{ | ||||
| 		// search the language code in the uri segments | ||||
| 		$_n = $this->obj->uri->total_segments(); | ||||
| 		for ($_s = $_n; $_s > 0; $_s--) | ||||
| 		{ | ||||
| 			$_seg = $this->obj->uri->segment($_s); | ||||
| 			// the uri segment with the language code has the prefix 'l_' | ||||
| 			if (!empty($_seg) && (strpos($_seg, 'l_') === 0)) | ||||
| 			{ | ||||
| 				// extract the language code | ||||
| 				return substr($_seg, 2); | ||||
| 			} | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
|          | ||||
| 	// -------------------------------------------------------------------- | ||||
|  | ||||
| 	/** | ||||
| 	 * determine language directory  | ||||
| 	 * | ||||
| 	 * @param string $lang language code, e.g. en_uk | ||||
| 	 * @return string language directory or false if not found. | ||||
| 	 *                updates the $lang parameter! | ||||
| 	 */ | ||||
| 	function _checkLang(&$lang) | ||||
| 	{ | ||||
| 		//log_message('debug', __CLASS__."._checkLang($lang) trys '$lang'"); | ||||
| 		if (!array_key_exists($lang, $this->lang_avail)) | ||||
| 		{ | ||||
| 			if (strlen($lang) == 2) | ||||
| 			{ | ||||
| 				// we had already the base language: not found so give up | ||||
| 				//log_message('debug', __CLASS__."._checkLang($lang) '$lang' not available!"); | ||||
| 				return false; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				// try base language | ||||
| 				$lang = substr($lang, 0, 2); | ||||
| 				//log_message('debug', __CLASS__."._checkLang($lang) trys '$lang'"); | ||||
| 				if (!array_key_exists($lang, $this->lang_avail)) | ||||
| 				{ | ||||
| 					// calculated base language also not found: give up | ||||
| 					//log_message('debug', __CLASS__."._checkLang($lang) '$lang' not available!"); | ||||
| 					return false; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		// get CI language directory | ||||
| 		//log_message('debug', __CLASS__."._checkLang($lang) uses '$lang'"); | ||||
| 		return $this->lang_avail[$lang]; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1,7 +1,8 @@ | ||||
| wwwdir=$(WWWDIR)/codepot/libraries | ||||
| www_DATA =  \ | ||||
| 	converter.php \ | ||||
| 	index.html | ||||
| 	index.html \ | ||||
| 	Lang_detect.php | ||||
|  | ||||
| EXTRA_DIST = $(www_DATA) | ||||
|  | ||||
|  | ||||
| @ -164,7 +164,8 @@ top_srcdir = @top_srcdir@ | ||||
| wwwdir = $(WWWDIR)/codepot/libraries | ||||
| www_DATA = \ | ||||
| 	converter.php \ | ||||
| 	index.html | ||||
| 	index.html \ | ||||
| 	Lang_detect.php | ||||
|  | ||||
| EXTRA_DIST = $(www_DATA) | ||||
| all: all-am | ||||
|  | ||||
| @ -52,7 +52,6 @@ class LogModel extends Model | ||||
| 			$commits[$count]['repo'] = $repo; | ||||
| 			$commits[$count]['rev'] = $rev; | ||||
|  | ||||
|  | ||||
| 			$log = @svn_log ( | ||||
| 				'file:///'.CODEPOT_SVNREPO_DIR."/{$repo}", | ||||
| 				$rev, $rev, 1,SVN_DISCOVER_CHANGED_PATHS); | ||||
|  | ||||
| @ -15,7 +15,7 @@ function load_ini ($file) | ||||
| 	$xcfgs = array ( | ||||
| 		array ('default_banner',               'string',     '@PACKAGE@'), | ||||
| 		array ('default_siteid',               'string',     'default'), | ||||
| 		array ('lang',                         'string',     'english'), | ||||
| 		array ('language',                     'string',     'auto'), | ||||
| 		array ('always_require_signin',        'boolean',    FALSE), | ||||
| 		array ('enable_websvn',                'boolean',    FALSE), | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user