/// <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); }
internal static void SetupLocaleCache() { if (_isSetup) { return; } if (_languageToLocaleLookup == null) { _languageToLocaleLookup = new Dictionary <SystemLanguage, LocaleData>(); } else { _languageToLocaleLookup.Clear(); } // Get all LocaleData instances, set them up, and add them to a lookup based on SystemLanguage. var localeData = LocaleTools.GetAllLocaleData(); for (var i = 0; i < localeData.Length; i++) { // Force setup each instance as subsequent play mode test runs and play mode runs in the editor // will not cleanup local non-serialized fields in ScriptableObjects var ld = localeData[i]; ld.Setup(forceSetup: true); for (var j = 0; j < ld.SupportedLanguages.Length; j++) { if (_languageToLocaleLookup.ContainsKey(ld.SupportedLanguages[j])) { Debug.LogWarningFormat(WearableConstants.LOCALE_LANGUAGE_ALREADY_SUPPORTED_FORMAT, ld.name, ld.SupportedLanguages[j], _languageToLocaleLookup[ld.SupportedLanguages[j]].name); continue; } _languageToLocaleLookup.Add(ld.SupportedLanguages[j], ld); } } _isSetup = true; }