C# Angular在更改区域性后使用逗号而不是点作为小数分隔符
我为本地化功能添加了多个区域性,将NumberDecimalSeparator和CurrencyDecimalSeparator都设置为“.”。然而,在前端,当将区域性更改为“es”时,Angle仍然显示逗号 Startup.csC# 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
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>