Utilisation de la classe IME

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

La classe IME permet de manipuler l’IME du système d’exploitation à partir de Flash Player ou Adobe AIR.

A l’aide d’ActionScript, vous pouvez déterminer les éléments suivants :

  • Si un IME est installé sur l’ordinateur de l’utilisateur (Capabilities.hasIME)

  • Si l’IME est activé ou désactivé sur l’ordinateur de l’utilisateur (IME.enabled)

  • Le mode de conversion utilisé par l’IME actif (IME.conversionMode)

Vous pouvez associer un champ de saisie de texte à un contexte IME particulier. Lorsque vous passez d’un champ de saisie à un autre, vous pouvez également changer l’IME pour utiliser les caractères Hiragana (japonais), des nombres à pleine chasse, des nombres à demi-chasse, la saisie directe, etc.

Un IME permet aux utilisateurs d’entrer des caractères de texte non ASCII des langues codées sur plusieurs octets, telles que le chinois, le japonais et le coréen.

Pour plus d’informations sur les IME, voyez la documentation du système d’exploitation correspondant à la plate-forme pour laquelle vous développez l’application. Pour davantage de ressources, voir également les sites Web suivants :

Remarque : si aucun IME n’est actif sur l’ordinateur de l’utilisateur, tout appel aux méthodes ou propriétés IME, autres que Capabilities.hasIME, échoue. Lorsque vous activez manuellement un IME, les appels ActionScript suivants aux méthodes et aux propriétés IME fonctionnent comme prévu. Par exemple, si vous utilisez un IME japonais, vous devez l’activer avant d’appeler une méthode ou une propriété IME.

Confirmation de l’installation et de l’activation d’un IME

Avant d’appeler des méthodes ou propriétés IME, vous devez toujours vérifier si un IME est installé et activé sur l’ordinateur de l’utilisateur. Le code suivant montre comment vérifier que l’utilisateur dispose d’un IME installé et activé avant d’appeler une méthode :

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."); 
}

Le code précédent commence par vérifier si un IME est installé à l’aide la propriété Capabilities.hasIME. Si la valeur de la propriété est true, le code vérifie ensuite si l’IME est activé à l’aide de la propriété IME.enabled.

Identification du mode de conversion IME activé

Lorsque vous construisez une application multilingue, il peut être nécessaire de déterminer le mode de conversion actif dans le système d’exploitation. Le code suivant montre comment vérifier si l’utilisateur dispose d’un IME installé et, le cas échéant, quel mode de conversion IME est activé :

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."; 
}

Le code ci-dessus commence par vérifier si l’utilisateur dispose d’un IME. Ensuite, il vérifie le mode de conversion actuellement utilisé par l’IME en comparant la propriété IME.enabled à chacune des constantes de la classe IMEConversionMode.

Définition du mode de conversion IME

Lorsque vous modifiez le mode de conversion de l’IME de l’utilisateur, veillez à ce que le code soit enveloppé dans un bloc try..catch, car la définition du mode de conversion à l’aide de la propriété conversionMode peut donner lieu à une erreur si l’IME ne peut pas définir le mode choisi. Le code suivant illustre l’utilisation d’un bloc try..catch lors de la définition de la propriété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; 
    } 
}

Ce code commence par créer un champ de texte qui sert à afficher un message d’état à l’intention de l’utilisateur. Ensuite, si l’IME est installé, le code l’active et définit le mode de conversion coréen. Si l’ordinateur de l’utilisateur ne dispose pas d’un IME coréen, une erreur est renvoyée par Flash Player ou AIR et interceptée par le bloc try..catch. Le bloc try..catch affiche le message d’erreur dans le champ de texte créé précédemment.

Désactivation de l’IME pour certains champs de texte

Dans certains cas, il peut être nécessaire de désactiver l’IME de l’utilisateur pendant que ce dernier saisit des caractères. Par exemple, si un champ de texte accepte uniquement des caractères numériques, il peut être préférable d’éviter l’intervention de l’IME pour ne pas ralentir la saisie des données.

L’exemple suivant montre comment écouter les événements FocusEvent.FOCUS_IN et FocusEvent.FOCUS_OUT et désactiver l’IME de l’utilisateur en conséquence :

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; 
    } 
}

Cet exemple crée deux champs de saisie de texte, phoneTxt et nameTxt, puis ajoute deux écouteurs d’événement au champ phoneTxt. Lorsque l’utilisateur place le focus sur le champ phoneTxt, un événement FocusEvent.FOCUS_IN est distribué et l’IME est désactivé. Lorsque le focus est retiré du champ phoneTxt, l’événement FocusEvent.FOCUS_OUT est distribué pour réactiver l’IME.

Ecoute des événements IME composition

Les événements IME composition sont distribués lors de la définition d’une chaîne de composition. Par exemple, si l’IME de l’utilisateur est activé et que l’utilisateur saisit une chaîne en japonais, l’événement IMEEvent.IME_COMPOSITION est distribué dès que l’utilisateur sélectionne la chaîne de composition. Pour écouter l’événement IMEEvent.IME_COMPOSITION, vous devez ajouter un écouteur d’événement à la propriété statique ime de la classe System (flash.system.System.ime.addEventListener(...)), comme le montre l’exemple suivant :

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; 
}

Le code ci-dessus crée deux champs de texte et les ajoute à la liste d’affichage. Le premier champ, inputTxt, est un champ de saisie de texte qui permet à l’utilisateur d’entrer du texte japonais. Le second champ, outputTxt, est un champ de texte dynamique qui affiche des messages d’erreur à l’utilisateur ou reprend la chaîne japonaise que l’utilisateur saisit dans le champ inputTxt.