public ICollection <StringResource> Import() { var matchedXlfFile = false; xliffDocumentProvider.LoadXlfDocuments(); foreach (var doc in xliffDocumentProvider.XlfDocuments) { string plainFileName = XliffFileHelpers.GetPlainFileName(baseDirectory, doc.FileName); foreach (var xlfFile in doc.Files) { if (!FileMatchesProjectInvariantLocale(xlfFile)) { continue; } matchedXlfFile = true; string storageLocation = XliffFileHelpers.GetStorageLocation(plainFileName, xlfFile.Original); string locale = GetLocale(doc.FileName, xlfFile); Dictionary <string, StringResource> fileStringResources = GetStringResourcesForFile(storageLocation); foreach (var transUnit in xlfFile.TransUnits) { StringResource stringResource = GetOrCreateStringResource(fileStringResources, storageLocation, transUnit); if (ShouldWriteTargetLanguage(locale, transUnit)) { stringResource.SetLocaleText(locale, transUnit.Target); } } } } ValidateXlfFilesFound(matchedXlfFile, xliffDocumentProvider.XlfDocuments.Count); return(resourcesPerFile.SelectMany(t => t.Value.Select(x => x.Value)).ToList()); }
public void Export() { xliffDocumentProvider.LoadXlfDocuments(); ReportFileLoadErrors(); Dictionary <string, XliffTranslationFiles> xliffFiles = xliffDocumentProvider.GetXliffFilesPerLocale(); IEnumerable <IGrouping <string, StringResource> > groupedStorageLocations = resourceStrings.GroupBy(t => t.StorageLocation); foreach (var grouping in groupedStorageLocations) { IEnumerable <string> missingLocales; if (xliffFiles.TryGetValue(grouping.Key, out XliffTranslationFiles translationFiles)) { missingLocales = localesToExport.Where(t => !translationFiles.AvailableLocales.Contains(t)); } else { translationFiles = new XliffTranslationFiles(grouping.Key); xliffFiles.Add(grouping.Key, translationFiles); missingLocales = localesToExport; } if (!translationFiles.TryGetXliffFileForLocale(InvariantLanguage, out XlfFile invariantFile)) { if (grouping.Key.Contains("\\")) { int index = grouping.Key.LastIndexOf("\\"); if ((index < 0) || (index + 1 == grouping.Key.Length)) { continue; } string originalFileName = grouping.Key.Substring(grouping.Key.LastIndexOf("\\") + 1); if (originalFileName.Length == 0) { continue; } invariantFile = CreateXliffFile(grouping.Key, InvariantLanguage, originalFileName, "plaintext", projectLocale); translationFiles.AddXliffFile(InvariantLanguage, invariantFile); } } foreach (var missingLocale in missingLocales) { var xlfFile = CreateXliffFile(grouping.Key, missingLocale, invariantFile); translationFiles.AddXliffFile(missingLocale, xlfFile); } foreach (var stringResource in grouping) { foreach (var locale in stringResource.GetLocales()) { if (!localesToExport.Contains(locale)) { continue; } if (!translationFiles.TryGetXliffFileForLocale(locale, out XlfFile xlfFile)) { continue; } if (xlfFile.TryGetTransUnit(stringResource.Name, XlfDialect.Standard, out XlfTransUnit transUnit)) { transUnit.Target = stringResource.GetLocaleText(locale); } else { string source; if (invariantFile.TryGetTransUnit(stringResource.Name, XlfDialect.Standard, out XlfTransUnit invariantTransUnit)) { source = invariantTransUnit.Source; } else if (stringResource.IsLocalePresent(InvariantLanguage)) { source = stringResource.GetLocaleText(InvariantLanguage); } else { continue; } xlfFile.AddTransUnit(stringResource.Name, source, stringResource.GetLocaleText(locale), XlfFile.AddMode.FailIfExists, XlfDialect.Standard); } } } } xliffDocumentProvider.SaveDocuments(localesToExport); ReportFileSaveStatus(); }