我正在 Visual Studio 2013 (C#) 中进行开发,并正在寻找一种方法来使 Windows 窗体的语言选择更容易本地化。
在设计器中,您可以在“下选择您想要的语言”Design"→"Language如果您需要新的本地化表单,Visual Studio 会通过创建必要的本地化文件来完成剩下的工作。
问题是:目前我只使用两种不同的语言,每次当我在这些本地化表单之间切换时,它都会向我显示所有可能语言的列表,其中错误的单击可能会导致 Visual Studio 创建我不熟悉的语言的本地化版本不想,这只是烦人,并且会因为更多文件而使项目变得混乱。
有谁知道如何将设计器选项中显示的语言限制为所需的数量和选择?
语言属性是仅设计时属性,不属于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
from FormLanguage
那么Language
变成Persian
自动,因为我们在 setter 中编写的代码FormLanguage
。您可以添加您需要的任何其他语言MyCultureInfoConverter
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)