我们已经创建了一个包含一些WinForms的Class-Library项目。 我们在VS设计器中通过构建翻译了Forms(设置Localizable = true)。
VS将为包含卫星资源文件的每种语言创建程序集和不同文件夹。
此程序集将由三方应用程序加载。
现在我们遇到了一个问题,即如果我们通过三方应用程序启动它们,我们的表单将不会被本地化。 看来,我们的程序集无法从语言子目录加载资源文件。
是否可以通过代码加载此资源文件,因此WinForms的默认本地化机制将起作用?
修改
如果我将语言文件夹(de,en,...)复制到主要的3方应用程序文件夹,一切都会像魅力一样。
答案 0 :(得分:0)
如您所知,本地化的工作取决于线程文化。您确定第三方应用程序在启动时设置了正确的文化吗?
// set culture on program startup
CultureInfo ci = CultureInfo.GetCultureInfo("de-DE");
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
// .NET 4.5 and above
CultureInfo.DefaultThreadCurrentUICulture = ci;
CultureInfo.DefaultThreadCurrentCulture = ci;
来自MSDN:
“在.NET Framework 4和以前的版本中,默认情况下,所有线程的UI文化都设置为Windows系统文化。对于当前UI文化与默认系统文化不同的应用程序,此行为是在.NET Framework 4.5中,DefaultThreadCurrentUICulture属性允许您定义应用程序域中所有线程的默认UI文化。“
因此,如果您使用的是.NET 3.5,那么线程池和工作线程的文化也可能与您想要的应用程序文化不同,如果这与OS文化不同的话。如果需要,您应该检查/设置每个线程调用的文化。