如何在C#中创建用于本地化的中性后备卫星资源。

时间:2009-09-08 03:21:17

标签: c# localization

我正在尝试修改现有的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告诉我更多关于它真正被挂起的内容?

1 个答案:

答案 0 :(得分:1)

简而言之,您对资源文件的理解以及构建的需求似乎是正确的。

.g用于编译的XAML文件,并自动为您构建。没有什么特别的或神奇的东西在这里。

通常,后备资源嵌入在主程序集中。如果您不这样做,则必须为您要进行的每种文化创建一个卫星资源集合,以及一个en-US文化集。