Browse Source

Implement IStringLocalizerSupportsInheritance for also CultureWrapperStringLocalizer

pull/892/head
Halil ibrahim Kalkan 8 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; : cultureName;
} }
public class CultureWrapperStringLocalizer : IStringLocalizer public class CultureWrapperStringLocalizer : IStringLocalizer, IStringLocalizerSupportsInheritance
{ {
private readonly string _cultureName; private readonly string _cultureName;
private readonly AbpDictionaryBasedStringLocalizer _innerLocalizer; private readonly AbpDictionaryBasedStringLocalizer _innerLocalizer;
@ -203,6 +203,11 @@ namespace Volo.Abp.Localization
{ {
return new CultureWrapperStringLocalizer(culture.Name, _innerLocalizer); 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.Collections.Generic;
using System.Reflection; using System.Reflection;
using JetBrains.Annotations;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Volo.Abp.DynamicProxy; using Volo.Abp.DynamicProxy;
using Volo.Abp.Reflection;
namespace Volo.Abp.Localization namespace Volo.Abp.Localization
{ {
public static class AbpStringLocalizerExtensions 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( .GetField(
"_localizer", "_localizer",
BindingFlags.Instance | BindingFlags.Instance |
@ -18,7 +30,7 @@ namespace Volo.Abp.Localization
if (localizerField == null) 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; 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> public class AbpLocalization_Tests : AbpIntegratedTest<AbpLocalization_Tests.TestModule>
{ {
private readonly IStringLocalizer<LocalizationTestResource> _localizer; private readonly IStringLocalizer<LocalizationTestResource> _localizer;
private readonly IStringLocalizerFactory _localizerFactory;
public AbpLocalization_Tests() public AbpLocalization_Tests()
{ {
_localizer = GetRequiredService<IStringLocalizer<LocalizationTestResource>>(); _localizer = GetRequiredService<IStringLocalizer<LocalizationTestResource>>();
_localizerFactory = GetRequiredService<IStringLocalizerFactory>();
} }
[Fact] [Fact]
@ -29,6 +31,14 @@ namespace Volo.Abp.Localization
internalLocalizer.ShouldBeOfType<AbpDictionaryBasedStringLocalizer>(); internalLocalizer.ShouldBeOfType<AbpDictionaryBasedStringLocalizer>();
} }
[Fact]
public void AbpStringLocalizerExtensions_GetInternalLocalizer_Using_LocalizerFactory()
{
var internalLocalizer = _localizerFactory.Create(typeof(LocalizationTestResource)).GetInternalLocalizer();
internalLocalizer.ShouldNotBeNull();
internalLocalizer.ShouldBeOfType<AbpDictionaryBasedStringLocalizer>();
}
[Fact] [Fact]
public void Should_Get_Same_Text_If_Not_Defined_Anywhere() public void Should_Get_Same_Text_If_Not_Defined_Anywhere()
{ {
@ -173,6 +183,12 @@ namespace Volo.Abp.Localization
ls.Value == "Evren" && ls.Value == "Evren" &&
ls.ResourceNotFound == false 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.Value == "Evren" &&
ls.ResourceNotFound == false ls.ResourceNotFound == false
); );
localizedStrings.ShouldContain(
ls => ls.Name == "SeeYou" &&
ls.Value == "See you" &&
ls.ResourceNotFound == false
);
} }
} }

Loading…
Cancel
Save