如何在一个Form上同时为两个不同的Control设置两种不同的Culture?
How to set two different Cultures for two different Controls on a single Form at the same time?
我需要演示如何使用附属程序集本地化控件。在执行此操作时,我一直坚持一个地方,我在一个表单上有两个控件都是相同的。我曾经从标签中派生它。
现在我需要用 fr-FR
文化显示 control1
和 de-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
文化一起使用。
备注
以上解决方案不限于Text
属性,它支持所有Localizable
属性。
你可以简单地把它作为控件的扩展方法class。
它具有设计器支持来创建控件的本地化外观。
我需要演示如何使用附属程序集本地化控件。在执行此操作时,我一直坚持一个地方,我在一个表单上有两个控件都是相同的。我曾经从标签中派生它。
现在我需要用 fr-FR
文化显示 control1
和 de-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
文化一起使用。
备注
以上解决方案不限于
Text
属性,它支持所有Localizable
属性。你可以简单地把它作为控件的扩展方法class。
它具有设计器支持来创建控件的本地化外观。