Browse Source

Introduce ILocalizableStringSerializer

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
b1c3a664bb
  1. 2
      framework/src/Volo.Abp.Localization.Abstractions/Volo/Abp/Localization/LocalizableString.cs
  2. 8
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizableStringSerializer.cs
  3. 64
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizableStringSerializer.cs

2
framework/src/Volo.Abp.Localization.Abstractions/Volo/Abp/Localization/LocalizableString.cs

@ -12,7 +12,7 @@ public class LocalizableString : ILocalizableString
[NotNull]
public string Name { get; }
public LocalizableString(Type resourceType, [NotNull] string name)
public LocalizableString([CanBeNull] Type resourceType, [NotNull] string name)
{
Name = Check.NotNullOrEmpty(name, nameof(name));
ResourceType = resourceType;

8
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/ILocalizableStringSerializer.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.Localization;
public interface ILocalizableStringSerializer
{
string Serialize(ILocalizableString localizableString);
ILocalizableString Deserialize(string value);
}

64
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizableStringSerializer.cs

@ -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…
Cancel
Save