public void ParseFile_SampleXliff_NoErrors() { string text = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SampleXliff.xliff")); XliffConverter.xliff xliff = XliffConverter.Converter.ParseXliffString(text); Assert.AreEqual("ETS", xliff.File.Header.Tools[0].ToolID); Assert.AreEqual("SDL ETS", xliff.File.Header.Tools[0].ToolName); Assert.AreEqual("5.4", xliff.File.Header.Tools[0].ToolVersion); Assert.AreEqual("ar", xliff.File.SourceLanguage); Assert.AreEqual("en", xliff.File.TargetLanguage); Assert.AreEqual(5, xliff.File.Body.TranslationUnits.Count); Assert.AreEqual(1, xliff.File.Body.TranslationUnits[1].ID); Assert.AreEqual("Wu aru duuply cancurnud avur thu lasting canflict in Basnia and Hurzugavina.", xliff.File.Body.TranslationUnits[1].SourceText); XliffConverter.TranslationOption translationOption = xliff.File.Body.TranslationUnits[1].TranslationList.First(); Assert.AreEqual("ETS", translationOption.ToolID); Assert.AreEqual("We Are Deeply Concerned Over The Lasting Conflict In Bosnia And Herzegovina.", xliff.File.Body.TranslationUnits[1].TranslationList.First().Translation.Text); Assert.AreEqual("en", translationOption.Translation.TargetLanguage); }
public void ETSApi_FetchTranslation_InvalidTranslation() { XliffConverter.xliff xliffDocument = new XliffConverter.xliff(engFraLP.SourceCulture, engFraLP.TargetCulture); xliffDocument.AddSourceText(StringResource.BasicText); ETSTranslatorHelper.GetTranslation(apiKeyTranslationOptions, engInvLP, xliffDocument); }
public void ETSApi_FetchTranslationNoTags_ValidTranslation() { XliffConverter.xliff xliffDocument = new XliffConverter.xliff(engFraLP.SourceCulture, engFraLP.TargetCulture); xliffDocument.AddSourceText(StringResource.BasicText); string translatedXliffText = ETSTranslatorHelper.GetTranslation(apiKeyTranslationOptions, engFraLP, xliffDocument); XliffConverter.xliff translatedXliff = XliffConverter.Converter.ParseXliffString(translatedXliffText); Assert.IsTrue(translatedXliff.GetTargetSegments().Any()); Assert.AreEqual( StringResource.BasicTranslation, translatedXliff.GetTargetSegments()[0].ToString()); string token = ETSTranslatorHelper.GetAuthToken(basicAuthTranslationOptions, userCredentials); basicAuthTranslationOptions.ApiToken = token; translatedXliffText = ETSTranslatorHelper.GetTranslation(basicAuthTranslationOptions, engFraLP, xliffDocument); translatedXliff = XliffConverter.Converter.ParseXliffString(translatedXliffText); Assert.IsTrue(translatedXliff.GetTargetSegments().Any()); Assert.AreEqual( StringResource.BasicTranslation, translatedXliff.GetTargetSegments()[0].ToString()); }
public void PrintXliff_SampleXliff_SameAsInput() { string text = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SampleXliff.xliff")); XliffConverter.xliff xliff = XliffConverter.Converter.ParseXliffString(text); string printedXliff = XliffConverter.Converter.PrintXliff(xliff); Assert.AreEqual(Regex.Replace(text, "\r|\n", ""), Regex.Replace(text, "\r|\n", "")); }
/// <summary> /// Prepares a source translation string for request. It ultimately removes all the tags data, /// storing them temporarily in a dictionary, which then can be used to reinstate the tags' text. /// Function taken from previous ETS Plugin. /// </summary> /// <param name="segment"></param> /// <param name="hasTags"></param> /// <param name="tagMapping"></param> /// <returns></returns> public XliffConverter.xliff CreateXliffFile(Segment[] segments) { Log.logger.Trace(""); XliffConverter.xliff xliffDocument = new XliffConverter.xliff( languageDirection.SourceCulture, languageDirection.TargetCulture); foreach (Segment seg in segments) { xliffDocument.AddSourceSegment(seg); } return(xliffDocument); }
public void ETSApi_FetchTranslationEmoji_ValidTranslation() { XliffConverter.xliff xliffDocument = new XliffConverter.xliff(engFraLP.SourceCulture, engFraLP.TargetCulture, encodeUTF16: true); xliffDocument.AddSourceText(StringResource.BasicEmojiTest); string translatedXliffText = ETSTranslatorHelper.GetTranslation(apiKeyTranslationOptions, engFraLP, xliffDocument); XliffConverter.xliff translatedXliff = XliffConverter.Converter.ParseXliffString(translatedXliffText); Assert.IsTrue(translatedXliff.GetTargetSegments().Any()); Assert.AreEqual( StringResource.BasicEmojiTranslation, translatedXliff.GetTargetSegments()[0].ToString()); }
public void GetSegments_TaggedText_SameAsSource() { Segment[] segments = SegmentParser.Parser.ParseFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TaggedFile.txt")); XliffConverter.xliff xliff = new XliffConverter.xliff( CultureInfo.GetCultureInfo("en-us"), CultureInfo.GetCultureInfo("fr")); foreach (Segment segment in segments) { xliff.AddTranslation(segment, segment, "ETS"); } Segment[] targetSegments = xliff.GetTargetSegments(); for (int i = 0; i < segments.Length; i++) { Assert.AreEqual(segments[i].ToString(), targetSegments[i].ToString()); } }
public void GetSegments_NoTarget_NullTargetSegments() { Segment[] segments = SegmentParser.Parser.ParseFile( Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TaggedFile.txt")); XliffConverter.xliff xliff = new XliffConverter.xliff( CultureInfo.GetCultureInfo("en-us"), CultureInfo.GetCultureInfo("fr")); foreach (Segment segment in segments) { xliff.AddSourceSegment(segment); } Segment[] targetSegments = xliff.GetTargetSegments(); foreach (Segment segment in targetSegments) { Assert.IsNull(segment); } }
/// <summary> /// Creates a translated segment by calling upon the ETS API (via helper methods) /// </summary> /// <param name="sourceSegment"></param> /// <returns></returns> private Segment[] TranslateSegments(Segment[] sourceSegments) { Log.logger.Trace(""); try { XliffConverter.xliff xliffDocument = CreateXliffFile(sourceSegments); string translatedXliffText = ETSTranslatorHelper.GetTranslation( provider.Options, languageDirection, xliffDocument); XliffConverter.xliff translatedXliff = XliffConverter.Converter.ParseXliffString(translatedXliffText); return(translatedXliff.GetTargetSegments()); } catch (Exception e) { Log.logger.Error(e, "Error in TranslateSegments"); return(new Segment[sourceSegments.Length]); } }
public void AddTranslation_NullTargetSegment_ThrowsException() { XliffConverter.xliff xliff = new XliffConverter.xliff( CultureInfo.GetCultureInfo("en-us"), CultureInfo.GetCultureInfo("fr")); xliff.AddTranslation(new Segment(xliff.File.SourceCulture), null, "ETS"); }
public void AddSourceText_NullSourceText_ThrowsException() { XliffConverter.xliff xliff = new XliffConverter.xliff( CultureInfo.GetCultureInfo("en-us"), CultureInfo.GetCultureInfo("fr")); xliff.AddSourceText(null); }
/// <summary> /// Get the translation of an xliff file using the ETS API. /// </summary> /// <param name="options"></param> /// <param name="languageDirection"></param> /// <param name="xliffFile"></param> /// <returns></returns> public static string GetTranslation(TranslationOptions options, LanguagePair languageDirection, XliffConverter.xliff xliffFile) { Log.logger.Trace(""); string text = xliffFile.ToString(); NameValueCollection queryString = HttpUtility.ParseQueryString(string.Empty); string encodedInput = text.Base64Encode(); lock (optionsLock) { if (options.APIVersion == APIVersion.Unknown) { SetETSApiVersion(options); } } if (options.APIVersion == APIVersion.v1) { queryString["sourceLanguageId"] = languageDirection.SourceCulture.ToETSCode(); queryString["targetLanguageId"] = languageDirection.TargetCulture.ToETSCode(); queryString["text"] = encodedInput; } else { // If LPPreferences doesn't contain the target language (source is always the same), figure out the // preferred LP. Previously set preferred LPs will stay, so this won't get run each time if you have // multiple LPs. if (!options.LPPreferences.ContainsKey(languageDirection.TargetCulture)) { options.SetPreferredLanguages(new LanguagePair[] { languageDirection }); if (!options.LPPreferences.ContainsKey(languageDirection.TargetCulture)) { throw new Exception("There are no language pairs currently accessible via ETS."); } } queryString["languagePairId"] = options.LPPreferences[languageDirection.TargetCulture].LanguagePairId; queryString["input"] = encodedInput; } queryString["inputFormat"] = "application/x-xliff"; Log.logger.Debug("Sending translation request for: {0}", encodedInput); string jsonResult; try { jsonResult = ContactETSServer(ETSPost, options, "translations/quick", queryString); } catch (Exception e) { Log.logger.Error(e, "Error translating " + encodedInput); throw; } string encodedTranslation = JsonConvert.DeserializeObject <ETSTranslationOutput>(jsonResult).translation; string decodedTranslation = encodedTranslation.Base64Decode(); Log.logger.Debug("Resultant translation is: {0}", encodedTranslation); return(decodedTranslation); }