Files
scattport-web/application/libraries/Lang_detect.php
2011-09-01 20:26:59 +02:00

95 lines
2.7 KiB
PHP

<?php defined('BASEPATH') || exit("No direct script access allowed");
class Lang_detect {
private $CI;
private $supportedLanguages = array();
private $language = '';
/**
* Constructor.
*/
public function __construct() {
$this->CI =& get_instance();
$this->CI->load->config('language');
$this->CI->load->helper('cookie');
log_message('debug', "Lang_detect Class Initialized");
// get list of supported languages
$this->supportedLanguages = $this->CI->config->item('supported_languages');
if (empty($this->language)) {
// language not yet set: detect the user's language
$this->language = $this->detectLanguage();
}
$this->CI->lang->load_gettext($this->CI->config->item('language'));
}
/**
* Determine a 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 string Language directory name, e.g. 'english'
*/
public function detectLanguage() {
$segment = $this->CI->input->get('lang');
if (strlen($segment) == 2 && array_key_exists($segment, $this->supportedLanguages)) {
$lang = $segment;
$this->CI->session->set_userdata('language', $lang);
}
if ($this->CI->session->userdata('language')) {
$lang = $this->CI->session->userdata('language');
} else if (get_cookie('language') !== false) {
$lang = get_cookie('language');
} else if ($this->CI->input->server('HTTP_ACCEPT_LANGUAGE')) {
// explode languages into an array
$accept_langs = explode(',', $this->CI->input->server('HTTP_ACCEPT_LANGUAGE'));
log_message('debug', 'Checking browser languages: ' . implode(', ', $accept_langs));
// check them all, until a match is found
foreach ($accept_langs as $lang) {
$lang = strtolower(substr($lang, 0, 2));
if (in_array($lang, array_keys($this->supportedLanguages))) {
break;
}
}
}
// if no valid language has been detected, use the default
if (empty($lang) || !in_array($lang, array_keys($this->supportedLanguages))) {
$lang = $this->CI->config->item('default_language');
}
// save the selected language to avoid detecting it again
$this->CI->session->set_userdata('language', $lang);
// set the language config
$this->CI->config->set_item('language', $this->supportedLanguages[$lang]['locale']);
return $lang;
}
/**
* Sets the language cookie.
*
* @param string $lang The language code, e.g. en
*/
private function setLanguageCookie($lang) {
set_cookie($this->CI->config->item('language_cookie_name'), $lang, $this->CI->config->item('language_expiration'));
}
}
/* End of file Lang_detect.php */
/* Location: ./application/libraries/Lang_detect.php */