Browse Source

Implement IStringLocalizerSupportsInheritance for also CultureWrapperStringLocalizer

pull/892/head
Halil ibrahim Kalkan 7 years ago
parent
commit
b8fa84d690
  1. 7
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs
  2. 18
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerExtensions.cs
  3. 22
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs

7
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs

@ -179,7 +179,7 @@ namespace Volo.Abp.Localization
: cultureName;
}
public class CultureWrapperStringLocalizer : IStringLocalizer
public class CultureWrapperStringLocalizer : IStringLocalizer, IStringLocalizerSupportsInheritance
{
private readonly string _cultureName;
private readonly AbpDictionaryBasedStringLocalizer _innerLocalizer;
@ -203,6 +203,11 @@ namespace Volo.Abp.Localization
{
return new CultureWrapperStringLocalizer(culture.Name, _innerLocalizer);
}
public IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures, bool includeBaseLocalizers)
{
return _innerLocalizer.GetAllStrings(includeParentCultures, includeBaseLocalizers);
}
}
}
}

18
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/AbpStringLocalizerExtensions.cs

@ -1,15 +1,27 @@
using System.Collections.Generic;
using System.Reflection;
using JetBrains.Annotations;
using Microsoft.Extensions.Localization;
using Volo.Abp.DynamicProxy;
using Volo.Abp.Reflection;
namespace Volo.Abp.Localization
{
public static class AbpStringLocalizerExtensions
{
public static IStringLocalizer GetInternalLocalizer(this IStringLocalizer stringLocalizer)
[NotNull]
public static IStringLocalizer GetInternalLocalizer(
[NotNull] this IStringLocalizer stringLocalizer)
{
var localizerField = stringLocalizer.GetType()
Check.NotNull(stringLocalizer, nameof(stringLocalizer));
var localizerType = stringLocalizer.GetType();
if (!ReflectionHelper.IsAssignableToGenericType(localizerType, typeof(StringLocalizer<>)))
{
return stringLocalizer;
}
var localizerField = localizerType
.GetField(
"_localizer",
BindingFlags.Instance |
@ -18,7 +30,7 @@ namespace Volo.Abp.Localization
if (localizerField == null)
{
return stringLocalizer;
throw new AbpException($"Could not find the _localizer field inside the {typeof(StringLocalizer<>).FullName} class. Probably its name has changed. Please report this issue to the ABP framework.");
}
return localizerField.GetValue(stringLocalizer) as IStringLocalizer;

22
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs

@ -15,10 +15,12 @@ namespace Volo.Abp.Localization
public class AbpLocalization_Tests : AbpIntegratedTest<AbpLocalization_Tests.TestModule>
{
private readonly IStringLocalizer<LocalizationTestResource> _localizer;
private readonly IStringLocalizerFactory _localizerFactory;
public AbpLocalization_Tests()
{
_localizer = GetRequiredService<IStringLocalizer<LocalizationTestResource>>();
_localizerFactory = GetRequiredService<IStringLocalizerFactory>();
}
[Fact]
@ -29,6 +31,14 @@ namespace Volo.Abp.Localization
internalLocalizer.ShouldBeOfType<AbpDictionaryBasedStringLocalizer>();
}
[Fact]
public void AbpStringLocalizerExtensions_GetInternalLocalizer_Using_LocalizerFactory()
{
var internalLocalizer = _localizerFactory.Create(typeof(LocalizationTestResource)).GetInternalLocalizer();
internalLocalizer.ShouldNotBeNull();
internalLocalizer.ShouldBeOfType<AbpDictionaryBasedStringLocalizer>();
}
[Fact]
public void Should_Get_Same_Text_If_Not_Defined_Anywhere()
{
@ -173,6 +183,12 @@ namespace Volo.Abp.Localization
ls.Value == "Evren" &&
ls.ResourceNotFound == false
);
localizedStrings.ShouldContain(
ls => ls.Name == "SeeYou" &&
ls.Value == "See you" &&
ls.ResourceNotFound == false
);
}
}
@ -194,6 +210,12 @@ namespace Volo.Abp.Localization
ls.Value == "Evren" &&
ls.ResourceNotFound == false
);
localizedStrings.ShouldContain(
ls => ls.Name == "SeeYou" &&
ls.Value == "See you" &&
ls.ResourceNotFound == false
);
}
}

Loading…
Cancel
Save