private void asyncLib_Click(object sender, RoutedEventArgs e)
 {
     CreateClientContext();
     List inList = cc.Web.Lists.GetByTitle(this.inputFile.Text);
     List outList = cc.Web.Lists.GetByTitle(this.outputFile.Text);
     TranslationJob job = new TranslationJob(cc, this.culture.Text);
     job.AddLibrary(inList, outList);
     job.Start();
     cc.Load(job);
     ThreadPool.QueueUserWorkItem(new WaitCallback(CreateThreadForAsync), job);
 }
 private void asyncFolder_Click(object sender, RoutedEventArgs e)
 {
     CreateClientContext();
     Folder folderIn = cc.Web.GetFolderByServerRelativeUrl(this.inputFile.Text);
     Folder folderOut = cc.Web.GetFolderByServerRelativeUrl(this.outputFile.Text);
     TranslationJob job = new TranslationJob(cc, this.culture.Text);
     job.AddFolder(folderIn, folderOut, true);
     job.Start();
     cc.Load(job);
     ThreadPool.QueueUserWorkItem(new WaitCallback(CreateThreadForAsync), job);
 }
 private void asyncFile_Click(object sender, RoutedEventArgs e)
 {
     CreateClientContext();
     TranslationJob job = new TranslationJob(cc, this.culture.Text);
     string input = this.inputFile.Text;
     string output = this.outputFile.Text;
     job.AddFile(input, output);
     job.Name = this.jobName.Text;
     job.Start();
     cc.Load(job);
     ThreadPool.QueueUserWorkItem(new WaitCallback(CreateThreadForAsync), job);
 }
 static void AsyncFolder(string culture, string inFolder, string outFolder, string name)
 {
     Folder folderIn = cc.Web.GetFolderByServerRelativeUrl(inFolder);
     Folder folderOut = cc.Web.GetFolderByServerRelativeUrl(outFolder);
     TranslationJob job = new TranslationJob(cc, culture);
     job.AddFolder(folderIn, folderOut, true);
     job.Name = name;
     job.Start();
     cc.Load(job);
     cc.ExecuteQuery();
     Console.WriteLine("JobId: " + job.JobId);
     Console.WriteLine("JobName: " + job.Name);
     Console.WriteLine("Done");
 }
 static void AsyncLib(string culture, string inputList, string outputList, string name)
 {
     List inList = cc.Web.Lists.GetByTitle(inputList);
     List outList = cc.Web.Lists.GetByTitle(outputList);
     TranslationJob job = new TranslationJob(cc, culture);
     job.AddLibrary(inList, outList);
     job.Name = name;
     job.Start();
     cc.Load(job);
     cc.ExecuteQuery();
     Console.WriteLine("JobId: " + job.JobId);
     Console.WriteLine("JobName: " + job.Name);
     Console.WriteLine("Done");
 }
 static void AsyncFile(string culture, string input, string output, string name)
 {
     TranslationJob job = new TranslationJob(cc, culture);
     Console.WriteLine("Adding files");
     Console.WriteLine("Input: " + input);
     Console.WriteLine("Output: " + output);
     job.AddFile(input, output);
     job.Name = name;
     //test
     job.Start();
     cc.Load(job);
     cc.ExecuteQuery();
     Console.WriteLine("JobId: " + job.JobId);
     Console.WriteLine("JobName: " + job.Name);
     Console.WriteLine("Done");
 }
        private void OnSingleTranslationCompleted(TranslationJob job, string[] translatedTexts, bool useTranslatorFriendlyArgs)
        {
            var translatedText = translatedTexts[0];

            ConsecutiveErrors = 0;

            job.TranslatedText = PostProcessTranslation(job.Key, translatedText, useTranslatorFriendlyArgs);
            job.State          = TranslationJobState.Succeeded;

            RemoveOngoingTranslation(job.Key);

            if (!Settings.EnableSilentMode)
            {
                XuaLogger.AutoTranslator.Info($"Completed: '{job.Key.TemplatedOriginal_Text}' => '{job.TranslatedText}'");
            }

            Manager.InvokeJobCompleted(job);
        }
        private TranslationJob AddUnstartedJob(UntranslatedText key, TranslationJob job)
        {
            if (!_unstartedJobs.ContainsKey(key))
            {
                int countBefore = _unstartedJobs.Count;

                _unstartedJobs.Add(key, job);
                Manager.UnstartedTranslations++;

                if (countBefore == 0)
                {
                    Manager.ScheduleUnstartedJobs(this);
                }

                return(job);
            }
            return(null);
        }
 private void CreateThreadForListAllFileExt(object dummy)
 {
     try
     {
         string result = "";
         result += "Print Supported file extensions \n";
         IEnumerable <string> fileExitems = TranslationJob.EnumerateSupportedFileExtensions(cc);
         cc.ExecuteQuery();
         foreach (string item in fileExitems)
         {
             result += item + ", ";
         }
         DispatcherOperation dop = Dispatcher.BeginInvoke(new Action <string>(PrintResult), result);
     }
     catch (Exception e)
     {
         DispatcherOperation dop = Dispatcher.BeginInvoke(new Action <string>(PrintResult), e.ToString());
     }
 }
        private string GetTextToTranslate(TranslationJob job)
        {
            var removeInternalWhitespace = Settings.IgnoreWhitespaceInDialogue && job.Key.Original_Text.Length > Settings.MinDialogueChars;

            string text;

            if (removeInternalWhitespace)
            {
                text = job.Key.TemplatedOriginal_Text_FullyTrimmed;
            }
            else
            {
                text = job.Key.TemplatedOriginal_Text_ExternallyTrimmed;
            }

            text = PreProcessUntranslatedText(text);

            return(text);
        }
        public async Task <IHttpActionResult> Post(TranslationJob job)
        {
            try
            {
                Guid userId = RoboBrailleProcessor.getUserIdFromJob(this.Request.Headers.Authorization.Parameter);
                job.UserId = userId;
                Guid jobId = await _repository.SubmitWorkItem(job);

                return(Ok(jobId.ToString("D")));
            }
            catch (Exception e)
            {
                var resp = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content      = new StringContent(string.Format("Internal error: {0}", e)),
                    ReasonPhrase = e.Message
                };
                throw new HttpResponseException(resp);
            }
        }
        public void TestModelLanguageToLanguage()
        {
            TranslationJob trj = new TranslationJob()
            {
                Id              = Guid.NewGuid(),
                FileContent     = Encoding.UTF8.GetBytes("This is the first translation job."),
                UserId          = Guid.Parse("d2b97532-e8c5-e411-8270-f0def103cfd0"),
                FileExtension   = "txt",
                FileName        = "test",
                MimeType        = "text/plain",
                Status          = JobStatus.Started,
                SubmitTime      = DateTime.Now,
                DownloadCounter = 0,
                InputFileHash   = new byte[8],
                SourceLanguage  = Language.enGB.ToString(),
                TargetLanguage  = Language.daDK.ToString()
            };
            var repo = new TranslationRepository();

            var jobID = repo.SubmitWorkItem(trj).Result;

            while (repo.GetWorkStatus(jobID) == 2)
            {
                //wait
                Task.Delay(200);
            }
            byte[] res = null;
            if (repo.GetWorkStatus(jobID) == 1)
            {
                //sucess
                FileResult result = repo.GetResultContents(jobID);
                res = result.getFileContents();
            }
            else
            {
                //fail
                throw new Exception("Task with job ID: " + jobID + " failed");
            }

            NUnit.Framework.Assert.AreEqual("This is the first translation job.", Encoding.UTF8.GetString(res));
        }
Пример #13
0
        public bool EnqueueTranslation(object ui, UntranslatedText key, InternalTranslationResult translationResult, ParserTranslationContext context, bool checkOtherEndpoints, bool saveResultGlobally)
        {
            var added = AssociateWithExistingJobIfPossible(ui, key, translationResult, context, saveResultGlobally);

            if (added)
            {
                return(false);
            }

            if (checkOtherEndpoints)
            {
                var endpoints = Manager.ConfiguredEndpoints;
                var len       = endpoints.Count;
                for (int i = 0; i < len; i++)
                {
                    var endpoint = endpoints[i];
                    if (endpoint == this)
                    {
                        continue;
                    }

                    added = endpoint.AssociateWithExistingJobIfPossible(ui, key, translationResult, context, saveResultGlobally);
                    if (added)
                    {
                        return(false);
                    }
                }
            }

            if (!Settings.EnableSilentMode)
            {
                XuaLogger.AutoTranslator.Debug("Queued: '" + key.TemplatedOriginal_Text + "'");
            }

            var newJob = new TranslationJob(this, key, saveResultGlobally);

            newJob.Associate(key, ui, translationResult, context, saveResultGlobally);

            return(AddUnstartedJob(key, newJob));
        }
        public bool EnqueueTranslation(object ui, UntranslatedText key, TranslationResult translationResult, ParserTranslationContext context)
        {
            var added = AssociateWithExistingJobIfPossible(ui, key, translationResult, context);

            if (added)
            {
                return(false);
            }

            var checkOtherEndpoints = translationResult == null;

            if (checkOtherEndpoints)
            {
                var endpoints = Manager.ConfiguredEndpoints;
                var len       = endpoints.Count;
                for (int i = 0; i < len; i++)
                {
                    var endpoint = endpoints[i];
                    if (endpoint == this)
                    {
                        continue;
                    }

                    added = endpoint.AssociateWithExistingJobIfPossible(ui, key, translationResult, context);
                    if (added)
                    {
                        return(false);
                    }
                }
            }

            XuaLogger.Current.Debug("Queued: '" + key.TrimmedTranslatableText + "'");

            var saveResultGlobally = checkOtherEndpoints;
            var newJob             = new TranslationJob(this, key, saveResultGlobally);

            newJob.Associate(ui, translationResult, context);

            return(AddUnstartedJob(key, newJob));
        }
Пример #15
0
        private string GetTextToTranslate(TranslationJob job)
        {
            bool isNgui = job.Components.Any(x => x.Item.IsNGUI()) ||
                          job.Contexts.Any(x => x.Component.IsNGUI());

            var removeInternalWhitespace = (Settings.IgnoreWhitespaceInDialogue && job.Key.Original_Text.Length > Settings.MinDialogueChars) || (Settings.IgnoreWhitespaceInNGUI && isNgui);

            string text;

            if (removeInternalWhitespace)
            {
                text = job.Key.TemplatedOriginal_Text_FullyTrimmed;
            }
            else
            {
                text = job.Key.TemplatedOriginal_Text_ExternallyTrimmed;
            }

            text = PreProcessUntranslatedText(text);

            return(text);
        }
    /// <summary>
    /// submit an async job to translate a file
    /// </summary>
    /// <param name="culture">target langauge</param>
    /// <param name="input">full URL of input file</param>
    /// <param name="output">full URL of output file</param>
    static void AddAsyncFile(string culture, string input, string output, string user)
    {
        SPServiceContext sc       = SPServiceContext.GetContext(new SPSite(site));
        TranslationJob   job      = new TranslationJob(sc, CultureInfo.GetCultureInfo(culture));
        Encoding         encoding = new System.Text.UTF8Encoding();

        if (!String.IsNullOrEmpty(user))
        {
            job.UserToken = ConvertHexStringToByteArray(user);
            //job.UserToken = encoding.GetBytes(user);
        }
        Console.WriteLine("Input: " + input);
        Console.WriteLine("Output: " + output);
        Console.WriteLine("targetlang {0}:", job.TargetLanguage.Name);
        job.AddFile(input, output);
        Console.WriteLine("Submitting the job");
        job.Start();
        if (job.UserToken != null)
        {
            Console.WriteLine("User Token:" + encoding.GetString(job.UserToken));
        }
        ListJobItemInfo(job);
    }
 /// <summary>
 /// submit an async job to translate folder(s)
 /// </summary>
 /// <param name="culture">target langauge</param>
 /// <param name="inputFolder">Full URL of the input folder on SharePoint</param>
 /// <param name="outputFolder">Full URL of the output folder on SharePoint</param>
 static void AddAsyncFolder(string culture, string inputFolder, string outputFolder)
 {
     SPServiceContext sc = SPServiceContext.GetContext(new SPSite(site));
     TranslationJob job = new TranslationJob(sc, CultureInfo.GetCultureInfo(culture));
     using (SPSite siteIn = new SPSite(inputFolder))
     {
         Console.WriteLine("In site: {0}", siteIn);
         using (SPWeb webIn = siteIn.OpenWeb())
         {
             Console.WriteLine("In web: {0}", webIn);
             using (SPSite siteOut = new SPSite(outputFolder))
             {
                 Console.WriteLine("Out site: {0}", siteOut);
                 using (SPWeb webOut = siteOut.OpenWeb())
                 {
                     Console.WriteLine("Out web: {0}", webOut);
                     SPFolder folderIn = webIn.GetFolder(inputFolder);
                     SPFolder folderOut = webOut.GetFolder(outputFolder);
                     Console.WriteLine("Input: " + folderIn);
                     Console.WriteLine("Output: " + folderOut);
                     //true means to recursive all the sub folders
                     job.AddFolder(folderIn, folderOut, true);
                     Console.WriteLine("Submitting the job");
                     job.Start();
                     ListJobItemInfo(job);
                 }
             }
         }
     }
 }
 /// <summary>
 /// submit an async job to translate a document library
 /// </summary>
 /// <param name="culture">target langauge</param>
 /// <param name="inputList">Full URL of the input document library on SharePoint</param>
 /// <param name="outputList">Full URL of the output document library on SharePoint</param>
 static void AddAsyncLibrary(string culture, string inputList, string outputList)
 {
     SPServiceContext sc = SPServiceContext.GetContext(new SPSite(site));
     TranslationJob job = new TranslationJob(sc, CultureInfo.GetCultureInfo(culture));
     using (SPSite siteIn = new SPSite(inputList))
     {
         Console.WriteLine("In site: {0}", siteIn);
         using (SPWeb webIn = siteIn.OpenWeb())
         {
             Console.WriteLine("In web: {0}", webIn);
             using (SPSite siteOut = new SPSite(outputList))
             {
                 Console.WriteLine("Out site: {0}", siteOut);
                 using (SPWeb webOut = siteOut.OpenWeb())
                 {
                     Console.WriteLine("Out web: {0}", webOut);
                     SPDocumentLibrary listIn = (SPDocumentLibrary)webIn.GetList(inputList);
                     SPDocumentLibrary listOut = (SPDocumentLibrary)webOut.GetList(outputList);
                     Console.WriteLine("Input: " + listIn);
                     Console.WriteLine("Output: " + listOut);
                     job.AddLibrary(listIn, listOut);
                     Console.WriteLine("Submitting the job");
                     job.Start();
                     ListJobItemInfo(job);
                 }
             }
         }
     }
 }
 static TranslationJob createTranslationJob(string jobCulture)
 {
     Console.WriteLine("Creating job");
     TranslationJob job = new TranslationJob(sc, CultureInfo.GetCultureInfo(jobCulture));
     return job;
 }
        public UntranslatedTextInfo PrepareUntranslatedText(string unpreparedUntranslatedText, TranslationJob job)
        {
            var untranslatedText = job.Key.PrepareUntranslatedText(unpreparedUntranslatedText);
            var info             = job.UntranslatedTextInfo;

            if (info != null)
            {
                return(new UntranslatedTextInfo(untranslatedText, info.ContextBefore, info.ContextAfter));
            }
            else
            {
                return(new UntranslatedTextInfo(untranslatedText));
            }
        }
 static void ListJobItemInfo(TranslationJob job)
 {
     Console.WriteLine("Enumerating items in the job...");
     foreach (KeyValuePair<string, string> kv in job.EnumerateItems())
     {
         Console.WriteLine(kv.Key + " " + kv.Value);
     }
 }
Пример #22
0
        public ActionResult File()
        {
            try
            {
                Uri hostWebUri = new Uri(Request.QueryString["SPHostUrl"]);
                Uri appWebUri  = new Uri(Request.QueryString["SPAppWebUrl"]);

                string listId     = Request.QueryString["SPListId"];
                string listItemId = Request.QueryString["SPListItemId"];

                string culture     = string.Empty;
                string destination = string.Empty;

                //Get the settings
                List <Setting> settings = new List <Setting>();

                using (ClientContext ctx = TokenHelper.GetS2SClientContextWithWindowsIdentity(appWebUri, Request.LogonUserIdentity))
                {
                    List settingsList = ctx.Web.Lists.GetByTitle("Settings");
                    ctx.Load(settingsList);

                    ListItemCollection settingItems = settingsList.GetItems(CamlQuery.CreateAllItemsQuery());
                    ctx.Load(settingItems);

                    ctx.ExecuteQuery();

                    foreach (ListItem settingItem in settingItems)
                    {
                        settings.Add(new Setting()
                        {
                            Title = settingItem["Title"].ToString(),
                            Value = settingItem["Value"].ToString(),
                        });
                    }
                }

                culture     = settings.Where <Setting>(s => s.Title == "Culture").FirstOrDefault().Value;
                destination = settings.Where <Setting>(s => s.Title == "Destination").FirstOrDefault().Value;

                //Translate file synchronously
                using (ClientContext ctx = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWebUri, Request.LogonUserIdentity))
                {
                    //Get the file to translate
                    ListItem listItem = ctx.Web.Lists.GetById(new Guid(listId)).GetItemById(listItemId);
                    ctx.Load(listItem, i => i.File);
                    ctx.ExecuteQuery();

                    //Get the destination library
                    Folder destinationFolder = ctx.Web.Lists.GetByTitle(destination).RootFolder;
                    ctx.Load(destinationFolder, f => f.ServerRelativeUrl);
                    ctx.ExecuteQuery();

                    string ext        = listItem.File.Name.Substring(listItem.File.Name.LastIndexOf("."));
                    string inPath     = hostWebUri.Scheme + "://" + hostWebUri.Authority + ":" + hostWebUri.Port + listItem.File.ServerRelativeUrl;
                    string outPath    = hostWebUri.Scheme + "://" + hostWebUri.Authority + ":" + hostWebUri.Port + destinationFolder.ServerRelativeUrl + "/" + listItem.File.Name;
                    string returnPath = hostWebUri.Scheme + "://" + hostWebUri.Authority + ":" + hostWebUri.Port + destinationFolder.ServerRelativeUrl;
                    ViewBag.ReturnPath = returnPath;

                    //Check if extension is supported
                    ClientResult <bool> isSupported = TranslationJob.IsFileExtensionSupported(ctx, ext.Substring(1));
                    ctx.ExecuteQuery();
                    if (!isSupported.Value)
                    {
                        throw new Exception("File extension is not supported.");
                    }

                    //Translate
                    SyncTranslator job = new SyncTranslator(ctx, culture);
                    job.OutputSaveBehavior = SaveBehavior.AlwaysOverwrite;
                    ClientResult <TranslationItemInfo> cr = job.Translate(inPath, outPath);
                    ctx.ExecuteQuery();

                    if (!cr.Value.Succeeded)
                    {
                        throw new Exception(cr.Value.ErrorMessage);
                    }

                    //Return to library
                    Response.Redirect(returnPath);
                }
            }
            catch (Exception x)
            {
                ViewBag.Message = x.Message;
            }

            return(View());
        }
Пример #23
0
 public TranslationLineTracker(TranslationJob job)
 {
     Job        = job;
     LinesCount = job.Key.GetDictionaryLookupKey().Count(c => c == '\n') + 1;
 }
        public void TestPostLanguageToLanguage()
        {
            //init
            var mockJobs         = new Mock <DbSet <Job> >();
            var mockServiceUsers = new Mock <DbSet <ServiceUser> >();
            var mockContext      = new Mock <RoboBrailleDataContext>();

            // arrange
            var users = new List <ServiceUser> {
                new ServiceUser
                {
                    EmailAddress = "*****@*****.**",
                    UserId       = Guid.Parse("d2b97532-e8c5-e411-8270-f0def103cfd0"),
                    ApiKey       = Encoding.UTF8.GetBytes("7b76ae41-def3-e411-8030-0c8bfd2336cd"),
                    FromDate     = new DateTime(2015, 1, 1),
                    ToDate       = new DateTime(2020, 1, 1),
                    UserName     = "******",
                    Jobs         = null
                }
            }.AsQueryable();

            TranslationJob trj = new TranslationJob()
            {
                Id              = Guid.NewGuid(),
                FileContent     = Encoding.UTF8.GetBytes("This is the first translation job."),
                UserId          = Guid.Parse("d2b97532-e8c5-e411-8270-f0def103cfd0"),
                FileExtension   = "txt",
                FileName        = "test",
                MimeType        = "text/plain",
                Status          = JobStatus.Started,
                SubmitTime      = DateTime.Now,
                DownloadCounter = 0,
                InputFileHash   = new byte[8],
                SourceLanguage  = Language.enGB.ToString(),
                TargetLanguage  = Language.daDK.ToString()
            };
            TranslationJob trj2 = new TranslationJob()
            {
                Id              = Guid.NewGuid(),
                FileContent     = Encoding.UTF8.GetBytes("This is the second translation job."),
                UserId          = Guid.Parse("d2b87532-e8c5-e411-8270-f0def103cfd0"),
                FileExtension   = "txt",
                FileName        = "test2",
                MimeType        = "text/plain",
                Status          = JobStatus.Done,
                SubmitTime      = DateTime.Now,
                DownloadCounter = 2,
                InputFileHash   = new byte[2],
                SourceLanguage  = Language.enGB.ToString(),
                TargetLanguage  = Language.svSE.ToString()
            };
            var jobs = new List <TranslationJob> {
                trj2
            }.AsQueryable();

            mockJobs.As <IDbAsyncEnumerable <Job> >().Setup(m => m.GetAsyncEnumerator()).Returns(new TestDbAsyncEnumerator <Job>(jobs.GetEnumerator()));
            mockJobs.As <IQueryable <Job> >().Setup(m => m.Provider).Returns(new TestDbAsyncQueryProvider <Job>(jobs.Provider));

            mockJobs.As <IQueryable <Job> >().Setup(m => m.Expression).Returns(jobs.Expression);
            mockJobs.As <IQueryable <Job> >().Setup(m => m.ElementType).Returns(jobs.ElementType);
            mockJobs.As <IQueryable <Job> >().Setup(m => m.GetEnumerator()).Returns(jobs.GetEnumerator());

            mockServiceUsers.As <IDbAsyncEnumerable <ServiceUser> >().Setup(m => m.GetAsyncEnumerator()).Returns(new TestDbAsyncEnumerator <ServiceUser>(users.GetEnumerator()));
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.Provider).Returns(new TestDbAsyncQueryProvider <ServiceUser>(users.Provider));
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.Expression).Returns(users.Expression);
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.ElementType).Returns(users.ElementType);
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.GetEnumerator()).Returns(users.GetEnumerator());

            mockContext.Setup(m => m.Jobs).Returns(mockJobs.Object);
            mockContext.Setup(m => m.ServiceUsers).Returns(mockServiceUsers.Object);

            var repo    = new TranslationRepository(mockContext.Object);
            var request = new HttpRequestMessage();

            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Authorization", "Hawk id=\"d2b97532-e8c5-e411-8270-f0def103cfd0\", ts=\"1470657024\", nonce=\"VkcMGB\", mac=\"hXW+BLRoqwlUaQZQtpPToOWnVAh5KbAXGGT5f8dLMVk=\"");
            var serviceController = new TranslationController(repo);

            serviceController.Request = request;
            //call
            var jobid = serviceController.Post(trj).Result;

            //test
            mockJobs.Verify(m => m.Add(It.IsAny <Job>()), Times.Once());

            mockContext.Verify(m => m.SaveChanges(), Times.Exactly(1));
            //twice if it is synced
            //mockContext.Verify(m => m.SaveChanges(), Times.Exactly(2));
        }
 static void TestCancelJob(string jobid)
 {
     TranslationJob.CancelJob(cc, new Guid(jobid));
     cc.ExecuteQuery();
 }
Пример #26
0
        public ActionResult Library()
        {
            try
            {
                Uri hostWebUri = new Uri(Request.QueryString["SPHostUrl"]);
                Uri appWebUri  = new Uri(Request.QueryString["SPAppWebUrl"]);

                string listId     = Request.QueryString["SPListId"];
                string listItemId = Request.QueryString["SPListItemId"];

                string culture     = string.Empty;
                string destination = string.Empty;

                List <Setting> settings = new List <Setting>();

                //Get the settings
                using (ClientContext ctx = TokenHelper.GetS2SClientContextWithWindowsIdentity(appWebUri, Request.LogonUserIdentity))
                {
                    List settingsList = ctx.Web.Lists.GetByTitle("Settings");
                    ctx.Load(settingsList);

                    ListItemCollection settingItems = settingsList.GetItems(CamlQuery.CreateAllItemsQuery());
                    ctx.Load(settingItems);

                    ctx.ExecuteQuery();

                    foreach (ListItem settingItem in settingItems)
                    {
                        settings.Add(new Setting()
                        {
                            Title = settingItem["Title"].ToString(),
                            Value = settingItem["Value"].ToString(),
                        });
                    }
                }

                culture     = settings.Where <Setting>(s => s.Title == "Culture").FirstOrDefault().Value;
                destination = settings.Where <Setting>(s => s.Title == "Destination").FirstOrDefault().Value;

                //Translate library asynchronously
                using (ClientContext ctx = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWebUri, Request.LogonUserIdentity))
                {
                    //Get library to translate
                    Folder rootFolder = ctx.Web.Lists.GetById(new Guid(listId)).RootFolder;
                    ctx.Load(rootFolder, f => f.ServerRelativeUrl);

                    //Get destination library
                    Folder destinationFolder = ctx.Web.Lists.GetByTitle(destination).RootFolder;
                    ctx.Load(destinationFolder, f => f.ServerRelativeUrl);
                    ctx.ExecuteQuery();


                    TranslationJob job = new TranslationJob(ctx, culture);
                    job.AddFolder(rootFolder, destinationFolder, true);
                    job.Name = "LibraryTranslation";
                    job.Start();
                    ctx.Load(job);
                    ctx.ExecuteQuery();

                    string returnPath = hostWebUri.Scheme + "://" + hostWebUri.Authority + ":" + hostWebUri.Port + destinationFolder.ServerRelativeUrl;
                    ViewBag.ReturnPath = returnPath;
                    ViewBag.Message    = "The translation job has been scheduled.";
                }
            }
            catch (Exception x)
            {
                ViewBag.Message = x.Message;
            }

            return(View());
        }
 /// <summary>
 /// cancel submitted job
 /// call GetJobStatus() to get job ids
 /// </summary>
 /// <param name="jobid">job guid</param>
 static void CancelJob(string jobid)
 {
     TranslationJob.CancelJob(sc, new Guid(jobid));
 }
 /// <summary>
 /// submit an async job to translate a file
 /// </summary>
 /// <param name="culture">target langauge</param>
 /// <param name="input">full URL of input file</param>
 /// <param name="output">full URL of output file</param>
 static void AddAsyncFile(string culture, string input, string output, string user)
 {
     SPServiceContext sc = SPServiceContext.GetContext(new SPSite(site));
     TranslationJob job = new TranslationJob(sc, CultureInfo.GetCultureInfo(culture));
     Encoding encoding = new System.Text.UTF8Encoding();
     if (!String.IsNullOrEmpty(user))
     {
         job.UserToken = ConvertHexStringToByteArray(user);
         //job.UserToken = encoding.GetBytes(user);
     }
     Console.WriteLine("Input: " + input);
     Console.WriteLine("Output: " + output);
     Console.WriteLine("targetlang {0}:", job.TargetLanguage.Name);
     job.AddFile(input, output);
     Console.WriteLine("Submitting the job");
     job.Start();
     if (job.UserToken != null)
     {
         Console.WriteLine("User Token:" + encoding.GetString(job.UserToken));
     }
     ListJobItemInfo(job);
 }