Beispiel #1
0
        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);
        }
Beispiel #2
0
 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();
         }
     });
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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);
        }