我正在构建一个网站,其中包含更改显示语言的选项,具体取决于网址。
例如,如果我们导航到http://website.com/en-US/页面将使用英语,http://website.com/ru-RU该网站将使用俄语。
您可以在下面看到我如何实现此细节。
我的问题是,我是否可以在PageData
中检索此数据(保存在ViewModel
中),以设置Display
属性?或者我应该将此值设置为另一个变量(也许会话?)如果是这样,我将如何检索它?
例如,我的ViewModel当前包含的位置:
[Display(Name = "Email")]
public string Email { get; set; }
我需要像
这样的东西[Display(Name = Resources.GetString("EmailDisplay", culture)]
public string Email { get; set; }
非常感谢您对此的帮助,谢谢!
routes.MapRoute(
"Default",
"{lang}/{controller}/{action}/{id}",
new
{
lang = "ru-RU",
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
@{
Layout = "~/Views/Shared/_Layout.cshtml";
var cultureRoute = ViewContext.RouteData.Values["lang"].ToString();
PageData["culture"] = new System.Globalization.CultureInfo(cultureRoute);
}
@{
var culture = @PageData["culture"];
}
然后我有2个资源文件(Resources.en-US.resx
和Resources.ru-RU.resx
),我在页面上设置了elemnts文本:
<h1>@Resources.ResourceManager.GetString("HomeTitle", culture)</h1>
答案 0 :(得分:0)
感谢Stephen发布的链接,我首先在每个资源文件中添加了必需的字符串。
这意味着将其添加到:
Resources.resx
Resources.en-US.resx
Resources.ru-RU.resx
然后将我的ViewModel
属性定义为:
[Display(Name = "LabelEmail", ResourceType = typeof(Resources))]
public string Email { get; set; }
最后,我更新了_ViewStart.cs
以设置当前UICulture
(这是应用程序确定要使用哪个资源文件的方式):
UICulture = cultureRoute;