using System.Globalization;
namespace CursorLang.Models;
///
/// Раскладка клавиатуры в удобном для отображения виде.
///
/// Идентификатор локали (младшее слово HKL).
/// Короткое имя для подсказки у курсора, например «RU».
/// Полное имя, например «RU — русский (Россия)».
public sealed record KeyboardLayout(int LocaleId, string ShortName, string DisplayName)
{
///
/// Строит модель по идентификатору локали. Неизвестные локали не являются
/// ошибкой: для них показываем сам идентификатор.
///
public static KeyboardLayout FromLocaleId(int localeId)
{
CultureInfo? culture = TryGetCulture(localeId);
if (culture is null)
{
string fallback = $"0x{localeId:X4}";
return new KeyboardLayout(localeId, fallback, fallback);
}
string shortName = culture.TwoLetterISOLanguageName.ToUpperInvariant();
return new KeyboardLayout(localeId, shortName, $"{shortName} — {culture.NativeName}");
}
private static CultureInfo? TryGetCulture(int localeId)
{
try
{
return new CultureInfo(localeId);
}
catch (CultureNotFoundException)
{
return null;
}
}
}