code: function (preferredLanguages, availableLanguages) {
  
          var i, language, result, index;
  
          // check whether the list of available languages contains language; if so return it
          function scan(language) {
              var i;
              for (i = 0; i < availableLanguages.length; i += 1) {
                  if (language.toLowerCase() === availableLanguages[i].toLowerCase()) {
                      return availableLanguages[i];
                  }
              }
          }
  
          if (Y.Lang.isString(preferredLanguages)) {
              preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
          }
  
          for (i = 0; i < preferredLanguages.length; i += 1) {
              language = preferredLanguages[i];
              if (!language || language === "*") {
                  continue;
              }
              // check the fallback sequence for one language
              while (language.length > 0) {
                  result = scan(language);
                  if (result) {
                      return result;
                  } else {
                      index = language.lastIndexOf("-");
                      if (index >= 0) {
                          language = language.substring(0, index);
                          // one-character subtags get cut along with the following subtag
                          if (index >= 2 && language.charAt(index - 2) === "-") {
                              language = language.substring(0, index - 2);
                          }
                      } else {
                          // nothing available for this language
                          break;
                      }
                  }
              }
          }
  
          return "";
      }
docs: Returns the language among those available that
  best matches the preferred language list, using the Lookup
  algorithm of BCP 47.
  If none of the available languages meets the user's preferences,
  then "" is returned.
  Extended language ranges are not supported.
  
  @method lookupBestLang
  @param {String[] | String} preferredLanguages The list of preferred languages
  in descending preference order, represented as BCP 47 language
  tags. A string array or a comma-separated list.
  @param {String[]} availableLanguages The list of languages
  that the application supports, represented as BCP 47 language
  tags.
  
  @return {String} The available language that best matches the
  preferred language list, or "".
  @since 3.1.0