我正在使用WPF创建一个多语言应用程序。我正在使用静态资源,存储在.resx / res文件中的字符串使文本出现在用户的文化中。
这是项目目录结构的一部分:
在.csproj中,我有:<UICulture>en-US</UICulture>
在AssemblyInfo.cs中:[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
编译后,我可以看到资源文件出现:
所以我绑定到GreetingWindow.xaml中的静态字符串资源:
<windows:MyWindowBase x:Class="CommanderDotNET.MyApp.Windows.GreetingWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:windows="clr-namespace:MyApp.Windows"
xmlns:res="clr-namespace:MyApp.Resources">
<Label Content="{x:Static res:GreetingWindowRes.FirstGreetingText}" />
</windows:MyWindowBase>
结果令我感到困惑:
无法找到适合指定文化的任何资源或 中性文化。确保 “MyApp.Resources.GreetingWindowRes.en-US.resources”是 在编译时正确嵌入或链接到程序集“MyApp”,或 所需的所有卫星组件都是可装载和完全的 签名。
我做错了什么?
经过大量的搜索,我在这里找到了一个很好的解释: http://www.west-wind.com/weblog/posts/2009/Jun/04/Resx-and-BAML-Resources-in-WPF
显然,当使用UltimateResourceFallbackLocation.Satellite
+ <UICulture>
时,您需要同时拥有主要语言的ResxResource.resx和GreetingWindowRes.en-US.resx文件(讨厌复制)。
但是,如果您只想使用Resx资源,而没有BAML本地化,那么这不是可行的方法,而且情况要好得多。仅使用Resx资源的正确方法:
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]
<UICulture>
答案 0 :(得分:3)
我认为在设置UICulture时,您必须拥有相应的resx文件。因此,要解决您的问题,您必须为en-US文化创建一个文件(与Resources.resx相同)。
我认为(但我可能错了)Resources.resx用于默认文化或PC所具有的文化。