Skip to content

Commit cfc2103

Browse files
Improved I18N system (#445)
1 parent f8dbc18 commit cfc2103

File tree

11 files changed

+109
-26
lines changed

11 files changed

+109
-26
lines changed

app/Build/Commands/CollectI18NKeysCommand.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ namespace Build.Commands;
1111
public sealed partial class CollectI18NKeysCommand
1212
{
1313
private const string START_TAG1 = """
14-
T("
15-
""";
14+
T("
15+
""";
1616

1717
private const string START_TAG2 = """
18-
TB("
19-
""";
18+
TB("
19+
""";
2020

2121
private const string START_TAG3 = """
22-
T(@"
23-
""";
22+
T(@"
23+
""";
2424

2525
private const string END_TAG = """
2626
")

app/MindWork AI Studio/Assistants/I18N/allTexts.lua

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2529,3 +2529,12 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T3948127789"] = "Suggestion"
25292529

25302530
-- Your stage directions
25312531
UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Your stage directions"
2532+
2533+
-- Unknown option
2534+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unknown option"
2535+
2536+
-- Choose the language manually.
2537+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034966"] = "Choose the language manually."
2538+
2539+
-- Choose the language automatically, based on your system language.
2540+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Choose the language automatically, based on your system language."

app/MindWork AI Studio/Layout/MainLayout.razor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,10 @@ public async Task ProcessMessage<TMessage>(ComponentBase? sendingComponent, Even
206206
break;
207207

208208
case Event.PLUGINS_RELOADED:
209+
this.Lang = await this.SettingsManager.GetActiveLanguagePlugin();
210+
I18N.Init(this.Lang);
211+
this.LoadNavItems();
212+
209213
await this.InvokeAsync(this.StateHasChanged);
210214
break;
211215
}

app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Verschiebe
447447
-- Show your workspaces
448448
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T733672375"] = "Zeige deine Arbeitsbereiche"
449449

450+
-- Start new chat in workspace "{0}"
451+
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T896906391"] = "Neuen Chat im Arbeitsbereich \"{0}\" starten"
452+
450453
-- Region
451454
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CONFIDENCEINFO::T1227782301"] = "Region"
452455

@@ -2059,7 +2062,7 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2864211629"] = "Bitte warten Sie
20592062
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2929332068"] = "Unterstützer"
20602063

20612064
-- Writer
2062-
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Schreiber"
2065+
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Schreiben"
20632066

20642067
-- Show details
20652068
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Details anzeigen"
@@ -2528,3 +2531,12 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T3948127789"] = "Vorschlag"
25282531

25292532
-- Your stage directions
25302533
UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Ihre Regieanweisungen"
2534+
2535+
-- Unknown option
2536+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unbekannte Option"
2537+
2538+
-- Choose the language manually.
2539+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034966"] = "Sprache manuell auswählen."
2540+
2541+
-- Choose the language automatically, based on your system language.
2542+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Sprache automatisch anhand Ihrer Systemsprache auswählen."

app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Move the c
447447
-- Show your workspaces
448448
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T733672375"] = "Show your workspaces"
449449

450+
-- Start new chat in workspace "{0}"
451+
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T896906391"] = "Start new chat in workspace \"{0}\""
452+
450453
-- Region
451454
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CONFIDENCEINFO::T1227782301"] = "Region"
452455

@@ -2059,7 +2062,7 @@ UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2864211629"] = "Please wait for
20592062
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2929332068"] = "Supporters"
20602063

20612064
-- Writer
2062-
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Writer"
2065+
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T2979224202"] = "Writing"
20632066

20642067
-- Show details
20652068
UI_TEXT_CONTENT["AISTUDIO::LAYOUT::MAINLAYOUT::T3692372066"] = "Show details"
@@ -2529,3 +2532,12 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T3948127789"] = "Suggestion"
25292532
-- Your stage directions
25302533
UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Your stage directions"
25312534

2535+
-- Unknown option
2536+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unknown option"
2537+
2538+
-- Choose the language manually.
2539+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034966"] = "Choose the language manually."
2540+
2541+
-- Choose the language automatically, based on your system language.
2542+
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Choose the language automatically, based on your system language."
2543+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using AIStudio.Tools.PluginSystem;
2+
3+
namespace AIStudio.Settings.DataModel;
4+
5+
public static class LangBehaviorExtensions
6+
{
7+
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(LangBehaviorExtensions).Namespace, nameof(LangBehaviorExtensions));
8+
9+
public static string Name(this LangBehavior langBehavior) => langBehavior switch
10+
{
11+
LangBehavior.AUTO => TB("Choose the language automatically, based on your system language."),
12+
LangBehavior.MANUAL => TB("Choose the language manually."),
13+
14+
_ => TB("Unknown option")
15+
};
16+
}

app/MindWork AI Studio/Settings/DataModel/LangBehaviourExtensions.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.

app/MindWork AI Studio/Settings/SettingsManager.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace AIStudio.Settings;
1313
/// <summary>
1414
/// The settings manager.
1515
/// </summary>
16-
public sealed class SettingsManager(ILogger<SettingsManager> logger, RustService rustService)
16+
public sealed class SettingsManager
1717
{
1818
private const string SETTINGS_FILENAME = "settings.json";
1919

@@ -23,9 +23,19 @@ public sealed class SettingsManager(ILogger<SettingsManager> logger, RustService
2323
Converters = { new TolerantEnumConverter() },
2424
};
2525

26-
private readonly ILogger<SettingsManager> logger = logger;
27-
private readonly RustService rustService = rustService;
28-
26+
private readonly ILogger<SettingsManager> logger;
27+
private readonly RustService rustService;
28+
29+
/// <summary>
30+
/// The settings manager.
31+
/// </summary>
32+
public SettingsManager(ILogger<SettingsManager> logger, RustService rustService)
33+
{
34+
this.logger = logger;
35+
this.rustService = rustService;
36+
this.logger.LogInformation("Settings manager created.");
37+
}
38+
2939
/// <summary>
3040
/// The directory where the configuration files are stored.
3141
/// </summary>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
namespace AIStudio.Tools.PluginSystem;
2+
3+
public class I18N : ILang
4+
{
5+
public static readonly I18N I = new();
6+
private static readonly ILogger<I18N> LOG = Program.LOGGER_FACTORY.CreateLogger<I18N>();
7+
8+
private ILanguagePlugin language = PluginFactory.BaseLanguage;
9+
10+
private I18N()
11+
{
12+
}
13+
14+
public static void Init(ILanguagePlugin language) => I.language = language;
15+
16+
#region Implementation of ILang
17+
18+
public string T(string fallbackEN)
19+
{
20+
LOG.LogWarning("Using I18N.I.T without namespace and type is probably wrong, because the I18N key collection process of the build system will not find those keys.");
21+
return this.GetText(this.language, fallbackEN);
22+
}
23+
24+
public string T(string fallbackEN, string? typeNamespace, string? typeName)
25+
{
26+
return this.GetText(this.language, fallbackEN, typeNamespace, typeName);
27+
}
28+
29+
#endregion
30+
}

app/MindWork AI Studio/Tools/PluginSystem/ILangExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public static string GetText(this ILang lang, ILanguagePlugin plugin, string fal
1212
typeName ??= type.Name;
1313
typeNamespace ??= type.Namespace!;
1414

15-
// When the type's name ends with `1 or 2`, etc. (i.e., generic classes), remove it:
16-
if(typeName.Contains("`"))
15+
// When the type's name ends with `1 or `2, etc. (i.e., generic classes), remove it:
16+
if(typeName.Contains('`'))
1717
typeName = typeName[..typeName.IndexOf('`')];
1818

1919
var ns = $"{typeNamespace}::{typeName}".ToUpperInvariant().Replace(".", "::");

0 commit comments

Comments
 (0)