Класс IME позволяет манипулировать редактором методов ввода (IME) в проигрывателе Flash Player или Adobe AIR.
С помощью ActionScript можно определить следующее:
-
установлен ли редактор IME на компьютере пользователя (
Capabilities.hasIME
);
-
включен или отключен редактор IME на компьютере пользователя (
IME.enabled
);
-
текущий режим преобразования в редакторе IME (
IME.conversionMode
).
Можно связать поле вводимого текста с определенным контекстом редактора IME. Переключаясь между полями ввода, можно также переключать редактор IME между хираганой (японский), полноширинными цифрами, полуширинными цифрами, прямым вводом и т.д.
Редакторы IME дают пользователям возможность вводить тексты с многобайтовыми символами, отличными от ASCII, на таких языках, как китайский, японский и корейский.
Дополнительные сведения о работе с редактором IME см. в документации по операционной системе, для которой разрабатывается приложение. Дополнительные ресурсы доступны на следующих веб-сайтах:
Примечание.
Если редактор IME не активен на компьютере пользователя, то обращения к методам или свойствам IME, отличным от
Capabilities.hasIME
, будут завершаться ошибками. Как только редактор IME будет активирован вручную, последующие обращения ActionScript к методам и свойствам IME будут срабатывать ожидаемым образом. Например, если используется редактор IME для ввода японских иероглифов, его необходимо активировать перед тем, как вызывать методы и свойства класса IME.
Проверка доступности редактора IME
Перед тем как вызывать методы и свойства класса IME, необходимо всегда проверять, установлен ли на клиентском компьютере редактор IME и включен ли он. Следующий код демонстрирует, как можно убедиться, что пользователь установил и активировал редактор IME, прежде чем вызывать методы.
if (Capabilities.hasIME)
{
if (IME.enabled)
{
trace("IME is installed and enabled.");
}
else
{
trace("IME is installed but not enabled. Please enable your IME and try again.");
}
}
else
{
trace("IME is not installed. Please install an IME and try again.");
}
Предыдущий код сначала проверяет, установлен ли редактор IME, с помощью свойства
Capabilities.hasIME
. Если это свойство имеет значение
true
, то код проверяет, включен ли редактор IME в данный момент, с помощью свойства
IME.enabled
.
Определение текущего режима преобразования в редакторе IME
В процессе создания многоязычных приложений может потребоваться определить, какой режим преобразования в данный момент активен в редакторе IME. Следующий код демонстрирует, как можно проверить, установлен ли редактор IME и, если да, какой режим преобразования активен в данный момент.
if (Capabilities.hasIME)
{
switch (IME.conversionMode)
{
case IMEConversionMode.ALPHANUMERIC_FULL:
tf.text = "Current conversion mode is alphanumeric (full-width).";
break;
case IMEConversionMode.ALPHANUMERIC_HALF:
tf.text = "Current conversion mode is alphanumeric (half-width).";
break;
case IMEConversionMode.CHINESE:
tf.text = "Current conversion mode is Chinese.";
break;
case IMEConversionMode.JAPANESE_HIRAGANA:
tf.text = "Current conversion mode is Japananese Hiragana.";
break;
case IMEConversionMode.JAPANESE_KATAKANA_FULL:
tf.text = "Current conversion mode is Japanese Katakana (full-width).";
break;
case IMEConversionMode.JAPANESE_KATAKANA_HALF:
tf.text = "Current conversion mode is Japanese Katakana (half-width).";
break;
case IMEConversionMode.KOREAN:
tf.text = "Current conversion mode is Korean.";
break;
default:
tf.text = "Current conversion mode is " + IME.conversionMode + ".";
break;
}
}
else
{
tf.text = "Please install an IME and try again.";
}
Предыдущий код сначала проверяет, установлен ли редактор IME. Затем он проверяет текущий режим преобразования IME сравнивая свойство
IME.conversionMode
с константами класса IMEConversionMode.
Установка режима преобразования в редакторе IME
В процессе изменения режима преобразования в клиентском редакторе IME необходимо поместить код в блок
try..catch
, так как установка режима преобразования с помощью свойства
conversionMode
может вызвать ошибку, если редактор IME не сможет перейти в заданный режим. Следующий код демонстрирует использование блока
try..catch
при определении свойства
IME.conversionMode
.
var statusText:TextField = new TextField;
statusText.autoSize = TextFieldAutoSize.LEFT;
addChild(statusText);
if (Capabilities.hasIME)
{
try
{
IME.enabled = true;
IME.conversionMode = IMEConversionMode.KOREAN;
statusText.text = "Conversion mode is " + IME.conversionMode + ".";
}
catch (error:Error)
{
statusText.text = "Unable to set conversion mode.\n" + error.message;
}
}
Предыдущий код сначала создает текстовое поле с целью отображения сообщения о состоянии для пользователя. После этого, если редактор IME установлен, код включает его и устанавливает режим корейского языка. Если в системе пользователя не установлен редактор IME, проигрыватель Flash Player или AIR выдает ошибку, которую перехватывает блок
try..catch
. Блок
try..catch
отображает сообщение об ошибке в текстовом поле, созданном ранее.
Отключение редактора IME для определенных текстовых полей
В некоторых случаях требуется отличать редактор IME пользователя для полей ввода. Например, если есть текстовое поле, принимающее только цифры, нежелательно, чтобы редактор IME вмешивался и замедлял ввод данных.
В следующем примере показано, как можно прослушивать события
FocusEvent.FOCUS_IN
и
FocusEvent.FOCUS_OUT
и выключать редактор IME требуемым образом.
var phoneTxt:TextField = new TextField();
var nameTxt:TextField = new TextField();
phoneTxt.type = TextFieldType.INPUT;
phoneTxt.addEventListener(FocusEvent.FOCUS_IN, focusInHandler);
phoneTxt.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler);
phoneTxt.restrict = "0-9";
phoneTxt.width = 100;
phoneTxt.height = 18;
phoneTxt.background = true;
phoneTxt.border = true;
addChild(phoneTxt);
nameField.type = TextFieldType.INPUT;
nameField.x = 120;
nameField.width = 100;
nameField.height = 18;
nameField.background = true;
nameField.border = true;
addChild(nameField);
function focusInHandler(event:FocusEvent):void
{
if (Capabilities.hasIME)
{
IME.enabled = false;
}
}
function focusOutHandler(event:FocusEvent):void
{
if (Capabilities.hasIME)
{
IME.enabled = true;
}
}
В этом примере создается два текстовых поля ввода,
phoneTxt
и
nameTxt
, а затем добавляется два прослушивателя событий для поля
phoneTxt
. Когда пользователь переводит фокус на текстовое поле
phoneTxt
, отправляется событие
FocusEvent.FOCUS_IN
, и редактор IME отключается. Когда текстовое поле
phoneTxt
теряет фокус, отправляется событие
FocusEvent.FOCUS_OUT
, и редактор IME включается снова.
Прослушивание событий композиции IME
События композиции IME отправляются в момент задания строки композиции. Например, если пользователь включил и активировал редактор IME и вводит строку на японском, событие
IMEEvent.IME_COMPOSITION
будет отправлено, как только он выберет строку композиции. Чтобы прослушивать событие
IMEEvent.IME_COMPOSITION
, необходимо добавить прослушиватель событий для статического свойства
ime
в классе System (
flash.system.System.ime.addEventListener(...)
), как показано в следующем примере.
var inputTxt:TextField;
var outputTxt:TextField;
inputTxt = new TextField();
inputTxt.type = TextFieldType.INPUT;
inputTxt.width = 200;
inputTxt.height = 18;
inputTxt.border = true;
inputTxt.background = true;
addChild(inputTxt);
outputTxt = new TextField();
outputTxt.autoSize = TextFieldAutoSize.LEFT;
outputTxt.y = 20;
addChild(outputTxt);
if (Capabilities.hasIME)
{
IME.enabled = true;
try
{
IME.conversionMode = IMEConversionMode.JAPANESE_HIRAGANA;
}
catch (error:Error)
{
outputTxt.text = "Unable to change IME.";
}
System.ime.addEventListener(IMEEvent.IME_COMPOSITION, imeCompositionHandler);
}
else
{
outputTxt.text = "Please install IME and try again.";
}
function imeCompositionHandler(event:IMEEvent):void
{
outputTxt.text = "you typed: " + event.text;
}
Предыдущий код создает два текстовых поля и добавляет их в список отображения. Первое текстовое поле,
inputTxt
, является полем ввода, в которое пользователь может ввести японский текст. Второе текстовое поле,
outputTxt
, является динамическим текстовым полем, в котором отображаются сообщения об ошибке и дублируется японская строка, введенная пользователем в поле
inputTxt
.
|
|
|