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);
        }
Пример #3
0
        /// <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
            });
        }
Пример #5
0
        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.");
            }
        }