首页 > 解决方案 > 为运行时语言更改 WPF 加载所有可用的附属程序集

问题描述

我尝试获取可用文化信息的列表,将它们添加到组合框并在运行时更改语言。我的实现在不同的环境下表现不同。有一些 PC 可以按预期工作,所有附属程序集都可以识别,但在其他 PC 上,相同的应用程序无法识别可用语言,只能识别默认语言(英语)。

这是我尝试查找可用资源的代码:

public static IEnumerable<CultureInfo> GetAvailableCultures()
    {
        List<CultureInfo> result = new List<CultureInfo>();

        ResourceManager rm = new ResourceManager(typeof(PresentationResources));

        CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
        foreach (CultureInfo culture in cultures)
        {
            try
            {
                if (culture.Equals(CultureInfo.InvariantCulture))
                {
                    continue;
                }

                ResourceSet rs = rm.GetResourceSet(culture, true, false);
                if (rs != null)
                {
                    result.Add(culture);
                }
            }
            catch (CultureNotFoundException)
            {
                //NOP
            }
        }

        return result;
    }

还有来自我尝试更改语言的xaml的代码:

         <ComboBox Name="LanguageComboBox"
                      SelectedIndex="{Binding SelectedLanguageIndex}"
                      ItemsSource="{Binding AvailableLanguages}"
                      DisplayMemberPath="NativeName"
                      SelectedItem="{Binding Source={x:Static lex:LocalizeDictionary.Instance}, 
                                             Path=Culture}"
                      SelectionChanged="LanguageComboBox_OnSelectionChanged">
                    </ComboBox>

我真的不明白为什么在某些环境中完全相同的应用程序可以按预期工作,而在其他环境中则不能。

标签: c#.netwpf

解决方案


推荐阅读