mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-13 12:14:16 +01:00
SeStringEvaluator: fallback to games ClientLanguage (#2261)
This commit is contained in:
parent
b996ff5e10
commit
ce49b0d51f
2 changed files with 23 additions and 7 deletions
|
|
@ -51,6 +51,9 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
{
|
{
|
||||||
private static readonly ModuleLog Log = new("SeStringEvaluator");
|
private static readonly ModuleLog Log = new("SeStringEvaluator");
|
||||||
|
|
||||||
|
[ServiceManager.ServiceDependency]
|
||||||
|
private readonly ClientState.ClientState clientState = Service<ClientState.ClientState>.Get();
|
||||||
|
|
||||||
[ServiceManager.ServiceDependency]
|
[ServiceManager.ServiceDependency]
|
||||||
private readonly DataManager dataManager = Service<DataManager>.Get();
|
private readonly DataManager dataManager = Service<DataManager>.Get();
|
||||||
|
|
||||||
|
|
@ -92,7 +95,7 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
if (str.IsTextOnly())
|
if (str.IsTextOnly())
|
||||||
return new(str);
|
return new(str);
|
||||||
|
|
||||||
var lang = language ?? this.dalamudConfiguration.EffectiveLanguage.ToClientLanguage();
|
var lang = language ?? this.GetEffectiveClientLanguage();
|
||||||
|
|
||||||
// TODO: remove culture info toggling after supporting CultureInfo for SeStringBuilder.Append,
|
// TODO: remove culture info toggling after supporting CultureInfo for SeStringBuilder.Append,
|
||||||
// and then remove try...finally block (discard builder from the pool on exception)
|
// and then remove try...finally block (discard builder from the pool on exception)
|
||||||
|
|
@ -116,7 +119,7 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
Span<SeStringParameter> localParameters = default,
|
Span<SeStringParameter> localParameters = default,
|
||||||
ClientLanguage? language = null)
|
ClientLanguage? language = null)
|
||||||
{
|
{
|
||||||
var lang = language ?? this.dalamudConfiguration.EffectiveLanguage.ToClientLanguage();
|
var lang = language ?? this.GetEffectiveClientLanguage();
|
||||||
|
|
||||||
if (!this.dataManager.GetExcelSheet<AddonSheet>(lang).TryGetRow(addonId, out var addonRow))
|
if (!this.dataManager.GetExcelSheet<AddonSheet>(lang).TryGetRow(addonId, out var addonRow))
|
||||||
return default;
|
return default;
|
||||||
|
|
@ -130,7 +133,7 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
Span<SeStringParameter> localParameters = default,
|
Span<SeStringParameter> localParameters = default,
|
||||||
ClientLanguage? language = null)
|
ClientLanguage? language = null)
|
||||||
{
|
{
|
||||||
var lang = language ?? this.dalamudConfiguration.EffectiveLanguage.ToClientLanguage();
|
var lang = language ?? this.GetEffectiveClientLanguage();
|
||||||
|
|
||||||
if (!this.dataManager.GetExcelSheet<Lobby>(lang).TryGetRow(lobbyId, out var lobbyRow))
|
if (!this.dataManager.GetExcelSheet<Lobby>(lang).TryGetRow(lobbyId, out var lobbyRow))
|
||||||
return default;
|
return default;
|
||||||
|
|
@ -144,7 +147,7 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
Span<SeStringParameter> localParameters = default,
|
Span<SeStringParameter> localParameters = default,
|
||||||
ClientLanguage? language = null)
|
ClientLanguage? language = null)
|
||||||
{
|
{
|
||||||
var lang = language ?? this.dalamudConfiguration.EffectiveLanguage.ToClientLanguage();
|
var lang = language ?? this.GetEffectiveClientLanguage();
|
||||||
|
|
||||||
if (!this.dataManager.GetExcelSheet<LogMessage>(lang).TryGetRow(logMessageId, out var logMessageRow))
|
if (!this.dataManager.GetExcelSheet<LogMessage>(lang).TryGetRow(logMessageId, out var logMessageRow))
|
||||||
return default;
|
return default;
|
||||||
|
|
@ -155,7 +158,7 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public string EvaluateActStr(ActionKind actionKind, uint id, ClientLanguage? language = null) =>
|
public string EvaluateActStr(ActionKind actionKind, uint id, ClientLanguage? language = null) =>
|
||||||
this.actStrCache.GetOrAdd(
|
this.actStrCache.GetOrAdd(
|
||||||
new(actionKind, id, language ?? this.dalamudConfiguration.EffectiveLanguage.ToClientLanguage()),
|
new(actionKind, id, language ?? this.GetEffectiveClientLanguage()),
|
||||||
static (key, t) => t.EvaluateFromAddon(2026, [key.Kind.GetActStrId(key.Id)], key.Language)
|
static (key, t) => t.EvaluateFromAddon(2026, [key.Kind.GetActStrId(key.Id)], key.Language)
|
||||||
.ExtractText()
|
.ExtractText()
|
||||||
.StripSoftHyphen(),
|
.StripSoftHyphen(),
|
||||||
|
|
@ -164,7 +167,7 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public string EvaluateObjStr(ObjectKind objectKind, uint id, ClientLanguage? language = null) =>
|
public string EvaluateObjStr(ObjectKind objectKind, uint id, ClientLanguage? language = null) =>
|
||||||
this.objStrCache.GetOrAdd(
|
this.objStrCache.GetOrAdd(
|
||||||
new(objectKind, id, language ?? this.dalamudConfiguration.EffectiveLanguage.ToClientLanguage()),
|
new(objectKind, id, language ?? this.GetEffectiveClientLanguage()),
|
||||||
static (key, t) => t.EvaluateFromAddon(2025, [key.Kind.GetObjStrId(key.Id)], key.Language)
|
static (key, t) => t.EvaluateFromAddon(2025, [key.Kind.GetObjStrId(key.Id)], key.Language)
|
||||||
.ExtractText()
|
.ExtractText()
|
||||||
.StripSoftHyphen(),
|
.StripSoftHyphen(),
|
||||||
|
|
@ -183,6 +186,18 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||||
private static uint ConvertRawToMapPosY(Lumina.Excel.Sheets.Map map, float y)
|
private static uint ConvertRawToMapPosY(Lumina.Excel.Sheets.Map map, float y)
|
||||||
=> ConvertRawToMapPos(map, map.OffsetY, y);
|
=> ConvertRawToMapPos(map, map.OffsetY, y);
|
||||||
|
|
||||||
|
private ClientLanguage GetEffectiveClientLanguage()
|
||||||
|
{
|
||||||
|
return this.dalamudConfiguration.EffectiveLanguage switch
|
||||||
|
{
|
||||||
|
"ja" => ClientLanguage.Japanese,
|
||||||
|
"en" => ClientLanguage.English,
|
||||||
|
"de" => ClientLanguage.German,
|
||||||
|
"fr" => ClientLanguage.French,
|
||||||
|
_ => this.clientState.ClientLanguage,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private SeStringBuilder EvaluateAndAppendTo(
|
private SeStringBuilder EvaluateAndAppendTo(
|
||||||
SeStringBuilder builder,
|
SeStringBuilder builder,
|
||||||
ReadOnlySeStringSpan str,
|
ReadOnlySeStringSpan str,
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ using System.Text;
|
||||||
using Dalamud.Configuration.Internal;
|
using Dalamud.Configuration.Internal;
|
||||||
using Dalamud.Data;
|
using Dalamud.Data;
|
||||||
using Dalamud.Game;
|
using Dalamud.Game;
|
||||||
|
using Dalamud.Game.ClientState;
|
||||||
using Dalamud.Game.Text.Evaluator;
|
using Dalamud.Game.Text.Evaluator;
|
||||||
using Dalamud.Game.Text.Noun.Enums;
|
using Dalamud.Game.Text.Noun.Enums;
|
||||||
using Dalamud.Game.Text.SeStringHandling;
|
using Dalamud.Game.Text.SeStringHandling;
|
||||||
|
|
@ -168,7 +169,7 @@ internal class SeStringCreatorWidget : IDataWindowWidget
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void Load()
|
public void Load()
|
||||||
{
|
{
|
||||||
this.language = Service<DalamudConfiguration>.Get().EffectiveLanguage.ToClientLanguage();
|
this.language = Service<ClientState>.Get().ClientLanguage;
|
||||||
this.UpdateInputString(false);
|
this.UpdateInputString(false);
|
||||||
this.Ready = true;
|
this.Ready = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue