如何根据文化设置显示属性

时间:2017-09-14 10:24:04

标签: c# asp.net-mvc culture

我正在构建一个网站,其中包含更改显示语言的选项,具体取决于网址。

例如,如果我们导航到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; }

非常感谢您对此的帮助,谢谢!

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.resxResources.ru-RU.resx),我在页面上设置了elemnts文本:

<h1>@Resources.ResourceManager.GetString("HomeTitle", culture)</h1>

1 个答案:

答案 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;