ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilLanguage.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 
27 {
34  var $ilias;
35 
42  var $text;
43 
52 
62 
72 
79  var $lang_key;
80 
88 
95  var $separator = "#:#";
96 
103  var $comment_separator = "###";
104 
112 
123  function ilLanguage($a_lang_key)
124  {
126 
127  // store used modules and topics in a global variable
128  // ($lng seems to be initialized more than once)
129  global $ilias_lang_used_topics;
130  global $ilias_lang_used_modules;
131  $this->used_topics =& $ilias_lang_used_topics;
132  $this->used_modules =& $ilias_lang_used_modules;
133 
134  $this->ilias =& $ilias;
135 
136  if (!isset($log))
137  {
138  if (is_object($ilias))
139  {
140  $this->log = new ilLog(ILIAS_LOG_DIR,ILIAS_LOG_FILE,$ilias->getClientId(),ILIAS_LOG_ENABLED);
141  }
142  }
143  else
144  {
145  $this->log =& $log;
146  }
147 
148  $this->lang_key = $a_lang_key;
149 
150  $this->text = array();
151  $this->loaded_modules = array();
152  //$this->lang_path = ILIAS_ABSOLUTE_PATH.substr($this->ilias->ini->readVariable("language","path"),1);
153 
154  // if no directory was found fall back to default lang dir
155  //if (!is_dir($this->lang_path))
156  //{
157  $this->lang_path = ILIAS_ABSOLUTE_PATH."/lang";
158  //}
159  $this->cust_lang_path = ILIAS_ABSOLUTE_PATH."/Customizing/global/lang";
160 
161  $this->lang_default = $ilIliasIniFile->readVariable("language","default");
162  if (is_object($ilSetting) && $ilSetting->get("language") != "")
163  {
164  $this->lang_default = $ilSetting->get("language");
165  }
166  $this->lang_user = $ilUser->prefs["language"];
167 
168  $langs = $this->getInstalledLanguages();
169 
170  if (!in_array($this->lang_key,$langs))
171  {
172  $this->lang_key = $this->lang_default;
173  }
174 
175  $this->loadLanguageModule("common");
176 
177  return true;
178  }
179 
180  function getLangKey()
181  {
182  return $this->lang_key;
183  }
184 
186  {
187  return $this->lang_default ? $this->lang_default : 'en';
188  }
189 
199  function txtlng($a_module, $a_topic, $a_language)
200  {
201  if (strcmp($a_language, $this->lang_key) == 0)
202  {
203  return $this->txt($a_topic);
204  }
205  else
206  {
207  return ilLanguage::_lookupEntry($a_language, $a_module, $a_topic);
208  }
209  }
210 
219  function txt($a_topic, $a_default_lang_fallback_mod = "")
220  {
221  if (empty($a_topic))
222  {
223  return "";
224  }
225 
226  // remember the used topics
227  $this->used_topics[$a_topic] = $a_topic;
228 
229  $translation = "";
230  if (isset($this->text[$a_topic]))
231  {
232  $translation = $this->text[$a_topic];
233  }
234 
235  if ($translation == "" && $a_default_lang_fallback_mod != "")
236  {
237  $translation = ilLanguage::_lookupEntry($this->lang_default,
238  $a_default_lang_fallback_mod, $a_topic);
239  }
240 
241 
242  if ($translation == "")
243  {
244  if (ILIAS_LOG_ENABLED && is_object($this->log))
245  {
246  $this->log->writeLanguageLog($a_topic,$this->lang_key);
247  }
248  return "-".$a_topic."-";
249  }
250  else
251  {
252  return $translation;
253  }
254  }
255 
261  public function exists($a_topic)
262  {
263  return isset($this->text[$a_topic]);
264  }
265 
266  function loadLanguageModule ($a_module)
267  {
268  global $ilDB;
269 
270  if (in_array($a_module, $this->loaded_modules))
271  {
272  return;
273  }
274 
275  $this->loaded_modules[] = $a_module;
276 
277  // remember the used modules globally
278  $this->used_modules[$a_module] = $a_module;
279 
281 
282  if (empty($this->lang_key))
283  {
285  }
286 
287 /*
288  $query = "SELECT identifier,value FROM lng_data " .
289  "WHERE lang_key = '" . $lang_key."' " .
290  "AND module = '$a_module'";
291  $r = $this->ilias->db->query($query);
292 
293  while ($row = $r->fetchRow(DB_FETCHMODE_OBJECT))
294  {
295  $this->text[$row->identifier] = $row->value;
296  }
297 */
298 
299  $q = "SELECT * FROM lng_modules " .
300  "WHERE lang_key = ".$ilDB->quote($lang_key, "text")." AND module = ".
301  $ilDB->quote($a_module, "text");
302  $r = $ilDB->query($q);
303  $row = $r->fetchRow(DB_FETCHMODE_ASSOC);
304 
305  $new_text = unserialize($row["lang_array"]);
306  if (is_array($new_text))
307  {
308  $this->text = array_merge($this->text, $new_text);
309  }
310  }
311 
312 
314  {
315  include_once("./Services/Object/classes/class.ilObject.php");
316  $langlist = ilObject::_getObjectsByType("lng");
317 
318  foreach ($langlist as $lang)
319  {
320  if (substr($lang["desc"], 0, 9) == "installed")
321  {
322  $languages[] = $lang["title"];
323  }
324 
325  }
326 
327  return $languages ? $languages : array();
328  }
329 
330  function _lookupEntry($a_lang_key, $a_mod, $a_id)
331  {
332  global $ilDB;
333 
334  $set = $ilDB->query($q = sprintf("SELECT * FROM lng_data WHERE module = %s ".
335  "AND lang_key = %s AND identifier = %s",
336  $ilDB->quote((string) $a_mod, "text"), $ilDB->quote((string) $a_lang_key, "text"),
337  $ilDB->quote((string) $a_id, "text")));
338  $rec = $ilDB->fetchAssoc($set);
339 
340  if ($rec["value"] != "")
341  {
342  // remember the used topics
343  $this->used_topics[$a_id] = $a_id;
344  $this->used_modules[$a_mod] = $a_mod;
345 
346  return $rec["value"];
347  }
348 
349  return "-".$a_id."-";
350  }
351 
358  public static function lookupId($a_lang_key)
359  {
360  global $ilDB;
361 
362  $query = 'SELECT obj_id FROM object_data '.' '.
363  'WHERE title = '.$ilDB->quote($a_lang_key, 'text').' '.
364  'AND type = '.$ilDB->quote('lng','text');
365 
366  $res = $ilDB->query($query);
367  while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
368  {
369  return $row->obj_id;
370  }
371  return 0;
372  }
373 
374 
375  function getUsedTopics()
376  {
377  if (is_array($this->used_topics))
378  {
379  asort($this->used_topics);
380  return $this->used_topics;
381  }
382  else
383  {
384  return array();
385  }
386  }
387 
388  function getUsedModules()
389  {
390  if (is_array($this->used_modules))
391  {
392  asort($this->used_modules);
393  return $this->used_modules;
394  }
395  else
396  {
397  return array();
398  }
399  }
400 
401  function getUserLanguage()
402  {
403  return $this->lang_user;
404  }
405 
406 
407 } // END class.Language
408 ?>