2009-12-18 3 views
0

Je voudrais afficher du texte en arabe dans LabelField dans l'application j2me sur le terminal BlackBerry. Supposons que la police arabe est installée sur l'appareil.BlackBerry - Affichage de texte Unicode

Dans les ressources de localisation, si les paramètres régionaux arabes sont utilisés, tout le texte est enregistré dans des séquences Unicode. Mais l'événement si j'utiliser le format tel explicitement, qui fixeraient également locale arabe, il ne fonctionne pas:

Locale.setDefault(Locale.get(Locale.LOCALE_ar, null)); 
    add(new LabelField("\u0627\u0644\u0639\u0631\u0628\u064A\u0629")); 

conseils S'il vous plaît:

  • Dans quel format ou page de code que je devrais enregistrer le texte arabe? Comment afficher le texte arabe dans l'étiquette en utilisant la police arabe installée?

Merci beaucoup!

Répondre

3

solution est de passer la séquence Unicode en tant que tableau de caractères:

char[] text = new char[] {'\u0627', '\u0644', '\u0639', 
    '\u0631', '\u0628', '\u064A', '\u0629'}; 
add(new LabelField(text)); 

Donc, pour afficher la séquence Unicode conservés dans la chaîne, il faut analyser cette chaîne en caractères:

private char[] getUnicodeChars(String string) { 
    char[] result = new char[] {}; 
    String[] charCodes = split(string, "\\"); 
    result = new char[charCodes.length]; 
    for (int i = 0; i < charCodes.length; i++) { 
     result[i] = (char) Integer.parseInt(charCodes[i].substring(1), 16); 
    } 
    return result; 
} 

Et quelque part dans code:

String txt = "\u0627\u0644\u0639\u0631\u0628\u064A\u0629"; 
add(new LabelField(getUnicodeChars(txt))); 

Et il n'est pas nécessaire de changer d'environnement local. Bien sûr, la police arabe doit être installée.

+0

Lors de l'analyse d'un littéral de chaîne, le compilateur Java reconnaît \ uNNNN comme une séquence d'échappement unicode et convertit ce dernier en un seul caractère unicode dans le fichier de classe. Le caractère unique '\ u0627' et la chaîne "\ u0627" ne sont pas traités différemment. Je ne crois pas que getUnicodeChars fera quoi que ce soit pour cet exemple de code, donc je suis surpris que ce soit la réponse acceptée. –

+0

Pour clarifier, dans le dernier bloc de code: txt.length() retournera 7, pas 42. –

+0

@MichaelDonohue suppose que la variable txt est chargée à partir d'un flux de données –

2

J'affiche le symbole Yen japonais sur le périphérique sans que les paramètres régionaux du périphérique ne soient définis en japonais, simplement en passant la chaîne la représentation unicode (comme vous le faites dans votre exemple) et le j2me gère le reste. Cependant, je ne suis pas sûr que dans une telle situation l'orientation sera droite à gauche.

Par défaut, l'appareil n'a pas la police arabe, êtes-vous sûr qu'il est installé sur l'appareil? Lorsque vous faites:

Locale.get(Locale.LOCALE_ar, null)

Retournez-vous une valeur null ou locale?

CORRECTION: Le symbole Yen est et non en valeur unicode mais simplement en texte clair (je l'obtiens du serveur). Si vous stockez la chaîne d'origine en arabe dans les ressources (au lieu de l'Unicode), que montre-t-elle? Remarque: mettre le texte en clair dans le code ne fonctionne pas.

+0

Merci pour la réponse! Pouvez-vous poster un échantillon pour Yen? Oui, la police arabe est installé sur l'appareil, j'ai écrit un échantillon avec des ressources de localisation, fonctionne parfaitement. Aussi Locale.setDefault (Locale.get (Locale.LOCALE_ar, null)); fonctionne depuis que l'orientation du texte est passée à RTL –

+0

Que se passe-t-il dans LabelField? vous avez dit que ça tournait RTL, alors qu'est-ce qui ne fonctionne pas? – Tamar

+0

Il n'y a pas de symboles arabes, les séquences Unicode à la place ... –