如何支持不同的" NumberDecimalSeparator"在Web.API中?

时间:2017-07-20 12:43:36

标签: c# asp.net-mvc linq asp.net-web-api internationalization

我们有一个Web.API应用程序,我们必须支持荷兰语和英语。 为此,我们根据用户请求将文化设置为“nl”或“en”。

但是,我们在“NumberDecimalSeparator”中遇到了这个问题,因为“en”是“。”而“nl”则是“,”。现在,当用户想要发布或获取“nl”语言的任何数据时,值应显示/发布为“,”,对于“en”语言,它应显示/发布为“。”。

有没有人知道我们如何处理这个?

我正在使用Linq查询,我必须根据语言显示重试数据。

提前谢谢..

Linq查询如下:

    var test = await (from x in db.instance.Where(x => x.ID == 36)
                   select new GeofenceAttributeModel()
                   {
                     Address = x.geofenceattribute != null ? x.geofenceattribute.Address : string.Empty,
                     Latitude = x.geofenceattribute != null && x.geofenceattribute.Latitude.HasValue ? x.geofenceattribute.Latitude : null,
                     Longitude = x.geofenceattribute != null && x.geofenceattribute.Longitude.HasValue ? x.geofenceattribute.Longitude : null,
                     RadiusInMtr = x.geofenceattribute != null ? x.geofenceattribute.RadiusInMtr.ToString() : string.Empty
                   }).FirstOrDefaultAsync();

1 个答案:

答案 0 :(得分:3)

欢迎全球化支持。

经验法则:仅在UI(例如网络浏览器)中解析或显示时才使用当前区域设置。

在所有其他情况下(存储数据,文本格式的组件之间的通信,包括json或XML帖子)使用不变文化。在服务器端,无论UI使用荷兰语还是英语还是任何其他文化,它都应该是完全透明的。

永远不要使用本地文化序列化数字和日期时间值;否则,当您必须反序列化数据时,您不能再告诉逗号是小数字符号还是千位分隔符,例如。

在您的代码RadiusInMtr.ToString()中使用系统的本地文化(Thread.CurrentThread.CurrentCulture)。只有在UI中显示字符串时才可以。如果您使用此字符串将某些数据传输到另一个组件,请改用ToString(CultureInfo.InvariantCulture)。并且在解析字符串时指定文化。