Skip to content

Instantly share code, notes, and snippets.

@claudiohilario
Created October 23, 2017 22:22
Show Gist options
  • Save claudiohilario/a16884a3baed8834bcfb7f4272fbcac8 to your computer and use it in GitHub Desktop.
Save claudiohilario/a16884a3baed8834bcfb7f4272fbcac8 to your computer and use it in GitHub Desktop.
Hook Linguagem em CodeIgniter
<?php
/**
* LanguageLoader
*
* Classe responsável por verificar qual o idioma que está a ser utilizado
* e carregar os respetivos ficheiros que se encontram em 'application/language'
*
* @package Hooks
* @author Cláudio Hilário <claudio.hilario@ontech.pt>
* @link http://www.ontech.pt
*/
class LanguageLoader
{
/**
* Variavel coorespondente a instância do Codeigniter
*
* @var array
*/
private $CI;
public function __construct()
{
$this->CI = get_instance();
$this->CI->load->helper('cookie');
}
/**
*
*/
function initialize()
{
/**
* Algoritmo:
* 1. Se cookie lang existe
* 1.1. Carrega a linguagem que se encontra no cookie
* 2. Se não
* 2.1. Deteta idioma do browser
* 2.2. Coloca o idioma do browser em lang cookie
* 2.3. Carrega a linguagem
*
*/
$lang = $this->CI->input->cookie('lang', true);
// 1. Se cookie lang existe
if(!is_null($lang))
{
// 1.1. Carrega a linguagem que se encontra no cookie
$this->load_lang($lang);
}
// 2. Se lang não existe
else
{
//2.1. Deteta idioma do browser
$lang = $this->get_idioma_browser();
// 2.2. Coloca o idioma do browser em lang cookie
setcookie('lang',$lang,time()+84000,'/');
// 2.3. Carrega a linguagem
$this->load_lang($lang);
}
}
/**
* _detetar_idioma_browser
*
* Permite detetar qual o idioma do browser
* @return bool|string
*/
private function get_idioma_browser()
{
return substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);
}
/**
* Permite carregar o ficheiros de linguagem
* @param $lang
*/
private function load_lang($lang){
$this->CI->load->helper('language');
switch ($lang) {
case 'en':
$idioma = 'english';
break;
case 'pt':
$idioma = 'portuguese';
break;
default:
$idioma = 'english';
break;
}
//Carrega todos os ficheiros de idioma
$this->CI->lang->load(array(
'calendar',
'date',
'db',
'email',
'form_validation',
'ftp',
'imglib',
'migration',
'number',
'pagination',
'profiler',
'unit_test',
'upload',
'gfitness'
), $idioma);
//Define o idioma a ser utilizado.
$this->CI->config->set_item('language', $idioma);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment