public static void oper1NewTradosPages(tradosPage[] pages, bool isFakeRussian) { Trados.TradosDataContext db = Machines.getTradosContext(); db.CommandTimeout = 1000000; //insert pages foreach (var page in pages) { //kontrola jednoznacnosti sentence name var dupls = page.sentences.GroupBy(s => s.Name).Where(g => g.Select(s => s.Value).Distinct().Count() > 1).ToArray(); if (dupls.Length > 0) throw new Exception(@"d:\LMCom\rew\LMComLib\Framework\TradosLib.cs, oper1NewTradosPages"); var delDb = Machines.getTradosContext(); delDb.Pages.DeleteAllOnSubmit(delDb.Pages.Where(p => p.FileName == page.FileName)); delDb.SubmitChanges(); var pg = new Trados.Page { FileName = page.FileName, PageGroup = (short)(isFakeRussian ? LocPageGroup.fakeRussian : LocPageGroup.newEA), SeeUrl = page.FileName }; foreach (var s in page.sentences.GroupBy(s => s.Name).Select(g => g.First())) Trados.Sentence.insert(db, pg, s.Name, null, Langs.no, s.Value, page.srcLang); } db.SubmitChanges(); }
/// <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); } }
//public class tradosSents { // public string Name; //Sentence.Name, cesta od "level" (bez) // public string TransText; //obsah //} //pageFilter a sentFilter slouzi pro hromadne delete. //sentFilter muze byt not null pouze tehdy, obsahuje-li pageFilter uplnou cestu k urovni (napr. lm/oldea/data/english1). Toto se ale v oper1New nekontroluje //pages jsou data pro Insert. public static void oper1NewTradosPagePart(string sentFilter, tradosPage page, bool isFakeRussian) { Trados.TradosDataContext db = Machines.getTradosContext(); db.CommandTimeout = 1000000; var singlePage = db.Pages.FirstOrDefault(p => p.FileName == page.FileName); var emptyData = page.sentences == null || page.sentences.Length == 0; if (singlePage == null && emptyData) return; //nothing todo //delete sentences na zaklade sentFilter if (singlePage != null) { //stranka existuje var delDb = Machines.getTradosContext(); delDb.Sentences.DeleteAllOnSubmit(delDb.Sentences.Where(s => s.PageId == singlePage.Id && s.Name.StartsWith(sentFilter))); delDb.SubmitChanges(); } //chybi data => delete page if (emptyData && singlePage != null) { db.Pages.DeleteOnSubmit(singlePage); return; } if (!emptyData && singlePage == null) db.Pages.InsertOnSubmit(singlePage = new Trados.Page { FileName = page.FileName, PageGroup = (short)(isFakeRussian ? LocPageGroup.fakeRussian : LocPageGroup.newEA), Langs = null /*TODO*/ }); else { //kontrola zdrojoveho jazyka stranky - nesmi se zmenit var actSrcLang = (Langs)db.Sentences.Where(s => s.PageId == singlePage.Id).Select(s => s.TransLang).FirstOrDefault(); if (actSrcLang != Langs.no && page.srcLang != actSrcLang) throw new Exception("single page TransLang mishmash"); } //insert sentences pod singlePage stranku, sentences !=null && singlePage!=null foreach (var s in page.sentences) Trados.Sentence.insert(db, singlePage, s.Name, null, Langs.no, s.Value, page.srcLang); db.SubmitChanges(); }