Ich habe versucht, Lokalisierung für meine ASP.NET Core 1.0 RTM-Webanwendung nach microsofts documentation zu implementieren, und ich kann es einfach nicht zum Laufen bringen. Das Problem, das ich habe, ist, dass es immer Zeichenfolgen aus der englischen Ressourcendatei anzeigt, egal wie ich die Kultur einstelle.ASP.NET Core 1.0 RTM-Lokalisierung funktioniert nicht
Wenn jemand 5 Minuten ihrer Zeit hat, wäre ich wirklich dankbar für Ihre Eingabe.
Hier ist mein Startup.cs Inhalt, die die Lokalisierung in Bezug auf:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.SubFolder)
.AddDataAnnotationsLocalization();
services.AddScoped<LocalizationFilter>();
services.AddLocalization(options => options.ResourcesPath = "Resources");
var supportedCultures = new List<CultureInfo>{
new CultureInfo("en-US"),
new CultureInfo("sl-SI"),
new CultureInfo("de-DE"),
new CultureInfo("hr-HR")
};
services.Configure<RequestLocalizationOptions>(options =>
{
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US"),
new CultureInfo("en-US"));
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
...
var supportedCultures = new List<CultureInfo>{
new CultureInfo("en-US"),
new CultureInfo("sl-SI"),
new CultureInfo("de-DE"),
new CultureInfo("hr-HR")
};
var requestLocalizationOptions = new RequestLocalizationOptions
{
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures,
DefaultRequestCulture = new RequestCulture(new CultureInfo("en-US"),
new CultureInfo("en-US"))
};
app.UseRequestLocalization(requestLocalizationOptions);
}
Und das ist, wie ich die Kultur innerhalb OnActionExecuting bin Wechsel in meiner Action
actionContext.HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) });
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
Ich habe auch versucht, zu tun Dies auf meinem Controller ohne Glück. In meinen Ansichten verwende ich @inject IViewLocalizer Localizer
, um lokalisierte Strings mit @Localizer["Name"]
anzuzeigen.
- Resources/Ansichten/controller/ViewName.en.resx
- Resources/Ansichten/controller/ViewName.sl:
Mein resoucres werden im Ordner Resources/Ansichten/controller wie so gelegen .resx
- ...
der String angezeigt ist immer von der .en Ressource Datei, egal wie ich versuche, die Kultur zu verändern. Gibt es etwas, das mir fehlt? Gibt es noch etwas, was ich tun soll? Es scheint, das Problem, das ich habe, ist mit der Einstellung der Sprache. Basierend auf der Dokumentation, die Sie nur den Cookie mit Response.Cookies.Append
setzen sollen, aber ich habe auch versucht, mit CultureInfo.CurrentCulture
als Thread.CurrentThread.CurentCulture
ist nicht mehr verfügbar.
Ich weiß wirklich nicht, was ich vermisse. Irgendwelche Ideen überhaupt?
Vielen Dank. Ja, meine Lokalisierung funktioniert tatsächlich, wenn ich eine Lokalisierung in OnResourceExecuting fest codiere. Das Problem, das ich jetzt habe, ist die erwünschte Kultur zu bekommen. Ich versuche, die Kultur von der URL wie http: // localhost: 5000/sl/otherStuff zu bekommen. Gibt es eine Möglichkeit, wie ich es in OnResourceExecuting bekommen kann? –
Wenn Sie Filter verwenden, haben Sie Zugriff auf die Routendaten der aktuellen Anfrage, so dass Sie 'httpContext.GetRouteValue (" culture-key-name ")' ausführen können (Sie müssten den 'Microsoft.AspNetCore.Routing' Namespace hinzufügen, um die' ' GetRouteValue "und" GetRouteData "Erweiterungen. –
Vielen Dank für Ihre Hilfe. Jetzt, da ich alles ausprobiert habe, bestätige ich, dass es funktioniert. Danke. –