private static IServiceCollection AddXaki(this IServiceCollection services, XakiOptions xakiOptions) { services.AddHttpContextAccessor(); services.Configure <RequestLocalizationOptions>(options => { var supportedCultures = xakiOptions .SupportedLanguages .Select(i => new CultureInfo(i)) .ToList(); options.DefaultRequestCulture = new RequestCulture("en", "en"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; // TODO support RouteDataRequestCultureProvider (https://joonasw.net/view/aspnet-core-localization-deep-dive) }); services.AddScoped <IObjectLocalizer>(provider => new ObjectLocalizer { RequiredLanguages = new HashSet <string>(xakiOptions.RequiredLanguages), OptionalLanguages = new HashSet <string>(xakiOptions.OptionalLanguages), LanguageResolvers = new List <ILanguageResolver> { new RequestLanguageResolver(provider.GetService <IHttpContextAccessor>()), new CultureInfoLanguageResolver(), new DefaultLanguageResolver("en") } }); if (xakiOptions.EnablePerCallLocalizeExtensions) { var provider = services.BuildServiceProvider(); ObjectLocalizerConfig.Set(() => provider.GetService <IObjectLocalizer>()); } return(services); }
public static IEnumerable <T> Localize <T>(this IEnumerable <T> items, string languageCode, LocalizationDepth depth = LocalizationDepth.Shallow) where T : class, ILocalizable { return(ObjectLocalizerConfig.Get().Localize(items, languageCode, depth)); }
public static T Localize <T>(this T item, LocalizationDepth depth = LocalizationDepth.Shallow) where T : class, ILocalizable { return(ObjectLocalizerConfig.Get().Localize(item, depth)); }