Когда я пытаюсь выполнить локализацию в ASP.NET, она иногда работает локально, но в основном только тогда, когда я ее публикую.Но когда я настроил аутентификацию с помощью персонализированного ApplicationUser, он перестал работать (локализация) даже при публикации.
Мой запуск
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddLocalization(opts =>
{
opts.ResourcesPath = "Resources";
});
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix,
opts => { opts.ResourcesPath = "Resources"; })
.AddDataAnnotationsLocalization();
services.Configure<RequestLocalizationOptions>(opts =>
{
var supportedCultures = new List<CultureInfo> {
new CultureInfo("en"),
new CultureInfo("pl"),
};
opts.SupportedCultures = supportedCultures;
opts.SupportedUICultures = supportedCultures;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseRequestLocalization(app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value);
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
HomeController
public class HomeController : Controller
{
private readonly IStringLocalizer<HomeController> localizer;
public HomeController(IStringLocalizer<HomeController> localizer)
{
this.localizer = localizer;
}
public IActionResult Index()
{
ViewData["Message"] = localizer["Message2"];
ViewData["Title"] = localizer["Title2"];
return View();
}
[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);
}
}
в представлении
@ViewData["Message"]
путь к файлам resx хорош, я думаю, потому что он работал некоторое время.При вызове моего Message2 я должен получить значение Message3, но оно возвращает только Message2.Возможно, что-то не так в конвейере
Вот эта сторона в Azure https://webapplication320190605114630.azurewebsites.net
Я обнаружил, что сейчас он пытается найти мой resx по этому пути: SearchedLocation = "PWI-SGGW3.Resources.PWI_SGGW3.Controllers.HomeController ", не знаю почему
Хорошо, я понял, у меня другое имя решения, чем у моего namespac