Как локализовать поставщика данных
У меня есть класс 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' был зарегистрирован.