getIntlLabel = ({ intl, fieldName, collectionName, schema, isDescription }, values) => {
  if (!fieldName) {
    throw new Error('fieldName option passed to formatLabel cannot be empty or undefined');
  }

  // if this is a description, just add .description at the end of the intl key
  const suffix = isDescription ? '.description' : '';

  const intlKeys = getIntlKeys({ fieldName, collectionName, schema });

  let intlLabel;

  for (const intlKey of intlKeys) {
    const intlString = intl.formatMessage({ id: intlKey + suffix }, values);

    if (intlString !== '') {
      intlLabel = intlString;
      break;
    }
  }
  return intlLabel;
}
getIntlLabel - Get a label for a field, for a given collection, in the current language.
The evaluation is as follows :
i18n(intlId) >
i18n(collectionName.fieldName) >
i18n(global.fieldName) >
i18n(fieldName)

@param  {object} params
@param  {object} params.intl               An intlShape object obtained from the react context for example
@param  {string} params.fieldName          The name of the field to evaluate (required)
@param  {string} params.collectionName     The name of the collection the field belongs to
@param  {object} params.schema             The schema of the collection
@param  {object} values                    The values to pass to format the i18n string
@return {string}                           The translated label