// Returns the CultureInfo representing the first language in the list that we can construct a CultureInfo for or null if // no such culture exists. private static unsafe CultureInfo GetBestFitCultureFromLanguageList(List <string> languages) { char *localeNameBuffer = stackalloc char[Interop.Kernel32.LOCALE_NAME_MAX_LENGTH]; // LOCALE_NAME_MAX_LENGTH includes null terminator for (int i = 0; i < languages.Count; i++) { if (WindowsRuntimeResourceManagerBase.IsValidCulture(languages[i])) { return(new CultureInfo(languages[i])); } int result = Interop.Kernel32.ResolveLocaleName(languages[i], localeNameBuffer, Interop.Kernel32.LOCALE_NAME_MAX_LENGTH); if (result != 0) { string localeName = new string(localeNameBuffer, 0, result - 1); // result length includes null terminator if (WindowsRuntimeResourceManagerBase.IsValidCulture(localeName)) { return(new CultureInfo(localeName)); } } } return(null); }
// Returns the CultureInfo representing the first language in the list that we can construct a CultureInfo for or null if // no such culture exists. private static CultureInfo GetBestFitCultureFromLanguageList(List <string> languages) { StringBuilder localeNameBuffer = new StringBuilder(Interop.Kernel32.LOCALE_NAME_MAX_LENGTH); for (int i = 0; i < languages.Count; i++) { if (WindowsRuntimeResourceManagerBase.IsValidCulture(languages[i])) { return(new CultureInfo(languages[i])); } if (Interop.Kernel32.ResolveLocaleName(languages[i], localeNameBuffer, localeNameBuffer.MaxCapacity) != 0) { string localeName = localeNameBuffer.ToString(); if (WindowsRuntimeResourceManagerBase.IsValidCulture(localeName)) { return(new CultureInfo(localeName)); } } } return(null); }