using System.Globalization; using System.Linq; using System.Reflection; using Abp.Localization.Dictionaries.Xml; namespace Abp.Localization.Dictionaries.Json { /// /// Provides localization dictionaries from JSON files embedded into an . /// public class JsonEmbeddedFileLocalizationDictionaryProvider : LocalizationDictionaryProviderBase { private readonly Assembly _assembly; private readonly string _rootNamespace; /// /// Creates a new object. /// /// Assembly that contains embedded json files /// /// /// Namespace of the embedded json dictionary files /// /// /// Notice : Json folder name is different from Xml folder name. /// /// /// You must name it like this : Json**** and Xml****; Do not name : ****Json and ****Xml /// /// public JsonEmbeddedFileLocalizationDictionaryProvider(Assembly assembly, string rootNamespace) { _assembly = assembly; _rootNamespace = rootNamespace; } public override void Initialize(string sourceName) { var allCultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures); var resourceNames = _assembly.GetManifestResourceNames().Where(resouceName => allCultureInfos.Any(culture => resouceName.EndsWith($"{sourceName}.json", true, null) || resouceName.EndsWith($"{sourceName}-{culture.Name}.json", true, null))).ToList(); foreach (var resourceName in resourceNames) { if (resourceName.StartsWith(_rootNamespace)) { using (var stream = _assembly.GetManifestResourceStream(resourceName)) { var jsonString = Utf8Helper.ReadStringFromStream(stream); var dictionary = CreateJsonLocalizationDictionary(jsonString); 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 (resourceName.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 jsonString) { return JsonLocalizationDictionary.BuildFromJsonString(jsonString); } } }