Первое что делаю это собираю информацию о языках в системе:
public static InputLanguage GetLanguage(string language)
{
language = language.ToLower();
foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
{
if (lang.LayoutName.ToLower() == language)
{
return lang;
}
}
return null;
}
Затем пробую проверить язык тот или не тот через функцию if
if(InputLanguage.CurrentInputLanguage == GetLanguage("us"))
{
Console.Write("Определён Английский!");
}
else if (InputLanguage.CurrentInputLanguage == GetLanguage("ru"))
{
Console.Write("Определён Русский!");
}
Но он не определяет его.
Может Я не так его определяю?
Как решить задачу?
Ответ
Использованный вами способ не будет правильно работать в консольном приложении, только в приложении WinForms.
В консоли на данный момент мне удалось однозначно получить только язык ввода по-умолчанию и системную локаль. С текущей раскладкой пока не далось справиться даже через WinAPI (подсмотрено тут), возвращает только язык ввода по-умолчанию. Если найдется решение, допишу сюда же.
Ошибки в текущем решении и способы их устранения ниже:
Вы некорректно сравниваете названия языков. Если хотите использовать двух-буквенные обозначения, то исправьте условие в GetLanguage на такое
...
if (lang.Culture.TwoLetterISOLanguageName == language)
...
В таком случае английский будет обозначен как en, а не us, независимо от конкретной его вариации.
Если нужно учитывать вариант языка, то замените условие на такое:
...
if (lang.Culture.Name == language)
...
и используйте стандартные обозначения языков: en-US, ru-RU
При сравнении объектов InputLanguage нельзя использовать оператор ==, так как он будет сравнивать только ссылки на объекты InputLanguage. Вместо этого используйте метод Equals, который в данном классе переопределен и возвращает корректный ответ при эквивалентности языков.
...
if (InputLanguage.CurrentInputLanguage.Equals(GetLanguage("ru")))
...
Список всех языков, которые знает ваша система, их названия и атрибуты можно получить так
var culture = CultureInfo.GetCultures(CultureTypes.AllCultures);
Комментариев нет:
Отправить комментарий