code: public static function decodeLangArray($varValue, IMetaModel $objMetaModel)
      {
          $arrLangValues = StringUtil::deserialize($varValue);
          if (!$objMetaModel->isTranslated()) {
              // If we have an array, return the first value and exit, if not an array, return the value itself.
              return is_array($arrLangValues)
                  ? serialize($arrLangValues[key($arrLangValues)])
                  : serialize($arrLangValues);
          }
  
          // Sort like in MetaModel definition.
          $arrLanguages = $objMetaModel->getAvailableLanguages();
          $arrOutput    = array();
  
          if ($arrLanguages) {
              foreach ($arrLanguages as $strLangCode) {
                  if (is_array($arrLangValues)) {
                      $varSubValue = $arrLangValues[$strLangCode];
                  } else {
                      $varSubValue = $arrLangValues;
                  }
  
                  if (is_array($varSubValue)) {
                      $arrOutput[] = array_merge($varSubValue, array('langcode' => $strLangCode));
                  } else {
                      $arrOutput[] = array('langcode' => $strLangCode, 'value' => $varSubValue);
                  }
              }
          }
          return serialize($arrOutput);
      }
docs: Decode a language array.
  
  @param array|string $varValue     The value to decode.
  
  @param IMetaModel   $objMetaModel The MetaModel holding the languages.
  
  @return string