]> wagnertech.de Git - timetracker.git/blobdiff - WEB-INF/lib/I18n.class.php
Initial repo created
[timetracker.git] / WEB-INF / lib / I18n.class.php
diff --git a/WEB-INF/lib/I18n.class.php b/WEB-INF/lib/I18n.class.php
new file mode 100644 (file)
index 0000000..96c3743
--- /dev/null
@@ -0,0 +1,167 @@
+<?php
+// +----------------------------------------------------------------------+
+// | Anuko Time Tracker
+// +----------------------------------------------------------------------+
+// | Copyright (c) Anuko International Ltd. (https://www.anuko.com)
+// +----------------------------------------------------------------------+
+// | LIBERAL FREEWARE LICENSE: This source code document may be used
+// | by anyone for any purpose, and freely redistributed alone or in
+// | combination with other software, provided that the license is obeyed.
+// |
+// | There are only two ways to violate the license:
+// |
+// | 1. To redistribute this code in source form, with the copyright
+// |    notice or license removed or altered. (Distributing in compiled
+// |    forms without embedded copyright notices is permitted).
+// |
+// | 2. To redistribute modified versions of this code in *any* form
+// |    that bears insufficient indications that the modifications are
+// |    not the work of the original author(s).
+// |
+// | This license applies to this document only, not any other software
+// | that it may be combined with.
+// |
+// +----------------------------------------------------------------------+
+// | Contributors:
+// | https://www.anuko.com/time_tracker/credits.htm
+// +----------------------------------------------------------------------+
+
+class I18n {
+  var $lang = 'en'; // Language for the class.
+  var $defaultLang = 'en'; // English is the default language.
+  var $monthNames;
+  var $weekdayNames;
+  var $weekdayShortNames;
+  var $holidays;
+  var $keys = array(); // These are our localized strings.
+
+  // The getKey obtains localized keyword value.
+  function getKey($kword) {
+    $value = '';
+    $pos = strpos($kword, '.'); // Keywords can have separating dots such as in form.login.about.
+    if (!($pos === false)) {
+      $words = explode('.', $kword);
+      $str = '';
+      foreach ($words as $word) {
+        $str .= "['".$word."']";
+      }
+      eval("\$value = \$this->keys".$str.";");
+    } else {
+      $value = $this->keys[$kword];
+    }
+    return $value;
+  }
+
+  // TODO: refactoring ongoing down from here...
+    function getWeekDayName($id) {
+      $id = intval($id);
+      return $this->weekdayNames[$id];
+    }
+
+    function load($localName) {
+    $kw = array();
+    $filename = strtolower($localName) . '.lang.php';
+    $inc_filename = RESOURCE_DIR . '/' . $this->defaultLang . '.lang.php';
+
+    if (file_exists($inc_filename)) {
+      include($inc_filename);
+
+      $this->monthNames = $i18n_months;
+      $this->weekdayNames = $i18n_weekdays;
+        
+        $this->weekdayShortNames = $i18n_weekdays_short;
+      if (defined('SHOW_HOLIDAYS') && isTrue(SHOW_HOLIDAYS)) {
+        $this->holidays = $i18n_holidays;
+      }
+    
+      foreach ($i18n_key_words as $kword=>$value) {
+         $pos = strpos($kword, ".");
+         if (!($pos === false)) {
+                   $p = explode(".", $kword);
+                   $str = "";
+                   foreach ($p as $w) {
+                       $str .= "[\"".$w."\"]";
+                   }
+                   //$value = addslashes($value);
+                   eval("\$this->keys".$str."='".$value."';");
+               } else {
+                   $this->keys[$kword] = $value;
+               }
+      }
+    }
+
+    $inc_filename = RESOURCE_DIR . '/' . $filename;
+    if (file_exists($inc_filename) && ($localName != $this->defaultLang)) {
+      require($inc_filename);
+
+      $this->lang = $localName;
+      $this->monthNames = $i18n_months;
+      $this->weekdayNames = $i18n_weekdays;
+        $this->weekdayShortNames = $i18n_weekdays_short;
+      if (defined('SHOW_HOLIDAYS') && isTrue(SHOW_HOLIDAYS)) {
+        $this->holidays = $i18n_holidays;
+      }
+      foreach ($i18n_key_words as $kword=>$value) {
+         if (!$value) continue;
+         $pos = strpos($kword, ".");
+         if (!($pos === false)) {
+                   $p = explode(".", $kword);
+                   $str = "";
+                   foreach ($p as $w) {
+                       $str .= "[\"".$w."\"]";
+                   }
+                   //$value = addslashes($value);
+                   eval("\$this->keys".$str."='".$value."';");
+               } else {
+                   $this->keys[$kword] = $value;
+               }
+      }
+        return true;
+    }
+  }
+
+  function hasLang($lang)
+  {
+    $filename = RESOURCE_DIR . '/' . strtolower($lang) . '.lang.php';
+    return file_exists($filename);
+  }
+
+  function getBrowserLanguage()
+  {
+    $acclang = @$_SERVER['HTTP_ACCEPT_LANGUAGE'];
+    if (empty($acclang)) {
+      return "";
+    }
+    $lang_prefs = explode(',', $acclang);
+    foreach ($lang_prefs as $lang_pref) {
+      $lang_pref_parts = explode(';', trim($lang_pref));
+      $lang_parts = explode('-', trim($lang_pref_parts[0]));
+      $lang_main = $lang_parts[0];
+      if ($this->hasLang($lang_main)) {
+        return $lang_main;
+      }
+    }
+    return "";
+  }
+
+  // getLangFileList() returns a list of language files.
+  static function getLangFileList() {
+    $fileList = array();
+    $d = @opendir(RESOURCE_DIR);
+    while (($file = @readdir($d))) {
+      if (($file != ".") && ($file != "..")) {
+               if (strpos($file, ".lang.php")) {
+                 $fileList[] = @basename($file);
+               }
+      }
+    }
+    @closedir($d);
+    return $fileList;
+  }
+   
+  static function getLangFromFilename($filename)
+  {
+    return substr($filename, 0, strpos($filename, '.'));
+  }
+}
+?>
\ No newline at end of file