Files
ClaudeDo/src/ClaudeDo.Localization/LocaleJson.cs

47 lines
1.4 KiB
C#

using System.Text.Json;
namespace ClaudeDo.Localization;
public static class LocaleJson
{
public static LocaleFile Parse(string json)
{
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;
var code = "";
var name = "";
if (root.TryGetProperty("metadata", out var meta) && meta.ValueKind == JsonValueKind.Object)
{
if (meta.TryGetProperty("code", out var c)) code = c.GetString() ?? "";
if (meta.TryGetProperty("name", out var n)) name = n.GetString() ?? "";
}
var strings = new Dictionary<string, string>(StringComparer.Ordinal);
foreach (var prop in root.EnumerateObject())
{
if (prop.NameEquals("metadata")) continue;
Flatten(prop.Name, prop.Value, strings);
}
return new LocaleFile(code, name, strings);
}
private static void Flatten(string prefix, JsonElement el, IDictionary<string, string> into)
{
switch (el.ValueKind)
{
case JsonValueKind.Object:
foreach (var p in el.EnumerateObject())
Flatten($"{prefix}.{p.Name}", p.Value, into);
break;
case JsonValueKind.String:
into[prefix] = el.GetString() ?? "";
break;
default:
into[prefix] = el.ToString();
break;
}
}
}