public override bool Execute() { var xlfDocument = new XlfDocument(XlfPath); var result = xlfDocument.Update(ResxPath, "updated", "new"); Log.LogMessage(MessageImportance.Low, "Update results:" + $"\n\t{result.UpdatedItems} resources updated" + $"\n\t{result.AddedItems} resources added" + $"\n\t{result.RemovedItems} resources deleted"); xlfDocument.Save(); return(!Log.HasLoggedErrors); }
public override bool Execute() { var xlfDocument = new XlfDocument(XlfPath); var result = xlfDocument.Update(ResxPath, "updated", "new"); Log.LogMessage(MessageImportance.Low, "Update results:" + $"\n\t{result.UpdatedItems} resources updated" + $"\n\t{result.AddedItems} resources added" + $"\n\t{result.RemovedItems} resources deleted"); xlfDocument.Save(); return !Log.HasLoggedErrors; }
private static void ConvertResxToXlf(string resxFile, string xlfDirectory, string originalFile) { bool madeNeutral = false; string originalFileName = Path.GetFileName(originalFile); if (Path.GetExtension(originalFileName) == ".resx") { // Make common case of resx original file implicit, but don't remove other extensions // or else a .resx and .vsct with the same name will collide. originalFileName = Path.GetFileNameWithoutExtension(originalFileName); } if (!Directory.Exists(xlfDirectory)) { Directory.CreateDirectory(xlfDirectory); } foreach (var language in s_languages) { string xlfFile = Path.Combine(xlfDirectory, $"{originalFileName}.{language}.xlf"); if (!File.Exists(xlfFile)) { string originalFileId = MakeOriginalFileId(originalFile); File.WriteAllText(xlfFile, $@"<?xml version=""1.0"" encoding=""utf-8""?> <xliff xmlns=""urn:oasis:names:tc:xliff:document:1.2"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" version=""1.2"" xsi:schemaLocation=""urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd""> <file datatype=""xml"" source-language=""en"" target-language=""{language}"" original=""{originalFileId}""> <body> <group id=""{originalFileId}"" /> </body> </file> </xliff>"); } var xlfDocument = new XlfDocument(xlfFile); xlfDocument.Update(resxFile, updatedResourceStateString: "needs-review-translation", addedResourceStateString: "new"); xlfDocument.Save(); if (!madeNeutral) { MakeNeutral(xlfFile, Path.Combine(xlfDirectory, $"{originalFileName}.xlf")); madeNeutral = true; } } }
public void UpdateStaleXlfFromResxWithCustomStateStrings() { using (var sample = new ResxWithStaleCorrespondingXlf()) { var xlfDocument = new XlfDocument(sample.XlfFileName); var updateResult = xlfDocument.Update(sample.ResxFileName, "foo", "bar"); Assert.AreEqual(1, updateResult.AddedItems.Count(), "number of added items must be 1"); Assert.AreEqual(1, updateResult.RemovedItems.Count(), "number of removed items must be 1"); Assert.AreEqual(2, updateResult.UpdatedItems.Count(), "number of updated items must be 2"); var xlfTransUnits = xlfDocument.Files.SelectMany(f => f.TransUnits).ToDictionary(tu => tu.Id, tu => tu); Assert.AreEqual(4, xlfTransUnits.Count); AssertTranslationUnit(xlfTransUnits, "a", "Text for a", "Translation", "Comment for a", null); AssertTranslationUnit(xlfTransUnits, "b", "Text for b", "Translation", "Comment for b", "foo"); AssertTranslationUnit(xlfTransUnits, "c", "Text for c", "Translation", "Comment for c", "foo"); AssertTranslationUnit(xlfTransUnits, "d", "Text for d", "Text for d", "Comment for d", "bar"); } }
public void UpdateEmptyXlfFromResx() { using (var sample = new ResxWithEmptyCorrespondingXlf()) { var xlfDocument = new XlfDocument(sample.XlfFileName); var updateResult = xlfDocument.Update(sample.ResxFileName, "new", "new"); Assert.AreEqual(4, updateResult.AddedItems.Count()); Assert.AreEqual(0, updateResult.RemovedItems.Count()); Assert.AreEqual(0, updateResult.UpdatedItems.Count()); var xlfTransUnits = xlfDocument.Files.SelectMany(f => f.TransUnits).ToDictionary(tu => tu.Id, tu => tu); Assert.AreEqual(4, xlfTransUnits.Count); AssertTranslationUnit(xlfTransUnits, "a", "Text for a", "Text for a", "Comment for a", "new"); AssertTranslationUnit(xlfTransUnits, "b", "Text for b", "Text for b", "Comment for b", "new"); AssertTranslationUnit(xlfTransUnits, "c", "Text for c", "Text for c", "Comment for c", "new"); AssertTranslationUnit(xlfTransUnits, "d", "Text for d", "Text for d", "Comment for d", "new"); } }
private static string Update(string xliff, string resx) { var xliffDocument = new XlfDocument(); if (string.IsNullOrEmpty(xliff)) { xliffDocument.LoadNew("fr"); } else { xliffDocument.Load(new StringReader(xliff)); } var resxDocument = new ResxDocument(); resxDocument.Load(new StringReader(resx)); xliffDocument.Update(resxDocument, "test.resx"); var writer = new StringWriter(); xliffDocument.Save(writer); return(writer.ToString()); }