2025-05-06 06:45:49 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Threading.Tasks;
|
2025-11-11 19:49:52 +00:00
|
|
|
|
using Erp.Languages.Entities;
|
2025-05-06 06:45:49 +00:00
|
|
|
|
using Volo.Abp.Caching;
|
|
|
|
|
|
using Volo.Abp.DependencyInjection;
|
|
|
|
|
|
using Volo.Abp.Domain.Repositories;
|
|
|
|
|
|
using Volo.Abp.Localization;
|
|
|
|
|
|
|
2025-11-11 19:49:52 +00:00
|
|
|
|
namespace Erp.Languages.Localization;
|
2025-05-06 06:45:49 +00:00
|
|
|
|
|
|
|
|
|
|
[Dependency(ReplaceServices = true)]
|
|
|
|
|
|
public class DatabaseLanguageProvider : ILanguageProvider, ITransientDependency
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly IReadOnlyBasicRepository<Language, Guid> languageRepository;
|
|
|
|
|
|
private readonly IDistributedCache<LanguageListCacheItem> cache;
|
|
|
|
|
|
|
|
|
|
|
|
public const string CacheKey = "Languages";
|
|
|
|
|
|
|
|
|
|
|
|
public DatabaseLanguageProvider(
|
|
|
|
|
|
IReadOnlyBasicRepository<Language, Guid> languageRepository,
|
|
|
|
|
|
IDistributedCache<LanguageListCacheItem> cache)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.languageRepository = languageRepository;
|
|
|
|
|
|
this.cache = cache;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task<IReadOnlyList<LanguageInfo>> GetLanguagesAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
var langs = await cache.GetOrAddAsync(CacheKey, GetLanguagesFromDB);
|
|
|
|
|
|
return langs.Languages;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async Task<LanguageListCacheItem> 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()
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-11-11 19:49:52 +00:00
|
|
|
|
|