| File: Tasks\XlfTask.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 Microsoft.Build.Utilities; using System; using System.IO; using XliffTasks.Model; namespace XliffTasks.Tasks { public abstract class XlfTask : Task { internal XlfTask() { } public sealed override bool Execute() { try { ExecuteCore(); } catch (BuildErrorException ex) { Log.LogErrorFromException(ex, showStackTrace: false, showDetail: false, file: ex.RelatedFile); } return !Log.HasLoggedErrors; } protected abstract void ExecuteCore(); internal static TranslatableDocument LoadSourceDocument(string path, string format) { TranslatableDocument document; if (format.Equals("Resx", StringComparison.OrdinalIgnoreCase)) { document = new ResxDocument(); } else if (format.Equals("Unstructured", StringComparison.OrdinalIgnoreCase)) { document = new UnstructuredDocument(); } else if (format.Equals("Vsct", StringComparison.OrdinalIgnoreCase)) { document = new VsctDocument(); } else if (format.Equals("XamlRule", StringComparison.OrdinalIgnoreCase)) { document = new XamlRuleDocument(); } else if (format.Equals("Json", StringComparison.OrdinalIgnoreCase)) { document = new JsonDocument(); } else { throw new BuildErrorException($"Unknown source file format '{format}'.") { RelatedFile = path }; } document.Load(path); return document; } internal static XlfDocument LoadXlfDocument(string path, string language = null, bool createIfNonExistent = false) { XlfDocument document = new(); if (File.Exists(path)) { document.Load(path); } else if (createIfNonExistent) { Release.Assert(!string.IsNullOrEmpty(language)); document.LoadNew(language); } else { throw new FileNotFoundException($"File not found: {path}", path); } return document; } internal static string GetXlfPath(string sourcePath, string language) { string directory = Path.GetDirectoryName(sourcePath); string filename = Path.GetFileNameWithoutExtension(sourcePath); string extension = Path.GetExtension(sourcePath); string xlfExtension; if (extension.Equals(".resx", StringComparison.OrdinalIgnoreCase)) { xlfExtension = $".{language}.xlf"; } else { xlfExtension = $"{extension}.{language}.xlf"; } return Path.Combine(directory, "xlf", filename + xlfExtension); } internal static string GetSourceDocumentId(string sourcePath) { return $"../{Path.GetFileName(sourcePath)}"; } } }