在应用程序运行时更新 RequestLocalizationOptions 并在 .NET 中添加新文化

问题描述 投票:0回答:0

如何在应用程序运行时更新 RequestLocalizationOptions 并添加新文化以避免重新启动应用程序?

您好!我有一个支持本地化的应用程序。所有资源和价值都存储在数据库中。我将向您展示我是如何配置 RequestLocalizationOptions 的。

public static IServiceCollection AddRequestLocalizationOptions(this IServiceCollection services)
        {
            services.Configure<RequestLocalizationOptions>(async options =>
            {
                using var scope = services?.BuildServiceProvider().CreateScope();
                var cultureService = scope!.ServiceProvider!.GetService<ICultureService>();
                if (cultureService is not null)
                {
                    var cultures = await cultureService.GetFromDatabase(x => x.Available == true);

                    IList<CultureInfo> supportedCultures = new List<CultureInfo>();
                    foreach (var culture in cultures)
                    {
                        supportedCultures.Add(new CultureInfo($"{culture.language}-{culture.CountryCodeIso2}")); // en-US, it-IT and so on
                    }

                    options.DefaultRequestCulture = new RequestCulture("en-US");
                    options.SupportedCultures = supportedCultures;
                    options.SupportedUICultures = supportedCultures;
                    options.RequestCultureProviders = new List<IRequestCultureProvider>
                {
                    new CookieRequestCultureProvider()
                };

                    var cookieRequestCultureProvider = options.RequestCultureProviders.OfType<CookieRequestCultureProvider>().FirstOrDefault();
                    if (cookieRequestCultureProvider is not null)
                        cookieRequestCultureProvider.CookieName = CookieDefaults.CultureKey;
                }
            });

            return services;
        }

最后的配置步骤是使用 UseRequestLocalization 方法启用本地化中间件。

app.UseRequestLocalization();

UseRequestLocalization方法初始化我们上面配置的RequestLocalizationOptions对象。 UseRequestLocalization 通过根据用户的语言偏好设置每个用户请求的文化和 UI 文化,实现本地化和国际化。

除一种情况外,一切正常。假设我在数据库中有 3 种文化可用,这意味着 options.SupportedCultures 它将包含所有 3 种文化。但是,如果我将更新数据库并在应用程序运行时添加另外 3 种可用的文化,我如何更新 RequestLocalizationOptions 以指定现在我支持 6 种文化而无需重新启动应用程序?因为 AddRequestLocalizationOptions 扩展只会在启动时执行一次,但我需要以某种方式在应用程序运行时刷新选项。如果我重新启动应用程序,它会按预期工作,但我不想在每次添加新文化时都在生产时重新启动应用程序..

c# asp.net .net localization culture
© www.soinside.com 2019 - 2024. All rights reserved.