我疯了.我只想将整个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);
Run Code Online (Sandbox Code Playgroud)但似乎没有任何东西可以将CurrencyDecimalSeparator从(nl-NL)更改为(en-US).
如何设定文化?
编辑:
@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"));
}
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*erk 69
这就是为我解决的问题:
在中设置以下内容 StartUp.Configure
var cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "€";
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
Run Code Online (Sandbox Code Playgroud)
ben*_*aay 22
有点晚了,但这对我有用:
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,
}
});
Run Code Online (Sandbox Code Playgroud)
Rez*_*abi 21
本地化在Startup.ConfigureServices方法中配置:
CultureInfo[] supportedCultures = new[]
{
new CultureInfo("ar"),
new CultureInfo("fa"),
new CultureInfo("en")
};
services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new RequestCulture("ar");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
};
});
Run Code Online (Sandbox Code Playgroud)
启动.配置方法
app.UseRequestLocalization();
Run Code Online (Sandbox Code Playgroud)
然后UseRequestLocalization初始化一个RequestLocalizationOptions对象。这应该至少放在您的UseMvc调用之前
改变文化:
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl);
}
Run Code Online (Sandbox Code Playgroud)
当前语言:
var currentLanguage = HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture.Name;
Run Code Online (Sandbox Code Playgroud)
Min*_*ata 12
你的代码看起来很好.问题是你的电话
app.UseRequestLocalization();
Run Code Online (Sandbox Code Playgroud)
需要在你打电话之前发生
app.UseMvc();
Run Code Online (Sandbox Code Playgroud)
你的断点永远不会被击中的原因是因为它从未走得那么远.UseMVC完成请求并返回结果.请记住,中间件按顺序发生,任何一个中间件都可以使进程短路并停止进一步处理.
| 归档时间: |
|
| 查看次数: |
36916 次 |
| 最近记录: |