C# 设置CurrentUICulture,使其使用Resources.resx

C# 设置CurrentUICulture,使其使用Resources.resx,c#,wpf,localization,C#,Wpf,Localization,我正在一个小测试WPF应用程序中进行本地化工作,希望有英语和法语。我创建了Resources.en-CA.resx和Resources.fr-CA.resx 当我的测试应用程序启动时,我有一个启动窗口,其中有一个下拉列表,可以选择英语或法语。当用户单击OK时,将调用一个方法来根据所选语言切换区域性,然后加载另一个窗口,该窗口将显示所选语言中的一些资源字符串 switch (selectedLanguage) { case "English": Thread.Current

我正在一个小测试WPF应用程序中进行本地化工作,希望有英语和法语。我创建了Resources.en-CA.resx和Resources.fr-CA.resx

当我的测试应用程序启动时,我有一个启动窗口,其中有一个下拉列表,可以选择英语或法语。当用户单击OK时,将调用一个方法来根据所选语言切换区域性,然后加载另一个窗口,该窗口将显示所选语言中的一些资源字符串

switch (selectedLanguage)
{
    case "English":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-CA");
        break;

    case "French":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");
        break;
}
用户可以关闭然后关闭此窗口,从“启动”窗口中选择其他语言,然后单击“确定”再次显示该窗口,但使用他们选择的新语言

switch (selectedLanguage)
{
    case "English":
        //What would I do here?
        break;

    case "French":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");
        break;
}
这是可行的,但我还有一个Resources.resx,它基本上只是Resources.en-CA.resx的副本。我想知道是否可以删除Resources.en-CA.resx,如果可以,我应该将CurrentUICulture设置为什么,以便在选择English时使用Resources.resx中的值

switch (selectedLanguage)
{
    case "English":
        //What would I do here?
        break;

    case "French":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");
        break;
}
我正在使用访问代码中的资源字符串

Properties.Resources.SomeLocalizedString

是的,如果愿意,您可以删除Resources.en-CA.resx文件。您不需要更改任何内容,因为您当前的代码将继续以相同的方式工作

Net中的本地化是通过从更具体到更通用的回退功能实现的。如果找不到指定语言和本地语言的资源文件(例如Resources.fr-CA.resx),则只查找该语言的资源文件(例如Resources.fr.resx),如果找不到,则使用默认资源文件(例如Resources.resx)


有关更多详细信息,请参阅。

如果我设置CurrentUICulture=CultureInfo(“en-CA”),它是否会尝试在en-CA子文件夹中查找MyApp.resources.dll(该子文件夹不存在)?或者,如果找不到与设置的区域性匹配的MyApp.resources.dll,它会默认为默认资源吗?不,问题是,我也添加了一个引用。因此,对您的评论的回答是:它将自动查找默认的资源文件。