Asp.net mvc Web Api-本地化属性值

Asp.net mvc Web Api-本地化属性值,asp.net-mvc,asp.net-web-api,json.net,Asp.net Mvc,Asp.net Web Api,Json.net,斯莫代尔: 控制器: public class Product { public string NameEN { get; set; } public string NameFR { get; set; } public double Price { get; set; } } 我想要这个结果: // GET: api/Products/5 [ResponseType(typeof(Product))] public IHttpActionRes

斯莫代尔:

控制器:

public class Product
{
    public string NameEN { get; set; }
    public string NameFR { get; set; }
    public double Price { get; set; }
}
我想要这个结果:

    // GET: api/Products/5
    [ResponseType(typeof(Product))]
    public IHttpActionResult GetProduct(int id)
    {
        return Ok(new Product(){NameEN = "Cookie", NameFR = "Biscuit", Price = 10});
    }
产品存储在数据库中

在使用所需的Accept语言进行序列化期间,如何将属性NameEN和NameFR转换为Name


谢谢

您可以使用资源文件创建和访问特定于区域性的字符串

首先创建一个资源文件,并根据区域性代码将其命名。因此,对于默认值,您将使用
Names.resx
,对于法语,您将使用
Names.fr-fr.resx
。从这里,您应该打开每个resx文件的属性,并为其提供类似的自定义工具名称空间,例如
ViewRes
。现在,当您访问resx文件以获取如下字符串:
ViewRes.Names.MyString
时,您将根据您可以设置的
Thread.CurrentThread.CurrentCulture
中定义的当前区域性获取字符串。您可以使用Global.asax.cs文件中的accept语言进行设置,如下所示:

{"Name" = "Cookie", "Price" = "10"}
现在,下次在控制器中访问
ViewRes.Names
时,将使用accept language设置的区域性

您还可以在访问resx字符串时设置区域性,如下所示:

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    string culture = HttpContext.Request.ServerVariables.Get("HTTP_ACCEPT_LANGUAGE");
    CultureInfo ci = culture as CultureInfo;
    if (ci == null)
        ci = new CultureInfo("en");
    Thread.CurrentThread.CurrentUICulture = ci;
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
}

它无法工作,因为产品存储在数据库中。产品示例:1。饼干,饼干,1.99美元2块。汽车,汽车,4999美元我的产品是动态的。我不能使用resx来存储我的值。@jonlabr那么你需要应用你自己的逻辑。捕获并解析accept语言值,并相应地显示name值。看,我不敢相信这个功能不包括:(谢谢!
[ResponseType(typeof(Product))]
public IHttpActionResult GetProduct(int id, string culture)
{
    ViewRes.Names.Culture = new CultureInfo(culture);
    return Ok(new Product(){Name = ViewRes.Names.MyString, Price = 10});
}