* @copyright Copyright (C) 2025 Uwe Steinmann * @version Release: @package_version@ */ namespace Seeddms\Seeddms; use SeedDMS_Core_AttributeDefinition; /** * Class for translation and language handling * * @category DMS * @package SeedDMS * @author Uwe Steinmann * @copyright Copyright (C) 2025 Uwe Steinmann * @version Release: @package_version@ */ class Translator { /* {{{ */ protected $settings; protected $defaultlang; protected $lang; protected $missinglang; /** * Constructor * * @param string $settings SeedDMS configuration */ function __construct($settings=null) { /* {{{ */ $this->settings = $settings; $this->defaultlang = ''; $this->lang = array(); $this->missinglang = array(); } /* }}} */ function setDefaultLanguage($lang) { /* {{{ */ $this->defaultlang = $lang; } /* }}} */ public function init() { /* {{{ */ $__languages = $this->settings->getLanguages(); if(!in_array($this->settings->_language, $__languages)) $__languages[] = $this->settings->_language; foreach($__languages as $_lang) { if(file_exists($this->settings->_rootDir . "languages/" . $_lang . "/lang.inc")) { include $this->settings->_rootDir . "languages/" . $_lang . "/lang.inc"; $this->lang[$_lang] = $text; } } } /* }}} */ function addPhrases($lang, &$data) { /* {{{ */ if(isset($this->lang[$lang])) $this->lang[$lang] = array_merge($this->lang[$lang], $data); else $this->lang[$lang] = $data; } /* }}} */ /** * Get translation * * Returns the translation for a given key. It will replace markers * in the form [xxx] with those elements from the array $replace. * A default text can be gіven for the case, that there is no translation * available. The fourth parameter can override the currently set language * in the session or the default language from the configuration. * * @param string $key key of translation text * @param array $replace list of values that replace markers in the text * @param string $defaulttext text used if no translation can be found * @param string $lang use this language instead of the currently set lang */ function translate($key, $replace = array(), $defaulttext = null, $lang="") { /* {{{ */ $trantext = ''; if(!$lang) { if($this->defaultlang) $lang = $this->defaultlang; else $lang = $this->settings->_language; } if(!isset($this->lang[$lang][$key]) || !$this->lang[$lang][$key]) { if ($defaulttext === null) { $this->missinglang[$key] = $lang; //$_SERVER['SCRIPT_NAME']; if(!empty($this->lang[$this->settings->_language][$key])) { $tmpText = $this->lang[$this->settings->_language][$key]; } else { $tmpText = '**'.$key.'**'; } } else $tmpText = $defaulttext; } else $tmpText = $this->lang[$lang][$key]; if (count($replace) == 0) return $tmpText.$trantext; $keys = array_keys($replace); foreach ($keys as $key) $tmpText = str_replace("[".$key."]", $replace[$key], $tmpText); return $tmpText; } /* }}} */ function print($key, $replace = array(), $defaulttext = null, $lang="") { /* {{{ */ print $this->translate($key, $replace, $defaulttext, $lang); } /* }}} */ function printReviewStatusText($status, $date=0) { /* {{{ */ if (is_null($status)) { print $this->translate("status_unknown"); } else { switch ($status) { case -2: print $this->translate("status_reviewer_removed"); break; case -1: print $this->translate("status_reviewer_rejected").($date !=0 ? " ".$date : ""); break; case 0: print $this->translate("status_not_reviewed"); break; case 1: print $this->translate("status_reviewed").($date !=0 ? " ".$date : ""); break; default: print $this->translate("status_unknown"); break; } } } /* }}} */ function getReviewStatusText($status, $date=0) { /* {{{ */ if (is_null($status)) { return $this->translate("status_unknown"); } else { switch ($status) { case -2: return $this->translate("status_reviewer_removed"); break; case -1: return $this->translate("status_reviewer_rejected").($date !=0 ? " ".$date : ""); break; case 0: return $this->translate("status_not_reviewed"); break; case 1: return $this->translate("status_reviewed").($date !=0 ? " ".$date : ""); break; default: return $this->translate("status_unknown"); break; } } } /* }}} */ function printApprovalStatusText($status, $date=0) { /* {{{ */ if (is_null($status)) { print $this->translate("status_unknown"); } else { switch ($status) { case -2: print $this->translate("status_approver_removed"); break; case -1: print $this->translate("status_approval_rejected").($date !=0 ? " ".$date : ""); break; case 0: print $this->translate("status_not_approved"); break; case 1: print $this->translate("status_approved").($date !=0 ? " ".$date : ""); break; default: print $this->translate("status_unknown"); break; } } } /* }}} */ function getApprovalStatusText($status, $date=0) { /* {{{ */ if (is_null($status)) { return $this->translate("status_unknown"); } else { switch ($status) { case -2: return $this->translate("status_approver_removed"); break; case -1: return $this->translate("status_approval_rejected").($date !=0 ? " ".$date : ""); break; case 0: return $this->translate("status_not_approved"); break; case 1: return $this->translate("status_approved").($date !=0 ? " ".$date : ""); break; default: return $this->translate("status_unknown"); break; } } } /* }}} */ function printOverallStatusText($status) { /* {{{ */ print getOverallStatusText($status); } /* }}} */ function getOverallStatusText($status) { /* {{{ */ if (is_null($status)) { return $this->translate("assumed_released"); } else { switch($status) { case S_IN_WORKFLOW: return $this->translate("in_workflow"); break; case S_DRAFT_REV: return $this->translate("draft_pending_review"); break; case S_DRAFT_APP: return $this->translate("draft_pending_approval"); break; case S_RELEASED: return $this->translate("released"); break; case S_REJECTED: return $this->translate("rejected"); break; case S_OBSOLETE: return $this->translate("obsolete"); break; case S_EXPIRED: return $this->translate("expired"); break; default: return $this->translate("status_unknown"); break; } } } /* }}} */ function getAttributeTypeText($attrdef) { /* {{{ */ $t = ''; switch($attrdef->getType()) { case SeedDMS_Core_AttributeDefinition::type_int: $t = $this->translate("attrdef_type_int"); break; case SeedDMS_Core_AttributeDefinition::type_float: $t = $this->translate("attrdef_type_float"); break; case SeedDMS_Core_AttributeDefinition::type_string: $t = $this->translate("attrdef_type_string"); break; case SeedDMS_Core_AttributeDefinition::type_boolean: $t = $this->translate("attrdef_type_boolean"); break; case SeedDMS_Core_AttributeDefinition::type_date: $t = $this->translate("attrdef_type_date"); break; case SeedDMS_Core_AttributeDefinition::type_email: $t = $this->translate("attrdef_type_email"); break; case SeedDMS_Core_AttributeDefinition::type_url: $t = $this->translate("attrdef_type_url"); break; case SeedDMS_Core_AttributeDefinition::type_boolean: $t = $this->translate("attrdef_type_boolean"); break; case SeedDMS_Core_AttributeDefinition::type_folder: $t = $this->translate("attrdef_type_folder"); break; case SeedDMS_Core_AttributeDefinition::type_document: $t = $this->translate("attrdef_type_document"); break; case SeedDMS_Core_AttributeDefinition::type_user: $t = $this->translate("attrdef_type_user"); break; case SeedDMS_Core_AttributeDefinition::type_group: $t = $this->translate("attrdef_type_group"); break; } return $t; } /* }}} */ function getAttributeObjectTypeText($attrdef) { /* {{{ */ $ot = ''; switch($attrdef->getObjType()) { case SeedDMS_Core_AttributeDefinition::objtype_all: $ot = $this->translate("all"); break; case SeedDMS_Core_AttributeDefinition::objtype_folder: $ot = $this->translate("folder"); break; case SeedDMS_Core_AttributeDefinition::objtype_document: $ot = $this->translate("document"); break; case SeedDMS_Core_AttributeDefinition::objtype_documentcontent: $ot = $this->translate("documentcontent"); break; default: $ot = $this->translate('objtype_unknown'); } return $ot; } /* }}} */ function getAttributeValidationText($error, $attrname='', $attrvalue='', $regex='') { /* {{{ */ $arr = getAttributeValidationError($error, $attrname, $attrvalue, $regex); return $this->translate($arr[0], $arr[1]); } /* }}} */ function getAttributeValidationError($error, $attrname='', $attrvalue='', $regex='') { /* {{{ */ if(is_object($attrvalue)) $attrvalue = $attrvalue->getId(); switch($error) { case 14: return array("attr_not_in_valueset", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 13: return array("attr_not_a_group", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 12: return array("attr_not_a_user", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 11: return array("attr_not_a_folder", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 10: return array("attr_not_a_document", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 9: return array("attr_malformed_date", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 8: return array("attr_malformed_boolean", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 7: return array("attr_malformed_float", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 6: return array("attr_malformed_int", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 5: return array("attr_malformed_email", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 4: return array("attr_malformed_url", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 3: return array("attr_no_regex_match", array('attrname'=>$attrname, 'value'=>$attrvalue, 'regex'=>$regex)); break; case 2: return array("attr_max_values", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; case 1: return array("attr_min_values", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; default: return array("attr_validation_error", array('attrname'=>$attrname, 'value'=>$attrvalue)); break; } } /* }}} */ } /* }}} */