我需要演示如何使用附属程序集本地化控件。在这样做时,我坚持使用一个地方,我在表格上有两个控件都是相同的。我曾经从Label中派生出来。
现在,我需要在文化control1
中显示fr-FR
文化control2
和de-DE
。
是否有任何选项可用于为表单中显示的相同控件设置不同的文化。
以下屏幕截图将显示我的需求。
请建议我是否可能。如果可能,请告诉我如何实现这一目标。
答案 0 :(得分:1)
尝试使用以下代码。
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");
}
答案 1 :(得分:1)
因为您想为应用程序演示本地化功能,所以在更新控件的值时可以更改当前的线程文化
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");
答案 2 :(得分:1)
您可以依赖Windows窗体的localization功能。这样,您可以针对不同的文化设置具有不同属性的控件。然后,您可以显示具有为特定文化设置的属性的整个表单。
您还可以选择使用不同的文化显示每个控件。为此,它足以在您的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
属性,它支持所有{{1}}属性。
您可以简单地将其作为控件类的扩展方法。
它具有设计师支持,可以创建控件的本地化外观。