ala*_*lan 6 localization asp.net-core-mvc .net-core
我已经通过以下方法使用单个MVC视图实现RequestLocalization了es-ES(注意:此代码仅压缩为最相关的部分):
启动文件
public void ConfigureServices(IServiceCollection services)
{
services.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix,
opts =>
{
opts.ResourcesPath = "Resources";
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var english = "en-US";
var englishRequestCulture = new RequestCulture(culture: english, uiCulture: english);
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("es-ES")
};
var options = new RequestLocalizationOptions
{
DefaultRequestCulture = englishRequestCulture,
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
app.UseRequestLocalization(options);
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
当传递culture=en-US或culture=es-ES作为查询字符串参数时,此方法非常有效。我的期望是默认文化应为en-US未提供文化时。但是,当我不提供文化参数时,我的视图默认为es-ES。我已经确认所有其他本地化提供程序也默认设置为en-US。
我还应该注意,我尝试通过进行本地化,ConfigureServices()但根本无法正常运行:
services.Configure<RequestLocalizationOptions>(
options =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("es-ES")
};
options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我自己也有同样的问题。看看您的HTTP请求!它们是否包含Accept-Language设置为es-ES(或其他任何内容)的标头?这样您的本地化中间件就可以正常工作了。三个默认值之一RequestCultureProvider,即AcceptLanguageHeaderRequestCultureProvider尝试通过执行您所执行的操作(查找Accept-Language标题)来确定区域性。
所以,不,定位中间件也不能忽视DefaultRequestCulture,因为你和以前的答案建议。
经过多次试验和错误,我确定设置该DefaultRequestCulture属性没有影响,因此CookieRequestCultureProvider实际上是默认的es-ES(尽管我不完全确定为什么,运行的计算机设置为英语和美国语言环境)。
作为解决方法,我修改了现有Configure()方法以删除其他(当前未使用的)提供程序:
private void ConfigureApplicationLocalization(IApplicationBuilder app)
{
var english = "en-US";
var englishRequestCulture = new RequestCulture(culture: english, uiCulture: english);
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("es-ES")
};
var options = new RequestLocalizationOptions
{
DefaultRequestCulture = englishRequestCulture,
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
//RequestCultureProvider requestProvider = options.RequestCultureProviders.OfType<AcceptLanguageHeaderRequestCultureProvider>().First();
//requestProvider.Options.DefaultRequestCulture = englishRequestCulture;
RequestCultureProvider requestProvider = options.RequestCultureProviders.OfType<CookieRequestCultureProvider>().First();
options.RequestCultureProviders.Remove(requestProvider);
app.UseRequestLocalization(options);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |