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);
        }
示例#2
0
        public void ETSApi_FetchTranslation_InvalidTranslation()
        {
            XliffConverter.xliff xliffDocument = new XliffConverter.xliff(engFraLP.SourceCulture, engFraLP.TargetCulture);
            xliffDocument.AddSourceText(StringResource.BasicText);

            ETSTranslatorHelper.GetTranslation(apiKeyTranslationOptions, engInvLP, xliffDocument);
        }
示例#3
0
        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", ""));
        }
示例#5
0
 /// <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);
 }
示例#6
0
        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());
        }
示例#7
0
        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());
            }
        }
示例#8
0
        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);
            }
        }
示例#9
0
        /// <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]);
            }
        }
示例#10
0
 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");
 }
示例#11
0
 public void AddSourceText_NullSourceText_ThrowsException()
 {
     XliffConverter.xliff xliff = new XliffConverter.xliff(
         CultureInfo.GetCultureInfo("en-us"), CultureInfo.GetCultureInfo("fr"));
     xliff.AddSourceText(null);
 }
示例#12
0
        /// <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);
        }