c# - Visual Studio Designer - 限制属性网格以显示语言属性的某些特定语言

标签 c# winforms visual-studio localization windows-forms-designer

我正在使用 Visual Studio 2013 (C#) 进行开发,并且正在寻找一种方法来更轻松地为 Windows 窗体选择语言以进行本地化。

在设计器中,您可以在“设计”→“语言”下选择所需的语言,然后 Visual Studio 通过创建必要的本地化文件来完成剩下的工作如果您需要新的本地化表单。

问题是:目前我只使用两种不同的语言,每次在这些本地化形式之间切换时,它都会向我显示所有可能语言的列表,错误的单击会导致 visual studio 创建 a 的本地化版本我不想要的语言,这很烦人并且用更多的文件使项目变得困惑。

有谁知道如何将设计器选项中显示的语言限制为所需的数量和选择?

最佳答案

Language 属性是仅设计时属性,不属于 Form 类。它是使用扩展器提供程序添加到表单设计时的扩展属性。它是 CultureInfo 类型,并使用显示所有可用文化的 TypeConverter

作为一种变通方法,您可以使用包含 FormLanguage 等属性的 BaseForm 并在 get 中返回 Language 的值 属性并在 set 中,设置 Language 属性的值。然后从这个 BaseForm 继承你所有的表单。这样,更改 FormLanguage 属性就足够了。

同时为 CultureInfo 创建一个自定义类型转换器,它只显示您想要的文化,然后要更改语言,只需更改 FormLanguage 属性即可。

Localization Language

这是我用作解决方法的代码。不要忘记从此 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);
    }
}

当您从 FormLanguage 中选择 fa-IR 时,Language 自动变为 Persian,因为代码我们在 FormLanguage 的 setter 中编写。您可以在 MyCultureInfoConverter 中添加您需要的任何其他语言。

关于c# - Visual Studio Designer - 限制属性网格以显示语言属性的某些特定语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36932205/

相关文章:

c# - XNA 游戏在 "dragging"窗口时不更新,任何事件处理程序?

c# - 多次触发 TreeView AfterSelect 事件

c# - 无法再在 visual studio 2019 中添加 C# 类 - 不会链接到主文件

visual-studio - 如何在 Visual Studio 2013 中查看代码审查注释

c# - 如何通过继承访问对象

c# - MVC ActionLink 在添加约束后生成 NON-Restul URL

c# - 在 .NET Framework 3.5 或 4.0 上运行的可执行文件

c# - 添加到我的 UserControl 的 TabControl 的 TabPage 的控件在重建后消失

c# - 在 nhibernate mvc c# 中连接两个表

c# - 刷新 Windows 窗体应用程序