в течение 2 дней я ударился головой об эту вещь, не разбираясь с ней.
С. NET Ядро 3.1 для чистого проекта сделано отлично, в рамках проекта одни и те же файлы ресурсов и те же классы не возвращают значение ресурса (без ошибок времени выполнения или ошибок компиляции). Я также пытался удалить все ссылки из ConfigureServices, кроме чистого проекта, но ничего ..
Спасибо тем, кто может дать мне несколько советов!
public void ConfigureServices(IServiceCollection services)
{
// Dependency Injection per leggere Localizzazione File Resources delle lingue
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo("en"),
new CultureInfo("de"),
new CultureInfo("fr"),
new CultureInfo("es"),
new CultureInfo("ru"),
new CultureInfo("ja"),
new CultureInfo("ar"),
new CultureInfo("zh"),
new CultureInfo("en-GB")
};
options.DefaultRequestCulture = new RequestCulture("en");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
services.AddSingleton<CommonLocalizationService>();
services.AddMvc().AddViewLocalization().AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
{
var assemblyName = new AssemblyName(typeof(CommonResources).GetTypeInfo().Assembly.FullName);
return factory.Create(nameof(CommonResources), assemblyName.Name);
};
});
services.AddControllersWithViews();
services.AddMvc(options => {
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
// Aggiungi Supporto Sessioni
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
// File di Configurazione JSON
//services.AddOptions(); // Add functionality to inject IOptions<T>
// File di Configurazione JSON - Add our Config object so it can be injected
services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));
services.Configure<Smtp>(Configuration.GetSection("Smtp"));
services.Configure<MySettings>(Configuration.GetSection("MySettings"));
services.AddSingleton<IMyConfigurationECommerce, MyConfigurationECommerce>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseSession(); // Aggiungi Supporto Sessioni
// Dependency Injection Option per leggere Localizzazione File Resources delle lingue
var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
app.UseRequestLocalization(localizationOptions);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
public class CommonLocalizationService
{
private readonly IStringLocalizer localizer;
public CommonLocalizationService(IStringLocalizerFactory factory)
{
var assemblyName = new AssemblyName(typeof(CommonResources).GetTypeInfo().Assembly.FullName);
localizer = factory.Create(nameof(CommonResources), assemblyName.Name);
}
public string Get(string key)
{
return localizer[key];
}
}
@inject CommonLocalizationService localizer
@model WebApplication6.Models.ContactModel
<h1>@localizer.Get("Contact")</h1>
В Проект Root У меня есть:
/Resources/CommonResources.cs
/Resources/CommonResources.de.resx
/Resources/CommonResources.en.resx