如何在一个Form上同时为两个不同的Control设置两种不同的Culture?

How to set two different Cultures for two different Controls on a single Form at the same time?

我需要演示如何使用附属程序集本地化控件。在执行此操作时,我一直坚持一个地方,我在一个表单上有两个控件都是相同的。我曾经从标签中派生它。 现在我需要用 fr-FR 文化显示 control1de-DE 文化 control2

是否有任何选项可用于为表单中显示的相同控件设置不同的区域性。

下面的截图可以满足我的需求。

请告诉我是否可行。如果可能的话,请告诉我如何实现。

尝试使用以下代码。

if(langCode=="fr-FR")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
}
if(langCode=="de-DE")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
}

因为您想为您的应用程序演示本地化功能,您可以在更新控件的值时更改当前线程区域性

private void SetLocalizedTextForLabel(Label label, string language)
{
    var original = Thread.CurrentThread.CurrentUICulture;
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);

    // Here value will be retrieved from YourResource based on the current culture
    label.Text = Properties.YourResource.YourText;

    Thread.CurrentThread.CurrentUICulture = original;
}

那就用吧

SetLocalizedTextForLabel(frenchLabel, "fr-FR");
SetLocalizedTextForLabel(germanLabel, "de-DE");

您可以依赖 windows 表单的 localization 功能。这样您就可以为不同的文化设置具有不同属性的控件。然后,您可以显示带有为特定文化设置的属性的整个表单。

您还可以选择显示具有不同文化的每个控件。为此,在您的表单 Load 事件处理程序中使用此类代码就足够了:

System.Threading.Thread.CurrentThread.CurrentUICulture =
    System.Globalization.CultureInfo.GetCultureInfo("fr-FR");
var resources = new System.ComponentModel.ComponentResourceManager(this.GetType());
resources.ApplyResources(button1, button1.Name);

并且仅针对 button2 将上述代码与 de-DE 文化一起使用。

备注

  1. 以上解决方案不限于Text属性,它支持所有Localizable属性。

  2. 你可以简单地把它作为控件的扩展方法class。

  3. 它具有设计器支持来创建控件的本地化外观。