Browse Source

Refactor localization.

pull/179/head
Halil İbrahim Kalkan 9 years ago
parent
commit
0100cfe037
  1. 2
      src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs
  2. 2
      src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs
  3. 8
      src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs
  4. 24
      src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
  5. 14
      src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionary.cs
  6. 7
      src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs
  7. 2
      src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs

2
src/Volo.Abp/Volo/Abp/Localization/AbpStringLocalizerFactory.cs

@ -51,7 +51,7 @@ namespace Volo.Abp.Localization
//Notes: Localizer will be cached, so wrappers are responsible to cache/invalidate themselves! //Notes: Localizer will be cached, so wrappers are responsible to cache/invalidate themselves!
var localizer = new AbpDictionaryBasedStringLocalizer(resource); //TODO: !!! var localizer = new AbpDictionaryBasedStringLocalizer(resource);
//TODO: Wrap with DB provider or other premium sources //TODO: Wrap with DB provider or other premium sources

2
src/Volo.Abp/Volo/Abp/Localization/ILocalizationDictionaryProvider.cs

@ -6,7 +6,7 @@ namespace Volo.Abp.Localization
{ {
IDictionary<string, ILocalizationDictionary> Dictionaries { get; } IDictionary<string, ILocalizationDictionary> Dictionaries { get; }
void Initialize(LocalizationResource resource); void Initialize();
void Extend(ILocalizationDictionary dictionary); void Extend(ILocalizationDictionary dictionary);
} }

8
src/Volo.Abp/Volo/Abp/Localization/Json/JsonEmbeddedFileLocalizationDictionaryProvider.cs

@ -17,7 +17,7 @@ namespace Volo.Abp.Localization.Json
_rootNamespace = rootNamespace; _rootNamespace = rootNamespace;
} }
public override void Initialize(LocalizationResource resource) public override void Initialize()
{ {
var resourceNames = _assembly.GetManifestResourceNames(); var resourceNames = _assembly.GetManifestResourceNames();
foreach (var resourceName in resourceNames) foreach (var resourceName in resourceNames)
@ -31,7 +31,7 @@ namespace Volo.Abp.Localization.Json
var dictionary = CreateJsonLocalizationDictionary(jsonString); var dictionary = CreateJsonLocalizationDictionary(jsonString);
if (Dictionaries.ContainsKey(dictionary.CultureName)) if (Dictionaries.ContainsKey(dictionary.CultureName))
{ {
throw new AbpException(resource.ResourceType.FullName + " source contains more than one dictionary for the culture: " + dictionary.CultureName); throw new AbpException($"{resourceName} dictionary has a culture name '{dictionary.CultureName}' which is already defined!");
} }
Dictionaries[dictionary.CultureName] = dictionary; Dictionaries[dictionary.CultureName] = dictionary;
@ -40,9 +40,9 @@ namespace Volo.Abp.Localization.Json
} }
} }
protected virtual JsonLocalizationDictionary CreateJsonLocalizationDictionary(string jsonString) protected virtual ILocalizationDictionary CreateJsonLocalizationDictionary(string jsonString)
{ {
return JsonLocalizationDictionary.BuildFromJsonString(jsonString); return JsonLocalizationDictionaryBuilder.BuildFromJsonString(jsonString);
} }
} }
} }

24
src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionary.cs → src/Volo.Abp/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs

@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO; using System.IO;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Serialization; using Newtonsoft.Json.Serialization;
@ -13,22 +12,13 @@ namespace Volo.Abp.Localization.Json
/// <remarks> /// <remarks>
/// Use static Build methods to create instance of this class. /// Use static Build methods to create instance of this class.
/// </remarks> /// </remarks>
public class JsonLocalizationDictionary : LocalizationDictionary public class JsonLocalizationDictionaryBuilder
{ {
/// <summary> /// <summary>
/// Private constructor. /// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given file.
/// </summary>
/// <param name="cultureName">Culture of the dictionary</param>
private JsonLocalizationDictionary(string cultureName)
: base(cultureName)
{
}
/// <summary>
/// Builds an <see cref="JsonLocalizationDictionary" /> from given file.
/// </summary> /// </summary>
/// <param name="filePath">Path of the file</param> /// <param name="filePath">Path of the file</param>
public static JsonLocalizationDictionary BuildFromFile(string filePath) public static ILocalizationDictionary BuildFromFile(string filePath)
{ {
try try
{ {
@ -41,10 +31,10 @@ namespace Volo.Abp.Localization.Json
} }
/// <summary> /// <summary>
/// Builds an <see cref="JsonLocalizationDictionary" /> from given json string. /// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given json string.
/// </summary> /// </summary>
/// <param name="jsonString">Json string</param> /// <param name="jsonString">Json string</param>
public static JsonLocalizationDictionary BuildFromJsonString(string jsonString) public static ILocalizationDictionary BuildFromJsonString(string jsonString)
{ {
JsonLocalizationFile jsonFile; JsonLocalizationFile jsonFile;
try try
@ -67,7 +57,7 @@ namespace Volo.Abp.Localization.Json
throw new AbpException("Culture is empty in language json file."); throw new AbpException("Culture is empty in language json file.");
} }
var dictionary = new JsonLocalizationDictionary(cultureCode); var dictionary = new LocalizationDictionary(cultureCode);
var dublicateNames = new List<string>(); var dublicateNames = new List<string>();
foreach (var item in jsonFile.Texts) foreach (var item in jsonFile.Texts)
{ {
@ -76,7 +66,7 @@ namespace Volo.Abp.Localization.Json
throw new AbpException("The key is empty in given json string."); throw new AbpException("The key is empty in given json string.");
} }
if (dictionary.Contains(item.Key)) if (dictionary.GetOrNull(item.Key) != null)
{ {
dublicateNames.Add(item.Key); dublicateNames.Add(item.Key);
} }

14
src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionary.cs

@ -1,7 +1,6 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Globalization;
namespace Volo.Abp.Localization namespace Volo.Abp.Localization
{ {
@ -11,17 +10,13 @@ namespace Volo.Abp.Localization
public class LocalizationDictionary : ILocalizationDictionary, IEnumerable<LocalString> public class LocalizationDictionary : ILocalizationDictionary, IEnumerable<LocalString>
{ {
/// <inheritdoc/> /// <inheritdoc/>
public string CultureName { get; private set; } public string CultureName { get; }
/// <inheritdoc/> /// <inheritdoc/>
public virtual LocalString this[string name] public virtual LocalString this[string name]
{ {
get get => GetOrNull(name);
{ set => _dictionary[name] = value;
var localizedString = GetOrNull(name);
return localizedString == null ? null : localizedString;
}
set { _dictionary[name] = value; }
} }
private readonly Dictionary<string, LocalString> _dictionary; private readonly Dictionary<string, LocalString> _dictionary;
@ -39,8 +34,7 @@ namespace Volo.Abp.Localization
/// <inheritdoc/> /// <inheritdoc/>
public virtual LocalString GetOrNull(string name) public virtual LocalString GetOrNull(string name)
{ {
LocalString localizedString; return _dictionary.GetOrDefault(name);
return _dictionary.TryGetValue(name, out localizedString) ? localizedString : null;
} }
/// <inheritdoc/> /// <inheritdoc/>

7
src/Volo.Abp/Volo/Abp/Localization/LocalizationDictionaryProviderBase.cs

@ -4,20 +4,17 @@ namespace Volo.Abp.Localization
{ {
public abstract class LocalizationDictionaryProviderBase : ILocalizationDictionaryProvider public abstract class LocalizationDictionaryProviderBase : ILocalizationDictionaryProvider
{ {
public LocalizationResource ResourceType { get; private set; }
public ILocalizationDictionary DefaultDictionary { get; protected set; } public ILocalizationDictionary DefaultDictionary { get; protected set; }
public IDictionary<string, ILocalizationDictionary> Dictionaries { get; private set; } public IDictionary<string, ILocalizationDictionary> Dictionaries { get; }
protected LocalizationDictionaryProviderBase() protected LocalizationDictionaryProviderBase()
{ {
Dictionaries = new Dictionary<string, ILocalizationDictionary>(); Dictionaries = new Dictionary<string, ILocalizationDictionary>();
} }
public virtual void Initialize(LocalizationResource resourceType) public virtual void Initialize()
{ {
ResourceType = resourceType;
} }
public void Extend(ILocalizationDictionary dictionary) public void Extend(ILocalizationDictionary dictionary)

2
src/Volo.Abp/Volo/Abp/Localization/LocalizationResource.cs

@ -33,7 +33,7 @@ namespace Volo.Abp.Localization
public virtual void Initialize(IServiceProvider serviceProvider) //TODO: Create a LocalizationResourceInitializationContext! public virtual void Initialize(IServiceProvider serviceProvider) //TODO: Create a LocalizationResourceInitializationContext!
{ {
DictionaryProvider.Initialize(this); DictionaryProvider.Initialize();
} }
} }
} }
Loading…
Cancel
Save