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!
var localizer = new AbpDictionaryBasedStringLocalizer(resource); //TODO: !!!
var localizer = new AbpDictionaryBasedStringLocalizer(resource);
//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; }
void Initialize(LocalizationResource resource);
void Initialize();
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;
}
public override void Initialize(LocalizationResource resource)
public override void Initialize()
{
var resourceNames = _assembly.GetManifestResourceNames();
foreach (var resourceName in resourceNames)
@ -31,7 +31,7 @@ namespace Volo.Abp.Localization.Json
var dictionary = CreateJsonLocalizationDictionary(jsonString);
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;
@ -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.Collections.Generic;
using System.Globalization;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
@ -13,22 +12,13 @@ namespace Volo.Abp.Localization.Json
/// <remarks>
/// Use static Build methods to create instance of this class.
/// </remarks>
public class JsonLocalizationDictionary : LocalizationDictionary
public class JsonLocalizationDictionaryBuilder
{
/// <summary>
/// Private constructor.
/// </summary>
/// <param name="cultureName">Culture of the dictionary</param>
private JsonLocalizationDictionary(string cultureName)
: base(cultureName)
{
}
/// <summary>
/// Builds an <see cref="JsonLocalizationDictionary" /> from given file.
/// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given file.
/// </summary>
/// <param name="filePath">Path of the file</param>
public static JsonLocalizationDictionary BuildFromFile(string filePath)
public static ILocalizationDictionary BuildFromFile(string filePath)
{
try
{
@ -41,10 +31,10 @@ namespace Volo.Abp.Localization.Json
}
/// <summary>
/// Builds an <see cref="JsonLocalizationDictionary" /> from given json string.
/// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given json string.
/// </summary>
/// <param name="jsonString">Json string</param>
public static JsonLocalizationDictionary BuildFromJsonString(string jsonString)
public static ILocalizationDictionary BuildFromJsonString(string jsonString)
{
JsonLocalizationFile jsonFile;
try
@ -67,7 +57,7 @@ namespace Volo.Abp.Localization.Json
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>();
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.");
}
if (dictionary.Contains(item.Key))
if (dictionary.GetOrNull(item.Key) != null)
{
dublicateNames.Add(item.Key);
}

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

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

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

@ -4,20 +4,17 @@ namespace Volo.Abp.Localization
{
public abstract class LocalizationDictionaryProviderBase : ILocalizationDictionaryProvider
{
public LocalizationResource ResourceType { get; private set; }
public ILocalizationDictionary DefaultDictionary { get; protected set; }
public IDictionary<string, ILocalizationDictionary> Dictionaries { get; private set; }
public IDictionary<string, ILocalizationDictionary> Dictionaries { get; }
protected LocalizationDictionaryProviderBase()
{
Dictionaries = new Dictionary<string, ILocalizationDictionary>();
}
public virtual void Initialize(LocalizationResource resourceType)
public virtual void Initialize()
{
ResourceType = resourceType;
}
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!
{
DictionaryProvider.Initialize(this);
DictionaryProvider.Initialize();
}
}
}
Loading…
Cancel
Save