Lokalisierung in ASP.Net-Kern-MVC funktioniert nicht - Ressourcendatei kann nicht gefunden werden
eim Versuch, meine Anwendung zu lokalisieren, habe ich die folgenden Schritte ausgeführt:https: //docs.asp.net/en/latest/fundamentals/localization.htm
Hier ist mein Code:
Startup.cs
public List<IRequestCultureProvider> RequestCultureProviders { get; private set; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(options => options.ResourcesPath = "Resources")
.AddDataAnnotationsLocalization();
services.AddOptions();
services.AddTransient<IViewRenderingService, ViewRenderingService>();
services.AddTransient<IEmailSender, EmailSender>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(locOptions.Value);
app.UseStaticFiles();
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory())),
EnableDirectoryBrowsing = true
});
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("fr"),
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("fr"),
// Formatting numbers, dates, etc.
SupportedCultures = supportedCultures,
// UI strings that we have localized.
SupportedUICultures = supportedCultures,
RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider
{
QueryStringKey = "culture",
UIQueryStringKey = "ui-culture"
}
}
});
}
MyController.cs
public class MyController : Controller
{
private readonly IViewRenderingService _viewRenderingService;
private IStringLocalizer<MyController> _localizer;
private MyOptions _options;
//Constructor for dependency injection principle
public MyController(IViewRenderingService viewRenderingService, IStringLocalizer<MyController> localizer, IOptions<MyOptions> options)
{
_viewRenderingService = viewRenderingService;
_localizer = localizer;
_options = options.Value;
}
[HttpGet]
public string Get()
{
// _localizer["Name"]
return _localizer["Product"];
}
}
Das*.resx
-Datei wird im @ gespeicheResources
Ordner mit dem NamenControllers.MyController.fr.resx
(mit einem Eintrag für "Produkt").
Die Ressourcendatei kann jedoch nicht gefunden werden, und "Produkt" wird nie in französischer Sprache zurückgegeben. Ich verwende Querystring, also hier ist die Abfragezeichenfolge:
localhost:3333/my?culture=fr
Auch in der Ansicht,@Localizer["Product"]
gibt "Produkt" zurück.
Kann mir jemand helfen, das zu finden, was fehlt?
BEARBEITEN
Nach einigen Nachforschungen stellte ich fest, dass sich die Kultur ändert, die Ressourcendatei jedoch nicht gefunden werden kann. Ich benutze VS2015. Kann jemand helfen