mirror of https://github.com/abpframework/abp.git
3 changed files with 73 additions and 1 deletions
@ -0,0 +1,8 @@ |
|||||
|
namespace Volo.Abp.Localization; |
||||
|
|
||||
|
public interface ILocalizableStringSerializer |
||||
|
{ |
||||
|
string Serialize(ILocalizableString localizableString); |
||||
|
|
||||
|
ILocalizableString Deserialize(string value); |
||||
|
} |
||||
@ -0,0 +1,64 @@ |
|||||
|
using System; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace Volo.Abp.Localization; |
||||
|
|
||||
|
public class LocalizableStringSerializer : ILocalizableStringSerializer, ITransientDependency |
||||
|
{ |
||||
|
protected AbpLocalizationOptions LocalizationOptions { get; } |
||||
|
|
||||
|
public LocalizableStringSerializer(IOptions<AbpLocalizationOptions> localizationOptions) |
||||
|
{ |
||||
|
LocalizationOptions = localizationOptions.Value; |
||||
|
} |
||||
|
|
||||
|
public virtual string Serialize(ILocalizableString localizableString) |
||||
|
{ |
||||
|
if (localizableString is LocalizableString realLocalizableString) |
||||
|
{ |
||||
|
return $"L:{LocalizationResourceNameAttribute.GetName(realLocalizableString.ResourceType)},{realLocalizableString.Name}"; |
||||
|
} |
||||
|
|
||||
|
if (localizableString is FixedLocalizableString fixedLocalizableString) |
||||
|
{ |
||||
|
return $"F:{fixedLocalizableString.Value}"; |
||||
|
} |
||||
|
|
||||
|
throw new AbpException($"Unknown {nameof(ILocalizableString)} type: {localizableString.GetType().FullName}"); |
||||
|
} |
||||
|
|
||||
|
public virtual ILocalizableString Deserialize(string value) |
||||
|
{ |
||||
|
if (value.IsNullOrEmpty() || |
||||
|
value.Length < 3 || |
||||
|
value[1] != ':') |
||||
|
{ |
||||
|
return new FixedLocalizableString(value); |
||||
|
} |
||||
|
|
||||
|
var type = value[0]; |
||||
|
switch (type) |
||||
|
{ |
||||
|
case 'F': |
||||
|
return new FixedLocalizableString(value.Substring(2)); |
||||
|
case 'L': |
||||
|
var commaPosition = value.IndexOf(',', 2); |
||||
|
if (commaPosition == -1) |
||||
|
{ |
||||
|
throw new AbpException("Invalid LocalizableString value: " + value); |
||||
|
} |
||||
|
|
||||
|
var resourceName = value.Substring(2, commaPosition - 2); |
||||
|
var name = value.Substring(commaPosition + 1); |
||||
|
var resourceType = LocalizationOptions.Resources.GetOrNull(resourceName)?.ResourceType; |
||||
|
|
||||
|
return new LocalizableString( |
||||
|
resourceType, |
||||
|
name |
||||
|
); |
||||
|
default: |
||||
|
return new FixedLocalizableString(value); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue