private void AddExtraDataToTranslate(OfferExtraData data) { lock (_transLock) { if (!_valuesToTranslate.Contains(data.Description[Languages.PolishCode])) { _valuesToTranslate.Add(data.Description[Languages.PolishCode]); } foreach (var p in data.Parameters) { if (!_valuesToTranslate.Contains(p.Name[Languages.RussianCode])) { _valuesToTranslate.Add(p.Name[Languages.RussianCode]); } if (!_valuesToTranslate.Contains(p.Value[Languages.RussianCode])) { _valuesToTranslate.Add(p.Value[Languages.RussianCode]); } } } }
private void SetOfferExtraData(Offer offer, CancellationToken cancellationToken) { OfferExtraData data = null; try { data = _restClient.GetExtraDataInit(offer.Id); data.Description[Languages.RussianCode] = data.Description[Languages.PolishCode] = ConvertDescriptionHtmlToText(data.Description[Languages.PolishCode]); offer.Description = data.Description; offer.Parameters = data.Parameters; } catch (Exception er) { _logger.LogError($"Offer '{offer.Id}' get extradata failed.", er); //throw new AllegroPlRequestException("Error get page data"); } if (_settings.IsTranslationEnabled) { AddExtraDataToTranslate(data); } }
private async Task ApplyTranslationsExtraData(OfferExtraData data, string sourceText, string destText, CancellationToken cancellationToken) { var dict = _translateService.GetDictionary(_valuesToTranslate); var translatedTexts = dict.Select(x => x.Key).ToList(); var forYandex = _valuesToTranslate.Where(x => !translatedTexts.Contains(x.ToLower())).ToArray(); var yandexTranslated = await _yandexTranslateClient.TranslateAsync(forYandex, Languages.PolishCode.ToLower(), Languages.RussianCode.ToLower(), cancellationToken); var yandexList = from f in forYandex join y in yandexTranslated on Array.IndexOf(forYandex, f) equals Array.IndexOf(yandexTranslated, y) select new { Key = f, Value = y }; var yandexDict = yandexList.ToDictionary(x => x.Key.ToLower(), x => x.Value); if (!yandexDict.ContainsKey(sourceText.ToLower())) { yandexDict.Add(sourceText.ToLower(), destText); } await _translateService.AddRecords(yandexDict, Languages.PolishCode, Languages.RussianCode, Guid.NewGuid()); var state = data.Parameters.FirstOrDefault(x => x.Name[Languages.PolishCode].ToLower() == StateAttributeName.ToLower()); if (state != null) { data.State = RestClient.StatesByNames.ContainsKey(state.Value[Languages.PolishCode].ToLower()) ? RestClient.StatesByNames[state.Value[Languages.PolishCode].ToLower()] : OfferStateEnum.New; } data.Description[Languages.RussianCode] = GetSafeValFromDictionary(dict, yandexDict, data.Description[Languages.PolishCode]); foreach (var p in data.Parameters) { p.Name[Languages.RussianCode] = GetSafeValFromDictionary(dict, yandexDict, p.Name[Languages.PolishCode]); p.Value[Languages.RussianCode] = GetSafeValFromDictionary(dict, yandexDict, p.Value[Languages.PolishCode]); } }
private async Task ApplyTranslationsExtraData(ITranslateService translateService, OfferExtraData data, CancellationToken cancellationToken) { var dict = await translateService.GetDictionary(_valuesToTranslate); var yandexDict = await GetWoTranslateDictionary(dict, cancellationToken); try { await translateService.AddRecords(yandexDict, Languages.PolishCode, Languages.RussianCode, Guid.NewGuid()); } catch { } var state = data.Parameters.FirstOrDefault(x => x.Name[Languages.PolishCode].ToLower() == StateAttributeName.ToLower()); if (state != null) { data.State = RestClient.StatesByNames.ContainsKey(state.Value[Languages.PolishCode].ToLower()) ? RestClient.StatesByNames[state.Value[Languages.PolishCode].ToLower()] : OfferStateEnum.New; } data.Description[Languages.RussianCode] = GetSafeValFromDictionary(dict, yandexDict, data.Description[Languages.PolishCode]); foreach (var p in data.Parameters) { p.Name[Languages.RussianCode] = GetSafeValFromDictionary(dict, yandexDict, p.Name[Languages.PolishCode]); p.Value[Languages.RussianCode] = GetSafeValFromDictionary(dict, yandexDict, p.Value[Languages.PolishCode]); } var notTranslatedParams = data.Parameters.Where(x => x.Name[Languages.PolishCode].ToLower() == x.Name[Languages.RussianCode].ToLower()).Distinct().ToDictionary(x => x.Name[Languages.PolishCode].ToLower(), x => x.Name[Languages.RussianCode]); var notTranslatedParamsValues = data.Parameters.Where(x => x.Value[Languages.PolishCode].ToLower() == x.Value[Languages.RussianCode].ToLower()).Distinct().ToDictionary(x => x.Name[Languages.PolishCode].ToLower(), x => x.Name[Languages.RussianCode]); try { await translateService.AddRecords(notTranslatedParams, Languages.PolishCode, Languages.RussianCode, Guid.NewGuid()); } catch (Exception er) { _logger.LogError(er.Message); } try { await translateService.AddRecords(notTranslatedParamsValues, Languages.PolishCode, Languages.RussianCode, Guid.NewGuid()); } catch (Exception ex) { _logger.LogError(ex.Message); } var desc = data.Description[Languages.PolishCode].ToLower(); var yandexTranslated = await _yandexTranslateClient.TranslateAsync(new string[] { desc }, Languages.PolishCode.ToLower(), Languages.RussianCode.ToLower(), cancellationToken); data.Description[Languages.RussianCode] = desc; data.Description[Languages.RussianCode] = yandexTranslated.Any() ? yandexTranslated[0] : desc; }