2015-08-08 6 views
3

Я - Codeigniter, и мне нужен динамический язык для пользователей.Функциональность динамического языка CodeIgniter

Я добавил раскрывающийся список в заголовке, и я хочу, чтобы пользователи могли менять язык сайта во внешнем интерфейсе.

я пытался изменить язык с ниже кода в одном контроллере

$this->config->set_item('language','spanish'); 

но не работает его не изменяя язык

я также попытался с принятием сессию ниже код в одном из моего контроллера

$mylanguage = $this->session->set_userdata(array('my_language',$dynamiclang)); 

и попытался получить доступ к этой переменной в файле конфигурации, но ее также не работает.

Помогите мне выполнить эту работу.

ответ

3

Наконец я получил успех, чтобы сделать несколько языков

следуют ниже шаги

MY_Lang.php файл в папке application\core

MY_Lang.php 
<?php 
(defined('BASEPATH')) OR exit('No direct script access allowed'); 

class MY_Lang extends CI_Lang 
{ 
    function __construct() { 

     global $URI, $CFG, $IN; 

     $config =& $CFG->config; 

     $index_page = $config['index_page']; 
     $lang_ignore = $config['lang_ignore']; 
     $default_abbr = $config['language_abbr']; 
     $lang_uri_abbr = $config['lang_uri_abbr']; 
     #exit('my_lang'); 
     #print_r($URI); 
     /*if($index_page=='es') 
     { 
      #$config['index_page'] = 'es'; 
      #$config['lang_uri_abbr'] = 'es'; 
      #$IN->set_cookie('user_lang', 'es', $config['sess_expiration']); 
      #$URI->uri_string = str_replace('es','en',$URI->uri_string); 
      } 
     else{ 
      #$config['index_page'] = 'en'; 
      #$config['lang_uri_abbr'] = 'en'; 
      #$IN->set_cookie('user_lang', 'en', $config['sess_expiration']); 
      } 
     /* get the language abbreviation from uri */ 
     $uri_abbr = $URI->segment(1); 
     #$uri_abbr='es';  
     /* adjust the uri string leading slash */ 
     #print $URI->uri_string; 
     $URI->uri_string = preg_replace("|^\/?|", '/', $URI->uri_string); 



     if ($lang_ignore) { 

      if (isset($lang_uri_abbr[$uri_abbr])) { 

       /* set the language_abbreviation cookie */ 
       $IN->set_cookie('user_lang', $uri_abbr, $config['sess_expiration']); 

      } else { 

       /* get the language_abbreviation from cookie */ 
       $lang_abbr = $IN->cookie($config['cookie_prefix'].'user_lang'); 

      } 

      if (strlen($uri_abbr) == 2) { 

       /* reset the uri identifier */ 
       $index_page .= empty($index_page) ? '' : '/'; 
       // exit('654'); 
       /* remove the invalid abbreviation */ 
       $URI->uri_string = preg_replace("|^\/?$uri_abbr\/?|", '', $URI->uri_string); 

       /* redirect */ 
       header('Location: '.$config['base_url'].$index_page.$URI->uri_string); 
       exit; 
      } 

     } else { 

      /* set the language abbreviation */ 
      $lang_abbr = $uri_abbr; 
     } 

     /* check validity against config array */ 
     if (isset($lang_uri_abbr[$lang_abbr])) { 


      /* reset uri segments and uri string */ 
      //$URI->_reindex_segments(array_shift($URI->segments)); # this is commented becasue this is giving error : @$hok : 09/August/2015 
      $URI->uri_string = preg_replace("|^\/?$lang_abbr|", '', $URI->uri_string); 

      /* set config language values to match the user language */ 
      $config['language'] = $lang_uri_abbr[$lang_abbr]; 
      $config['language_abbr'] = $lang_abbr; 


      /* if abbreviation is not ignored */ 
      if (! $lang_ignore) { 

        /* check and set the uri identifier */ 
        $index_page .= empty($index_page) ? $lang_abbr : "/$lang_abbr"; 

       /* reset the index_page value */ 
       $config['index_page'] = $index_page; 
      } 

      /* set the language_abbreviation cookie */    
      $IN->set_cookie('user_lang', $lang_abbr, $config['sess_expiration']); 

     } else { 

      /* if abbreviation is not ignored */ 
      if (! $lang_ignore) {     

        /* check and set the uri identifier to the default value */  
       $index_page .= empty($index_page) ? $default_abbr : "/$default_abbr"; 

       if (strlen($lang_abbr) == 2) { 

        /* remove invalid abbreviation */ 
        $URI->uri_string = preg_replace("|^\/?$lang_abbr|", '', $URI->uri_string); 
       } 
       /*echo '<pre>'; 
       print_r($_SERVER); 
       print_r($config['base_url'].$index_page.$URI->uri_string); 
       exit;*/ 
       $q = $_SERVER['QUERY_STRING']; 
       if($q) 
        $q = "/?".$q; 
       /* redirect */ 
       header('Location: '.$config['base_url'].$index_page.$URI->uri_string.$q); 
       exit; 
      } 

      /* set the language_abbreviation cookie */     
      $IN->set_cookie('user_lang', $default_abbr, $config['sess_expiration']); 
     } 

     log_message('debug', "Language_Identifier Class Initialized"); 
    } 
} 

/* translate helper */ 
function t($line) { 
    global $LANG; 
//print_r($LANG); 
// exit; 
    return ($t = $LANG->line($line)) ? $t : $line; 
} 
function _t($line,$params=array()) { 
    global $LANG; 
    if($params){ 
     echo str_replace(array_keys($params),array_values($params),($t = $LANG->line($line)) ? $t : $line); 
    } 
    else 
     echo ($t = $LANG->line($line)) ? $t : $line; 
} ?> 

и добавил ниже вещи в config.php

$config['language'] = "english"; 

/* default language abbreviation */ 
$config['language_abbr'] = "en"; 

/* set available language abbreviations */ 
$config['lang_uri_abbr'] = array("en" => "english","es" => "spanish","ca" => "catalan"); 

/* hide the language segment (use cookie) */ 
$config['lang_ignore'] = TRUE; 

добавлен ниже код в route.php

$route['^en/(.+)$'] = "$1"; 
$route['^es/(.+)$'] = "$1"; 
$route['^ca/(.+)$'] = "$1"; 

$route['^(\w{2})$'] = $route['default_controller']; 
$route['^(\w{2})/(.+)$'] = "$2"; 

и добавлены языковые файлы в папке языка, как показано ниже

language/catalan 
language/spanish 
language/english 

я надеюсь, что это поможет.

0

Вы пытались добавить это в свой контроллер?

$this->load->helper('language');

+0

Эй, @ Gemmi, этот помощник уже включен fron autoload.php, поэтому не нужно добавлять это. –

0

нагрузки текущий язык в куки и загрузить файл языка, используя значение языка в куки примере всякий раз, когда пользователь выбирает язык использовать функцию ниже, чтобы установить текущий язык для печенья

function language($lang = false) { 
    if($this->input->get('lang')){ $lang = $this->input->get('lang'); } 
    $folder = 'application/language/'; 
    $languagefiles = scandir($folder); 

    if(in_array($lang, $languagefiles)){ 
     $cookie = array(
      'name' => 'lang', 
      'value' => $lang, 
      'expire' => '31536000', 
      'prefix' => 'my_', 
      'secure' => false 
     ); 

     $this->input->set_cookie($cookie); 
    } 

    $this->config->set_item('language', $lang); 

    redirect($_SERVER["HTTP_REFERER"]); 
} 

Тогда на конструкторе главного пользовательского контроллера или если вы просто расширение CI_Controller то нагрузка на конструктор каждого контроллера языковой файл (ы) и как

$this->lang->load('language_filename', get_cookie('my_lang')); 

вы сделали

Смежные вопросы