【问题标题】:Set CurrentUICulture so it uses Resources.resx设置 CurrentUICulture 使其使用 Resources.resx
【发布时间】:2017-06-26 09:18:35
【问题描述】:

我正在一个小型测试 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

【问题讨论】:

    标签: c# wpf localization


    【解决方案1】:

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

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

    更多详情请见Hierarchical Organization of Resources for Localization

    【讨论】:

    • 如果我设置 CurrentUICulture = CultureInfo("en-CA"),它不会尝试在 en-CA 子文件夹中查找 MyApp.resources.dll,它不会存在吗?或者,如果它没有找到与设置的文化匹配的 MyApp.resources.dll,它会默认使用默认资源吗?
    • 不,问题,我也添加了参考。所以你的评论的答案是:它会自动寻找默认的资源文件。
    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多