【问题标题】:Localizing string properties of Attributes in c#在 C# 中本地化 Attributes 的字符串属性
【发布时间】:2019-07-05 23:35:24
【问题描述】:

使用DisplayAttribute 可以直接本地化类的属性。

当尝试使用资源文件EmployeeResx.resx , EmployeeResx.fr.res...., 本地化属性时,静态类EmployeeResx.Designer.cs 会生成静态字符串属性,例如:

public static string LastName {
    get {
        return ResourceManager.GetString("LastName", resourceCulture);
    }
} 

尝试使用静态字符串本地化属性(本例中为选项)的属性,如:

 [Option('l', "lastname",  HelpText = EmployeeResx.LastName)]
 public string  LastName { get; set; }

c#编译器报错:

错误 CS0182 属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式

有很多属性需要本地化。

如何像上例一样本地化属性的字符串属性?

【问题讨论】:

    标签: c# localization attributes resx


    【解决方案1】:

    创建一个派生的属性类型。将资源名称传递给派生的属性类。派生的属性类可以检索资源字符串并将其传递给基类的构造函数。

    如果您的 Option 属性具有单个字符串参数,则派生类将是这样的。

    internal class localized_OptionAttribute : OptionAttribute
    {
      public localized_Option ( string ResourceName )
        : base ( <root namespace>.Properties.Resources.ResourceManager.GetString ( ResourceName ) )
      {
      }
    }
    

    那么你就可以用新的属性代替原来的了:

    [localized_Option("LastName")]
    public string  LastName { get; set; }
    

    “LastName”现在用作资源名称。

    看起来您的属性有一些附加参数,您必须将它们定义为派生类的构造函数的附加参数。为简单起见,我将它们排除在外。

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2010-09-11
      相关资源
      最近更新 更多