Я хочу защитить свои веб-приложения asp. net core 3.1 с помощью Identity Server 4 (популярных OpenID Connect и OAuth Framework). Я загрузил проект Скорубы IdentityServer4 и пытаюсь изменить его культуру по умолчанию, но у меня возникают проблемы.
Код культуры по умолчанию для этого проекта - «en» и все выходы (метки, сообщения об ошибках, заголовки, просмотры, ...) в этом проекте на английском sh. Я хочу изменить эти выходные данные на персидский и изменить язык сайта на персидский.
Вы можете увидеть исходный код проекта в здесь .
Я изменил некоторые файлы проект, как показано ниже. Файл appsettings.js
:
"CultureConfiguration": {
"Cultures": [ "en", "fa", "fr", "ru", "sv", "zh", "da", "fi" ],
"DefaultCulture": "fa"
}
Класс CultureConfiguration
:
public class CultureConfiguration
{
public static readonly string[] AvailableCultures = { "en", "fa", "fr", "ru", "sv", "zh", "da", "fi" };
public static readonly string DefaultRequestCulture = "fa";
public List<string> Cultures { get; set; }
public string DefaultCulture { get; set; } = DefaultRequestCulture;
}
И, наконец, в его StartupHelpers
классе я изменил тело метода AddMvcWithLocalization
следующим образом :
public static IMvcBuilder AddMvcWithLocalization<TUser, TKey>(this IServiceCollection services, IConfiguration configuration)
where TUser : IdentityUser<TKey>
where TKey : IEquatable<TKey>
{
services.AddLocalization(opts => { opts.ResourcesPath = ConfigurationConsts.ResourcesPath; });
services.TryAddTransient(typeof(IGenericControllerLocalizer<>), typeof(GenericControllerLocalizer<>));
var mvcBuilder = services.AddControllersWithViews(o =>
{
o.Conventions.Add(new GenericControllerRouteConvention());
})
.AddViewLocalization(
LanguageViewLocationExpanderFormat.Suffix,
opts => { opts.ResourcesPath = ConfigurationConsts.ResourcesPath; })
.AddDataAnnotationsLocalization()
.ConfigureApplicationPartManager(m =>
{
m.FeatureProviders.Add(new GenericTypeControllerFeatureProvider<TUser, TKey>());
});
var cultureConfiguration = configuration.GetSection(nameof(CultureConfiguration)).Get<CultureConfiguration>();
services.Configure<RequestLocalizationOptions>(
opts =>
{
// If cultures are specified in the configuration, use them (making sure they are among the available cultures),
// otherwise use all the available cultures
var supportedCultureCodes = (cultureConfiguration?.Cultures?.Count > 0 ?
cultureConfiguration.Cultures.Intersect(CultureConfiguration.AvailableCultures) :
CultureConfiguration.AvailableCultures).ToArray();
if (!supportedCultureCodes.Any()) supportedCultureCodes = CultureConfiguration.AvailableCultures;
var supportedCultures = supportedCultureCodes.Select(c => new CultureInfo(c)).ToList();
// If the default culture is specified use it, otherwise use CultureConfiguration.DefaultRequestCulture ("en")
var defaultCultureCode = string.IsNullOrEmpty(cultureConfiguration?.DefaultCulture) ?
CultureConfiguration.DefaultRequestCulture : cultureConfiguration?.DefaultCulture;
// If the default culture is not among the supported cultures, use the first supported culture as default
if (!supportedCultureCodes.Contains(defaultCultureCode)) defaultCultureCode = supportedCultureCodes.FirstOrDefault();
opts.DefaultRequestCulture = new RequestCulture(defaultCultureCode);
opts.SupportedCultures = supportedCultures;
opts.SupportedUICultures = supportedCultures;
//CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(supportedCultureCodes.First(c => c.Contains("fa")));
});
return mvcBuilder;
}
На самом деле, после этих изменений, код культуры по умолчанию изменился на «fa», но эти выходные данные по-прежнему отображаются на английском sh вместо персидского.
Кто-нибудь может помочь где моя проблема или что мне делать, чтобы решить эту проблему?