mirror of https://github.com/abpframework/abp.git
21 changed files with 256 additions and 233 deletions
@ -1,16 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public interface ILocalizationDictionaryProvider |
|||
{ |
|||
IDictionary<string, ILocalizationDictionary> Dictionaries { get; } |
|||
|
|||
event EventHandler Updated; |
|||
|
|||
void Initialize(LocalizationResourceInitializationContext context); |
|||
|
|||
void Extend(ILocalizationDictionaryProvider dictionaryProvider); |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public interface ILocalizationResourceContributor |
|||
{ |
|||
event EventHandler Updated; |
|||
|
|||
List<ILocalizationDictionary> GetDictionaries(LocalizationResourceInitializationContext context); |
|||
} |
|||
} |
|||
@ -1,47 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public abstract class LocalizationDictionaryProviderBase : ILocalizationDictionaryProvider |
|||
{ |
|||
public IDictionary<string, ILocalizationDictionary> Dictionaries { get; } |
|||
|
|||
public event EventHandler Updated; |
|||
|
|||
protected LocalizationDictionaryProviderBase() |
|||
{ |
|||
Dictionaries = new Dictionary<string, ILocalizationDictionary>(); |
|||
} |
|||
|
|||
public virtual void Initialize(LocalizationResourceInitializationContext context) |
|||
{ |
|||
} |
|||
|
|||
public virtual void Extend(ILocalizationDictionaryProvider dictionaryProvider) |
|||
{ |
|||
foreach (var dictionary in dictionaryProvider.Dictionaries.Values) |
|||
{ |
|||
Extend(dictionary); |
|||
} |
|||
} |
|||
|
|||
protected virtual void Extend(ILocalizationDictionary dictionary) |
|||
{ |
|||
var existingDictionary = Dictionaries.GetOrDefault(dictionary.CultureName); |
|||
if (existingDictionary == null) |
|||
{ |
|||
Dictionaries[dictionary.CultureName] = dictionary; |
|||
} |
|||
else |
|||
{ |
|||
existingDictionary.Extend(dictionary); |
|||
} |
|||
} |
|||
|
|||
protected virtual void OnUpdated() |
|||
{ |
|||
Updated.InvokeSafely(this); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
//TODO: Delete this class!
|
|||
public abstract class LocalizationResourceContributorBase : ILocalizationResourceContributor |
|||
{ |
|||
public event EventHandler Updated; |
|||
|
|||
public abstract List<ILocalizationDictionary> GetDictionaries(LocalizationResourceInitializationContext context); |
|||
|
|||
protected virtual void OnUpdated() |
|||
{ |
|||
Updated.InvokeSafely(this); |
|||
} |
|||
} |
|||
} |
|||
@ -1,10 +1,37 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public class LocalizationResourceDictionary : Dictionary<Type, LocalizationResource> |
|||
{ |
|||
|
|||
public LocalizationResource Add<TResouce>([CanBeNull] string defaultCultureName = null) |
|||
{ |
|||
return Add(typeof(TResouce), defaultCultureName); |
|||
} |
|||
|
|||
public LocalizationResource Add(Type resourceType, [CanBeNull] string defaultCultureName = null) |
|||
{ |
|||
if (ContainsKey(resourceType)) |
|||
{ |
|||
throw new AbpException("This resource is already added before: " + resourceType.AssemblyQualifiedName); |
|||
} |
|||
|
|||
return this[resourceType] = new LocalizationResource(resourceType, defaultCultureName); |
|||
} |
|||
|
|||
public LocalizationResource Get<TResource>() |
|||
{ |
|||
var resourceType = typeof(TResource); |
|||
|
|||
var resource = this.GetOrDefault(resourceType); |
|||
if (resource == null) |
|||
{ |
|||
throw new AbpException("Can not find a resource with given type: " + resourceType.AssemblyQualifiedName); |
|||
} |
|||
|
|||
return resource; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,80 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Localization.VirtualFiles.Json; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public static class LocalizationResourceExtensions |
|||
{ |
|||
public static LocalizationResource AddVirtualJson( |
|||
[NotNull] this LocalizationResource localizationResource, |
|||
[NotNull] string virtualPath) |
|||
{ |
|||
Check.NotNull(localizationResource, nameof(localizationResource)); |
|||
Check.NotNull(virtualPath, nameof(virtualPath)); |
|||
|
|||
localizationResource.Contributors.Add(new JsonVirtualFileLocalizationResourceContributor( |
|||
virtualPath.EnsureStartsWith('/') |
|||
)); |
|||
|
|||
return localizationResource; |
|||
} |
|||
|
|||
public static LocalizationResource AddBaseTypes( |
|||
[NotNull] this LocalizationResource localizationResource, |
|||
[NotNull] params Type[] types) |
|||
{ |
|||
Check.NotNull(localizationResource, nameof(localizationResource)); |
|||
Check.NotNull(types, nameof(types)); |
|||
|
|||
foreach (var type in types) |
|||
{ |
|||
localizationResource.BaseResourceTypes.AddIfNotContains(type); |
|||
} |
|||
|
|||
return localizationResource; |
|||
} |
|||
|
|||
//public static LocalizationResource AddVirtualJson<TResource>(
|
|||
// [NotNull] this LocalizationResourceDictionary resourceDictionary,
|
|||
// [CanBeNull] string defaultCultureName,
|
|||
// [NotNull] string virtualPath)
|
|||
//{
|
|||
// Check.NotNull(resourceDictionary, nameof(resourceDictionary));
|
|||
// Check.NotNull(virtualPath, nameof(virtualPath));
|
|||
|
|||
// return resourceDictionary
|
|||
// .Add<TResource>(defaultCultureName)
|
|||
// .AddVirtualJson(virtualPath);
|
|||
//}
|
|||
|
|||
//public static LocalizationResource ExtendWithVirtualJson<TResource>(
|
|||
// [NotNull] this LocalizationResourceDictionary resourceDictionary,
|
|||
// [NotNull] string virtualPath)
|
|||
//{
|
|||
// Check.NotNull(resourceDictionary, nameof(resourceDictionary));
|
|||
|
|||
// return resourceDictionary
|
|||
// .Get<TResource>()
|
|||
// .AddVirtualJson(virtualPath);
|
|||
//}
|
|||
|
|||
//public static LocalizationResource AddBaseTypes<TResource>(
|
|||
// [NotNull] this LocalizationResourceDictionary resourceDictionary,
|
|||
// [NotNull] params Type[] types)
|
|||
//{
|
|||
// Check.NotNull(resourceDictionary, nameof(resourceDictionary));
|
|||
// Check.NotNull(types, nameof(types));
|
|||
|
|||
// var localizationResource = resourceDictionary.Get<TResource>();
|
|||
|
|||
// foreach (var type in types)
|
|||
// {
|
|||
// localizationResource.BaseResourceTypes.AddIfNotContains(type);
|
|||
// }
|
|||
|
|||
// return localizationResource;
|
|||
//}
|
|||
} |
|||
} |
|||
@ -1,77 +0,0 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Localization.VirtualFiles.Json; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public static class LocalizationResourceListExtensions |
|||
{ |
|||
public static LocalizationResource AddVirtualJson<TResource>( |
|||
[NotNull] this LocalizationResourceDictionary resourceDictionary, |
|||
[CanBeNull] string defaultCultureName, //TODO: defaultCultureName should be optional (and second argument) because it's not required for the LocalizationResource!
|
|||
[NotNull] string virtualPath) |
|||
{ |
|||
Check.NotNull(resourceDictionary, nameof(resourceDictionary)); |
|||
Check.NotNull(virtualPath, nameof(virtualPath)); |
|||
|
|||
virtualPath = virtualPath.EnsureStartsWith('/'); |
|||
|
|||
var resourceType = typeof(TResource); |
|||
|
|||
if (resourceDictionary.ContainsKey(resourceType)) |
|||
{ |
|||
throw new AbpException("There is already a resource with given type: " + resourceType.AssemblyQualifiedName); |
|||
} |
|||
|
|||
return resourceDictionary[resourceType] = new LocalizationResource( |
|||
resourceType, |
|||
defaultCultureName, |
|||
new JsonEmbeddedFileLocalizationDictionaryProvider( |
|||
virtualPath |
|||
) |
|||
); |
|||
} |
|||
|
|||
public static void ExtendWithVirtualJson<TResource>( |
|||
[NotNull] this LocalizationResourceDictionary resourceDictionary, |
|||
[NotNull] string virtualPath) |
|||
{ |
|||
Check.NotNull(resourceDictionary, nameof(resourceDictionary)); |
|||
|
|||
resourceDictionary.GetResource<TResource>().Extensions.Add( |
|||
new JsonEmbeddedFileLocalizationDictionaryProvider( |
|||
virtualPath |
|||
) |
|||
); |
|||
} |
|||
|
|||
public static void AddBaseTypes<TResource>( |
|||
[NotNull] this LocalizationResourceDictionary resourceDictionary, |
|||
[NotNull] params Type[] types) |
|||
{ |
|||
Check.NotNull(resourceDictionary, nameof(resourceDictionary)); |
|||
Check.NotNull(types, nameof(types)); |
|||
|
|||
var resource = resourceDictionary.GetResource<TResource>(); |
|||
|
|||
foreach (var type in types) |
|||
{ |
|||
resource.BaseResourceTypes.AddIfNotContains(type); |
|||
} |
|||
} |
|||
|
|||
public static LocalizationResource GetResource<TResource>(this LocalizationResourceDictionary resourceDictionary) |
|||
{ |
|||
var resourceType = typeof(TResource); |
|||
|
|||
var resource = resourceDictionary.GetOrDefault(resourceType); |
|||
if (resource == null) |
|||
{ |
|||
throw new AbpException("Can not find a resource with given type: " + resourceType.AssemblyQualifiedName); |
|||
} |
|||
|
|||
return resource; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
using System; |
|||
using System.Linq; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public class LocalizationResourceNameAttribute : Attribute |
|||
{ |
|||
public string Name { get; } |
|||
|
|||
public LocalizationResourceNameAttribute(string name) |
|||
{ |
|||
Name = name; |
|||
} |
|||
|
|||
public static LocalizationResourceNameAttribute GetOrNull(Type resourceType) |
|||
{ |
|||
return resourceType |
|||
.GetCustomAttributes(true) |
|||
.OfType<LocalizationResourceNameAttribute>() |
|||
.FirstOrDefault(); |
|||
} |
|||
|
|||
public static string GetName(Type resourceType) |
|||
{ |
|||
return GetOrNull(resourceType)?.Name ?? resourceType.FullName; |
|||
} |
|||
} |
|||
} |
|||
@ -1,14 +0,0 @@ |
|||
using System; |
|||
|
|||
namespace Volo.Abp.Localization |
|||
{ |
|||
public class ShortLocalizationResourceNameAttribute : Attribute |
|||
{ |
|||
public string Name { get; } |
|||
|
|||
public ShortLocalizationResourceNameAttribute(string name) |
|||
{ |
|||
Name = name; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue