@ -1,5 +1,6 @@
using System ;
using System ;
using System.Collections.Generic ;
using System.Collections.Generic ;
using System.Linq ;
using System.Threading.Tasks ;
using System.Threading.Tasks ;
using Microsoft.Extensions.DependencyInjection ;
using Microsoft.Extensions.DependencyInjection ;
using Microsoft.Extensions.FileProviders ;
using Microsoft.Extensions.FileProviders ;
@ -19,7 +20,6 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
private Dictionary < string , ILocalizationDictionary > ? _d ictionaries ;
private Dictionary < string , ILocalizationDictionary > ? _d ictionaries ;
private bool _ subscribedForChanges ;
private bool _ subscribedForChanges ;
private readonly object _ syncObj = new object ( ) ;
private readonly object _ syncObj = new object ( ) ;
private LocalizationResourceBase _ resource = default ! ;
protected VirtualFileLocalizationResourceContributorBase ( string virtualPath )
protected VirtualFileLocalizationResourceContributorBase ( string virtualPath )
{
{
@ -28,7 +28,6 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
public virtual void Initialize ( LocalizationResourceInitializationContext context )
public virtual void Initialize ( LocalizationResourceInitializationContext context )
{
{
_ resource = context . Resource ;
_ virtualFileProvider = context . ServiceProvider . GetRequiredService < IVirtualFileProvider > ( ) ;
_ virtualFileProvider = context . ServiceProvider . GetRequiredService < IVirtualFileProvider > ( ) ;
}
}
@ -88,15 +87,12 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
private Dictionary < string , ILocalizationDictionary > CreateDictionaries ( )
private Dictionary < string , ILocalizationDictionary > CreateDictionaries ( )
{
{
var d ictionaries = new Dictionary < string , ILocalizationDictionary > ( ) ;
var rawD ictionaries = new Dictionary < string , Dictionary < string , LocalizedString > > ( ) ;
foreach ( var file in _ virtualFileProvider . GetDirectoryContents ( _ virtualPath ) )
foreach ( var file in _ virtualFileProvider . GetDirectoryContents ( _ virtualPath )
. Where ( f = > ! f . IsDirectory & & CanParseFile ( f ) )
. OrderBy ( f = > f . Name , StringComparer . Ordinal ) )
{
{
if ( file . IsDirectory | | ! CanParseFile ( file ) )
{
continue ;
}
var dictionary = CreateDictionaryFromFile ( file ) ;
var dictionary = CreateDictionaryFromFile ( file ) ;
if ( dictionary = = null )
if ( dictionary = = null )
@ -104,15 +100,19 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
continue ;
continue ;
}
}
if ( dictionaries . ContainsKey ( dictionary . CultureName ) )
if ( ! rawDictionaries . TryGetValue ( dictionary . CultureName , out var raw ) )
{
{
throw new AbpException ( $"{file.GetVirtualOrPhysicalPathOrNull()} dictionary has a culture name '{dictionary.CultureName}' which is already defined! Localization resource: {_resource.ResourceName}" ) ;
raw = new Dictionary < string , LocalizedString > ( ) ;
rawDictionaries [ dictionary . CultureName ] = raw ;
}
}
dictionaries [ dictionary . CultureName ] = dictionary ;
dictionary . Fill ( raw ) ;
}
}
return dictionaries ;
return rawDictionaries . ToDictionary (
kvp = > kvp . Key ,
kvp = > ( ILocalizationDictionary ) new StaticLocalizationDictionary ( kvp . Key , kvp . Value )
) ;
}
}
protected abstract bool CanParseFile ( IFileInfo file ) ;
protected abstract bool CanParseFile ( IFileInfo file ) ;