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

C# MVC Resourcefile get string from variable

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

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

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

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

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

是否可以为此使用变量?

您可以将值设置为这样的变量:

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

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

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>

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

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

或者更好的是考虑在 HtmlHelper 上添加一个助手 method/extension-method,例如:

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 标记,因此您需要将调用括在括号中以强制它将整个调用视为单个表达式如上