diff --git a/src/Volo.Abp/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs b/src/Volo.Abp/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs
index 4b848aa832..5ae118a2fc 100644
--- a/src/Volo.Abp/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs
+++ b/src/Volo.Abp/Volo/Abp/Localization/AbpDictionaryBasedStringLocalizer.cs
@@ -6,8 +6,6 @@ using Microsoft.Extensions.Localization;
namespace Volo.Abp.Localization
{
- //TODO: Remove old/unused methods!
-
public class AbpDictionaryBasedStringLocalizer : IStringLocalizer
{
public LocalizationResource Resource { get; }
@@ -27,29 +25,20 @@ namespace Volo.Abp.Localization
throw new NotImplementedException();
}
- LocalizedString IStringLocalizer.this[string name]
- {
- get { return GetString(name); }
- }
+ public LocalizedString this[string name] => GetLocalizedString(name, CultureInfo.CurrentUICulture.Name);
- LocalizedString IStringLocalizer.this[string name, params object[] arguments]
+ public LocalizedString this[string name, params object[] arguments]
{
get
{
- var localizedString = GetString(name);
+ var localizedString = this[name];
return new LocalizedString(name, string.Format(localizedString.Value, arguments, localizedString.ResourceNotFound, localizedString.SearchedLocation));
}
}
- public LocalizedString GetString(string name)
+ protected virtual LocalizedString GetLocalizedString(string name, string cultureName)
{
- return GetString(name, CultureInfo.CurrentUICulture.Name);
- }
-
- ///
- public LocalizedString GetString(string name, string cultureName)
- {
- var value = GetStringOrNull(name, cultureName);
+ var value = GetLocalizedStringOrNull(name, cultureName);
if (value == null)
{
@@ -59,12 +48,7 @@ namespace Volo.Abp.Localization
return value;
}
- public LocalizedString GetStringOrNull(string name, bool tryDefaults = true)
- {
- return GetStringOrNull(name, CultureInfo.CurrentUICulture.Name, tryDefaults);
- }
-
- public LocalizedString GetStringOrNull(string name, string cultureName, bool tryDefaults = true)
+ protected virtual LocalizedString GetLocalizedStringOrNull(string name, string cultureName, bool tryDefaults = true)
{
var dictionaries = Resource.DictionaryProvider.Dictionaries;
@@ -114,8 +98,7 @@ namespace Volo.Abp.Localization
return new LocalizedString(name, strDefault.Value);
}
- ///
- public IReadOnlyList GetAllStrings(string cultureName, bool includeDefaults = true)
+ protected virtual IReadOnlyList GetAllStrings(string cultureName, bool includeDefaults = true)
{
//TODO: Can be optimized (example: if it's already default dictionary, skip overriding)
@@ -163,7 +146,7 @@ namespace Volo.Abp.Localization
return allStrings.Values.ToImmutableList();
}
- private static string GetBaseCultureName(string cultureName)
+ protected virtual string GetBaseCultureName(string cultureName)
{
return cultureName.Contains("-")
? cultureName.Left(cultureName.IndexOf("-", StringComparison.Ordinal))
diff --git a/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs b/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs
index 285aa7b6ee..2d838e3b19 100644
--- a/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs
+++ b/src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs
@@ -46,11 +46,9 @@ namespace Volo.Abp.Localization
{
resource.Initialize(_serviceProvider);
- //Use JSON/XML/...etc based provider that reads resource from source and creates a dictionary
//Extend dictionary with extensions
//Wrap reader by wrappers (like db wrapper which implement multitenancy/regions and so on...)
-
-
+
//Notes: Localizer will be cached, so wrappers are responsible to cache/invalidate themselves!
var localizer = new AbpDictionaryBasedStringLocalizer(resource); //TODO: !!!
diff --git a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonFileLocalizationDictionaryProvider.cs b/src/Volo.Abp/Volo/Abp/Localization/Json/JsonFileLocalizationDictionaryProvider.cs
deleted file mode 100644
index 8c56a53ca3..0000000000
--- a/src/Volo.Abp/Volo/Abp/Localization/Json/JsonFileLocalizationDictionaryProvider.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-//using System.IO;
-//using Abp.Localization.Dictionaries.Xml;
-//using Abp.Localization.Sources;
-
-//namespace Abp.Localization.Dictionaries.Json
-//{
-// ///
-// /// Provides localization dictionaries from json files in a directory.
-// ///
-// public class JsonFileLocalizationDictionaryProvider : LocalizationDictionaryProviderBase
-// {
-// private readonly string _directoryPath;
-
-// ///
-// /// Creates a new .
-// ///
-// /// Path of the dictionary that contains all related XML files
-// public JsonFileLocalizationDictionaryProvider(string directoryPath)
-// {
-// _directoryPath = directoryPath;
-// }
-
-// public override void Initialize(string sourceName)
-// {
-// var fileNames = Directory.GetFiles(_directoryPath, "*.json", SearchOption.TopDirectoryOnly);
-
-// foreach (var fileName in fileNames)
-// {
-// var dictionary = CreateJsonLocalizationDictionary(fileName);
-// if (Dictionaries.ContainsKey(dictionary.CultureInfo.Name))
-// {
-// throw new AbpInitializationException(sourceName + " source contains more than one dictionary for the culture: " + dictionary.CultureInfo.Name);
-// }
-
-// Dictionaries[dictionary.CultureInfo.Name] = dictionary;
-
-// if (fileName.EndsWith(sourceName + ".json"))
-// {
-// if (DefaultDictionary != null)
-// {
-// throw new AbpInitializationException("Only one default localization dictionary can be for source: " + sourceName);
-// }
-
-// DefaultDictionary = dictionary;
-// }
-// }
-// }
-
-// protected virtual JsonLocalizationDictionary CreateJsonLocalizationDictionary(string fileName)
-// {
-// return JsonLocalizationDictionary.BuildFromFile(fileName);
-// }
-// }
-//}
\ No newline at end of file
diff --git a/test/Volo.Abp.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs b/test/Volo.Abp.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs
index c413bdc9f9..88346e2521 100644
--- a/test/Volo.Abp.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs
+++ b/test/Volo.Abp.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs
@@ -1,4 +1,5 @@
-using Microsoft.Extensions.DependencyInjection;
+using System.Globalization;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Shouldly;
using Volo.Abp.Localization.Source;
@@ -40,7 +41,17 @@ namespace Volo.Abp.Localization
_localizer["CarPlural"].Value.ShouldBe("Araba");
}
}
-
+
+ [Fact]
+ public void Should_Get_Localized_Text_If_Defined_In_Requested_Culture()
+ {
+ _localizer.WithCulture(CultureInfo.GetCultureInfo("en"))["Car"].Value.ShouldBe("Car");
+ _localizer.WithCulture(CultureInfo.GetCultureInfo("en"))["CarPlural"].Value.ShouldBe("Cars");
+
+ _localizer.WithCulture(CultureInfo.GetCultureInfo("tr"))["CarPlural"].Value.ShouldBe("Araba");
+ _localizer.WithCulture(CultureInfo.GetCultureInfo("tr"))["CarPlural"].Value.ShouldBe("Araba");
+ }
+
[DependsOn(typeof(AbpTestBaseModule))]
public class TestModule : AbpModule
{