Sascha Manns Ответов: 0

Как локализовать поставщика данных


У меня есть класс DataProvider:

namespace WilderBlog.Services.DataProviders
{
    public abstract class DataProvider<T>
    {
        protected string _path;

        public DataProvider(IHostEnvironment env, string path)
        {
            _path = Path.Combine(env.ContentRootPath, $@"Data{Path.DirectorySeparatorChar}{path}");
        }

        public virtual IEnumerable<T> Get()
        {
            var json = File.ReadAllText(_path);
            return JsonConvert.DeserializeObject<List<T>>(json);
        }

    }
}


А также производный класс:

namespace WilderBlog.Services.DataProviders
{
    public class CertsProvider : DataProvider<Cert>
    {
        public CertsProvider(IHostEnvironment env) : base(env, "certificates.json")
        {

        }

        public override IEnumerable<Cert> Get()
        {
            return base.Get().OrderByDescending(p => p.Id).ToList();
        }
    }

    public class Cert
    {
        public int Id { get; set; }
        public string Certtitle { get; set; }
        public string Provider { get; set; }
        public string Years { get; set; }
        public string Content { get; set; }
        public string Link { get; set; }
    }
}


В Стартапе.ConfigureServices:

svcs.Configure<RequestLocalizationOptions>(options =>
            {
                List<CultureInfo> supportedCultures = new List<CultureInfo>
                {
                    new CultureInfo("en-US"),
                    new CultureInfo("de-DE")
                };

                options.DefaultRequestCulture = new RequestCulture("en-US");
                options.SupportedCultures = supportedCultures;
                options.SupportedUICultures = supportedCultures;
            });


И в стартапе тоже.Конфигурировать:

app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();

            IList<CultureInfo> supportedCultures = new List<CultureInfo>
            {
                new CultureInfo("en-US"),
                new CultureInfo("de-DE"),
            };

            var requestLocalizationOptions = new RequestLocalizationOptions
            {
                DefaultRequestCulture = new RequestCulture("en-US"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            };

            var requestProvider = new RouteDataRequestCultureProvider();
            requestLocalizationOptions.RequestCultureProviders.Insert(0, requestProvider);

            var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            app.UseRequestLocalization(options.Value);


Вид локализуется отлично. К сожалению, я не нашел ни одного примера использования локализующего DataProvider.

Я думаю, что файлы json не локализуются напрямую. Но я думал, чтобы создать его, как сертификаты.JSON и сертификаты сайт.в JSON

Может быть, кто-нибудь может помочь?

Что я уже пробовал:

Я попытался добавить новый DataProvider для немецкого файла json:

namespace WilderBlog.Services.DataProviders
{
    public class CertsDeProvider : DataProvider
    {
        public CertsDeProvider(IHostEnvironment env) : base(env, "certificatesDe.json")
        {
        }
 
        public override IEnumerable Get()
        {
            return base.Get().OrderByDescending(p => p.Id).ToList();
        }
    }
 
    public class CertDe
    {
        public int Id { get; set; }
        public string Certtitle { get; set; }
        public string Provider { get; set; }
        public string Years { get; set; }
        public string Content { get; set; }
        public string Link { get; set; }
    }
}


Я добавил в автозагрузку.в CS:

if (CultureInfo.CurrentCulture.Name == "de-DE")
{
    svcs.AddScoped();
}
else
{
    svcs.AddScoped();
}


В cshtml я добавил:

@if (CultureInfo.CurrentCulture.Name == "de-DE")
{
    @inject WilderBlog.Services.DataProviders.CertsDeProvider certs
}
else
{
    @inject WilderBlog.Services.DataProviders.CertsProvider certs
}


Но во время выполнения и доступа к сайту я получаю:
InvalidOperationException: нет службы для типа 'WilderBlog.Услуги.Поставщики данных.CertsProvider' был зарегистрирован.

0 Ответов