我们遇到了类似的问题,尽管 Castle 没有。我们使用的解决方案是简单地定义一个从另一个属性派生的新属性,并使用常量字符串作为对资源管理器的查找,如果没有找到则回退到键字符串本身。
[AttributeUsage(AttributeTargets.Class
| AttributeTargets.Method
| AttributeTargets.Property
| AttributeTargets.Event)]
public class LocalizedIdentifierAttribute : ... {
public LocalizedIdentifierAttribute(Type provider, string key)
: base(...) {
foreach (PropertyInfo p in provider.GetProperties(
BindingFlags.Static | BindingFlags.NonPublic)) {
if (p.PropertyType == typeof(System.Resources.ResourceManager)) {
ResourceManager m = (ResourceManager) p.GetValue(null, null);
// We found the key; use the value.
return m.GetString(key);
}
}
// We didn't find the key; use the key as the value.
return key;
}
}
用法类似于:
[LocalizedIdentifierAttribute(typeof(Resource), "Entities.FruitBasket")]
class FruitBasket {
// ...
}
然后,每个特定于语言环境的资源文件可以根据需要定义自己的Entities.FruitBasket
条目。