我正在尝试修改现有的WPF应用程序以进行本地化。我的一个限制是所有资源(包括默认的en-US后备资源)都必须是卫星资源。它们都不能嵌入主程序集中。
通过对codeplex的一些阅读,我发现我需要做的就是在AssemblyInfo.cs文件中进行以下更改。
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
当我这样做时,我在应用程序启动时遇到异常:
无法找到任何资源 适合指定的文化 或中性文化。确保 “XXX.YYY.ZZZ.g.en-US.resources” 被正确嵌入或链接到 大会“XXX.YYY.ZZZ” 在编译时,或所有的 所需的卫星组件是 可加载和完全签名。
如果我切换回在主程序集中放置后备资源(en-US),一切都可以正常工作。根据我的阅读,如果您希望将回退资源作为卫星资源,您必须拥有该区域设置的特定资源(即您必须拥有Resources.en-US.resx)。我是对的吗?
除了g(.g.en-US)之外,对我来说似乎有些可疑。这是否意味着什么? g在我的任何资源文件中都不存在?
我是否正确创建了资源。我首先创建一个通用的Resources.resx文件,将所有字符串放入其中。然后,我只需在Visual Studio中复制/粘贴,并为每个特定的区域设置(ar,es-MX等)重命名。然后,进行适当的翻译。
目前,我只专注于一个项目资源文件。也许它被挂在一个不具有en-US版本的资源文件的不同项目上?如果是这样,有没有办法让Visual Studio告诉我更多关于它真正被挂起的内容?
答案 0 :(得分:1)
简而言之,您对资源文件的理解以及构建的需求似乎是正确的。
.g用于编译的XAML文件,并自动为您构建。没有什么特别的或神奇的东西在这里。
通常,后备资源嵌入在主程序集中。如果您不这样做,则必须为您要进行的每种文化创建一个卫星资源集合,以及一个en-US文化集。