Пример #1
0
        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);
        }
Пример #2
0
 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));
 }
Пример #3
0
 public static T Localize <T>(this T item, LocalizationDepth depth = LocalizationDepth.Shallow) where T : class, ILocalizable
 {
     return(ObjectLocalizerConfig.Get().Localize(item, depth));
 }