我正在尝试使用.resx文件将应用程序从英语翻译成西班牙语。
我正在使用一个非常小的应用程序,它被构建为遍历目录中的每个.resx文件,并在另一个位置创建一个新的.resx文件,该文件将具有所需的文本(例如来自标签或按钮的文本)平移。
我的代码中有一段看起来像这样
RReader = New ResXResourceReader(lResxInputFile)
RReader.UseResXDataNodes = False
Dim client As TranslateClient = New TranslateClient("http://www.mywebsite.com")
For Each entry As DictionaryEntry In RReader
...
Next entry
注意:lResxInputFile是一个包含原始.resx位置的字符串,例如“C:\ MyProject \ Forms \ MyForm.resx”
此代码在大多数情况下运行良好,并且.resx文件正在为大多数表单进行正确复制和翻译。
然而,对于其中一些人来说,行中会抛出ArgumentException
For Each entry As DictionaryEntry In RReader
该异常读作
ResX file Type System.Windows.Forms.FlatStyle, System.Windows.Forms,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 in the data at
line 121, position 4 cannot be located. Line 123, position 5. cannot be parsed.
因此,不会创建.resx,因此无法翻译该表单。
我认为问题的根源可能与Infragistics有关,因为我在抛出异常的表单中使用Infragistics控件,到目前为止看起来像.resx成功复制的那些不使用Infragistics的。
任何人都有过类似的问题吗?如果我没有充分解释自己,请告诉我。
答案 0 :(得分:2)
版= 4.0.0.0
这就是问题所在。您没有在.NET 4.0(或更高版本)上运行。因此,您的程序无法从版本4程序集加载类型。
您将自己暴露给通常不会造成麻烦的Visual Studio错误。但是现在你开始阅读通常只在构建程序时读取的文件。当原始程序员在VS2010或更高版本上创建项目并选择默认的.NET Framework版本时,此问题就开始了。关于他的业务,像往常一样设计表单,Localizable属性设置为True。
但后来,将.NET Framework目标版本更改为3.5或更低版本。可能是为了容纳不想安装它的客户。 VS错误是这不会更新表单的.resx文件。它仍包含对4.0.0.0类型的引用。它从来没有绕过它,表单没有在设计师中打开。在dev的机器上没有问题,他从未注意到它,他的构建工具(如resgen.exe)在解析版本4类型时没有任何问题。但是kaboom当你的程序试图读它时。
假设您无法定位.NET 4,唯一的解决方法是重新生成.resx文件。在设计器中使用错误的.resx文件打开表单,并对其中一个属性进行微不足道的更改。然后改回来。此重新创建 .resx文件,它现在将使用版本2.0.0.0引用。通过使用文本编辑器查看.resx文件,仔细检查更改是否有效。
你可能想使用编辑+查找和替换+在文件中查找来搜索所有.resx文件中的“4.0.0.0”以确保你拥有它们。