/**
  * Return translation. Select language or default based on getTxtId(). 
  * If Text is not translated return untranslated(). If text has changed
  * remove translation in database. Text $txt must be static otherwise use tok_ptxt(). 
  * Examples:
  *
  * - {txt:}Hallo {get:firstname} {get:lastname}{:txt} -> invalid !!
  * - {txt:}Hallo{:txt} -> id = md5('Hallo')
  * - {txt:hi}Hallo{:txt} -> id = hi
  * - {txt:}=hi{:txt} -> id = hi 
  *
  * @throws
  * @see getTxtId
  * @see untranslated
  * @see tok_ptxt
  * @param string $param custom id or empty
  * @param string $txt default text or empty
  * @return string
  */
 public function tok_txt($param, $txt)
 {
     $id = $this->getTxtId($param, $txt);
     if (($trans = $this->db->query('select', ['id' => $id], -1)) === false) {
         // no translation - insert untranslated text and return raw
         $this->db->query('insert:exec', ['id' => $id, 'txt' => $txt]);
         return $this->untranslated('txt', $param, $txt);
     }
     if ($trans['txt'] !== $txt) {
         // text has changed: remove translation, insert untranslated text and return raw
         $this->db->query('delete:exec', ['id' => $id]);
         $this->db->query('insert:exec', ['id' => $id, 'txt' => $txt]);
         return $this->untranslated('txt', $param, $txt);
     }
     $res = $trans['lang'];
     if (empty($res)) {
         $res = empty($trans['default']) ? $this->untranslated('txt', $param, $txt) : $trans['default'];
     }
     return $res;
 }