Fingerprint Pro Internals
Collector s2

Legacy language properties

the pre-standard browserLanguage, userLanguage and systemLanguage properties

Group: Locale and time · signal map · run it live

// s2 — sig_s2_browserLanguage
// module cm, stage3, codes 0
//
// measures
//   navigator.browserLanguage navigator.languages.split(",") navigator.systemLanguage
//   navigator.userLanguage window.MediaSettingsRange window.Reflect window.RTCEncodedAudioFrame
//   navigator.language window.Intl navigator.languages navigator.webkitPersistentStorage
//   navigator.webkitTemporaryStorage
// engine
//   Array.isArray() undefined
// reported value
//   value
// probes
//   "[object Intl]" "[object Reflect]" "string"
// compares against
//   == "[object Intl]" == "[object Reflect]" == "string" === 0 >= 3 >= 5 in "BatteryManager"
//   in "MediaSettingsRange" in "RTCEncodedAudioFrame" in "webkitMediaStream"
//   in "webkitPersistentStorage" in "webkitResolveLocalFileSystemURL" in "webkitSpeechGrammar"
//   in "webkitTemporaryStorage"
// decides on
//   h_s2_browserLanguage: language !== undefined
//   h_s2_browserLanguage: Array.isArray(navigator.languages)
//   h_s2_browserLanguage: !(fn11() && function () { return fn9([!("MediaSettingsRange" in window), "RTCEncodedAudioFrame" in window, "" + window.Intl == "[object Intl]", "" + window.Refl…
//   h_s2_browserLanguage: fn9([!("MediaSettingsRange" in window), "RTCEncodedAudioFrame" in window, "" + window.Intl == "[object Intl]", "" + window.Reflect == "[object Reflect]"]) >= 3
//   h_s2_browserLanguage: typeof navigator.languages == "string"
//   fn129: fn40(arg775)
//   fn129: fn88(v896)
//   fn129: fn88(v897)
//   fn11: fn9(["webkitPersistentStorage" in navigator, "webkitTemporaryStorage" in navigator, (navigator.vendor || "").indexOf("Google") === 0, "webkitResolveLocalFileSys…
//
// 1 owned helper inlined below.
// shared with other collectors, see agent.clean.js:
//   fn11:419 fn129:6642 fn40:1892 fn85:4641 fn88:4712 fn9:252

// agent.clean.js:2259
const h_s2_browserLanguage = function () {
    const v365 = [],
      language =
        navigator.language ||
        navigator.userLanguage ||
        navigator.browserLanguage ||
        navigator.systemLanguage;
    if (language !== undefined) {
      v365.push([language]);
    }
    if (Array.isArray(navigator.languages)) {
      if (!(
        fn11() &&
        (function () {
          return (
            fn9([
              !("MediaSettingsRange" in window),
              "RTCEncodedAudioFrame" in window,
              "" + window.Intl == "[object Intl]",
              "" + window.Reflect == "[object Reflect]",
            ]) >= 3
          );
        })()
      )) {
        v365.push(navigator.languages);
      }
    } else if (typeof navigator.languages == "string") {
      const languages = navigator.languages;
      if (languages) {
        v365.push(languages.split(","));
      }
    }
    return v365;
  };

// agent.clean.js:5990
const sig_s2_browserLanguage = fn85(h_s2_browserLanguage);