c# - iviewlocalizer - globalization and localization asp net core
Establezca CultureInfo en Asp.net Core para tener un archivo. como CurrencyDecimalSeparator en lugar de, (3)
Esto es lo que me resuelve:
Configurando lo siguiente en StartUp.Configure
var cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "€";
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
Me estoy volviendo loco. Solo quiero que la cultura utilizada en toda la aplicación central de Asp.net se establezca en "en-US". Pero nada parece funcionar. ¿Dónde establezco la cultura para toda la aplicación? No estoy interesado en las culturas del navegador del cliente y lo que no. Lo único que parece cambiarlo es cambiar la configuración de idioma de Windows. Solo quiero que la cultura sea determinada desde dentro de la aplicación en sí, no por el cliente.
Lo que he intentado hasta ahora:
- Establecer
<system.web><globalization uiCulture="en" culture="en-US" /></system.web>
en web.config - Establecer
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
yCurrentUICulture
en Startup.Configure e incluso en el controlador. Use
app.UseRequestLocalization(..
como se muestra a continuaciónvar 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);
Pero nada parece cambiar el MonedaDecimalSeparador de (nl-NL) a (en-US).
¿Cómo se puede establecer la cultura?
EDIT: @soren Así es como se ve el método de configuración. He puesto un punto de interrupción en DetermineProviderCultureResult
pero nunca se ha alcanzado al visitar el sitio web.
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"));
}
}
Tu código se ve bien. El tema es tu llamada a
app.UseRequestLocalization();
Tiene que suceder antes de su llamada a
app.UseMvc();
La razón por la que nunca se alcanza tu punto de ruptura es porque nunca llega tan lejos. UseMVC completa la solicitud y devuelve el resultado. Recuerde, el middleware sucede en orden y cualquiera de los middleware puede provocar un cortocircuito en el proceso y detener el procesamiento.
Un poco tarde pero aquí es lo que funcionó para mí:
var defaultDateCulture = "fr-FR";
var ci = new CultureInfo(defaultDateCulture);
ci.NumberFormat.NumberDecimalSeparator = ".";
ci.NumberFormat.CurrencyDecimalSeparator = ".";
// Configure the Localization middleware
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(ci),
SupportedCultures = new List<CultureInfo>
{
ci,
},
SupportedUICultures = new List<CultureInfo>
{
ci,
}
});