Web Api - 本地化 属性 值

Web Api - Localization Property value

s型号:

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});
    }

我想要这个结果:

{"Name" = "Cookie", "Price" = "10"}

产品存储在数据库中

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

谢谢

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

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

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);
}

现在,下次您在控制器中访问 ViewRes.Names 时,它将使用 accept-language 设置的文化。

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

[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});
}