From b742a776eb820a6eb5d4dfb56c7c21a8349422f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 19 Aug 2023 12:58:53 +0200 Subject: [PATCH] Refactor LocalizedMessage. --- OpenRA.Game/Network/LocalizedMessage.cs | 43 +++++++++---------------- OpenRA.Game/Network/UnitOrders.cs | 6 ++-- 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/OpenRA.Game/Network/LocalizedMessage.cs b/OpenRA.Game/Network/LocalizedMessage.cs index a6b0300a02..4deb7b7330 100644 --- a/OpenRA.Game/Network/LocalizedMessage.cs +++ b/OpenRA.Game/Network/LocalizedMessage.cs @@ -9,10 +9,8 @@ */ #endregion -using System; using System.Collections.Generic; using System.Linq; -using System.Text.RegularExpressions; using Linguini.Shared.Types.Bundle; namespace OpenRA.Network @@ -57,45 +55,36 @@ namespace OpenRA.Network public readonly string Key = string.Empty; [FieldLoader.LoadUsing(nameof(LoadArguments))] - public readonly FluentArgument[] Arguments = Array.Empty(); - - public string TranslatedText { get; } + public readonly Dictionary Arguments; static object LoadArguments(MiniYaml yaml) { - var arguments = new List(); + var arguments = new Dictionary(); var argumentsNode = yaml.Nodes.FirstOrDefault(n => n.Key == "Arguments"); if (argumentsNode != null) { - var regex = new Regex(@"Argument@\d+"); - foreach (var argument in argumentsNode.Value.Nodes) - if (regex.IsMatch(argument.Key)) - arguments.Add(FieldLoader.Load(argument.Value)); + foreach (var argumentNode in argumentsNode.Value.Nodes) + { + var argument = FieldLoader.Load(argumentNode.Value); + if (argument.Type == FluentArgument.FluentArgumentType.Number) + { + if (!double.TryParse(argument.Value, out var number)) + Log.Write("debug", $"Failed to parse {argument.Value}"); + + arguments.Add(argument.Key, number); + } + else + arguments.Add(argument.Key, argument.Value); + } } - return arguments.ToArray(); + return arguments; } public LocalizedMessage(MiniYaml yaml) { // Let the FieldLoader do the dirty work of loading the public fields. FieldLoader.Load(this, yaml); - - var argumentDictionary = new Dictionary(); - foreach (var argument in Arguments) - { - if (argument.Type == FluentArgument.FluentArgumentType.Number) - { - if (!double.TryParse(argument.Value, out var number)) - Log.Write("debug", $"Failed to parse {argument.Value}"); - - argumentDictionary.Add(argument.Key, number); - } - else - argumentDictionary.Add(argument.Key, argument.Value); - } - - TranslatedText = TranslationProvider.GetString(Key, argumentDictionary); } public static string Serialize(string key, Dictionary arguments = null) diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index de9bc31788..6820a66b99 100644 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -51,11 +51,11 @@ namespace OpenRA.Network { var localizedMessage = new LocalizedMessage(node.Value); if (localizedMessage.Key == Joined) - TextNotificationsManager.AddPlayerJoinedLine(localizedMessage.TranslatedText); + TextNotificationsManager.AddPlayerJoinedLine(localizedMessage.Key, localizedMessage.Arguments); else if (localizedMessage.Key == Left) - TextNotificationsManager.AddPlayerLeftLine(localizedMessage.TranslatedText); + TextNotificationsManager.AddPlayerLeftLine(localizedMessage.Key, localizedMessage.Arguments); else - TextNotificationsManager.AddSystemLine(localizedMessage.TranslatedText); + TextNotificationsManager.AddSystemLine(localizedMessage.Key, localizedMessage.Arguments); } break;