feat(i18n): add CultureResolver for OS-culture mapping

This commit is contained in:
mika kuns
2026-06-03 11:39:20 +02:00
parent d22b50e171
commit d95d55e6b8
2 changed files with 35 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
namespace ClaudeDo.Localization;
public static class CultureResolver
{
public static string Resolve(string cultureName, IReadOnlyCollection<string> available, string fallback = "en")
{
if (string.IsNullOrWhiteSpace(cultureName)) return fallback;
var exact = available.FirstOrDefault(c => string.Equals(c, cultureName, StringComparison.OrdinalIgnoreCase));
if (exact is not null) return exact;
var primary = cultureName.Split('-')[0];
var byPrimary = available.FirstOrDefault(c => string.Equals(c, primary, StringComparison.OrdinalIgnoreCase));
return byPrimary ?? fallback;
}
}

View File

@@ -0,0 +1,19 @@
using ClaudeDo.Localization;
namespace ClaudeDo.Localization.Tests;
public class CultureResolverTests
{
private static readonly string[] Codes = { "en", "de" };
[Theory]
[InlineData("de-DE", "de")]
[InlineData("de", "de")]
[InlineData("en-US", "en")]
[InlineData("fr-FR", "en")]
[InlineData("", "en")]
public void Resolve_maps_culture_to_available_code(string culture, string expected)
{
Assert.Equal(expected, CultureResolver.Resolve(culture, Codes, fallback: "en"));
}
}