コード例 #1
0
ファイル: TradosLib.cs プロジェクト: PavelPZ/REW
    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();
    }
コード例 #2
0
ファイル: TradosLib.cs プロジェクト: PavelPZ/REW
    /// <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;", "$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);
      }
    }
コード例 #3
0
ファイル: TradosLib.cs プロジェクト: PavelPZ/REW
    //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();
    }