Beispiel #1
0
        public async Task <TranslateResponseModel> GetDefinitionAsync(DefinitionRequestModel request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            //Getting a definition is translation a word with the same Dest and From language.
            var translateRequest = new TranslateRequestModel
            {
                Dest     = request.Language,
                From     = request.Language,
                Page     = request.Page,
                PageSize = request.PageSize,
                Phrase   = request.Phrase
            };

            var response = await _translator.GetTranslationAsync(translateRequest);

            return(response);
        }
Beispiel #2
0
        public async Task <TranslateResponseModel> GetTranslationAsync(TranslateRequestModel request)
        {
            var traslationResponse = new TranslateResponseModel();

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(_translateEndPoint);
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));

                var queryString = String.Format(_queryString, request.From.ThreeLetterISOLanguageName, request.Dest.ThreeLetterISOLanguageName, request.Phrase);

                var response = await client.GetAsync(queryString);

                if (response.IsSuccessStatusCode)
                {
                    traslationResponse = response.Content.ReadAsAsync <TranslateResponseModel>().Result;
                }
            }

            return(traslationResponse);
        }
Beispiel #3
0
        public async Task <IActionResult> Translate(TranslateRequestModel model)
        {
            var message = string.Empty;
            var documentTranslationClient = GetDocumentTranslationClient();

            var documentTranslationInputs = new List <DocumentTranslationInput>();
            var expiresOn = DateTimeOffset.UtcNow.AddDays(365);

            foreach (var language in model.TargetLanguages)
            {
                var translationTargets = new List <TranslationTarget>();

                var sourceUri         = storageService.GenerateSourceContainerSasUri(azureTranslatorOptions.SourceBlobContainerName, expiresOn);
                var translationSource = new TranslationSource(new Uri(sourceUri));
                translationSource.LanguageCode = model.CriteriaLanguage;

                var sourceName = documentNamingStrategy.GetTranslatedDocumentName(model.Name, language);

                var nameTokens = sourceName.Split(".");
                var namePart   = String.Join(".", nameTokens.Take(nameTokens.Length - 1));

                translationSource.Filter = new DocumentFilter
                {
                    Prefix = namePart,
                    Suffix = string.Empty,
                };

                var translationTarget = new TranslationTarget(new Uri(storageService.GenerateTargetContainerSasUri(azureTranslatorOptions.TargetBlobContainerName, expiresOn)), language);

                translationTargets.Add(translationTarget);

                kr.bbon.Azure.Translator.Services.Models.AzureStorage.Blob.BlobCreateResultModel blobfound = null;

                try
                {
                    blobfound = await storageService.FindByNameAsync(azureTranslatorOptions.TargetBlobContainerName, sourceName);
                }
                catch (Exception ex)
                {
                    blobfound = null;
                }

                if (blobfound != null)
                {
                    var error = new ErrorModel
                    {
                        Code    = "Target blob exists",
                        Message = $"If target blob exists, translation job will be failed. Please make sure to remove target blob ({sourceName}) in target container.",
                    };

                    throw new ApiHttpStatusException <ErrorModel>(HttpStatusCode.BadRequest, error.Message, error);
                }

                var documentTranslationInput = new DocumentTranslationInput(translationSource, translationTargets);
                documentTranslationInputs.Add(documentTranslationInput);
            }

            if (documentTranslationInputs.Count == 0)
            {
                message = "Request is invaild";
                var errorModel = new ErrorModel {
                    Code = "BadRequest", Message = message
                };
                throw new ApiHttpStatusException <ErrorModel>(HttpStatusCode.BadRequest, message, errorModel);
            }

            var operation = await documentTranslationClient.StartTranslationAsync(documentTranslationInputs);

            //var documentStatus = await operation.WaitForCompletionAsync();
            //await foreach (var document in documentStatus.Value)
            //{

            //}


            return(StatusCode(System.Net.HttpStatusCode.Accepted, new DocumentTranslationResponseModel
            {
                Id = operation.Id,
            }));
        }
        public async Task <IActionResult> TranslateAsync(TranslateRequestModel model)
        {
            var message = "";

            try
            {
                if (!ModelState.IsValid)
                {
                    message = "Request body is invalid.";
                    throw new ApiHttpStatusException <ErrorModel <int> >(HttpStatusCode.BadRequest, message, new ErrorModel <int>
                    {
                        Code    = (int)HttpStatusCode.BadRequest,
                        Message = message,
                    });
                }

                //var result = await storageService.FindByNameAsync(model.Name);


                //var containerSasUri = storageService.GenerateContainerSasUri();

                var nameTokens = model.Name.Split('.');
                var namePart   = string.Join(".", nameTokens.Take(nameTokens.Length - 1));

                var containerSasUri = "https://chtranslatorstroage.blob.core.windows.net/document-translation?sp=rwl&st=2021-08-03T07:46:05Z&se=2021-08-03T15:46:05Z&spr=https&sv=2020-08-04&sr=c&sig=D8uNMCPgOpEN9AGG6d%2BCS1TOAnEhXON1NNliUtpM174%3D";

                var documentTranslationRequestModel = new DocumentTranslationRequestModel
                {
                    Inputs = new BatchInput[]
                    {
                        new BatchInput
                        {
                            Source = new SourceInput
                            {
                                //SourceUrl = storageService.GenerateBlobSasUri(model.Name, BlobSasPermissions.List | BlobSasPermissions.Read, DateTimeOffset.UtcNow + TimeSpan.FromDays(3)),
                                //SourceUrl = storageService.GenerateContainerSasUri(BlobContainerSasPermissions.All, DateTimeOffset.UtcNow + TimeSpan.FromDays(3)),
                                SourceUrl     = containerSasUri,
                                StorageSource = StorageSources.AzureBlob,

                                Filter = new Filter
                                {
                                    //Prefix = namePart,
                                    //Suffix = ".html",
                                    Suffix = model.Name,
                                },
                                Language = model.CriteriaLanguage,
                            },
                            //StorageType =  StorageInputTypes.File,
                            StorageType = StorageInputTypes.Folder,
                            Targets     = model.TargetLanguages.Select(language => new TargetInput
                            {
                                //TargetUrl = storageService.GenerateBlobSasUri(documentNamingStrategy.GetTranslatedDocumentName(model.Name,language), BlobSasPermissions.List | BlobSasPermissions.Write | BlobSasPermissions.Create , DateTimeOffset.UtcNow + TimeSpan.FromDays(3)),
                                //TargetUrl = storageService.GenerateContainerSasUri(BlobContainerSasPermissions.All, DateTimeOffset.UtcNow + TimeSpan.FromDays(3)),
                                //TargetUrl="https://chtranslatorstroage.blob.core.windows.net/document-translation?sp=rw&st=2021-08-03T07:46:05Z&se=2021-08-03T15:46:05Z&spr=https&sv=2020-08-04&sr=c&sig=7%2FxohLKKDT2qywxgiFgpqVGdMXOm7lo5opITh1V2Vr4%3D",
                                TargetUrl     = containerSasUri,
                                Language      = language,
                                StorageSource = StorageSources.AzureBlob,
                            }),
                        },
                    },
                };

                var translationRequestResult = await documentTranslationService.RequestTranslation(documentTranslationRequestModel);

                return(StatusCode(HttpStatusCode.Accepted, translationRequestResult));
            }
            catch (ApiException ex)
            {
                return(StatusCode(ex.StatusCode, ex.Message, ex.GetDetails()));
            }
            catch (Exception ex)
            {
                logger.LogError(ex, ex.Message);

                return(StatusCode(HttpStatusCode.InternalServerError, ex.Message));
            }
        }