我正在使用Visual Studio 2013(C#)进行开发,并且正在寻找一种方法来为Windows窗体选择语言更容易进行本地化。
在设计器中,您可以在“设计”→“语言”下选择所需的语言,Visual Studio通过创建必要的本地化文件来完成剩下的工作如果您需要新的本地化表格。
问题是:目前我只使用两种不同的语言,每当我在这些本地化表单之间切换时,它会向我显示所有可能语言的列表,其中错误的单击可能会导致visual studio创建本地化版本的语言我不想要,这只是令人讨厌,并且项目中包含更多文件。
有没有人知道如何将设计师选项中显示的语言限制为所需的数量和选择?
答案 0 :(得分:2)
语言属性是仅限设计时的属性,不属于Form
类。它是使用扩展程序提供程序添加到表单设计时的扩展属性。它的类型为CultureInfo
,并使用TypeConverter
显示所有可用的文化。
作为一种变通方法,您可以让BaseForm
包含FormLanguage
和get
之类的属性,Language
属性的返回值以及set
},设置Language
属性的值。然后从此BaseForm
继承所有表单。这样,它就足以改变FormLanguage
属性。
同时为CultureInfo
创建一个自定义类型转换器,只显示您想要的文化,然后更改语言,它足以更改FormLanguage
属性。
以下是我用作解决方法的代码。不要忘记从BaseClass
继承您的表单。
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Globalization;
using System.Linq;
using System.Windows.Forms;
public partial class BaseForm : Form
{
[TypeConverter(typeof(MyCultureInfoConverter))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public CultureInfo FormLanguage
{
get
{
return TypeDescriptor.GetProperties(this)["Language"]
.GetValue(this) as CultureInfo;
}
set
{
TypeDescriptor.GetProperties(this)["Language"].SetValue(this, value);
}
}
}
public class MyCultureInfoConverter : CultureInfoConverter
{
public override StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context)
{
var values = CultureInfo.GetCultures(CultureTypes.SpecificCultures |
CultureTypes.NeutralCultures)
.Where(x => x.Name == "fa-IR" || x.Name == "en-US").ToList();
values.Insert(0, CultureInfo.InvariantCulture);
return new StandardValuesCollection(values);
}
}
当您从fa-IR
选择FormLanguage
时,由于我们在Language
的设置者中编写的代码,Persian
会自动变为FormLanguage
。您可以在MyCultureInfoConverter
。