Пример #1
0
        // 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);
        }