Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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();
        }