moved to MVVM architecture
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
using System.Globalization;
|
||||
|
||||
namespace CursorLang.Models;
|
||||
|
||||
/// <summary>
|
||||
/// Раскладка клавиатуры в удобном для отображения виде.
|
||||
/// </summary>
|
||||
/// <param name="LocaleId">Идентификатор локали (младшее слово HKL).</param>
|
||||
/// <param name="ShortName">Короткое имя для подсказки у курсора, например «RU».</param>
|
||||
/// <param name="DisplayName">Полное имя, например «RU — русский (Россия)».</param>
|
||||
public sealed record KeyboardLayout(int LocaleId, string ShortName, string DisplayName)
|
||||
{
|
||||
/// <summary>
|
||||
/// Строит модель по идентификатору локали. Неизвестные локали не являются
|
||||
/// ошибкой: для них показываем сам идентификатор.
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user