12

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

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

这是我的视觉工作室项目设置的快照:

在此处输入图像描述

如您所见,我刚刚用 3 个资源文件做了一个简单的测试:

  • 测试.resx
  • test2.resx
  • test.fr.resx

和的designer.cs文件生成得很好。然而,无论我做什么,它都是创建的,但总是空白的。test.resxtest2.resxtest.fr.designer.cs

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

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

--> 这里有什么我遗漏的吗?如果有人对此主题有一些见解,我将不胜感激,这让我发疯。

4

1 回答 1

21

虽然我没有研究过这个特定的问题,但我遇到了许多与“.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”取回备用字符串(即,默认语言字符串)。这就是轮辐模型的基本工作原理。

于 2012-08-17T20:29:16.270 回答