|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.ComponentModel;
namespace System.Windows.Forms;
/// <summary>
/// CategoryAttribute that can access WinForms localized strings.
/// </summary>
[AttributeUsage(AttributeTargets.All)]
internal sealed class WinCategoryAttribute : CategoryAttribute
{
/// <summary>
/// Initializes a new instance of the <see cref="CategoryAttribute"/> class.
/// </summary>
public WinCategoryAttribute(string category) : base(category)
{
}
/// <summary>
/// This method is called the first time the category property
/// is accessed. It provides a way to lookup a localized string for
/// the given category. Classes may override this to add their
/// own localized names to categories. If a localized string is
/// available for the given value, the method should return it.
/// Otherwise, it should return null.
/// </summary>
protected override string GetLocalizedString(string value)
{
string? localizedValue = base.GetLocalizedString(value);
localizedValue ??= (string?)GetSRObject("WinFormsCategory" + value);
// This attribute is internal, and we should never have a missing resource string.
Debug.Assert(localizedValue is not null, $"All Windows Forms category attributes should have localized strings. Category '{value}' not found.");
return localizedValue;
}
private static object? GetSRObject(string name)
{
object? resourceObject = null;
try
{
resourceObject = SR.ResourceManager.GetObject(name);
}
catch (Resources.MissingManifestResourceException)
{
}
return resourceObject;
}
}
|