blob: 5ac671838e53e186a621a45caad396a9c8300f7f [file] [log] [blame]
Derek Jones37f4b9c2011-07-01 17:56:50 -05001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Greg Aker741de1c2010-11-10 14:52:57 -06005 * An open source application development framework for PHP 5.1.6 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
Greg Aker0711dc82011-01-05 10:49:40 -06009 * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
Derek Allard2067d1a2008-11-13 22:59:24 +000010 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16// ------------------------------------------------------------------------
17
18/**
19 * Language Class
20 *
21 * @package CodeIgniter
22 * @subpackage Libraries
23 * @category Language
24 * @author ExpressionEngine Dev Team
25 * @link http://codeigniter.com/user_guide/libraries/language.html
26 */
Derek Jones692c5482010-03-02 13:39:48 -060027class CI_Lang {
Derek Allard2067d1a2008-11-13 22:59:24 +000028
David Behlercda768a2011-08-14 23:52:48 +020029 /**
30 * List of translations
31 *
32 * @var array
33 */
Derek Allard2067d1a2008-11-13 22:59:24 +000034 var $language = array();
David Behlercda768a2011-08-14 23:52:48 +020035 /**
36 * List of loaded language files
37 *
38 * @var array
39 */
Derek Allard2067d1a2008-11-13 22:59:24 +000040 var $is_loaded = array();
41
42 /**
43 * Constructor
44 *
45 * @access public
46 */
Greg Akera9263282010-11-10 15:26:43 -060047 function __construct()
Derek Allard2067d1a2008-11-13 22:59:24 +000048 {
49 log_message('debug', "Language Class Initialized");
50 }
51
52 // --------------------------------------------------------------------
53
54 /**
55 * Load a language file
56 *
57 * @access public
58 * @param mixed the name of the language file to be loaded. Can be an array
59 * @param string the language (english, etc.)
David Behlercda768a2011-08-14 23:52:48 +020060 * @param bool return loaded array of translations
61 * @param bool add suffix to $langfile
62 * @param string alternative path to look for language file
Derek Allard2067d1a2008-11-13 22:59:24 +000063 * @return mixed
64 */
Derek Jones692c5482010-03-02 13:39:48 -060065 function load($langfile = '', $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = '')
Derek Allard2067d1a2008-11-13 22:59:24 +000066 {
Greg Aker3a746652011-04-19 10:59:47 -050067 $langfile = str_replace('.php', '', $langfile);
Derek Jones692c5482010-03-02 13:39:48 -060068
69 if ($add_suffix == TRUE)
70 {
71 $langfile = str_replace('_lang.', '', $langfile).'_lang';
72 }
73
Greg Aker3a746652011-04-19 10:59:47 -050074 $langfile .= '.php';
Derek Allard2067d1a2008-11-13 22:59:24 +000075
76 if (in_array($langfile, $this->is_loaded, TRUE))
77 {
78 return;
79 }
80
Derek Jones692c5482010-03-02 13:39:48 -060081 $config =& get_config();
82
Derek Allard2067d1a2008-11-13 22:59:24 +000083 if ($idiom == '')
84 {
Derek Jones692c5482010-03-02 13:39:48 -060085 $deft_lang = ( ! isset($config['language'])) ? 'english' : $config['language'];
Derek Allard2067d1a2008-11-13 22:59:24 +000086 $idiom = ($deft_lang == '') ? 'english' : $deft_lang;
87 }
88
89 // Determine where the language file is and load it
Derek Jones692c5482010-03-02 13:39:48 -060090 if ($alt_path != '' && file_exists($alt_path.'language/'.$idiom.'/'.$langfile))
91 {
92 include($alt_path.'language/'.$idiom.'/'.$langfile);
93 }
Derek Allard2067d1a2008-11-13 22:59:24 +000094 else
95 {
Phil Sturgeonde3dbc32010-12-27 17:41:02 +000096 $found = FALSE;
97
98 foreach (get_instance()->load->get_package_paths(TRUE) as $package_path)
Derek Allard2067d1a2008-11-13 22:59:24 +000099 {
Phil Sturgeonde3dbc32010-12-27 17:41:02 +0000100 if (file_exists($package_path.'language/'.$idiom.'/'.$langfile))
101 {
102 include($package_path.'language/'.$idiom.'/'.$langfile);
103 $found = TRUE;
104 break;
105 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000106 }
Phil Sturgeonde3dbc32010-12-27 17:41:02 +0000107
108 if ($found !== TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000109 {
Derek Allardea9e4e02009-08-17 17:40:48 +0000110 show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile);
Derek Allard2067d1a2008-11-13 22:59:24 +0000111 }
112 }
113
Derek Jones692c5482010-03-02 13:39:48 -0600114
Derek Allard2067d1a2008-11-13 22:59:24 +0000115 if ( ! isset($lang))
116 {
117 log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile);
118 return;
119 }
120
121 if ($return == TRUE)
122 {
123 return $lang;
124 }
125
126 $this->is_loaded[] = $langfile;
127 $this->language = array_merge($this->language, $lang);
128 unset($lang);
129
130 log_message('debug', 'Language file loaded: language/'.$idiom.'/'.$langfile);
131 return TRUE;
132 }
133
134 // --------------------------------------------------------------------
135
136 /**
137 * Fetch a single line of text from the language array
138 *
139 * @access public
Barry Mienydd671972010-10-04 16:33:58 +0200140 * @param string $line the language line
Derek Allard2067d1a2008-11-13 22:59:24 +0000141 * @return string
142 */
143 function line($line = '')
144 {
patwork571023b2011-04-11 11:56:41 +0200145 $value = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];
Eric Barnese3c41cf2011-03-21 22:07:53 -0400146
147 // Because killer robots like unicorns!
patwork571023b2011-04-11 11:56:41 +0200148 if ($value === FALSE)
Eric Barnese3c41cf2011-03-21 22:07:53 -0400149 {
150 log_message('error', 'Could not find the language line "'.$line.'"');
151 }
152
patwork571023b2011-04-11 11:56:41 +0200153 return $value;
Derek Allard2067d1a2008-11-13 22:59:24 +0000154 }
155
156}
157// END Language Class
158
Derek Jones692c5482010-03-02 13:39:48 -0600159/* End of file Lang.php */
patwork571023b2011-04-11 11:56:41 +0200160/* Location: ./system/core/Lang.php */