private static void ProcessTextDocument(CloudBlockBlob fullNameForDocumentToProcess, string sourceLanguage, string targetLanguage, string strPath) { Console.WriteLine("reading blob..."); var document = fullNameForDocumentToProcess.OpenRead(); List <string> lstTexts = new List <string>(); using (var sr = new StreamReader(document, System.Text.Encoding.UTF8)) { string line; while ((line = sr.ReadLine()) != null) { lstTexts.Add(line); } } string result = string.Empty; var batches = DocumentTranslationManager.SplitList(lstTexts, 99, 9000); foreach (var batch in batches) { string[] translated = TranslationServiceFacade.TranslateArray(batch.ToArray(), sourceLanguage, targetLanguage); result = string.Concat(translated); } string blobfilename = DocumentTranslationManager.GetOutputDocumentFullName(fullNameForDocumentToProcess.Name, targetLanguage); CloudBlockBlob outputBlob = CreateBlockBlob(fullNameForDocumentToProcess.Container, strPath, blobfilename); outputBlob.UploadText(result, System.Text.Encoding.UTF8); return; }
public override void Invoke(IZappyExecutionContext context, ZappyTaskActionInvoker actionInvoker) { TranslationServiceFacade.AzureKey = TextTranslatorResorceKey; AccountViewModel.SaveAccountClick(); var worker = new BackgroundWorker(); DocumentTranslationManager.DoTranslation( FilePath, false, FromLanguage, ToLanguage, false); }
/// <summary> /// The execute. /// </summary> /// <returns> /// The <see cref="bool" />. /// </returns> public override bool Execute() { int documentcount = 0; List <String> listoffiles = new List <string>(); //Expand wildcard, if name specification contains * if (this.sourceDocuments.Values.ToArray().Any(file => file.ToString().Contains("*"))) { foreach (string filename in this.sourceDocuments.Values.ToArray()) { int lastBackslashPosition = filename.LastIndexOf('\\') + 1; string path = filename.Substring(0, lastBackslashPosition); string filenameOnly = filename.Substring(lastBackslashPosition); String[] filelist = Directory.GetFiles(path, filenameOnly, SearchOption.AllDirectories); listoffiles.AddRange(filelist); } } else //no * in the file name { foreach (var file in this.sourceDocuments.ValueString.Split(',')) { listoffiles.Add(file); } } try { var model = new CommentTranslationModel { SourceLanguage = this.sourceLanguage.ValueString ?? "Auto-Detect", TargetLanguage = this.targetLanguages.ValueString }; foreach (var file in listoffiles) { if (!File.Exists(file)) { Logger.WriteLine(LogLevel.Error, String.Format("Specified document {0} does not exist. ", file)); } foreach (var language in this.targetLanguages.Values) { try { this.Logger.WriteLine( LogLevel.Msg, string.Format( "Getting alignments for document {0} to language {1}.", file, language)); model.TargetPath = file; var sourceLanguageExpanded = String.IsNullOrEmpty(this.sourceLanguage.ValueString) || this.sourceLanguage.ValueString.Equals("Auto-Detect") ? "Auto-Detect" : TranslationServiceFacade.AvailableLanguages[ this.sourceLanguage.ValueString]; string languagename = TranslationServiceFacade.LanguageCodeToLanguageName(language.ToString()); DocumentTranslationManager.CreateAlignmentCSV( file, sourceLanguageExpanded, languagename); this.Logger.WriteLine( LogLevel.Msg, string.Format( "-- Aligned document name {0} to language {1}.", file, language)); documentcount++; } catch (Exception ex) { this.Logger.WriteLine( LogLevel.Error, string.Format( "Error while processing file: {0} to language {1} with error: {2}", model.TargetPath, language, ex.Message)); throw; } } } } catch (Exception ex) { this.Logger.WriteException(ex); Console.ReadLine(); return(false); } this.Logger.WriteLine(LogLevel.Msg, string.Format("Documents aligned successfully: {0}.", documentcount)); return(true); }
/// <summary> /// Translates a document and provides links to the original as well as the translated document /// </summary> /// <param name="storageContainerName">Name of the storage container</param> /// <param name="storageFileName">Name of the storage file (original document for translation)</param> /// <param name="originalLanguage">The language of the original file</param> /// <param name="translationLanguage">The language for translating the document</param> /// <returns></returns> public DocumentLinks TranslateFile(string storageContainerName, string storageFileName, string originalLanguage, string translationLanguage) { var localFileName = storageFileName; try { TranslationServiceFacade.Initialize(ConfigurationManager.AppSettings["ApiKey"]); DocumentTranslationManager.DoTranslation(localFileName, false, originalLanguage, translationLanguage); } catch (Exception ex) { _loggingService.Error("Error in TranslationServiceFacade.Initialize or DocumentTranslationManager.DoTranslation", ex); throw; } string originalFileUrl; string translatedFileUrl; string translatedDocumentName; try { var languageCode = TranslationServiceFacade.AvailableLanguages.Where(p => p.Value == translationLanguage).Select(p => p.Key).FirstOrDefault(); var extension = Helper.GetExtension(storageFileName); translatedDocumentName = localFileName.Replace($".{extension}", $".{languageCode}.{extension}"); // Move original file to SharePoint originalFileUrl = _sharePointManagementService.CopyFileToSharePoint(localFileName); // Move translated file to SharePoint translatedFileUrl = _sharePointManagementService.CopyFileToSharePoint(translatedDocumentName); } catch (Exception ex) { _loggingService.Error("Error in TranslationServiceFacade.AvailableLanguages.Wher or Helper.GetExtension or _sharePointManagementService.CopyFileToSharePoint", ex); throw; } try { // Delete original file if (System.IO.File.Exists(localFileName)) { System.IO.File.Delete(localFileName); } // Delete translated file if (System.IO.File.Exists(translatedDocumentName)) { System.IO.File.Delete(translatedDocumentName); } } catch (Exception ex) { _loggingService.Error("Error in System.IO.File.Exists or System.IO.File.Delete", ex); throw; } return(new DocumentLinks { OriginalDocument = originalFileUrl, TranslatedDocument = translatedFileUrl }); }
public static async Task Run( [BlobTrigger("to-be-translated/{name}", Connection = "AzureWebJobsStorage")] Stream InputStream, [Blob("translated/{name}", FileAccess.Write, Connection = "AzureWebJobsStorage")] TextWriter OutputText, string name, ILogger log) { var watch = System.Diagnostics.Stopwatch.StartNew(); Status status = Status.Success; string TranslatedContent = string.Empty; try { log.LogInformation($"STARTED: AutoTranslateBlob function for blob Name:{name} of Size: {InputStream.Length} Bytes"); OutputText.WriteLine(""); //Get Environment Variables string ToLang = GetEnvironmentVariable("ToLang"); string FromLang = GetEnvironmentVariable("FromLang"); string AzureKey = GetEnvironmentVariable("AzureTranslateKey"); string CategoryID = GetEnvironmentVariable("CategoryID"); string FileExtension = name.Split('.').Last().ToLower(); TranslationServiceFacade.LoadCredentials(AzureKey, CategoryID); TranslationServiceFacade.Initialize(true); //ReadFile string ContentToBeTranslated = await new StreamReader(InputStream).ReadToEndAsync(); //Translate switch (FileExtension) { case ("html"): TranslatedContent = HTMLTranslationManager.DoContentTranslation(ContentToBeTranslated, FromLang, ToLang); break; case ("htm"): TranslatedContent = HTMLTranslationManager.DoContentTranslation(ContentToBeTranslated, FromLang, ToLang); break; case "txt": TranslatedContent = DocumentTranslationManager.ProcessTextDocument(ContentToBeTranslated, FromLang, ToLang); break; default: break; } } catch (Exception e) { status = Status.Failure; log.LogError("Exception: " + e.Message); } finally { //Save to Blob await OutputText.WriteAsync(TranslatedContent); OutputText.Close(); watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; log.LogInformation($"FINISHED with {status.ToString()}: AutoTranslateBlob function for blob:{name} \n ExecutionTime: {Convert.ToString(elapsedMs)} Ms."); } }