C#WPF本地化 - 忽略其他文化并加载默认资源

时间:2017-08-03 13:52:36

标签: c# wpf

我尝试本地化我的应用,我创建了多个Resources.[culture].resx,但程序忽略了所有这些并始终加载默认Resources.resx

我在App construtor(以及OnStartup事件中)中有此代码

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");

我的资源名为Resources.en-US.resxResources.cs-CZ.resxResources.resx

WPF中的代码是

xmlns:p="clr-namespace:WpfThermalLabelEditorApp.Properties"
Title="{x:Static p:Resources.Title}" 

这应该加载en-US本地化,但它没有。加载默认值。我试图删除AssemblyInfo,甚至将<UICulture>标签放入csproj

3 个答案:

答案 0 :(得分:1)

不确定这是不是答案,但FWIW:我总是这样设置CurrentCultureCurrentUICulture;

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageAbbreviation);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageAbbreviation);

请务必仔细检查您使用的缩写是否与所有参考文献相同。这应该可以解决你的问题。

EDIT1 :确保您的资源文件设置为public,当您查看资源文件时,访问修饰符应该位于顶部附近。仔细检查这说公开和重建。另外,要调用资源文件密钥,请执行以下操作:

<TextBlock xmlns:local="clr-namespace:WpfApplication2" Text="{x:Static local:Resource1.myname}"/>

WHERE ...

  • “WpfApplication2”将替换为您的项目名称
  • “Resource1”将替换为您的资源文件的名称(没有文化ID,例如,对于您的情况,它只是Resources
  • “myname”将替换为您想要的密钥

答案 1 :(得分:0)

好吧,2天后我解决了问题。我的解决方案是对的。我不知道出了什么问题,但是我已经创建了一个新项目,将我的所有数据都移到了新项目中,突然间一切都变得有魅力了。

以下是一些有用的链接:

答案 2 :(得分:0)

我遇到了同样的问题,解决方案是清理并重建项目。无需创建新项目。