private List <JObject> MakeChildList(CObservableList <CTranslationNodeItem> items) { var childItems = new List <JObject>(); foreach (var item in items) { var newVarsJObject = new JObject(); var sourceTextNode = new JObject(); var translationTextNode = new JObject(); sourceTextNode.Add("Text", item.Source); newVarsJObject.Add("Source", sourceTextNode); translationTextNode.Add("Text", item.Translation); newVarsJObject.Add("Translation", translationTextNode); childItems.Add(newVarsJObject); } return(childItems); }
public async Task SaveTranslations(bool clearTranslations, bool closeProgressAfterExecution = false) { await Task.Run(async() => { await Common.ShowProgressMessage("Saving translations...", true); foreach (var translationInstance in Translations) { if (File.Exists(translationInstance.Path)) { try { var deserializedFile = JObject.Parse(File.ReadAllText(translationInstance.Path)); JToken tmpToken; if (deserializedFile.TryGetValue("Namespace", out tmpToken)) { deserializedFile["Namespace"] = string.Empty; } else { deserializedFile.Add("Namespace", string.Empty); } if (deserializedFile.TryGetValue("Children", out tmpToken)) { deserializedFile["Children"] = new JArray(); } else { deserializedFile.Add("Children", new JArray()); } if (deserializedFile.TryGetValue("Subnamespaces", out tmpToken)) { deserializedFile["Subnamespaces"] = new JArray(); } else { deserializedFile.Add("Subnamespaces", new JArray()); } foreach (var node in translationInstance.Nodes) { if (node.IsTopLevel) { var variablesNodeInst = JArray.FromObject(MakeChildList(node.Items)); deserializedFile["Children"] = variablesNodeInst; } else { var currentNodeJObject = new JObject { { "Namespace", node.Title }, { "Children", JArray.FromObject(MakeChildList(node.Items)) } }; deserializedFile.Value <JArray>("Subnamespaces").Add(currentNodeJObject); } } await Task.Delay(100); File.WriteAllText(translationInstance.Path, JsonConvert.SerializeObject(deserializedFile, Formatting.Indented)); } catch (JsonException ex) { Common.WriteToConsole("Something wrong with " + translationInstance.Path + " or you don't have access to read this file." + ex.Message, MessageType.Error); } } else { Common.WriteToConsole("Translation file " + translationInstance.Path + " doesn't exist.", MessageType.Error); } if (File.Exists(Path.Combine(Path.GetDirectoryName(translationInstance.Path), "Game.po"))) { try { var poContent = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(translationInstance.Path), "Game.po")); if (poContent.Any()) { foreach (var node in translationInstance.Nodes) { foreach (var item in node.Items) { var sourceIndex = Array.IndexOf(poContent, "msgid \"" + item.Source + "\""); if ((sourceIndex != -1) && (poContent.Length >= sourceIndex + 1) && (poContent[sourceIndex + 1].Contains("msgstr"))) { poContent[sourceIndex + 1] = "msgstr \"" + item.Translation + "\""; } } } } else { Common.WriteToConsole(Path.Combine(Path.GetDirectoryName(translationInstance.Path), "Game.po") + " is empty", MessageType.Error); } File.WriteAllLines(Path.Combine(Path.GetDirectoryName(translationInstance.Path), "Game.po"), poContent); } catch (Exception ex) { Common.WriteToConsole(ex.Message, MessageType.Error); } } else { Common.WriteToConsole("Translation file " + Path.Combine(Path.GetDirectoryName(translationInstance.Path), "Game.po") + " doesn't exist.", MessageType.Error); } } IsTranslationsChanged = false; if (clearTranslations) { Translations = new CObservableList <CTranslation>(); } if (closeProgressAfterExecution) { await Common.ProgressController.CloseAsync(); } }); }
private static async Task <CObservableList <CTranslationNode> > TranslateLanguage(string language, CObservableList <CTranslationNode> sourceNodes, CCulture @from, CCulture to) { await Common.ShowProgressMessage("Translating " + language + " language...", false); foreach (var node in sourceNodes) { node.Items = await TranslateNode(node.Title, node.Items, @from, to); } return(sourceNodes); }
private static async Task <CObservableList <CTranslationNodeItem> > TranslateNode(string title, CObservableList <CTranslationNodeItem> sourceNodeItems, CCulture @from, CCulture to) { await Common.ShowProgressMessage("Translating " + title + " node...", false); return(await TranslateNodeItems(sourceNodeItems, @from, to)); }
private static async Task <CObservableList <CTranslationNodeItem> > TranslateNodeItems(CObservableList <CTranslationNodeItem> sourceText, CCulture @from, CCulture to) { if (string.IsNullOrWhiteSpace(Settings.Default.TranslateAPIKey)) { Common.WriteToConsole("Translate API key is not presented.", MessageType.Error); return(sourceText); } var request = new RestRequest("translate", Method.GET); request.AddParameter("key", Settings.Default.TranslateAPIKey); request.AddParameter("lang", @from.ISO + "-" + to.ISO); foreach (var item in sourceText) { request.AddParameter("text", item.Translation); } IRestResponse response = null; try { response = await Client.ExecuteGetTaskAsync(request); } catch (Exception ex) { Console.Write(ex.Message); } if ((response != null) && (response.ResponseStatus == ResponseStatus.Completed)) { var parsedResponse = JObject.Parse(response.Content); var counter = 0; foreach (var item in sourceText) { item.Translation = parsedResponse.Value <JArray>("text")[counter].ToString(); counter++; } return(sourceText); } return(sourceText); }