public override void Initialize(string sourceName, ILocalizationConfiguration localizationConfiguration) { string[] fileNames = Directory.GetFiles(_directoryPath, "*.json", SearchOption.TopDirectoryOnly); foreach (string fileName in fileNames) { JsonLocalizationDictionary dictionary = CreateJsonLocalizationDictionary(fileName); string dicCultureInfoName = dictionary.CultureInfo.Name; if (Dictionaries.ContainsKey(dicCultureInfoName)) { throw new Exception(sourceName + " source contains more than one dictionary for the culture: " + dicCultureInfoName); } Dictionaries[dicCultureInfoName] = dictionary; LanguageIcon languageIcon = LocalizationConsts.LanguageIcons.Where(p => dicCultureInfoName.StartsWith(p.CountryName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); localizationConfiguration.Languages.Add( new LanguageInfo(dicCultureInfoName, dictionary.CultureInfo.NativeName, icon: languageIcon?.Icon, isDefault: CultureInfo.CurrentUICulture.Name.Equals(dicCultureInfoName))); if (!fileName.EndsWith(sourceName + ".json")) { continue; } if (DefaultDictionary != null) { throw new Exception("Only one default localization dictionary can be for source: " + sourceName); } DefaultDictionary = dictionary; } }
public override void Initialize(string sourceName, ILocalizationConfiguration localizationConfiguration) { CultureInfo[] allCultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures); List<string> resourceNames = _assembly.GetManifestResourceNames().Where(resourceName => allCultureInfos.Any(culture => resourceName.EndsWith($"{sourceName}.json", true, null) || resourceName.EndsWith($"{sourceName}-{culture.Name}.json", true, null))).ToList(); foreach (string resourceName in resourceNames) { if (!resourceName.StartsWith(_rootNamespace)) continue; using (Stream stream = _assembly.GetManifestResourceStream(resourceName)) { string jsonString = Utf8Helper.ReadStringFromStream(stream); JsonLocalizationDictionary dictionary = CreateJsonLocalizationDictionary(jsonString); string dicCultureInfoName = dictionary.CultureInfo.Name; if (Dictionaries.ContainsKey(dicCultureInfoName)) { throw new Exception(sourceName + " source contains more than one dictionary for the culture: " + dicCultureInfoName); } Dictionaries[dicCultureInfoName] = dictionary; LanguageIcon languageIcon = LocalizationConsts.LanguageIcons.Where(p => dicCultureInfoName.StartsWith(p.CountryName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); localizationConfiguration.Languages.Add( new LanguageInfo(dicCultureInfoName, dictionary.CultureInfo.NativeName, icon: languageIcon?.Icon, isDefault: CultureInfo.CurrentUICulture.Name.Equals(dicCultureInfoName))); if (!resourceName.EndsWith(sourceName + ".json")) continue; if (DefaultDictionary != null) { throw new Exception("Only one default localization dictionary can be for source: " + sourceName); } DefaultDictionary = dictionary; } } }
/// <summary> /// Builds an <see cref="JsonLocalizationDictionary" /> from given json string. /// </summary> /// <param name="jsonString">Json string</param> public static JsonLocalizationDictionary BuildFromJsonString(string jsonString) { JsonLocalizationFile jsonFile; try { jsonFile = JsonConvert.DeserializeObject <JsonLocalizationFile>( jsonString, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); } catch (JsonException ex) { throw new JsonException("Can not parse json string. " + ex.Message); } string cultureCode = jsonFile.Culture; if (string.IsNullOrEmpty(cultureCode)) { throw new ArgumentNullException(nameof(jsonFile), "Culture is empty in language json file."); } var dictionary = new JsonLocalizationDictionary(CultureInfo.GetCultureInfo(cultureCode)); var duplicateNames = new List <string>(); foreach (KeyValuePair <string, string> item in jsonFile.Texts) { if (string.IsNullOrEmpty(item.Key)) { throw new KeyNotFoundException("The key is empty in given json string."); } if (dictionary.Contains(item.Key)) { duplicateNames.Add(item.Key); } dictionary[item.Key] = item.Value.NormalizeLineEndings(); } if (duplicateNames.Count > 0) { throw new Exception( "A dictionary can not contain same key twice. There are some duplicated names: " + duplicateNames.JoinAsString(", ")); } return(dictionary); }
protected virtual JsonLocalizationDictionary CreateJsonLocalizationDictionary(string fileName) { return(JsonLocalizationDictionary.BuildFromFile(fileName)); }
protected virtual JsonLocalizationDictionary CreateJsonLocalizationDictionary(string jsonString) { return JsonLocalizationDictionary.BuildFromJsonString(jsonString); }