/// <summary>
        /// Returns true if a locale key/value pair was found for the preferred system language and key value,
        /// otherwise false. If the preferred system language isn't supported, the fallback language will be
        /// used instead.
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool HasLocaleKey(string key)
        {
            var systemLanguage = GetPreferredSystemLanguage();

            if (!IsSupportedSystemLanguage(systemLanguage))
            {
                systemLanguage = LocaleTools.GetFallbackSystemLanguage();
            }

            return(HasLocaleKey(systemLanguage, key));
        }
        /// <summary>
        /// Returns true if a locale value was found for <paramref name="key"/> for <paramref name="systemLanguage"/>
        /// language or fallback language, otherwise false. If true, <paramref name="value"/> will be populated
        /// with the found value.
        /// </summary>
        /// <param name="systemLanguage"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool TryGetLocaleValue(SystemLanguage systemLanguage, string key, out string value)
        {
            value = string.Empty;

            LocaleData localeData;

            if (!LanguageToLocaleLookup.TryGetValue(systemLanguage, out localeData))
            {
                var fallbackLanguage = LocaleTools.GetFallbackSystemLanguage();
                localeData = LanguageToLocaleLookup[fallbackLanguage];
            }

            return(localeData.TryGetLocaleValue(key, out value));
        }
        /// <summary>
        /// Returns the preferred <see cref="SystemLanguage"/> if found, or the OS-set value if a preferred
        /// value isn't set and it's supported, or a fallback language if not supported.
        /// </summary>
        /// <returns></returns>
        public static SystemLanguage GetPreferredSystemLanguage()
        {
            // If the user/developer has set a preference for a different Bose AR system language, use that
            // instead. Otherwise return the OS-set system language.
            if (PlayerPrefs.HasKey(WearableConstants.PREF_PREFERRED_SYSTEM_LANGUAGE))
            {
                return((SystemLanguage)PlayerPrefs.GetInt(WearableConstants.PREF_PREFERRED_SYSTEM_LANGUAGE));
            }

            var systemLanguage = Application.systemLanguage;

            if (!IsSupportedSystemLanguage(systemLanguage))
            {
                systemLanguage = LocaleTools.GetFallbackSystemLanguage();
            }

            return(systemLanguage);
        }