public static void cancelOper2(LocPageGroup group, Langs transLang) { TradosDT.TradosDB db = TradosDT.TradosDB.getTradosContext(); foreach (int pageId in db.Pages.Where(p => p.PageGroup == (short)group).Select(p => p.Id)) db.Sentences.RemoveRange(db.Sentences.Where(s2 => s2.PageId == pageId && s2.TransLang == (short)transLang)); db.SaveChanges(); }
/// <summary> /// Import RESX souboru do databaze /// </summary> //public static IEnumerable<string> oper1(LocPageGroup grp) { // LocCfgPageGroupFilter group = LocCfg.Instance().findPageGroup(grp); // //RESX soubory // List<string> files = getFiles(new LocPageGroup[] { grp }).Where(s => hasResxFile(s)).Select(s => resxFileName(s)).ToList(); // if (File.Exists(group.GlobalResourcePath)) files.Add(group.GlobalResourcePath); // if (File.Exists(group.GlobalResourcePathJS)) files.Add(group.GlobalResourcePathJS); // //vsechny stranky grupy k vymazani // List<int> deletePageIds = TradosDT.TradosDB.getTradosContext(false).Pages.Where(p => p.PageGroup == (short)grp).Select(p => p.Id).ToList(); // foreach (string fn in files.Where(f => File.Exists(f))) { // TradosDT.TradosDB db = TradosDT.TradosDB.getTradosContext(); // //Adjustace stranky // TradosDT.Page page = db.Pages.Where(pg => pg.FileName == fn).SingleOrDefault(); // if (page == null) { //nova stranka // page = new TradosDT.Page(); // db.Pages.Add(page); // } else { //stranka existuje: vymaz vety // //odstran stranku ze stranek k vymazani // deletePageIds.Remove(page.Id); // //Vymazani vsech vet ke strance: // TradosDT.TradosDB pomDb = TradosDT.TradosDB.getTradosContext(); // pomDb.CommandTimeout = 1000000; // pomDb.ExecuteCommand("DELETE FROM Sentence WHERE pageid={0} and srclang={1}", page.Id, (short)Langs.no); // } // page.FileName = fn.ToLowerInvariant(); // page.PageGroup = (short)grp; // page.SeeUrl = computeSeeUrl(group, page.FileName); // page.Langs = group.fingLangFilter(fn); // db.SaveChanges(); // StringBuilder sb = new StringBuilder(); // //Vety z resource: // using (ResXResourceReader rdr = new ResXResourceReader(fn)) // foreach (System.Collections.DictionaryEntry de in rdr) { // TradosDT.Sentence.insert(db, page.Id, (string)de.Key, null, Langs.no, normalizeXmlText(((string)de.Value).Replace(" ", "$nbsp;"), sb), group.PrimaryLang); // } // db.SaveChanges(); // //Odstraneni (**) zavorek ve zdrojovych resx // string f = StringUtils.FileToString(fn); // f = CSLocalize.transFinal(f); // StringUtils.StringToFile(f, fn); // yield return fn; // } // //Vymaz stranky pro neexistujici soubory // TradosDT.TradosDB delDb = TradosDT.TradosDB.getTradosContext(); // foreach (int id in deletePageIds) { // delDb.ExecuteCommand("DELETE FROM Sentence WHERE pageid={0}", id); // delDb.ExecuteCommand("DELETE FROM Pages WHERE id={0}", id); // } //} public static void oper2(LocPageGroup group, Langs transLang, bool adjustStrong) { TradosDT.TradosDB db = TradosDT.TradosDB.getTradosContext(); if (db.Locks.Where(l => l.Locked && group == (LocPageGroup)l.PageGroup && l.Lang == (short)transLang).Any()) throw new Exception("Jedna Skupin souborů a Jazyka ja zablokována (locked). Nejdříve odblokujte na unlock.aspx stránce."); TradosLib.tradosOper2_forLang(group, transLang, adjustStrong); }
public static void oper3(LocPageGroup group, Langs transLang, bool doLock, List<LocCommand> commands, Stream str) { TradosDT.TradosDB db = TradosDT.TradosDB.getTradosContext(); TradosDT.Lock lck = new TradosDT.Lock(); db.Locks.Add(lck); lck.Created = DateTime.UtcNow; lck.Lang = (short)transLang; lck.PageGroup = (short)group; lck.Locked = doLock; db.SaveChanges(); TradosLib.ExportXml(group, transLang, str, commands); }
public static IEnumerable<exportCmlItem> ExportXmlItems(LocPageGroup grp, Langs transLang, List<LocCommand> filter) { Langs srcLang = LocCfg.Instance().findPageGroup(grp).FindSrcLang(transLang); TradosDT.TradosDB db = TradosDT.TradosDB.getTradosContext(false); foreach (TradosDT.Page pg in db.Pages.Where(p => p.PageGroup == (short)grp)) foreach (exportCmlItem item in ExportXmlItems(db, pg, srcLang, transLang, filter)) yield return item; }
/// <summary> /// Najde info o grupe /// </summary> public LocCfgPageGroupFilter findPageGroup(LocPageGroup group) { foreach (LocCfgPageGroupFilter grp in Groups) if (grp.Group == group) return grp; throw new Exception("Missing Group in LocCfg for group: " + group.ToString()); }
public static int ExportXml(LocPageGroup grp, Langs transLang, Stream xml, List<LocCommand> filter) { XElement pattern = XElement.Load(HostingEnvironment.ApplicationPhysicalPath + "app_data/TradosExcelPattern.xml", LoadOptions.PreserveWhitespace); XNamespace ad = "urn:schemas-microsoft-com:office:spreadsheet"; XNamespace ss = "urn:schemas-microsoft-com:office:spreadsheet"; XElement insertPoint = pattern.Descendants(ad + "Row").Single(); Langs srcLang = LocCfg.Instance().findPageGroup(grp).FindSrcLang(transLang); int cnt = 0; foreach (var itemGroup in ExportXmlItems(grp, transLang, filter).GroupBy(it => it.SeeUrl)) { bool headerOK = false; //ridi pripravu prave jednoho radku s URL adresou na grupu foreach (exportCmlItem item in itemGroup) { if (!headerOK) { headerOK = true; insertPoint.AddAfterSelf( new XElement(ad + "Row", string.IsNullOrEmpty(itemGroup.Key)/*!isUrl(itemGroup.Key)*/ ? null : new XElement(ad + "Cell", new XAttribute(ss + "Index", 2), new XAttribute(ss + "StyleID", "s71"), new XAttribute(ss + "HRef", dataPath(itemGroup.Key, transLang, grp)), new XElement(ad + "Data", new XAttribute(ss + "Type", "String"), "GOTO Translation" ) ), string.IsNullOrEmpty(itemGroup.Key)/*!isUrl(itemGroup.Key)*/ ? null : new XElement(ad + "Cell", new XAttribute(ss + "Index", 3), new XAttribute(ss + "StyleID", "s71"), new XAttribute(ss + "HRef", dataPath(itemGroup.Key, srcLang, grp)), new XElement(ad + "Data", new XAttribute(ss + "Type", "String"), "GOTO Source" ) ), new XElement(ad + "Cell", new XAttribute(ss + "Index", 4), //new XAttribute(ss + "StyleID", "s71"), new XElement(ad + "Data", new XAttribute(ss + "Type", "String"), itemGroup.Key ) ) ) ); insertPoint = (XElement)insertPoint.NextNode; } cnt++; insertPoint.AddAfterSelf( new XElement(ad + "Row", //new XAttribute(ss + "AutoFitHeight", 1), new XElement(ad + "Cell", new XElement(ad + "Data", new XAttribute(ss + "Type", "String"), item.actCmd.ToString() ) ), new XElement(ad + "Cell", new XElement(ad + "Data", new XAttribute(ss + "Type", "String"), HttpUtility.HtmlDecode(item.TransText) ) ), new XElement(ad + "Cell", new XElement(ad + "Data", new XAttribute(ss + "Type", "String"), HttpUtility.HtmlDecode(item.NewSrcText) ) ), new XElement(ad + "Cell", new XElement(ad + "Data", new XAttribute(ss + "Type", "String"), HttpUtility.HtmlDecode(item.OldSrcText) ) ), new XElement(ad + "Cell", new XElement(ad + "Data", new XAttribute(ss + "Type", "Number"), item.Id ) ) ) ); insertPoint = (XElement)insertPoint.NextNode; } } string output = pattern.ToString(SaveOptions.DisableFormatting); output = @"<?xml version=""1.0""?><?mso-application progid=""Excel.Sheet""?>" + output.Replace(crlfCode, " "); byte[] outputByte = Encoding.UTF8.GetBytes(output); xml.Write(outputByte, 0, outputByte.Length); return cnt; }
public GenResxContext(LocPageGroup grp) { this.grp = grp; }
static string dataPath(Langs lang, LocPageGroup grp) { if (grp.ToString().IndexOf("EA") == 0) { string prefix = "http://test.langmaster.cz/"; switch (lang) { case Langs.cs_cz: return prefix + "eduauthornew/"; default: string lng = lang.ToString().Substring(3); return prefix + "com" + lng + "/"; } } else { return "http://test.langmaster.cz/lmcom/com/" + lang.ToString().Replace('_', '-') + "/"; } }
public static void AutoTranslate(LocPageGroup grp, Langs transLang, StringBuilder log) { List<LocCommand> filter = new List<LocCommand>(); filter.Add(LocCommand.OK); StringBuilder sb = new StringBuilder(); foreach (exportCmlItem item in ExportXmlItems(grp, transLang, filter)) { TradosDT.TradosDB db = TradosDT.TradosDB.getTradosContext(); TradosDT.Sentence sent = db.Sentences.Where(s => s.Id == item.Id).Single(); string srcText = item.NewSrcText; string transText = item.TransText; if (!checkTrans(item.Id, ref srcText, ref transText, sb, log)) continue; string oldTransText = sent.TransText; sent.SrcText = srcText; sent.TransText = transText; sent.finish(); RefreshLookup(db, sent, excelTextToXmlText(item.oldSrcText, log), oldTransText, sb, log); db.SaveChanges(); } }
public static void tradosOper2_forLang(LocPageGroup grp, Langs transLang, bool isAutoTrans) { LocCfgPageGroupFilter group = LocCfg.Instance().findPageGroup(grp); Langs srcLang = group.FindSrcLang(transLang); foreach (int pageId in TradosDT.TradosDB.getTradosContext().Pages. Where(p => p.PageGroup == (short)grp && (p.Langs == null || p.Langs.Contains(transLang.ToString()))). Select(p => p.Id)) { TradosDT.TradosDB db = TradosDT.TradosDB.getTradosContext(); if (Machines.sb != null) Machines.sb.Length = 0; //Name vsech zdrojovych vet var srcIds = db.Sentences.Where(s => s.PageId == pageId && s.TransLang == (short)srcLang).Select(s => s.Name).ToArray(); //Vsechny doposud pripravene vety var oldSents = db.Sentences.Where(s2 => s2.PageId == pageId && s2.TransLang == (short)transLang).ToArray(); //Vymaz nepotrebne vety (neboli prelozene vety, ktere nejsou ve zdroji) db.Sentences.RemoveRange(oldSents.Where(s => !srcIds.Contains(s.Name))); //Vsechny zdroje a lookup preklady var autoTrans = db.Sentences. Where(s => s.PageId == pageId && s.TransLang == (short)srcLang && s.TransText != null). Select(s => new { name = s.Name, srcText = s.TransText, transTexts = db.Lookups.Where(l => l.SrcLang == (short)srcLang && l.TransLang == (short)transLang && l.SrcHash == s.TransHash && l.SrcText == s.TransText). Select(l => l.TransText).ToArray() }). ToArray(); //Vytvoreni novych nebo uprava starych vet foreach (string name in srcIds) { //pro vsechny potrebne vety TradosDT.Sentence sent; //if (name == "l09/a/hufex1_l09_a03/Ttrans5") // sent = null; try { sent = oldSents.Where(s => s.Name == name).SingleOrDefault(); //stara veta } catch (Exception exp) { throw new Exception(string.Format("oldSents.SingleOrDefault: name={0}, grp={1}, lang={2}", name, grp, transLang), exp); } try { var item = autoTrans.Where(at => at.name == name).SingleOrDefault(); //novy zdroj a ev. preklad z lookupu if (sent == null) { //zalozeni nove vety if (isAutoTrans && item != null && item.transTexts.Count() == 1) //existuje prave jeden lookup, dopln novy zdroj a preklad (veta DONE) TradosDT.Sentence.insert(db, pageId, name, item.srcText, (Langs)srcLang, item.transTexts.Single(), transLang); else //ne, nova veta je prezdna (TRANS) TradosDT.Sentence.insert(db, pageId, name, null, (Langs)srcLang, null, transLang); } else { //veta existuje if (isAutoTrans && item != null && item.transTexts.Count() == 1) { //existuje prave jeden lookup sent.SrcText = item.srcText; sent.TransText = item.transTexts.Single(); //aktualizuj vetu (veta DONE) sent.finish(); } } } catch (Exception exp) { throw new Exception(string.Format("autoTrans.SingleOrDefault: name={0}, grp={1}, lang={2}", name, grp, transLang), exp); } } db.SaveChanges(); } }
public static string dataPath(string seeUrl, Langs lang, LocPageGroup grp) { return string.Format(seeUrl, dataPath(lang, grp)); }
public static void cancelOper2(LocPageGroup group, Langs transLang) { Trados.TradosDataContext db = Machines.getTradosContext(); foreach (int pageId in db.Pages.Where(p => p.PageGroup == (short)group).Select(p => p.Id)) db.Sentences.DeleteAllOnSubmit(db.Sentences.Where(s2 => s2.PageId == pageId && s2.TransLang == (short)transLang)); db.SubmitChanges(); }
public static void oper5(LocPageGroup group, Langs transLang) { TradosLib.GenerateResx(group, transLang); }
public static void oper3(LocPageGroup group, Langs transLang, bool doLock, List<LocCommand> commands, Stream str) { Trados.TradosDataContext db = Machines.getTradosContext(); Trados.Lock lck = new Trados.Lock(); db.Locks.InsertOnSubmit(lck); lck.Created = DateTime.UtcNow; lck.Lang = (short)transLang; lck.PageGroup = (short)group; lck.Locked = doLock; db.SubmitChanges(); TradosLib.ExportXml(group, transLang, str, commands); }
/// <summary> /// Import RESX souboru do databaze /// </summary> public static IEnumerable<string> oper1(LocPageGroup grp) { LocCfgPageGroupFilter group = LocCfg.Instance().findPageGroup(grp); //RESX soubory List<string> files = getFiles(new LocPageGroup[] { grp }).Where(s => hasResxFile(s)).Select(s => resxFileName(s)).ToList(); if (File.Exists(group.GlobalResourcePath)) files.Add(group.GlobalResourcePath); if (File.Exists(group.GlobalResourcePathJS)) files.Add(group.GlobalResourcePathJS); //vsechny stranky grupy k vymazani List<int> deletePageIds = Machines.getTradosContext(false).Pages.Where(p => p.PageGroup == (short)grp).Select(p => p.Id).ToList(); foreach (string fn in files.Where(f => File.Exists(f))) { Trados.TradosDataContext db = Machines.getTradosContext(); db.CommandTimeout = 1000000; //Adjustace stranky Trados.Page page = db.Pages.Where(pg => pg.FileName == fn).SingleOrDefault(); if (page == null) { //nova stranka page = new Trados.Page(); db.Pages.InsertOnSubmit(page); } else { //stranka existuje: vymaz vety //odstran stranku ze stranek k vymazani deletePageIds.Remove(page.Id); //Vymazani vsech vet ke strance: Trados.TradosDataContext pomDb = Machines.getTradosContext(); pomDb.CommandTimeout = 1000000; pomDb.ExecuteCommand("DELETE FROM Sentence WHERE pageid={0} and srclang={1}", page.Id, (short)Langs.no); } page.FileName = fn.ToLowerInvariant(); page.PageGroup = (short)grp; page.SeeUrl = computeSeeUrl(group, page.FileName); page.Langs = group.fingLangFilter(fn); db.SubmitChanges(); StringBuilder sb = new StringBuilder(); //Vety z resource: using (ResXResourceReader rdr = new ResXResourceReader(fn)) foreach (System.Collections.DictionaryEntry de in rdr) { Trados.Sentence.insert(db, page.Id, (string)de.Key, null, Langs.no, normalizeXmlText(((string)de.Value).Replace(" ", "$nbsp;"), sb), group.PrimaryLang); } db.SubmitChanges(); //Odstraneni (**) zavorek ve zdrojovych resx string f = StringUtils.FileToString(fn); f = transFinal(f); StringUtils.StringToFile(f, fn); yield return fn; } //Vymaz stranky pro neexistujici soubory Trados.TradosDataContext delDb = Machines.getTradosContext(); foreach (int id in deletePageIds) { delDb.ExecuteCommand("DELETE FROM Sentence WHERE pageid={0}", id); delDb.ExecuteCommand("DELETE FROM Pages WHERE id={0}", id); } }
/// <summary> /// Pro skupinu stranek a jazyk vygeneruje RESX soubory (nebo lokalizovany .JS soubor) /// </summary> public static void GenerateResx(LocPageGroup grp, Langs transLang) { Trados.TradosDataContext db = Machines.getTradosContext(false); foreach (Trados.Page pg in db.Pages.Where(p => p.PageGroup == (short)grp)) GenerateResx(db, pg, transLang); }