2012-08-17 64 views
11

我刚刚在使用Resx资源文件时遇到了Visual Studio 2010中最奇怪的行为,但我无法将其包裹在它的周围。如果文件已经本地化,Visual Studio 2010不会生成资源(Resx)设计器代码

的问题如下:Visual Studio将不会产生designer.cs文件具有本地化的名称(如resource.fr.resx)的资源文件,但它用简单的名称(如resource.resx)等文件的正常工作。

这里是我的Visual Studio项目设置的快照:

enter image description here

正如你可以看到我只是做了3个资源文件进行简单的测试:

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

test.resxtest2.resxdesigner.cs文件生成就好了。但是,无论我做什么,test.fr.designer.cs都会创建但始终为空。

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

注:我注意到,当创建的资源文件时,Visual Studio通常默认的访问修饰符为“内部”。但是,创建本地化资源文件(resource.fr.resx)时,它默认为“无代码生成”。只是发现有趣的事情要注意,因为它证明了Visual Studio因某种原因对待本地化文件的方式不同。

- >有什么我在这里失踪?如果有人对此问题有所了解,我将不胜感激,这让我疯狂。

回答

19

虽然我没有看过这个特别的问题,但是我有很多“.resx”文件的其他问题。 Visual Studio有时是bug(处理“.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”中取回回退字符串(即默认语言字符串)。这就是中枢辐射模型基本上的工作原理。

+0

我想我只是误解了它应该工作的方式。但是,资源管理器没有找到我的本地化字符串,这是我调查这整个事情。但这可能是另一个原因。我将在假设资源文件没有错误的情况下再次进行调查。 – Aerendel 2012-08-17 20:34:07

+0

好吧,按照我描述的方式尝试它,它应该可以工作。 – Larry 2012-08-17 20:36:17

+1

事实上,我不明白该框架只需要生成主资源文件的代码,这导致我在错误的方向。感谢您解释并指出! Visual Studio确实为遵循本地化命名约定的文件生成代码,这确实有意义。在将本地化文件改回“无代码生成”之后,所有工作都已经开始。非常感谢! – Aerendel 2012-08-17 20:46:32

相关问题