设置CurrentUICulture,使其使用Resources.resx

时间:2017-06-26 00:54:34

标签: c# wpf localization

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

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

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

    case "French":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");
        break;
}

用户可以关闭然后关闭此窗口并从启动窗口中选择其他语言,然后单击“确定”再次显示该窗口,但使用他们选择的新语言。

这是有效的,但我也有一个Resources.resx,它基本上只是Resources.en-CA.resx的副本。我想知道我是否可以摆脱Resources.en-CA.resx,如果是这样,我应该将CurrentUICulture设置为什么,以便在选择英语时使用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

1 个答案:

答案 0 :(得分:1)

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

.Net中的本地化是通过更具体到更通用的后备功能实现的。如果它找不到指定语言和本地的资源文件(例如Resources.fr-CA.resx),它会单独查找该语言的资源文件(例如Resources.fr.resx),如果找不到它,它就会找到它使用默认资源文件(例如Resources.resx)。

有关详细信息,请参阅Hierarchical Organization of Resources for Localization