/// <summary> /// Save app texts to resource files /// </summary> /// <param name="allResourceTexts">The texts to be saved</param> public async Task SaveServiceTexts(Dictionary <string, Dictionary <string, Designer.Models.TextResourceElement> > allResourceTexts) { // Language, key, TextResourceElement var resourceTexts = new Dictionary <string, Dictionary <string, Designer.Models.TextResourceElement> >(); foreach (KeyValuePair <string, Dictionary <string, Designer.Models.TextResourceElement> > text in allResourceTexts) { string textResourceElementId = text.Key; foreach (KeyValuePair <string, Designer.Models.TextResourceElement> localizedText in text.Value) { string language = localizedText.Key; Designer.Models.TextResourceElement textResourceElement = localizedText.Value; if (!resourceTexts.ContainsKey(language)) { resourceTexts.Add(language, new Dictionary <string, Designer.Models.TextResourceElement>()); } if (!resourceTexts[language].ContainsKey(textResourceElementId)) { resourceTexts[language].Add(textResourceElementId, new Designer.Models.TextResourceElement { Id = textResourceElementId, Value = textResourceElement.Value, Variables = textResourceElement.Variables }); } } } string textResourcesDirectory = Path.Combine(CONFIG_FOLDER_PATH, LANGUAGE_RESOURCE_FOLDER_NAME); // loop through each language set of text resources foreach (KeyValuePair <string, Dictionary <string, Designer.Models.TextResourceElement> > processedResource in resourceTexts) { var textResource = new Designer.Models.TextResource { Language = processedResource.Key, Resources = new List <Designer.Models.TextResourceElement>() }; foreach (KeyValuePair <string, Designer.Models.TextResourceElement> actualResource in processedResource.Value) { textResource.Resources.Add(actualResource.Value); } string resourceString = JsonConvert.SerializeObject(textResource, new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }); string resourceFilePath = $"{textResourcesDirectory}/resource.{processedResource.Key}.json"; await WriteTextByRelativePathAsync(resourceFilePath, resourceString, true); } }
private static void MergeTexts(Dictionary <string, Dictionary <string, Designer.Models.TextResourceElement> > newTexts, Dictionary <string, Dictionary <string, Designer.Models.TextResourceElement> > existingTexts) { foreach (KeyValuePair <string, Dictionary <string, Designer.Models.TextResourceElement> > textResourceElementDict in newTexts) { string textResourceElementId = textResourceElementDict.Key; if (!existingTexts.ContainsKey(textResourceElementId)) { existingTexts.Add(textResourceElementId, new Dictionary <string, Designer.Models.TextResourceElement>()); } foreach (KeyValuePair <string, Designer.Models.TextResourceElement> localizedString in textResourceElementDict.Value) { string language = localizedString.Key; Designer.Models.TextResourceElement textResourceElement = localizedString.Value; if (!existingTexts[textResourceElementId].ContainsKey(language)) { existingTexts[textResourceElementId].Add(language, textResourceElement); } } } }