如果文件已本地化,Visual Studio 2010不会生成资源(Resx)设计器代码

时间:2012-08-17 18:57:12

标签: visual-studio-2010 resx

我在使用Resx资源文件时遇到了Visual Studio 2010中最奇怪的行为,我无法绕过它。

问题如下:Visual Studio不会为具有本地化名称的资源文件(例如designer.cs)生成resource.fr.resx文件,但它适用于名称简单的其他文件(例如resource.resx)。

以下是我的visual studio项目设置的快照:

enter image description here

正如您所看到的,我只是使用3个资源文件进行了简单的测试:

  • test.resx
  • test2.resx
  • test.fr.resx

生成designer.cstest.resx的{​​{1}}个文件就好了。但是,无论我做什么,test2.resx都会被创建但总是空白。

我进行了双重和三重检查:为本地化文件正确设置了自定义工具属性。所有文件的所有属性都完全相同(我正在使用test.fr.designer.cs,但如果我将访问修饰符设置为内部并使用PublicResxFileCodeGenerator),我会得到相同的行为。

注意:我注意到在创建资源文件时,Visual Studio通常会将访问修饰符默认为“内部”。但是,在创建本地化资源文件(ResxFileCodeGenerator)时,默认为“无代码生成”。刚发现这很有趣,因为它证明了Visual Studio因某种原因不同地处理本地化文件。

- >这里有什么我想念的吗?如果有人对这个问题有所了解,我将不胜感激,这让我发疯了。

1 个答案:

答案 0 :(得分:20)

虽然我没有研究过这个特定的问题,但我在“.resx”文件中遇到了很多其他问题。 Visual Studio有时会出错(处理“.resx”文件等),我已经正式向MSFT报告了其中一些(因为它影响了我自己的商业本地化程序)。在任何情况下,您通常不应该以这种方式命名。它实际上违反了MSFT的本地化规则。默认语言文件通常不应该有嵌入式语言代码,因此可能会因此而窒息。我需要调查,但你应该做的是创建“Test.resx”,它有一个“Designer.cs”文件,然后是“Test.fr.resx”,但没有。然后将所有默认语言字符串放在“Test.resx”中,并将相应的法语字符串放在“Test.fr.resx”中。在代码中,您可以访问“Test.Designer.cs”中找到的强类型名称,除非您将“System.Threading.Thread.CurrentThread.CurrentUICulture”设置为“fr”,否则您获取的字符串将成为默认语言字符串。然后你将从“Test.fr.resx”中取回法语版本的字符串,除非在那里找不到(没有翻译),在这种情况下你将从“Test.resx”中取回后备字符串(即,默认语言字符串)。这就是中心辐射模型的基本工作方式。