added language detection functionality
This commit is contained in:
parent
3c1a982fd9
commit
407e889c3a
@ -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;
|
||||
|
||||
?>
|
@ -19,7 +19,7 @@ class Source extends Controller
|
||||
$this->load->model (CODEPOT_LOGIN_MODEL, 'login');
|
||||
|
||||
$this->load->library ('Language', 'lang');
|
||||
$this->lang->load ('common', CODEPOT_LANG);
|
||||
$this->lang->load ('common', CODEPOT_LANG);
|
||||
}
|
||||
|
||||
function home ($projectid = '', $subdir = '', $rev = SVN_REVISION_HEAD)
|
||||
|
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),
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user