| File: Tasks\EnsureAllResourcesTranslated.cs | Web Access |
| Project: src\arcade\src\Microsoft.DotNet.XliffTasks\Microsoft.DotNet.XliffTasks.csproj (Microsoft.DotNet.XliffTasks) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.IO; using Microsoft.Build.Framework; using XliffTasks.Model; namespace XliffTasks.Tasks { public sealed class EnsureAllResourcesTranslated : XlfTask { [Required] public ITaskItem[] Sources { get; set; } [Required] public string[] Languages { get; set; } protected override void ExecuteCore() { foreach (ITaskItem item in Sources) { string sourceDocumentPath = item.GetMetadataOrDefault(MetadataKey.SourceDocumentPath, item.ItemSpec); SortedSet<string> untranslatedResourceSet = new(StringComparer.Ordinal); foreach (string language in Languages) { string xlfPath = XlfTask.GetXlfPath(sourceDocumentPath, language); XlfDocument xlfDocument; try { xlfDocument = XlfTask.LoadXlfDocument(xlfPath); } catch (FileNotFoundException) { // If the file doesn't exist, we don't need to worry about it having // untranslated resources. continue; } untranslatedResourceSet.UnionWith(xlfDocument.GetUntranslatedResourceIDs()); } if (untranslatedResourceSet.Count > 0) { string untranslatedResourceNames = string.Join(", ", untranslatedResourceSet); Log.LogErrorInFile(sourceDocumentPath, $"Found {untranslatedResourceSet.Count} untranslated resource(s): {untranslatedResourceNames}"); } } } } }