function MapboxLanguage(options) {
  options = Object.assign({}, options);
  if (!(this instanceof MapboxLanguage)) {
    throw new Error('MapboxLanguage needs to be called with the new keyword');
  }

  this.setLanguage = this.setLanguage.bind(this);
  this._initialStyleUpdate = this._initialStyleUpdate.bind(this);

  this._defaultLanguage = options.defaultLanguage;
  this._isLanguageField = options.languageField || /^name_/;
  this._getLanguageField = options.getLanguageField || function nameField(language) {
    return language === 'mul' ? 'name' : `name_${language}`;
  };
  this._languageSource = options.languageSource || null;
  this._languageTransform = options.languageTransform;
  this._excludedLayerIds = options.excludedLayerIds || [];
  this.supportedLanguages = options.supportedLanguages || ['ar', 'de', 'en', 'es', 'fr', 'it', 'ja', 'ko', 'mul', 'pt', 'ru', 'vi', 'zh-Hans', 'zh-Hant'];
}
Create a new [Mapbox GL JS plugin](https://www.mapbox.com/blog/build-mapbox-gl-js-plugins/) that
modifies the layers of the map style to use the `text-field` that matches the browser language.
As of Mapbox GL Language v1.0.0, this plugin no longer supports token values (e.g. `{name}`). v1.0+ expects the `text-field`
property of a style to use an [expression](https://docs.mapbox.com/mapbox-gl-js/style-spec/expressions/) of the form `['get', 'name_en']` or `['get', 'name']`; these expressions can be nested. Note that `get` expressions used as inputs to other expressions may not be handled by this plugin. For example:
```
["match",
  ["get", "name"],
  "California",
  "Golden State",
  ["coalesce",
    ["get", "name_en"],
    ["get", "name"]
  ]
]
```
Only styles based on [Mapbox v8 styles](https://docs.mapbox.com/help/troubleshooting/streets-v8-migration-guide/) are supported.

@constructor
@param {object} options - Options to configure the plugin.
@param {string[]} [options.supportedLanguages] - List of supported languages
@param {Function} [options.languageTransform] - Custom style transformation to apply
@param {RegExp} [options.languageField=/^name_/] - RegExp to match if a text-field is a language field
@param {Function} [options.getLanguageField] - Given a language choose the field in the vector tiles
@param {string} [options.languageSource] - Name of the source that contains the different languages.
@param {string} [options.defaultLanguage] - Name of the default language to initialize style after loading.
@param {string[]} [options.excludedLayerIds] - Name of the layers that should be excluded from translation.