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