1. ホーム
  2. c#

Asp.net CoreのCultureInfoにCurrencyDecimalSeparatorとして.を設定する。

2023-08-24 03:02:55

質問

私は気が狂いそうです。私は、Asp.netコアアプリケーション全体で使用されるカルチャを"en-US"に設定したいだけです。しかし、何も動作しないようです。どこで私はアプリケーション全体の文化を設定するのですか?私は、クライアントブラウザの文化やその他に興味がありません。Windowsの言語設定を変更することだけが、それを変えるようです。私は、クライアントによってではなく、アプリケーション自体の中から文化が決定されることを望んでいます。

私がこれまでに試したこと。

  • 設定 <system.web><globalization uiCulture="en" culture="en-US" /></system.web> をweb.configで設定します。
  • 設定する System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;CurrentUICulture をStartup.Configureの中で、さらにはコントローラの中で実行します。
  • 使用する app.UseRequestLocalization(.. のようにします。

        var enUsCulture = new CultureInfo("en-US");
        var localizationOptions = new RequestLocalizationOptions()
        {
            SupportedCultures = new List<CultureInfo>()
            {
                enUsCulture
            },
            SupportedUICultures = new List<CultureInfo>()
            {
                enUsCulture
            },
            DefaultRequestCulture = new RequestCulture(enUsCulture),
            FallBackToParentCultures = false,
            FallBackToParentUICultures = false,
            RequestCultureProviders = null
        };
    
        app.UseRequestLocalization(localizationOptions);
    
    

しかし、CurrencyDecimalSeparator を (nl-NL) , から (en-US) に変更することはできないようです。

どのようにカルチャを設定することができますか?

EDITです。 @soren configureメソッドはこんな感じです。ブレークポイントを DetermineProviderCultureResult にブレークポイントを置いたのですが、ウェブサイトを訪問している間、それがヒットすることはありません。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, FinOsDbContext context)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseIdentity();

        // Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        //TODO: Clean up
        //var cultureInfo = new CultureInfo("en-US");
        //System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
        //System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;

        app.UseRequestLocalization();

        // UseCookieAuthentication..
        // UseJwtBearerAuthentication..

        //add userculture provider for authenticated user
        var requestOpt = new RequestLocalizationOptions();
        requestOpt.SupportedCultures = new List<CultureInfo>
        {
            new CultureInfo("en-US")
        };
        requestOpt.SupportedUICultures = new List<CultureInfo>
        {
            new CultureInfo("en-US")
        };
        requestOpt.RequestCultureProviders.Clear();
        requestOpt.RequestCultureProviders.Add(new SingleCultureProvider());

        app.UseRequestLocalization(requestOpt);

        FinOsDbContext.Initialize(context);
        FinOsDbContext.CreateTestData(context);
    }

    public class SingleCultureProvider : IRequestCultureProvider
    {
        public Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
        {
            return Task.Run(() => new ProviderCultureResult("en-US", "en-US"));
        }
    }

どのように解決するのですか?

これは私のためにそれを解決するものです。

で以下を設定します。 StartUp.Configure

var cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "€";

CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;