You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.7 KiB
47 lines
1.7 KiB
using Microsoft.Extensions.Hosting; |
|
using Microsoft.Extensions.Options; |
|
using System; |
|
using System.Threading; |
|
using System.Threading.Tasks; |
|
using Volo.Abp.Localization; |
|
|
|
namespace Sanhe.Abp.Localization.Dynamic; |
|
|
|
public class DynamicLocalizationInitializeService : BackgroundService |
|
{ |
|
protected ILocalizationStore Store { get; } |
|
protected AbpLocalizationOptions LocalizationOptions { get; } |
|
protected AbpLocalizationDynamicOptions DynamicOptions { get; } |
|
|
|
public DynamicLocalizationInitializeService( |
|
ILocalizationStore store, |
|
IOptions<AbpLocalizationOptions> localizationOptions, |
|
IOptions<AbpLocalizationDynamicOptions> dynamicOptions) |
|
{ |
|
Store = store; |
|
DynamicOptions = dynamicOptions.Value; |
|
LocalizationOptions = localizationOptions.Value; |
|
} |
|
|
|
protected async override Task ExecuteAsync(CancellationToken stoppingToken) |
|
{ |
|
try |
|
{ |
|
foreach (var resource in LocalizationOptions.Resources) |
|
{ |
|
foreach (var contributor in resource.Value.Contributors) |
|
{ |
|
if (contributor.GetType().IsAssignableFrom(typeof(DynamicLocalizationResourceContributor))) |
|
{ |
|
var resourceLocalizationDict = await Store |
|
.GetLocalizationDictionaryAsync( |
|
resource.Value.ResourceName, |
|
stoppingToken); |
|
DynamicOptions.AddOrUpdate(resource.Value.ResourceName, resourceLocalizationDict); |
|
} |
|
} |
|
} |
|
} |
|
catch (OperationCanceledException) { } // 忽略此异常 |
|
} |
|
}
|
|
|