C#MVC Resourcefile从变量中获取字符串

时间:2015-02-20 15:06:37

标签: c# asp.net-mvc resources

这是我在我的一个视图中获取资源字符串的方式:

@MyProject.Resources.ResourceEN.MyResourceStringName
//Gives back mystring in desired language

如果我有一个我想发送的字符串变量怎么办?

@string HelloWorld;
@MyProject.Resources.ResourceEN.HelloWorld

这显然不起作用,因为它查找资源名称“HelloWorld”而不是该字符串变量的内容。

以某种方式可以使用变量吗?

2 个答案:

答案 0 :(得分:3)

您可以使用ResourceManager's GetString方法使用变量返回指定字符串资源的值:

@string HelloWorld;
@(new ResourceManager(typeof(MyProject.Resources.ResourceEN)).GetString(HelloWorld))

或者更好的是考虑在HtmlHelper上添加辅助方法/扩展方法,例如:

public static string MyResource<T>(this HtmlHelper html, object key) {
    return new ResourceManager(typeof(T)).GetString(key.ToString());
}

然后可以按如下方式使用:

@string HelloWorld;
@(Html.MyResource<MyProject.Resources.ResourceEN>(HelloWorld))

** 编辑 **

请记住,MVC Razor解析器看到<并认为它是一个HTML标记,因此您需要将调用包装在括号中以强制它将整个调用视为上面的单个表达式。

答案 1 :(得分:1)

您可以将值设置为如下变量:

@{ string HelloWorld = MyProject.Resources.ResourceEN.HelloWorld }

另外,在您的代码中专门调出ResourceEN是不常见的。通常通过将CurrentUICulture设置为当前线程来指定文化,并且对MyProject.Resources的调用将根据文化自动选择正确的语言文件。

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

如果未在当前请求中明确设置,则默认为web.config文件中设置的区域性。

<system.web>
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US"/>
</system.web>