使用附属程序集进行本地化

时间:2012-05-30 14:24:59

标签: c# .net localization satellite-assembly

我正在尝试使用附属程序集在WinForms应用程序中进行本地化。目录结构如下:

    • 的Program.exe
      • Program.resources.dll

在Program.exe中,此代码以Main方法执行:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

Application.Run(new Form());

我检查了FUSLOGVW.exe输出:

*** Assembly Binder Log Entry  (5/30/2012 @ 5:19:37 PM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable  D:\tmp\bin\Program.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = paulius_l
LOG: DisplayName = Program.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=...
 (Fully-specified)
LOG: Appbase = file:///D:/tmp/bin/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Program.exe
Calling assembly : Program, Version=1.0.0.0, Culture=neutral, PublicKeyToken=....
===
LOG: Start binding of native image Program.resources, Version=1.0.0.0, Culture=de, PublicKeyToken=....
WRN: No matching native image found.
LOG: IL assembly loaded from D:\tmp\bin\de\Program.resources.dll.

这看起来很好,但字符串不会被本地化 - 仍然使用Program.exe的默认字符串。

要获取字符串,我使用来自Res的Visual Studio生成的Res.resx类。

我在这里缺少什么?

编辑:添加了完整的FUSLOGVW输出,对于那些比我更了解它的人。

2 个答案:

答案 0 :(得分:0)

这是我在编写自动构建脚本时所犯的错误,该脚本会在外部生成附属程序集。问题是,在卫星装配中生成类时,我错过了Res类。难怪它不起作用。

花了很长时间后,我今天早上发现了这个问题。

答案 1 :(得分:-1)

我相信你的文化标识符在这一行上是错误的:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

CultureInfo的文化标识符采用“languagecode-countrycode”的形式。例如。美国英语为“en-US”,英国/英国英语为“en-GB”。

尝试“de-DE”。

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.name%28v=vs.95%29.aspxhttp://msdn.microsoft.com/en-us/goglobal/bb896001.aspx提供了一些文化标识符列表。