public async Task <Segment[]> TranslateText(string text, LanguageMappingModel model, FileAndSegmentIds fileAndSegments) { if (string.IsNullOrEmpty(model?.SelectedModel?.Model)) { throw new Exception(PluginResources.Message_No_model_selected); } CheckConnection(); var uri = new Uri($"{Constants.MTCloudTranslateAPIUri}/v4/mt/translations/async"); var request = GetRequestMessage(HttpMethod.Post, uri); var engineModel = model.SelectedModel.Model; var translationRequestModel = new TranslationRequest { Input = new[] { text }, SourceLanguageId = model.SelectedSource.CodeName, TargetLanguageId = model.SelectedTarget.CodeName, Model = engineModel, InputFormat = "xliff", QualityEstimation = engineModel.ToLower().Contains("qe") ? 1 : 0 }; if (!model.SelectedDictionary.Name.Equals(PluginResources.Message_No_dictionary_available) && !model.SelectedDictionary.Name.Equals(PluginResources.Message_No_dictionary)) { translationRequestModel.Dictionaries = new[] { model.SelectedDictionary?.DictionaryId }; } var content = JsonConvert.SerializeObject(translationRequestModel); request.Content = new StringContent(content, new UTF8Encoding(), "application/json"); var response = await _httpClient.SendRequest(request); var translationResponse = await _httpClient.GetResult <TranslationResponse>(response); if (response is null) { return(null); } var responseMessage = await CheckTranslationStatus(translationResponse?.RequestId); var translations = await _httpClient.GetResult <TranslationResponse>(responseMessage); var translation = translations?.Translation?.FirstOrDefault(); if (translation == null) { return(null); } var translatedXliff = Converter.ParseXliffString(translation); if (translatedXliff == null) { return(null); } var targetSegments = translatedXliff.GetTargetSegments(); var segmentIds = fileAndSegments.Segments.Keys.ToList(); OnTranslationReceived(new TranslationData { TargetSegments = segmentIds.Select((segmentId, index) => (segmentId, target: targetSegments[index].Segment.ToString())).ToDictionary( x => x.segmentId, x => x.target), TranslationOriginData = new TranslationOriginData { Model = translations.Model, QualityEstimations = segmentIds.Select((segmentId, index) => (segmentId, targetSegments[index].QualityEstimation))
public async Task <Segment[]> TranslateText(string text, LanguageMappingModel model) { if (string.IsNullOrEmpty(model?.SelectedModel?.Model)) { throw new Exception(PluginResources.Message_No_model_selected); } if (ConnectionService.Credential.ValidTo < DateTime.UtcNow) { // attempt one connection var success = ConnectionService.Connect(ConnectionService.Credential); if (!success.Item1) { _logger.Error($"{System.Reflection.MethodBase.GetCurrentMethod().Name} " + $"{PluginResources.Message_Connection_token_has_expired}\n {ConnectionService.Credential.Token}"); throw new Exception(PluginResources.Message_Connection_token_has_expired); } } using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + ConnectionService.Credential.Token); var uri = new Uri($"{Constants.MTCloudTranslateAPIUri}/v4" + "/mt/translations/async"); var request = new HttpRequestMessage(HttpMethod.Post, uri); ConnectionService.AddTraceHeader(request); var translationRequestModel = new TranslationRequest { Input = new[] { text }, SourceLanguageId = model.SelectedSource.CodeName, TargetLanguageId = model.SelectedTarget.CodeName, Model = model.SelectedModel.Model, InputFormat = "xliff" }; if (!model.SelectedDictionary.Name.Equals(PluginResources.Message_No_dictionary_available) && !model.SelectedDictionary.Name.Equals(PluginResources.Message_No_dictionary)) { translationRequestModel.Dictionaries = new[] { model.SelectedDictionary?.DictionaryId }; } var content = JsonConvert.SerializeObject(translationRequestModel); request.Content = new StringContent(content, new UTF8Encoding(), "application/json"); var responseMessage = await httpClient.SendAsync(request); var response = await responseMessage.Content.ReadAsStringAsync(); if (!responseMessage.IsSuccessStatusCode) { return(null); } if (JsonConvert.DeserializeObject <TranslationResponse>(response) is TranslationResponse translationResponse) { var dataResponse = await GetTranslations(httpClient, translationResponse.RequestId); if (JsonConvert.DeserializeObject <TranslationResponse>(dataResponse) is TranslationResponse translations) { var translation = translations.Translation.FirstOrDefault(); if (translation == null) { return(null); } //feedback.TargetMtText = translation; //TranslationReceived?.Invoke(feedback); var translatedXliff = Converter.ParseXliffString(translation); if (translatedXliff != null) { var segments = translatedXliff.GetTargetSegments(); return(segments); } } } } return(null); }