本地化将使用三方应用程序的WinForms

时间:2017-09-05 14:59:53

标签: c# winforms localization .net-3.5 visual-studio-2017

我们已经创建了一个包含一些WinForms的Class-Library项目。 我们在VS设计器中通过构建翻译了Forms(设置Localizable = true)。

VS将为包含卫星资源文件的每种语言创建程序集和不同文件夹。

此程序集将由三方应用程序加载。

现在我们遇到了一个问题,即如果我们通过三方应用程序启动它们,我们的表单将不会被本地化。 看来,我们的程序集无法从语言子目录加载资源文件。

是否可以通过代码加载此资源文件,因此WinForms的默认本地化机制将起作用?

修改

如果我将语言文件夹(de,en,...)复制到主要的3方应用程序文件夹,一切都会像魅力一样。

1 个答案:

答案 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文化不同的话。如果需要,您应该检查/设置每个线程调用的文化。