是否可以在剃刀声明中包含字符串?
例如,以下代码:
Page.Title = Resources.HomeStrings_en.Title;
我希望如此:
var locale = "_en";
Page.Title = Resources.HomeStrings + locale + .Title;
显然,这不会编译,但我怎么能这样做呢?
答案 0 :(得分:1)
资源是静态类,每个键都有一个属性,所以你不能这样做。
您需要使用ResourceManager。
var resset= Resources.ResourceManager.GetResourceSet(Thread.CurrentThread.CurrentUICulture, true, false);
resset.GetString("HomeStrings" + "_en" + ".Title")
让我想到的一件事是...... .NET Resources使用Culture来处理语言更改...从正确的文件中检索数据。而且您似乎使用一个文件来保存所有语言......但不建议这样做。
在这里,您可以获得ASP.NET MVC中的国际化教程:http://afana.me/post/aspnet-mvc-internationalization.aspx
答案 1 :(得分:1)
您可以使用Reflection
。例如,如果HomeStrings
是Resources
的属性,您可以尝试以下操作:
PropertyInfo property = Resources.GetType().GetProperty("HomeStrings" + locale);
Page.Title = (property.GetValue(Resources) as the type of HomeStrings).Title;
当然它适用于属性,方法等。只需确保执行所有必要的测试:property != null
,(... as the type of HomeStrings) != null
,...