docs: @Override
    public final void handle(final Map<String, Object> pReqVars,
      final IRequestData pRequestData) throws Exception {
      List<LangPreferences> lpfsTmp;
      List<Languages> lgsTmp;
      List<DecimalSeparator> dssTmp;
      List<DecimalGroupSeparator> dgssTmp;
      boolean isFirstReq = false;
      synchronized (this) {
        if (this.langPreferences == null) {
          try {
            isFirstReq = true;
            this.logger.info(null, HndlI18nRequest.class,
              "Refreshing I18N data...");
            this.srvDatabase.setIsAutocommit(false);
            this.srvDatabase.setTransactionIsolation(ISrvDatabase
              .TRANSACTION_READ_UNCOMMITTED);
            this.srvDatabase.beginTransaction();
            List<LangPreferences> lpfs = this.srvOrm.retrieveList(pReqVars,
              LangPreferences.class);
            List<Languages> lgs = this.srvOrm.retrieveList(pReqVars,
              Languages.class);
            List<DecimalSeparator> dss = this.srvOrm.retrieveList(pReqVars,
              DecimalSeparator.class);
            List<DecimalGroupSeparator> dgss = this.srvOrm.retrieveList(
              pReqVars, DecimalGroupSeparator.class);
            this.srvDatabase.commitTransaction();
            //assigning fully initialized data:
            this.decGrSeps = dgss;
            this.decSeps = dss;
            this.languages = lgs;
            this.langPreferences = lpfs;
          } catch (Exception ex) {
            if (!this.srvDatabase.getIsAutocommit()) {
              this.srvDatabase.rollBackTransaction();
            }
            throw ex;
          } finally {
            this.srvDatabase.releaseResources();
          }
        }
        lpfsTmp = this.langPreferences;
        lgsTmp = this.languages;
        dssTmp = this.decSeps;
        dgssTmp = this.decGrSeps;
      }
      LangPreferences lpf = revealLangPreferences(pRequestData, lgsTmp,
        dssTmp, dgssTmp, lpfsTmp, isFirstReq);
      String langDef = null;
      for (LangPreferences lpft : lpfsTmp) {
        if (lpft.getIsDefault()) {
          langDef = lpft.getLang().getItsId();
          break;
        }
      }
      if (lpfsTmp.size() == 0 || langDef == null) {
        this.logger.error(null, HndlI18nRequest.class,
          "There is no default languages preferences!");
        //I18N service is soft coded, so it will be at least braced messages
        //like [Ok]
        pReqVars.put("lang", "en");
        pReqVars.put("langDef", "en");
        pReqVars.put("localeCurr", new Locale("en", "US"));
        pReqVars.put("decSep", ".");
        pReqVars.put("decGrSep", ",");
        pReqVars.put("digInGr", 3);
        return;
      }
      pReqVars.put("lang", lpf.getLang().getItsId());
      pReqVars.put("langDef", langDef);
      Locale locCurr;
      if (pRequestData.getLocale().getLanguage()
        .equals(lpf.getLang().getItsId())) {
        locCurr = pRequestData.getLocale();
      } else {
        locCurr = new Locale(lpf.getLang().getItsId());
      }
      pReqVars.put("localeCurr", locCurr);
      pReqVars.put("decSep", lpf.getDecimalSep().getItsId());
      pReqVars.put("digInGr", lpf.getDigitsInGroup());
      String decSepv = lpf.getDecimalSep().getItsId();
      if ("space".equals(decSepv)) {
        decSepv = "\u00A0";
      }
      pReqVars.put("decSepv", decSepv);
      pReqVars.put("decGrSep", lpf.getDecimalGroupSep()
        .getItsId());
      String decGrSepv = lpf.getDecimalGroupSep().getItsId();
      if ("space".equals(decGrSepv)) {
        decGrSepv = "\u00A0";
      }
      pReqVars.put("decGrSepv", decGrSepv);
      pReqVars.put("languages", lgsTmp);
      pReqVars.put("decSeps", dssTmp);
      pReqVars.put("decGrSeps", dgssTmp);
      if (this.additionalI18nReqHndl != null) {
        this.additionalI18nReqHndl.handle(pReqVars, pRequestData);
      } else {
        pReqVars.put("quantityDp", Integer.valueOf(2));
        pReqVars.put("priceDp", Integer.valueOf(2));
        pReqVars.put("costDp", Integer.valueOf(2));
      }
    }