Win32 API. Работа с клавиатурой
Страница 12. Языки, регионы и раскладки символов на клавиатуре


Языки, регионы и раскладки символов на клавиатуре

Язык (language) - естественный язык, такой как английский, французский и японский. Подмножество языка (sublanguange) - вариант естественного языка, на котором говорят в некоторых географических районах, типа английских подмножеств языка, на которых говорят в Великобритании и Соединенных Штатах. Базирующиеся на Win32 прикладные программы используют значения, называемые регионами (locales), чтобы уникально идентифицировать языки и их подмножества. Прикладные программы обычно используют регионы, чтобы установить язык, на котором обрабатывать ввод и вывод данных. Настройка региона для клавиатуры, например, воздействует на символьные значения, сгенерированные клавиатурой. Настройка региона для дисплея или принтера воздействует на глифы (образы символа в побитовом отображении), показанные на экране или напечатанные. Прикладные программы устанавливают регион для клавиатуры, загружая и используя раскладки символов на клавиатуре. Они устанавливают регион для дисплея или принтера, выбирая шрифт, который поддерживает данный географический район.

Раскладка символов на клавиатуре определяет не только физическую позицию клавиш на ней, но также обуславливает и символьные значения, создаваемые, при помощи нажатий этих клавиш. Каждая раскладка связана с регионом, который идентифицирует текущий язык ввода информации и обуславливает, какие символьные значения создавать при помощи клавиш и их комбинаций.

Каждая раскладка символов на клавиатуре имеет соответствующий дескриптор, который идентифицирует раскладку и язык. Младшее слово дескриптора - идентификатор языка. Старшее слово - дескриптор устройства, определяющего физическую раскладку, или равно нулю, указывая на заданную по умолчанию физическую раскладку. Пользователь может объединить любой язык ввода информации с данной физической раскладкой. Например, англоязычный пользователь, который очень редко работает по-французски, может установить язык ввода клавиатуры французский без изменения физической раскладки клавиатуры. Это означает, что пользователь может вводить текст на французском языке, используя знакомую английскую раскладку клавиатуры.

Обычно не предполагается, что прикладные программы будут непосредственно управлять языками ввода. Вместо этого, пользователь устанавливает комбинацию языка и раскладки, а затем переключается среди них. Когда пользователь щелкает мышью по тексту, имеющему знаки из другого языка, прикладная программа вызывает функцию ActivateKeyboardLayout, чтобы активизировать заданную по умолчанию раскладку пользователя для этого языка. Если пользователь редактирует текст на языке, которого нет в действующем списке, прикладная программа может вызывать функцию LoadKeyboardLayout с языком, чтобы получить раскладку базирующуюся на этом языке.

Функция ActivateKeyboardLayout устанавливает язык ввода для текущей задачи. Её параметр hkl может быть или дескриптор раскладки символов на клавиатуре или дополненный нулями идентификатор языка. Дескрипторы раскладки символов на клавиатуре могут быть получены из функции LoadKeyboardLayout или GetKeyboardLayoutList. Значения HKL_NEXT и HKL_PREV могут также быть использованы, чтобы выбрать следующую или предыдущую клавиатуру. Для некоторых операционных систем, значение KLF_UNLOADPREVIOUS не имеет никакого смысла и игнорируется.

Функция GetKeyboardLayoutName извлекает данные о названии активной раскладки символов на клавиатуре для вызывающего потока. Если прикладная программа создает активную раскладку, используя функцию LoadKeyboardLayout, GetKeyboardLayoutName извлекает ту же самую строку, которую использовали, чтобы создать раскладку. Иначе, эта строка - первичный идентификатор языка, соответствующий региону активной раскладки. Это означает, что функция не обязательно может различать между собой различные раскладки с тем же самым первичным языком, так как не может возвратить конкретную информацию о языке ввода. Тем не менее, функция GetKeyboardLayout может быть использована, чтобы установить язык ввода информации.

Функция LoadKeyboardLayout загружает раскладку символов на клавиатуре и делает её доступной пользователю. Прикладные программы могут делать раскладку активной непосредственно для текущего потока, используя значение KLF_ACTIVATE. Прикладная программа может использовать значение KLF_REORDER, чтобы переупорядочить раскладки без такой установки значения KLF_ACTIVATE. Прикладные программы должны всегда использовать значение KLF_SUBSTITUTE_OK при загрузке раскладок символов на клавиатуре, чтобы гарантировать, что предпочтение пользователя, если таковое вообще имеются, обеспечено. Для некоторых операционных систем, значение KLF_UNLOADPREVIOUS игнорируется.

Для многоязычной поддержки, функция LoadKeyboardLayout предоставляет флажки KLF_NOTELLSHELL и KLF_REPLACELANG. Флажок KLF_REPLACELANG предписывает функции поменять существующую раскладку символов на клавиатуре без изменения языка. Попытка заменить существующую раскладку, используя тот же самый идентификатор языка, но без установки KLF_REPLACELANG, является ошибкой. Флажок KLF_NOTELLSHELL ограждает функцию от уведомления оболочки, когда раскладка символов на клавиатуре добавлена или заменена. Это полезно для прикладных программ, которые прибавляют многочисленные раскладки в ряде последующих обращений. Этот флажок должен быть использоваться у всех, но при последнем вызове.

Функция UnloadKeyboardLayout ограничена в том, что она не может выгрузить из системы язык ввода по умолчанию. Это гарантирует то, что пользователь всегда имеет одну раскладку, доступную для ввода текста, которая использует тот же самый набор символов, какой используется оболочкой и файловой системой.

 
« Предыдущая статья   Следующая статья »