<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body smarttemplateinserted="true" text="#000000" bgcolor="#FFFFFF">
    Dear Vtiger Team,<br>
    <br>
    There are a small, minor issues in the translation system of vtiger
    6.<br>
    <br>
    <b>(1) if you will create a Custom module</b> with necessary en_us
    language files still will be missing language keys from the <br>
    /languages/en_us/Vtiger.php<br>
    /languages/en_us/Settings/Vtiger.php<br>
    For example the Custom module has settings page, and defined the
    Links e.g. under Integration menu on the left panel, there will be a
    LABEL e.g. LABEL_CUSTOM_MODULE but not a translated string.<br>
    <br>
    The reason  is:  vtiger translation engine is looking for the string
    in the /languages/en_us/Settings/Vtiger.php file if you are in the <br>
    place <vtiger>/index.php?module=Vtiger&parent=Settings&view=Index<br>
    And the translation engine will not find the translated keys in the
    file /languages/en_us/Settings/Custommodule.php<br>
    <br>
    This issue also valid for the main menu system that uses keys from
    the /languages/en_us/Vtiger.php file.<br>
    <br>
    <b>Bad solution today is:</b> adding manually - after install - the
    missing language keys => value pairs to the
    /languages/en_us/Vtiger.php &
    /languages/en_us/Settings/Vtiger.php .<br>
    But this solution is against the vtiger store policy changing core
    files. (You can see in the /languages/hu_hu/Vtiger.php &
    /languages/hu_hu/Settings/Vtiger.php these added dozens of plus
    keys.)<br>
    <br>
    <b>Suggested solutions:</b> create a vtlib function and a
    /languages/en_us/Common.php &
    /languages/hu_hu/Settings/Common.php files to handle this issue.<br>
    The vtlib function simple will open the Common.php language files
    (for the named language) and will append the provided missing key
    => value pairs to the end of the file (if the provided keys are
    not exist already).<br>
    <br>
    <b>(2) Translation engine issues </b><b>with picklist texts.</b><br>
    Unfortunately the picklist (and multi-select picklist) fields data
    will store in the database in text form and these texts are subject
    of translation.<br>
    The translations are necessary, but there is better storage form
    then text.<br>
    <br>
    For example the vtiger system uses 2 languages (Hungarian and
    English). <br>
    Note: the multi-language usage in Central Europe is very widespread.
    For example my consultant association works in 10 CE countries, and
    our vtiger users from these countries and they use this vtiger
    instance in English, German, Hungarian, Romanian, etc. languages.<br>
    <br>
    So, there is a 2 language vtiger system and there is a picklist with
    words 'big', 'medium', 'small' and in the language file there are
    translation in order 'nagy', 'közepes', 'kicsi'.<br>
    <br>
    If the English user will pick the 1st item, the field will store
    'big' as a content. In multi-select will be stored e.g. 'big |##|
    medium'. The Hungarian user will pick the 1st item the field will
    store 'nagy' as a content. In multi-select will be stored e.g. 'nagy
    |##| közepes'.<br>
    <br>
    And this case will cause <b>IMPOSSIBILITY </b>to search in the
    database.<br>
    <br>
    My suggestion is to store in the database the picklist ID but not
    the picklist label. The picklis ID will be too same using different
    languages.<br>
    For example here is the activitytype picklist.<br>
    <p style="color: rgb(0, 0, 0); font-family: 'Times New Roman';
      font-size: medium; font-style: normal; font-variant: normal;
      font-weight: normal; letter-spacing: normal; line-height: normal;
      orphans: auto; text-align: start; text-indent: 0px;
      text-transform: none; white-space: normal; widows: auto;
      word-spacing: 0px; -webkit-text-stroke-width: 0px;
      background-color: rgb(255, 255, 255);"><strong>SQL lekérdezés:</strong><span
        class="Apple-converted-space"> </span>SELECT * FROM
      `vtiger_activitytype` LIMIT 0, 25 ;<br>
      <strong>Sorok:</strong><span class="Apple-converted-space"> </span>3</p>
    <div id="sqlqueryresults" class="ajax" style="color: rgb(0, 0, 0);
      font-family: 'Times New Roman'; font-size: medium; font-style:
      normal; font-variant: normal; font-weight: normal; letter-spacing:
      normal; line-height: normal; orphans: auto; text-align: start;
      text-indent: 0px; text-transform: none; white-space: normal;
      widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
      background-color: rgb(255, 255, 255);">
      <table id="table_results" class="data ajax" style="color: rgb(0,
        0, 0); border: 0.1em solid rgb(0, 0, 0); border-collapse:
        collapse; border-spacing: 0px; background-color: rgb(255, 255,
        255);">
        <thead><tr>
            <th class="draggable" data-column="activitytypeid"
              style="color: rgb(0, 0, 0); border: 0.1em solid rgb(0, 0,
              0); padding: 0.2em; font-weight: bold; background-color:
              rgb(229, 229, 229);">activitytypeid</th>
            <th class="draggable" data-column="activitytype"
              style="color: rgb(0, 0, 0); border: 0.1em solid rgb(0, 0,
              0); padding: 0.2em; font-weight: bold; background-color:
              rgb(229, 229, 229);">activitytype</th>
            <th class="draggable" data-column="presence" style="color:
              rgb(0, 0, 0); border: 0.1em solid rgb(0, 0, 0); padding:
              0.2em; font-weight: bold; background-color: rgb(229, 229,
              229);">presence</th>
            <th class="draggable" data-column="picklist_valueid"
              style="color: rgb(0, 0, 0); border: 0.1em solid rgb(0, 0,
              0); padding: 0.2em; font-weight: bold; background-color:
              rgb(229, 229, 229);">picklist_valueid</th>
            <th class="draggable" data-column="sortorderid"
              style="color: rgb(0, 0, 0); border: 0.1em solid rgb(0, 0,
              0); padding: 0.2em; font-weight: bold; background-color:
              rgb(229, 229, 229);">sortorderid</th>
          </tr>
        </thead><tbody>
          <tr class="odd">
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">1</td>
            <td data-decimals="0" data-type="string" class="data
              grid_edit click2 not_null " style="color: rgb(0, 0, 0);
              border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              background-color: rgb(255, 255, 255);">Call</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">0</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">12</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 nowrap " style="color: rgb(0, 0, 0);
              border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">0</td>
          </tr>
          <tr class="even">
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">2</td>
            <td data-decimals="0" data-type="string" class="data
              grid_edit click2 not_null " style="color: rgb(0, 0, 0);
              border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              background-color: rgb(255, 255, 255);">Meeting</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">0</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">13</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 nowrap " style="color: rgb(0, 0, 0);
              border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">1</td>
          </tr>
          <tr class="odd">
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">3</td>
            <td data-decimals="0" data-type="string" class="data
              grid_edit click2 not_null " style="color: rgb(0, 0, 0);
              border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              background-color: rgb(255, 255, 255);">Mobile Call</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">0</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 not_null nowrap " style="color: rgb(0, 0,
              0); border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">321</td>
            <td data-decimals="0" data-type="int" class="right data
              grid_edit click2 nowrap " style="color: rgb(0, 0, 0);
              border: 0.1em solid rgb(0, 0, 0); padding: 0.2em;
              white-space: nowrap; background-color: rgb(255, 255,
              255);">1</td>
          </tr>
        </tbody>
      </table>
    </div>
    <br>
    If we will store in the database the activitytypeid as picklist ID,
    it will be too same for every language.<br>
    For the multi-select we can store '1 |##| 2' instead of the confused
    translated or not translated labels from the second column.<br>
    <br>
    Of course these solutions will change the UIType handling engines
    and the search engine also.<br>
    So, the database will contain the indexes (from the 1st column), the
    translating engine will show the labels from the second column or
    labels from the language files.<br>
    <br>
    Kindest regards:<br>
    Istvan<br>
    <br>
    <div class="moz-signature">-- <br>
      üdvözlettel:<br>
      <br>
      <b>Holbok István</b><br>
      <br>
      +3670-342-0900<br>
      <b>e-mail:</b> <a class="moz-txt-link-abbreviated" href="mailto:holbok@gmail.com">holbok@gmail.com</a><br>
      <b>SkyPe:</b> holboki<br>
      <br>
    </div>
  </body>
</html>