using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Erp.Languages.Entities; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Repositories; using Volo.Abp.Localization; namespace Erp.Languages.Localization; [Dependency(ReplaceServices = true)] public class DatabaseLanguageProvider : ILanguageProvider, ITransientDependency { private readonly IReadOnlyBasicRepository languageRepository; private readonly IDistributedCache cache; public const string CacheKey = "Languages"; public DatabaseLanguageProvider( IReadOnlyBasicRepository languageRepository, IDistributedCache cache) { this.languageRepository = languageRepository; this.cache = cache; } public async Task> GetLanguagesAsync() { var langs = await cache.GetOrAddAsync(CacheKey, GetLanguagesFromDB); return langs.Languages; } private async Task GetLanguagesFromDB() { var langs = await languageRepository.GetListAsync(); return new LanguageListCacheItem { Languages = langs.OrderBy(o => o.DisplayName) .Select(a => new LanguageInfo(a.CultureName, a.UiCultureName, a.DisplayName)) .ToList() }; } }