Add TranslationProvider

This commit is contained in:
Matthias Mailänder
2023-04-13 17:14:01 +03:00
committed by Matthias Mailänder
parent a065e6a47c
commit 68eec52cef
66 changed files with 384 additions and 333 deletions

View File

@@ -256,8 +256,6 @@ namespace OpenRA
CellLayer<byte> projectedHeight;
Rectangle projectionSafeBounds;
internal Translation Translation;
public static string ComputeUID(IReadOnlyPackage package)
{
return ComputeUID(package, GetMapFormat(package));
@@ -450,8 +448,6 @@ namespace OpenRA
}
Sequences = new SequenceSet(this, modData, Tileset, SequenceDefinitions);
Translation = TranslationDefinitions == null ? null
: new Translation(Game.Settings.Player.Language, FieldLoader.GetValue<string[]>("value", TranslationDefinitions.Value), this);
var tl = new MPos(0, 0).ToCPos(this);
var br = new MPos(MapSize.X - 1, MapSize.Y - 1).ToCPos(this);
@@ -1411,14 +1407,6 @@ namespace OpenRA
return false;
}
public string Translate(string key, IDictionary<string, object> args = null)
{
if (Translation != null && Translation.TryGetString(key, out var message, args))
return message;
return modData.Translation.GetString(key, args);
}
public void Dispose()
{
Sequences.Dispose();

View File

@@ -199,10 +199,14 @@ namespace OpenRA
public long DownloadBytes { get; private set; }
public int DownloadPercentage { get; private set; }
/// <summary>
/// Functionality mirrors <see cref="TranslationProvider.GetString"/>, except instead of using
/// loaded <see cref="Map"/>'s translations as backup, we use this <see cref="MapPreview"/>'s.
/// </summary>
public string GetLocalisedString(string key, IDictionary<string, object> args = null)
{
// PERF: instead of loading mod level Translation for each MapPreview, reuse the already loaded one in modData.
if (modData.Translation.TryGetString(key, out var message, args))
// PERF: instead of loading mod level Translation per each MapPreview, reuse the already loaded one in TranslationProvider.
if (TranslationProvider.TryGetModString(key, out var message, args))
return message;
return innerData.Translation?.GetString(key, args) ?? key;