【发布时间】:2017-09-14 10:24:03
【问题描述】:
我正在构建一个网站,其中包含更改显示语言的选项,这在 URL 中确定。
例如,如果我们导航到http://website.com/en-US/,页面将是英文,而http://website.com/ru-RU 网站将是俄文。
您可以在下面查看我如何实现此功能的详细信息。
我的问题是,我是否可以在我的ViewModel 中检索这些数据(保存在PageData)来设置Display 属性?或者我应该将此值设置为不同的变量(可能是会话?)如果是这样,我将如何检索它?
例如,我的 ViewModel 当前包含:
[Display(Name = "Email")]
public string Email { get; set; }
我需要类似的东西
[Display(Name = Resources.GetString("EmailDisplay", culture)]
public string Email { get; set; }
非常感谢您的帮助,谢谢!
RouteConfig.cs
routes.MapRoute(
"Default",
"{lang}/{controller}/{action}/{id}",
new
{
lang = "ru-RU",
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
_ViewStart.cs
@{
Layout = "~/Views/Shared/_Layout.cshtml";
var cultureRoute = ViewContext.RouteData.Values["lang"].ToString();
PageData["culture"] = new System.Globalization.CultureInfo(cultureRoute);
}
_Layout.cs
@{
var culture = @PageData["culture"];
}
然后我有 2 个资源文件(Resources.en-US.resx 和 Resources.ru-RU.resx),我在页面上设置了元素的文本:
<h1>@Resources.ResourceManager.GetString("HomeTitle", culture)</h1>
【问题讨论】:
-
参考this article获取使用资源文件进行本地化的示例
-
@StephenMuecke 谢谢!我设法找到了一种方法(不确定它是否是最好的方法,但它似乎有效!)我在下面添加了一个答案
标签: c# asp.net-mvc culture