diff --git a/OpenRA.Game/Translation.cs b/OpenRA.Game/Translation.cs index 135fb81562..9e3c11f1c6 100644 --- a/OpenRA.Game/Translation.cs +++ b/OpenRA.Game/Translation.cs @@ -18,6 +18,7 @@ using Linguini.Bundle; using Linguini.Bundle.Builder; using Linguini.Shared.Types.Bundle; using Linguini.Syntax.Parser; +using Linguini.Syntax.Parser.Error; using OpenRA.FileSystem; namespace OpenRA @@ -40,6 +41,9 @@ namespace OpenRA readonly FluentBundle bundle; public Translation(string language, string[] translations, IReadOnlyFileSystem fileSystem) + : this(language, translations, fileSystem, error => Log.Write("debug", error.ToString())) { } + + public Translation(string language, string[] translations, IReadOnlyFileSystem fileSystem, Action onError) { if (translations == null || translations.Length == 0) return; @@ -51,10 +55,10 @@ namespace OpenRA .UseConcurrent() .UncheckedBuild(); - ParseTranslations(language, translations, fileSystem); + ParseTranslations(language, translations, fileSystem, onError); } - void ParseTranslations(string language, string[] translations, IReadOnlyFileSystem fileSystem) + void ParseTranslations(string language, string[] translations, IReadOnlyFileSystem fileSystem, Action onError) { // Always load english strings to provide a fallback for missing translations. // It is important to load the english files first so the chosen language's files can override them. @@ -71,7 +75,7 @@ namespace OpenRA var parser = new LinguiniParser(reader); var resource = parser.Parse(); foreach (var error in resource.Errors) - Log.Write("debug", error.ToString()); + onError(error); bundle.AddResourceOverriding(resource); } diff --git a/OpenRA.Mods.Common/Lint/CheckTranslationReference.cs b/OpenRA.Mods.Common/Lint/CheckTranslationReference.cs index eedb8f3e97..dd2aa59cde 100644 --- a/OpenRA.Mods.Common/Lint/CheckTranslationReference.cs +++ b/OpenRA.Mods.Common/Lint/CheckTranslationReference.cs @@ -62,8 +62,8 @@ namespace OpenRA.Mods.Common.Lint // TODO: Check all available languages. var language = "en"; - var modTranslation = new Translation(language, modData.Manifest.Translations, modData.DefaultFileSystem); - var mapTranslation = new Translation(language, FieldLoader.GetValue("value", map.TranslationDefinitions.Value), map); + var modTranslation = new Translation(language, modData.Manifest.Translations, modData.DefaultFileSystem, _ => { }); + var mapTranslation = new Translation(language, FieldLoader.GetValue("value", map.TranslationDefinitions.Value), map, error => emitError(error.ToString())); TestTraits(map.Rules, key => { @@ -82,7 +82,7 @@ namespace OpenRA.Mods.Common.Lint // TODO: Check all available languages. var language = "en"; Console.WriteLine($"Testing translation: {language}"); - var translation = new Translation(language, modData.Manifest.Translations, modData.DefaultFileSystem); + var translation = new Translation(language, modData.Manifest.Translations, modData.DefaultFileSystem, error => emitError(error.ToString())); TestTraits(modData.DefaultRules, key => {