【问题标题】:Localized string resources not loading in WPF application未在 WPF 应用程序中加载本地化字符串资源
【发布时间】:2011-10-27 02:18:29
【问题描述】:

我看到了最奇怪的事情。在 VS 2010 调试器中运行我们的程序时,我可以切换到使用我们其他文化的任何资源字符串,并且它们在 UI 中加载得很好。但是,当作为独立的 WPF 应用程序构建和运行时,只有文本框中的数字 (0.000 -> 0,000) 会发生变化。我们用来动态重置到另一种文化的代码是:

    private void ResetCulture(string culture)
    {
        // Reset the culture and reload the resources
        var ci = new CultureInfo(culture);
        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
        Messenger.Default.Send<CultureInfo>(ci);
    }

注意:Messenger 来自 MVVM Light 工具包(我们将此代码用于 WPF 和 Silverlight)。最后,我应该提一下这段代码在 Silverlight 下运行得非常好。

任何人都知道为什么 WPF 不通过加载新文化的资源字符串进行合作?

谢谢, 丹

【问题讨论】:

  • 资源从哪里来?如果在调试下的项目属性中取消选中“启用 Visual Studio 托管进程”复选框,在 VS 中运行时是否会看到不同的行为?我问是因为这会导致行为上的差异。选中时,VS 会预加载所有引用的程序集。如果未选中,则更像是正常运行时,仅加载使用的程序集。
  • 资源都是来自 .resx 文件的字符串资源,Forms.resx 是父文件,Forms..resx 是所有子文件(连同 Forms.Designer.cs 文件)。我检查了 WPF 项目的调试设置,并且“启用 Visual Studio 托管进程”选项已被取消选中。其他想法?
  • 您在调试器中运行时提到。当您在没有附加调试器的情况下在 VS 中运行时,它是否有效?即 Ctrl+F5 所以 VS 正在为你生成资源程序集 - 即你有像 de-DE\fooassembly.resources.dll 这样的子文件夹。您是否分发这些文件并保持相同的文件夹结构?
  • 使用 CTRL+F5 运行效果很好。所有的字符串也是嵌入式资源。
  • 有趣。问题已解决(大部分)。我将所有特定于文化的子目录(de、es、fr 等)复制到我们的 WPF 安装到的目录中,当我运行已安装的 WPF 应用程序时,它会拾取字符串。我想这表明我对使用文化东西很陌生。我认为通过指定嵌入式资源,字符串将全部构建到单个 dll 或 .exe 本身中。我猜不会。现在我需要修改我们的安装程序来获取这些文件。谢谢您的帮助。它引导我走上了解决这个问题的正确道路。

标签: c# wpf silverlight localization cultureinfo


【解决方案1】:

您需要重新启动应用程序。可以将新资源加载到内存中。

安东尼奥

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多