C# Angular在更改区域性后使用逗号而不是点作为小数分隔符

C# Angular在更改区域性后使用逗号而不是点作为小数分隔符,c#,angular,.net-core,C#,Angular,.net Core,我为本地化功能添加了多个区域性,将NumberDecimalSeparator和CurrencyDecimalSeparator都设置为“.”。然而,在前端,当将区域性更改为“es”时,Angle仍然显示逗号 Startup.cs private List<CultureInfo> cultures = new List<CultureInfo>() { new CultureInfo("es"), new Cu

我为本地化功能添加了多个区域性,将NumberDecimalSeparator和CurrencyDecimalSeparator都设置为“.”。然而,在前端,当将区域性更改为“es”时,Angle仍然显示逗号

Startup.cs

private List<CultureInfo> cultures = new List<CultureInfo>()
            {   new CultureInfo("es"),
                new CultureInfo("en"),
                ....
            }; 
私有列表区域性=新列表()
{新文化信息(“es”),
新文化信息(“en”),
....
}; 
在配置服务中:

services.Configure<RequestLocalizationOptions>(
               opts =>
               {

                   cultures.ForEach(c => c.NumberFormat.NumberDecimalSeparator = ".");
                   cultures.ForEach(c => c.NumberFormat.CurrencyDecimalSeparator = ".");
                   opts.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
                   {
                       var userLang = context?.Request?.Cookies["locale"]?.ToString();   
                       var lang = string.IsNullOrEmpty(userLang) ? "es" : userLang;   
                       return Task.FromResult(new ProviderCultureResult(lang, "en"));
                   }));                       
                   opts.SupportedCultures = cultures;                   
                   opts.SupportedUICultures = cultures;
               });
services.Configure(
选项=>
{
cultures.ForEach(c=>c.NumberFormat.NumberDecimalSeparator=“.”);
cultures.ForEach(c=>c.NumberFormat.CurrencyDecimalSeparator=“.”);
opts.RequestCultureProviders.Insert(0,新的CustomRequestCultureProvider(上下文=>
{
var userLang=context?.Request?.Cookies[“locale”]?.ToString();
var lang=string.IsNullOrEmpty(userLang)?“es”:userLang;
返回Task.FromResult(新ProviderCultureResult(lang,“en”);
}));                       
opts.SupportedCultures=文化;
选择支持教育=文化;
});
在配置中:

var op = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
 app.UseRequestLocalization(op.Value);

 app.UseRewriter(new RewriteOptions().AddRedirect("index.html", "/"));

 app.UseMvc(routes =>
                {routes.MapRoute(
                        name: "default",
                        template: "{controller}/{action=Index}/{id?}"); });
var op=app.ApplicationServices.GetService();
app.UseRequestLocalization(op.Value);
app.UseRewriter(new RewriteOptions().AddRedirect(“index.html”、“/”));
app.UseMvc(路由=>
{routes.MapRoute(
名称:“默认”,
模板:“{controller}/{action=Index}/{id?}”);});
在控制器操作中,我检查是否有逗号被替换为点:

var rqf = Request.HttpContext.Features.Get<IRequestCultureFeature>();           
 var culture = rqf.RequestCulture.Culture;
var rqf=Request.HttpContext.Features.Get();
var culture=rqf.RequestCulture.culture;
是的,它是:

显然Angular忽略了这些设置,有什么想法吗? 有关于文化是如何传递给Angular的信息吗?
有没有办法将响应文化设置为“en”

你似乎很不走运。区域设置当前与货币的前端描述不相关

。当前提供的解决方案(似乎即使在angular的9.0版本中也不会应用此全局货币处理程序)是在货币管道的任何地方应用

似乎将货币与区域设置关联是一种不好的做法

@MickL让我举一个例子,说明为什么只使用LOCALE\u ID的方法会导致问题。 假设我有一个提供德语(de)和英语(en)的应用程序。我在这个应用程序中有欧元价格。 您的方法意味着,当我将LOCALE_ID更改为en时,我的价格将从欧元转换为GBR。 使用货币标识时,这些标识是分开的,可以单独更改

这相当于说,当用户界面收到一个数字时,它不知道你的格式是什么。如果你发送美元作为一个数字,而网站是在德国,那么它需要有一个汇率转换器,或将显示相同的金额在欧元或美元


由于这可能取决于位置、服务和rational,我们几乎到处都在使用管道和格式化指令(尤其是在输入中)。

我知道答案是可以接受的,但可能对您有用

您可以从后端将区域设置发送到前端,然后只应用货币管道

C#:

HTML:

A:{{A |货币:myLocale}

我们可以看到更多的例子

[HttpPost]
public async Task<IActionResult> Post([FromBody]FooDto fooDto)        
{
    return Ok({Locale = "CAD"});
}
myLocale: string;
<p>A: {{ a | currency: myLocale }}</p>