簡體   English   中英

Angular 在改變文化后使用逗號而不是點作為小數點分隔符

[英]Angular uses comma instead of dot as decimal separator after changing culture

我為本地化功能添加了多種文化,將 NumberDecimalSeparator 和 CurrencyDecimalSeparator 設置為“。” 對於他們所有人。 然而,在前端 Angular 將文化更改為“es”時仍然顯示逗號。

啟動文件

private List<CultureInfo> cultures = new List<CultureInfo>()
            {   new CultureInfo("es"),
                new CultureInfo("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;
               });

在配置中:

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 rqf = Request.HttpContext.Features.Get<IRequestCultureFeature>();           
 var culture = rqf.RequestCulture.Culture;

是的: 在此處輸入圖片說明

顯然 Angular 忽略了這些設置,有什么想法嗎? 任何信息如何將文化傳遞給 Angular? 任何方式將響應文化設置為“en”?

你似乎很不走運。 語言環境當前與貨幣的前端描述無關。

角度存儲庫中的功能請求 當前提供的解決方案(似乎即使在 9.0 版本的 angular 中也不會應用此全局貨幣處理程序),是在貨幣管道的任何地方應用。

似乎將貨幣與語言環境相關聯被認為是一種不好的做法。

@MickL 讓我舉一個例子,說明為什么只使用 LOCALE_ID 的方法會導致問題。 假設我有一個提供德語 (de) 和英語 (en) 的應用程序。 我在這個應用程序中有歐元價格。 您的方法意味着當我將 LOCALE_ID 更改為 en 時,我的價格將從歐元切換為英鎊。 使用 CURRENCY_ID 時,它們是分開的,可以分開更改。

這幾乎是說 UI 在收到數字時不知道您的格式是什么。 如果您以數字形式發送美元並且該網站是德語,那么它是否需要匯率轉換器或以歐元或美元顯示相同的金額。

並且由於這可能取決於位置、服務和合理性,我們幾乎無法在任何地方使用管道和格式化指令(尤其是在輸入中)。

我知道答案已被接受,但也許對您有用。

您可以從后端將語言環境發送到前端,然后只需應用貨幣管道。

C#:

[HttpPost]
public async Task<IActionResult> Post([FromBody]FooDto fooDto)        
{
    return Ok({Locale = "CAD"});
}

打字稿:

myLocale: string;

HTML:

<p>A: {{ a | currency: myLocale }}</p>

可以在此處查看更多示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM