2 // +----------------------------------------------------------------------+
 
   3 // | Anuko Time Tracker
 
   4 // +----------------------------------------------------------------------+
 
   5 // | Copyright (c) Anuko International Ltd. (https://www.anuko.com)
 
   6 // +----------------------------------------------------------------------+
 
   7 // | LIBERAL FREEWARE LICENSE: This source code document may be used
 
   8 // | by anyone for any purpose, and freely redistributed alone or in
 
   9 // | combination with other software, provided that the license is obeyed.
 
  11 // | There are only two ways to violate the license:
 
  13 // | 1. To redistribute this code in source form, with the copyright
 
  14 // |    notice or license removed or altered. (Distributing in compiled
 
  15 // |    forms without embedded copyright notices is permitted).
 
  17 // | 2. To redistribute modified versions of this code in *any* form
 
  18 // |    that bears insufficient indications that the modifications are
 
  19 // |    not the work of the original author(s).
 
  21 // | This license applies to this document only, not any other software
 
  22 // | that it may be combined with.
 
  24 // +----------------------------------------------------------------------+
 
  26 // | https://www.anuko.com/time_tracker/credits.htm
 
  27 // +----------------------------------------------------------------------+
 
  30   var $lang = 'en'; // Language for the class.
 
  31   var $defaultLang = 'en'; // English is the default language.
 
  34   var $weekdayShortNames;
 
  36   var $keys = array(); // These are our localized strings.
 
  38   // get - obtains a localized value from $keys array.
 
  41     $pos = strpos($key, '.'); // Keywords can have separating dots such as in form.login.about.
 
  42     if (!($pos === false)) {
 
  43       $words = explode('.', $key);
 
  45       foreach ($words as $word) {
 
  46         $str .= "['".$word."']";
 
  48       eval("\$value = \$this->keys".$str.";");
 
  50       $value = $this->keys[$key];
 
  55   // TODO: refactoring ongoing down from here...
 
  56     function getWeekDayName($id) {
 
  58       return $this->weekdayNames[$id];
 
  61     function load($localName) {
 
  63     $filename = strtolower($localName) . '.lang.php';
 
  64     $inc_filename = RESOURCE_DIR . '/' . $this->defaultLang . '.lang.php';
 
  66     if (file_exists($inc_filename)) {
 
  67       include($inc_filename);
 
  69       $this->monthNames = $i18n_months;
 
  70       $this->weekdayNames = $i18n_weekdays;
 
  72         $this->weekdayShortNames = $i18n_weekdays_short;
 
  73         $this->holidays = $i18n_holidays;
 
  75       foreach ($i18n_key_words as $kword=>$value) {
 
  76         $pos = strpos($kword, ".");
 
  77         if (!($pos === false)) {
 
  78           $p = explode(".", $kword);
 
  81             $str .= "[\"".$w."\"]";
 
  83           eval("\$this->keys".$str."='".$value."';");
 
  85           $this->keys[$kword] = $value;
 
  90     $inc_filename = RESOURCE_DIR . '/' . $filename;
 
  91     if (file_exists($inc_filename) && ($localName != $this->defaultLang)) {
 
  92       require($inc_filename);
 
  94       $this->lang = $localName;
 
  95       $this->monthNames = $i18n_months;
 
  96       $this->weekdayNames = $i18n_weekdays;
 
  97         $this->weekdayShortNames = $i18n_weekdays_short;
 
  98         $this->holidays = $i18n_holidays;
 
  99       foreach ($i18n_key_words as $kword=>$value) {
 
 100         if (!$value) continue;
 
 101         $pos = strpos($kword, ".");
 
 102         if (!($pos === false)) {
 
 103           $p = explode(".", $kword);
 
 106              $str .= "[\"".$w."\"]";
 
 108           eval("\$this->keys".$str."='".$value."';");
 
 110           $this->keys[$kword] = $value;
 
 117   function hasLang($lang)
 
 119     $filename = RESOURCE_DIR . '/' . strtolower($lang) . '.lang.php';
 
 120     return file_exists($filename);
 
 123   // getBrowserLanguage() returns a first supported language from browser settings.
 
 124   function getBrowserLanguage()
 
 126     $acclang = @$_SERVER['HTTP_ACCEPT_LANGUAGE'];
 
 127     if (empty($acclang)) {
 
 130     $lang_prefs = explode(',', $acclang);
 
 131     foreach ($lang_prefs as $lang_pref) {
 
 132       $lang_pref_parts = explode(';', trim($lang_pref));
 
 133       $lang = $lang_pref_parts[0];
 
 134       if ($this->hasLang($lang)) {
 
 135         return $lang; // Return full language designation (if available), such as pt-BR.
 
 138       if (strlen($lang) <= 2)
 
 139         continue; // Do not bother determining main language because we already have it.
 
 141       $lang_parts = explode('-', trim($lang));
 
 142       $lang_main = $lang_parts[0];
 
 143       if ($lang_main != $lang && $this->hasLang($lang_main)) {
 
 144         return $lang_main; // Return main language designation, such as pt.
 
 150   // getLangFileList() returns a list of language files.
 
 151   static function getLangFileList() {
 
 153     $d = @opendir(RESOURCE_DIR);
 
 154     while (($file = @readdir($d))) {
 
 155       if (($file != ".") && ($file != "..")) {
 
 156         if (strpos($file, ".lang.php")) {
 
 157           $fileList[] = @basename($file);
 
 165   static function getLangFromFilename($filename)
 
 167     return substr($filename, 0, strpos($filename, '.'));