feat(i18n): seed en.json and wire locale copy to app output
This commit is contained in:
37
tests/ClaudeDo.Localization.Tests/EnJsonCoverageTests.cs
Normal file
37
tests/ClaudeDo.Localization.Tests/EnJsonCoverageTests.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using ClaudeDo.Localization;
|
||||
|
||||
namespace ClaudeDo.Localization.Tests;
|
||||
|
||||
public class EnJsonCoverageTests
|
||||
{
|
||||
private static string LocalesDir()
|
||||
{
|
||||
var dir = AppContext.BaseDirectory;
|
||||
while (dir is not null)
|
||||
{
|
||||
var candidate = Path.Combine(dir, "src", "ClaudeDo.Localization", "locales");
|
||||
if (Directory.Exists(candidate)) return candidate;
|
||||
dir = Path.GetDirectoryName(dir);
|
||||
}
|
||||
throw new DirectoryNotFoundException("Could not locate src/ClaudeDo.Localization/locales");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Every_locale_has_same_keys_as_english()
|
||||
{
|
||||
var store = LocaleStore.Load(LocalesDir());
|
||||
Assert.True(store.TryGet("en", out var en));
|
||||
var enKeys = en!.Strings.Keys.ToHashSet();
|
||||
|
||||
foreach (var locale in store.Available)
|
||||
{
|
||||
var keys = locale.Strings.Keys.ToHashSet();
|
||||
var missing = enKeys.Except(keys).OrderBy(k => k).ToList();
|
||||
var extra = keys.Except(enKeys).OrderBy(k => k).ToList();
|
||||
Assert.True(missing.Count == 0,
|
||||
$"Locale '{locale.Code}' missing keys: {string.Join(", ", missing)}");
|
||||
Assert.True(extra.Count == 0,
|
||||
$"Locale '{locale.Code}' has extra keys not in en.json: {string.Join(", ", extra)}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user