Browse Source

Merge pull request #11996 from abpframework/auto-merge/rel-5-2/934

Merge branch dev with rel-5.2
pull/12009/head
maliming 4 years ago
committed by GitHub
parent
commit
0cd3322e46
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 61
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpDataAnnotationAutoLocalizationMetadataDetailsProvider.cs

61
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpDataAnnotationAutoLocalizationMetadataDetailsProvider.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Concurrent;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
@ -16,14 +17,16 @@ public class AbpDataAnnotationAutoLocalizationMetadataDetailsProvider : IDisplay
private readonly Lazy<IStringLocalizerFactory> _stringLocalizerFactory; private readonly Lazy<IStringLocalizerFactory> _stringLocalizerFactory;
private readonly Lazy<IOptions<MvcDataAnnotationsLocalizationOptions>> _localizationOptions; private readonly Lazy<IOptions<MvcDataAnnotationsLocalizationOptions>> _localizationOptions;
private readonly ConcurrentDictionary<DisplayMetadataProviderContext, string> _displayNameKeys;
public AbpDataAnnotationAutoLocalizationMetadataDetailsProvider(IServiceCollection services) public AbpDataAnnotationAutoLocalizationMetadataDetailsProvider(IServiceCollection services)
{ {
_stringLocalizerFactory = services.GetRequiredServiceLazy<IStringLocalizerFactory>(); _stringLocalizerFactory = services.GetRequiredServiceLazy<IStringLocalizerFactory>();
_localizationOptions = services.GetRequiredServiceLazy<IOptions<MvcDataAnnotationsLocalizationOptions>>(); _localizationOptions = services.GetRequiredServiceLazy<IOptions<MvcDataAnnotationsLocalizationOptions>>();
_displayNameKeys = new ConcurrentDictionary<DisplayMetadataProviderContext, string>();
} }
public void CreateDisplayMetadata(DisplayMetadataProviderContext context) public virtual void CreateDisplayMetadata(DisplayMetadataProviderContext context)
{ {
var displayMetadata = context.DisplayMetadata; var displayMetadata = context.DisplayMetadata;
if (displayMetadata.DisplayName != null) if (displayMetadata.DisplayName != null)
@ -54,36 +57,58 @@ public class AbpDataAnnotationAutoLocalizationMetadataDetailsProvider : IDisplay
displayMetadata.DisplayName = () => displayMetadata.DisplayName = () =>
{ {
/* var key = _displayNameKeys.GetOrAdd(context, _ => GetDisplayNameKey(context, localizer));
* DisplayName:ClassName:PropertyName return key != null ? localizer[key] : null;
* DisplayName:PropertyName };
* ClassName:PropertyName }
* PropertyName
*/ protected virtual string GetDisplayNameKey(DisplayMetadataProviderContext context, IStringLocalizer localizer)
{
/*
* DisplayName:ClassName:PropertyName
* DisplayName:PropertyName
* ClassName:PropertyName
* PropertyName
*/
LocalizedString localizedString = null; LocalizedString localizedString = null;
if (context.Key.ContainerType != null) if (context.Key.ContainerType != null)
{
localizedString = localizer[PropertyLocalizationKeyPrefix + context.Key.ContainerType.Name + ":" + context.Key.Name];
if (!localizedString.ResourceNotFound)
{ {
localizedString = localizer[PropertyLocalizationKeyPrefix + context.Key.ContainerType.Name + ":" + context.Key.Name]; return localizedString.Name;
} }
}
if (localizedString == null || localizedString.ResourceNotFound) if (localizedString == null || localizedString.ResourceNotFound)
{
localizedString = localizer[PropertyLocalizationKeyPrefix + context.Key.Name];
if (!localizedString.ResourceNotFound)
{ {
localizedString = localizer[PropertyLocalizationKeyPrefix + context.Key.Name]; return localizedString.Name;
} }
}
if (localizedString.ResourceNotFound && context.Key.ContainerType != null) if (localizedString.ResourceNotFound && context.Key.ContainerType != null)
{
localizedString = localizer[context.Key.ContainerType.Name + ":" + context.Key.Name];
if (!localizedString.ResourceNotFound)
{ {
localizedString = localizer[context.Key.ContainerType.Name + ":" + context.Key.Name]; return localizedString.Name;
} }
}
if (localizedString.ResourceNotFound) if (localizedString.ResourceNotFound)
{
localizedString = localizer[context.Key.Name];
if (!localizedString.ResourceNotFound)
{ {
localizedString = localizer[context.Key.Name]; return localizedString.Name;
} }
}
return localizedString; return null;
};
} }
} }

Loading…
Cancel
Save