Welcome Guest, Not a member yet? Register   Sign In
Language Class Bug!
#1

[eluser]Unknown[/eluser]
Hi,
I got a bug in Language class and need to be confirmed.

Short brief:
Code:
1. ./system/application/config/config.php
  $language = "indonesia"; # default indonesia
  
2. ./system/application/config/autoload.php
  $language = array('caption');
  
3. ./system/application/language/english/caption_lang.php
  $lang['caption_welcome'] = 'Welcome';
  
4. ./system/application/language/indonesia/caption_lang.php
  $lang['caption_welcome'] = 'Selamat datang';
  
5. ./system/application/controllers/welcome.php
  $this->load->library('config');
  $this->config->set_item('language','english');
  $this->lang->load('caption');
  
  echo  $this->lang->line('caption_welcome');

Expected Result:
Welcome

Actual Result:
Selamat datang

Fixes:
create a file Language.php into your ./system/application/library

Code:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 4.3.2 or newer
*
* @package    CodeIgniter
* @author    ExpressionEngine Dev Team
* @copyright  Copyright (c) 2008 - 2009, EllisLab, Inc.
* @license    http://ellislab.com/codeigniter/user-guide/license.html
* @link    http://codeigniter.com
* @since    Version 1.0
* @filesource
*/

// ------------------------------------------------------------------------

/**
* Language Class
*
* @package    CodeIgniter
* @subpackage  Libraries
* @category  Language
* @author    ExpressionEngine Dev Team
* @link    http://ellislab.com/codeigniter/user-guide/libraries/language.html
*/
class CI_Language {

  var $language         = array();
  var $is_loaded        = array();
  var $current_language = '';
  var $mode             = 'Replacement';

  /**
   * Constructor
   *
   * @access  public
   */
  function CI_Language()
  {
    log_message('debug', "Replacement of Language Class Initialized");
  }

  // --------------------------------------------------------------------

  /**
   * Load a language file
   *
   * @access  public
   * @param  mixed  the name of the language file to be loaded. Can be an array
   * @param  string  the language (english, etc.)
   * @return  mixed
   */
  function load($langfile = '', $idiom = '', $return = FALSE)
  {
    $langfile = str_replace(EXT, '', str_replace('_lang.', '', $langfile)).'_lang'.EXT;

    if (in_array($langfile, $this->is_loaded, TRUE))
    {
      if($this->current_language == '' ||
         $this->current_language == $idiom){

        return;
      }
    }

    if ($idiom == '')
    {
      $CI =& get_instance();
      $deft_lang = $CI->config->item('language');
      $idiom = ($deft_lang == '') ? 'english' : $deft_lang;
    }else{

      if($this->current_language != $idiom){

        $this->is_loaded = array();
      }
    }

    $this->current_language = $idiom;

    // Determine where the language file is and load it
    if (file_exists(APPPATH.'language/'.$idiom.'/'.$langfile))
    {
      include(APPPATH.'language/'.$idiom.'/'.$langfile);
    }
    else
    {
      if (file_exists(BASEPATH.'language/'.$idiom.'/'.$langfile))
      {
        include(BASEPATH.'language/'.$idiom.'/'.$langfile);
      }
      else
      {
        show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile);
      }
    }

    if ( ! isset($lang))
    {
      log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile);
      return;
    }

    if ($return == TRUE)
    {
      return $lang;
    }

    $this->is_loaded[] = $langfile;
    $this->language = array_merge($this->language, $lang);
    unset($lang);

    log_message('debug', 'Language file loaded: language/'.$idiom.'/'.$langfile);
    return TRUE;
  }

  // --------------------------------------------------------------------

  /**
   * Fetch a single line of text from the language array
   *
   * @access  public
   * @param  string  $line   the language line
   * @return  string
   */
  function line($line = '')
  {
    $line = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];
    return $line;
  }

}
// END Language Class

/* End of file Language.php */
/* Location: ./system/application/libraries/Language.php */

Comment: Language::is_loaded[] needs to be reset when new language is loaded.
Hope it helps.


Messages In This Thread
Language Class Bug! - by El Forum - 06-27-2010, 02:47 AM
Language Class Bug! - by El Forum - 06-27-2010, 04:42 AM
Language Class Bug! - by El Forum - 06-27-2010, 06:17 AM



Theme © iAndrew 2016 - Forum software by © MyBB