локализация View not Возвращаемое значение из файла ресурсов - PullRequest
0 голосов
/ 25 апреля 2020

в течение 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
...