ILIAS  eassessment Revision 61809
 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  {
125  global $ilias,$log,$ilIliasIniFile,$ilUser,$ilSetting;
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  $langlist = ilObject::_getObjectsByType("lng");
316 
317  foreach ($langlist as $lang)
318  {
319  if (substr($lang["desc"], 0, 9) == "installed")
320  {
321  $languages[] = $lang["title"];
322  }
323 
324  }
325 
326  return $languages ? $languages : array();
327  }
328 
329  function _lookupEntry($a_lang_key, $a_mod, $a_id)
330  {
331  global $ilDB;
332 
333  $set = $ilDB->query($q = sprintf("SELECT * FROM lng_data WHERE module = %s ".
334  "AND lang_key = %s AND identifier = %s",
335  $ilDB->quote((string) $a_mod, "text"), $ilDB->quote((string) $a_lang_key, "text"),
336  $ilDB->quote((string) $a_id, "text")));
337  $rec = $ilDB->fetchAssoc($set);
338 
339  if ($rec["value"] != "")
340  {
341  // remember the used topics
342  $this->used_topics[$a_id] = $a_id;
343  $this->used_modules[$a_mod] = $a_mod;
344 
345  return $rec["value"];
346  }
347 
348  return "-".$a_id."-";
349  }
350 
351  function getUsedTopics()
352  {
353  if (is_array($this->used_topics))
354  {
355  asort($this->used_topics);
356  return $this->used_topics;
357  }
358  else
359  {
360  return array();
361  }
362  }
363 
364  function getUsedModules()
365  {
366  if (is_array($this->used_modules))
367  {
368  asort($this->used_modules);
369  return $this->used_modules;
370  }
371  else
372  {
373  return array();
374  }
375  }
376 
377  function getUserLanguage()
378  {
379  return $this->lang_user;
380  }
381 
382 
383 } // END class.Language
384 ?>