Open Source Web Application Framework for ASP.NET Core
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.
 
 
 
 
 
 

66 lines
2.0 KiB

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Localization;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Localization;
public class AbpEnumLocalizer : IAbpEnumLocalizer, ITransientDependency
{
protected readonly IStringLocalizerFactory StringLocalizerFactory;
public AbpEnumLocalizer(IStringLocalizerFactory stringLocalizerFactory)
{
StringLocalizerFactory = stringLocalizerFactory;
}
public virtual string GetString(Type enumType, object enumValue)
{
return GetStringInternal(enumType, enumValue, StringLocalizerFactory.CreateDefaultOrNull());
}
public virtual string GetString(Type enumType, object enumValue, params IStringLocalizer?[] specifyLocalizers)
{
return GetStringInternal(enumType, enumValue, specifyLocalizers);
}
protected virtual string GetStringInternal(Type enumType, object enumValue, params IStringLocalizer?[] specifyLocalizers)
{
var memberName = enumType.GetEnumName(enumValue)!;
var localizedString = GetStringOrNull(
specifyLocalizers,
new[]
{
$"Enum:{enumType.Name}.{enumValue}",
$"Enum:{enumType.Name}.{memberName}",
$"{enumType.Name}.{enumValue}",
$"{enumType.Name}.{memberName}",
memberName
}
);
return localizedString ?? memberName;
}
protected virtual string? GetStringOrNull(IStringLocalizer?[] localizers, IEnumerable<string> keys)
{
foreach (var key in keys)
{
foreach (var l in localizers)
{
if (l == null)
{
continue;
}
var localizedString = l[key];
if (!localizedString.ResourceNotFound)
{
return localizedString.Value;
}
}
}
return null;
}
}