From 1b820120f536102f8fa07ba074569709e73da2eb Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 11 Aug 2021 21:54:03 +0000 Subject: [PATCH] --- source/Plugins/AyaNova.Plugin.V8/V8.cs | 236 ++++++++++++++----------- 1 file changed, 129 insertions(+), 107 deletions(-) diff --git a/source/Plugins/AyaNova.Plugin.V8/V8.cs b/source/Plugins/AyaNova.Plugin.V8/V8.cs index 78a4f55..18c15cc 100644 --- a/source/Plugins/AyaNova.Plugin.V8/V8.cs +++ b/source/Plugins/AyaNova.Plugin.V8/V8.cs @@ -281,6 +281,12 @@ namespace AyaNova.PlugIn.V8 TagMap.Clear(); // BankedObjects.Clear(); LocaleMap.Clear(); + //add default raven language and codes + LocaleMap.Add("English", 1); + LocaleMap.Add("Español", 2); + LocaleMap.Add("Français", 3); + LocaleMap.Add("Deutsch", 4); + //admin user (not exported but is there already) @@ -3082,11 +3088,11 @@ namespace AyaNova.PlugIn.V8 //Get a list of RAVEN translations and ID's var a = await util.GetAsync("translation/list"); JArray ja = (JArray)a.ObjectResponse["data"]; - var RavenLanguageList = ja.ToObject>(); + var RavenLanguageList = ja.ToObject>();//all v8 languages - LocaleList l = LocaleList.GetList(); - foreach (LocaleList.LocaleListInfo i in l) + LocaleList v7LocaleList = LocaleList.GetList();//all v7 languages + foreach (LocaleList.LocaleListInfo i in v7LocaleList) { ResetUniqueNames(); if (!progress.KeepGoing) return; @@ -3098,113 +3104,127 @@ namespace AyaNova.PlugIn.V8 //#endif if (!util.LocaleIsCustomized(i.Locale, lt, progress)) continue; - //Guess the source language + //Guess the source language, this will always return at least "en" if nothing else var ProbableSourceLocale = GuessCustomLocaleSourceLanguage(lt); //collection to hold items sent to server List exportItems = new List(); //Iterate all RAVEN languages - for (int x = 1; x < 5; x++)//first four translations are the stock ones - { - //get raven name of locale - var RavenLocaleName = RavenLanguageList.Find(m => m.Id == x).Name; - //add stock locale mappings in case users are set to a stock one in v7 - //so can set them later - //this is some half baked shit,it's intended for when users are exported later but it only works with stock locales - //so..not sure the exact point, maybe should just default all to english and let admin fix them later - //as they likely will have to anyway. Harmless though I guess so keeping - switch (RavenLocaleName) - { - case "en": - if (!LocaleMap.ContainsKey("English")) - LocaleMap.Add("English", x); - break; - case "fr": - if (!LocaleMap.ContainsKey("Français")) - LocaleMap.Add("Français", x); - break; - case "de": - if (!LocaleMap.ContainsKey("Deutsch")) - LocaleMap.Add("Deutsch", x); - break; - case "es": - if (!LocaleMap.ContainsKey("Español")) - LocaleMap.Add("Español", x); - break; - } + // for (int x = 1; x < 5; x++)//first four translations are the stock ones + //{ + //get raven name of locale + // var RavenLocaleName = RavenLanguageList.Find(m => m.Id == x).Name; + //add stock locale mappings in case users are set to a stock one in v7 + //so can set them later + //this is some half baked shit,it's intended for when users are exported later but it only works with stock locales + //so..not sure the exact point, maybe should just default all to english and let admin fix them later + //as they likely will have to anyway. Harmless though I guess so keeping + //switch (RavenLocaleName) + //{ + // case "en": + // if (!LocaleMap.ContainsKey("English")) + // LocaleMap.Add("English", x); + // break; + // case "fr": + // if (!LocaleMap.ContainsKey("Français")) + // LocaleMap.Add("Français", x); + // break; + // case "de": + // if (!LocaleMap.ContainsKey("Deutsch")) + // LocaleMap.Add("Deutsch", x); + // break; + // case "es": + // if (!LocaleMap.ContainsKey("Español")) + // LocaleMap.Add("Español", x); + // break; + //} - //MAKE A DUPLICATE - var exportName = GetUniqueName(i.Locale + " (" + RavenLocaleName + ")"); - progress.SubOp(""); - progress.Op("Exporting " + i.Locale + " to " + exportName); - a = await util.PostAsync("translation/duplicate/" + x.ToString()); - var targetTranslationId = util.IdFromResponse(a); - - //now set the name - dynamic dTransName = new JObject(); - dTransName.id = a.ObjectResponse["data"]["id"]; - dTransName.concurrency = a.ObjectResponse["data"]["concurrency"]; - dTransName.name = exportName; - dTransName.stock = false; - dTransName.cjkIndex = a.ObjectResponse["data"]["cjkIndex"]; - var vtemp = await util.PutAsync("translation", dTransName.ToString()); - var ctoken = util.CTokenFromResponse(vtemp); - // "id": 5, - //"concurrency": 92149, - //"name": "en-1", - //"stock": false, - //"cjkIndex": false, - - //add to maps so can set user to it on export - //going to default to the English based one because - //that's the majority of the users - if (RavenLocaleName == "en" && !LocaleMap.ContainsKey(i.Locale)) - LocaleMap.Add(i.Locale, targetTranslationId); - //Ok, have our target locale created, not we need to insert our custom translations one by one - var trans = ((JArray)a.ObjectResponse["data"]["translationItems"]).ToObject>(); - - var DuplicateAvoidanceList = new List(); - - //SET MATCHING KEYS TO OUR TEXT - //iterate v7 locale items - foreach (var v7item in lt.LT) - { - - progress.SubOp("Processing key: " + v7item.Key); - - var v8key = Translatev7TranslationKey(v7item.Key); - if (v8key == "**SKIP**") continue; - - if (!DuplicateAvoidanceList.Contains(v8key)) { DuplicateAvoidanceList.Add(v8key); } - else continue; - - TranslationItem v8TransItem = trans.FirstOrDefault(m => m.Key == v8key); - - if (v8TransItem == null) - { - throw new ArgumentOutOfRangeException("On exporting custom locale " + i.Locale + " source key " + v7item.Key + ", destination key " + v8key + " was not found."); - } - - //collect - exportItems.Add(new UpdateTranslationItem - { - Id = v8TransItem.Id, - Concurrency = v8TransItem.Concurrency, - NewText = v7item.Value - }); - } - - - //update it - progress.SubOp("Posting translation " + exportName + " to server "); - await util.PutAsync("translation/updatetranslationitemsdisplaytext", - JArray.FromObject(exportItems).ToString()); - - progress.Op(""); - progress.SubOp(""); + //MAKE A DUPLICATE + var exportName = GetUniqueName(i.Locale + " (" + ProbableSourceLocale + ")"); + progress.SubOp(""); + progress.Op("Exporting " + i.Locale + " to " + exportName); + int x = 1;//default english locale raven id + switch (ProbableSourceLocale) + { + case "fr": + x = 3; + break; + case "de": + x=4; + break; + case "es": + x = 2; + break; } + a = await util.PostAsync("translation/duplicate/" + x.ToString()); + var targetTranslationId = util.IdFromResponse(a); + + //now set the name + dynamic dTransName = new JObject(); + dTransName.id = a.ObjectResponse["data"]["id"]; + dTransName.concurrency = a.ObjectResponse["data"]["concurrency"]; + dTransName.name = exportName; + dTransName.stock = false; + dTransName.cjkIndex = a.ObjectResponse["data"]["cjkIndex"]; + var vtemp = await util.PutAsync("translation", dTransName.ToString()); + var ctoken = util.CTokenFromResponse(vtemp); + // "id": 5, + //"concurrency": 92149, + //"name": "en-1", + //"stock": false, + //"cjkIndex": false, + + //add to maps so can set user to it on export + //going to default to the English based one because + //that's the majority of the users + if (!LocaleMap.ContainsKey(i.Locale)) + LocaleMap.Add(i.Locale, targetTranslationId); + //Ok, have our target locale created, now we need to insert our custom translations one by one + var trans = ((JArray)a.ObjectResponse["data"]["translationItems"]).ToObject>(); + + var DuplicateAvoidanceList = new List(); + + //SET MATCHING KEYS TO OUR TEXT + //iterate v7 locale items + foreach (var v7item in lt.LT) + { + + progress.SubOp("Processing key: " + v7item.Key); + + var v8key = Translatev7TranslationKey(v7item.Key); + if (v8key == "**SKIP**") continue; + + if (!DuplicateAvoidanceList.Contains(v8key)) { DuplicateAvoidanceList.Add(v8key); } + else continue; + + TranslationItem v8TransItem = trans.FirstOrDefault(m => m.Key == v8key); + + if (v8TransItem == null) + { + throw new ArgumentOutOfRangeException("On exporting custom locale " + i.Locale + " source key " + v7item.Key + ", destination key " + v8key + " was not found."); + } + + //collect + exportItems.Add(new UpdateTranslationItem + { + Id = v8TransItem.Id, + Concurrency = v8TransItem.Concurrency, + NewText = v7item.Value + }); + } + + + //update it + progress.SubOp("Posting translation " + exportName + " to server "); + await util.PutAsync("translation/updatetranslationitemsdisplaytext", + JArray.FromObject(exportItems).ToString()); + + progress.Op(""); + progress.SubOp(""); + + // }//iterate raven stock languages } progress.Op(""); @@ -3439,9 +3459,11 @@ namespace AyaNova.PlugIn.V8 public string GuessCustomLocaleSourceLanguage(LocalizedTextTable lt) { - + //try to match up some likely not edited locale translations + //and give weight to the language with the most matches + //if no matches should default to en Dictionary d = new Dictionary(); - d.Add("en", 0);//weight towards english? + d.Add("en", 0);//this will default if nothing is matched as sort will just keep same order d.Add("de", 0); d.Add("fr", 0); d.Add("es", 0); @@ -3466,7 +3488,7 @@ namespace AyaNova.PlugIn.V8 } } - { + { var v = lt.LT["Global.Label.AllowScheduleConflicts"]; switch (v) { @@ -3485,7 +3507,7 @@ namespace AyaNova.PlugIn.V8 } } - { + { var v = lt.LT["ReportEditor.Label.Properties"]; switch (v) { @@ -3504,7 +3526,7 @@ namespace AyaNova.PlugIn.V8 } } - { + { var v = lt.LT["UI.Help.TechSupport"]; switch (v) { @@ -3523,7 +3545,7 @@ namespace AyaNova.PlugIn.V8 } } - { + { var v = lt.LT["StopWords3"]; switch (v) {