4D 2004.2/3 et le fichier KeyBoardMapping.XML

Djompolo DIABIRA

- Titre : 4D 2004.2/3 et le fichier KeyBoardMapping.XML

- Auteur : Djompolo DIABIRA

- Parution : 1 septembre 2005

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Introduction ♪

- II. Forcer le dialecte

- III. Désactiver la « Font Matching »

I - Introduction ♪

Cette note est en complément de la note technique 4D-200507-20-fr « 4D sur des systèmes étrangers ».

Bien que la version 4D 2004.2 permette la saisie, ainsi que l'affichage multilingues, si vous désirez travailler avec une langue bien précise, il est recommandé que la langue de votre système corresponde à la langue dans laquelle vous allez saisir vos données.

Mais il arrive parfois qu'on soit amené à travailler sur un système donné et avoir à faire des saisies multilingues avec un mélange de caractères Unicode et de caractères non Unicode (voir paragraphe II).

Il peut arriver aussi que la table des caractères utilisée contienne des caractères qui n'appartiennent pas à la police de caractère courante, et qui faussent l'affichage des caractères (voir paragraphe III).

Dans ces deux cas, il vous faudra modifier le fichier KeyboardMapping.XML.

La technique décrite dans cette note est spécifique à ces versions de 4D (2004.2 et 2004.3) et pourra être amenée à évoluer dans les versions ultérieures.

II - Forcer le dialecte

Rappel : le BIT ( Binary digiT) est la plus petite unité de mesure de stockage informatique ne pouvant avoir d'autre valeur (état) que 0 ou 1. Un octet (ou Byte en anglais) est lui-même composé d'une séquence de 8 bits.

Ce procédé est important quand on veut saisir de caractères « double byte » sur un système qui utilise des caractères double byte (caractères à deux octets, ou 16 bits, tels que le japonais, le chinois ou le coréen).

Donc, si la langue de votre système diffère de celle de la version de votre application 4D, pour que la saisie en structure dans votre langue fonctionne correctement, il faut procéder à la manipulation qui consiste à forcer le dialecte dans votre langue d'application dans le fichier KeyboardMapping.XML, qui se trouve dans le dossier 4D Extensions.

Mais avec cette solution les résultats des tris et des recherches pourraient être faussés aussi, car certaines routines internes de 4D comme les routines de tri et de recherche interrogent directement le système sans passer par Script Manager.

Donc si le système n'utilise pas les caractères « double byte » 4D s'initialise en « single byte » (8 octets) même si c'est un 4D localisé dans une langue qui utilise les caractères double byte.

Exemple

Sur un système US si vous voulez développer votre application multilingue en utilisant des caractères japonais en mode structure, il faudrait écrire la ligne de code suivante (<ForceDialect>1041</ForceDialect>) dans le fichier KeyboardMapping.XML.

Avec un 4D localisé en japonais sur un système US, voici les résultats obtenus :

Sans forcer le dialecte :

Dans le dialogue de connexion, les caractères japonais apparaissent sous forme de garbage.

Dans l'éditeur de structure, les caractères saisis en japonais (exemple nom de table) apparaissent aussi sous forme de « garbage ».

Après modification du fichier KeyboardMapping.XML, avec le même 4D sur le même système, on obtient  :

Les caractères japonais apparaissent correctement dans le dialogue de connexion ainsi que dans les autres parties de la structure.

Le contenu de votre KeyboardMapping.XML sera donc le suivant :

<?xml Version="1.0" Encoding="UTF-8" standalone="no" ?>
<KeyboardMapping>

<!--DC_AFRIKAANS = 1078
DC_ALBANIAN = 1052
DC_ARABIC_SAUDI_ARABIA = 1025
DC_ARABIC_IRAQ = 2049
DC_ARABIC_EGYPT = 3073
DC_ARABIC_LIBYA = 4097
DC_ARABIC_ALGERIA = 5121
DC_ARABIC_MOROCCO = 6145
DC_ARABIC_TUNISIA = 7169
DC_ARABIC_OMAN = 8193
DC_ARABIC_YEMEN = 9217
DC_ARABIC_SYRIA = 10241
DC_ARABIC_JORDAN = 11265
DC_ARABIC_LEBANON = 12289
DC_ARABIC_KUWAIT = 13313
DC_ARABIC_UAE = 14337
DC_ARABIC_BAHRAIN = 15361
DC_ARABIC_QATAR = 16385
DC_BASQUE = 1069
DC_BELARUSIAN = 1059
DC_BULGARIAN = 1026
DC_CATALAN = 1027
DC_CHINESE_TRADITIONAL = 1028
DC_CHINESE_SIMPLIFIED = 2052
DC_CHINESE_HONGKONG = 3076
DC_CHINESE_SINGAPORE = 4100
DC_CROATIAN = 1050
DC_CZECH = 1029
DC_DANISH = 1030
DC_DUTCH = 1043
DC_DUTCH_BELGIAN = 2067
DC_ENGLISH_US = 1033
DC_ENGLISH_UK = 2057
DC_ENGLISH_AUSTRALIA = 3081
DC_ENGLISH_CANADA = 4105
DC_ENGLISH_NEWZEALAND = 5129
DC_ENGLISH_EIRE = 6153
DC_ENGLISH_SOUTH_AFRICA = 7177
DC_ENGLISH_JAMAICA = 8201
DC_ENGLISH_CARIBBEAN = 9225
DC_ENGLISH_BELIZE = 10249
DC_ENGLISH_TRINIDAD = 11273
DC_ESTONIAN = 1061
DC_FAEROESE = 1080
DC_FARSI = 1065
DC_FINNISH = 1035
DC_FRENCH = 1036
DC_FRENCH_BELGIAN = 2060
DC_FRENCH_CANADIAN = 3084
DC_FRENCH_SWISS = 4108
DC_FRENCH_LUXEMBOURG = 5132
DC_GERMAN = 1031
DC_GERMAN_SWISS = 2055
DC_GERMAN_AUSTRIAN = 3079
DC_GERMAN_LUXEMBOURG = 4103
DC_GERMAN_LIECHTENSTEIN = 5127
DC_GREEK = 1032
DC_HEBREW = 1037
DC_HUNGARIAN = 1038
DC_ICELANDIC = 1039
DC_INDONESIAN = 1057
DC_ITALIAN = 1040
DC_ITALIAN_SWISS = 2064
DC_JAPANESE = 1041
DC_KOREAN_WANSUNG = 1042
DC_KOREAN_JOHAB = 2066
DC_LATVIAN = 1062
DC_LITHUANIAN = 1063
DC_NORWEGIAN = 1044
DC_NORWEGIAN_NYNORSK = 2068
DC_POLISH = 1045
DC_PORTUGUESE = 2070
DC_PORTUGUESE_BRAZILIAN = 1046
DC_ROMANIAN = 1048
DC_RUSSIAN = 1049
DC_SERBIAN_LATIN = 2074
DC_SERBIAN_CYRILLIC = 3098
DC_SLOVAK = 1051
DC_SLOVENIAN = 1060
DC_SPANISH_CASTILLAN = 1034
DC_SPANISH_MEXICAN = 2058
DC_SPANISH_MODERN = 3082
DC_SPANISH_GUATEMALA = 4106
DC_SPANISH_COSTA_RICA = 5130
DC_SPANISH_PANAMA = 6154
DC_SPANISH_DOMINICAN_REPUBLIC = 7178
DC_SPANISH_VENEZUELA = 8202
DC_SPANISH_COLOMBIA = 9226
DC_SPANISH_PERU = 10250
DC_SPANISH_ARGENTINA = 11274
DC_SPANISH_ECUADOR = 12298
DC_SPANISH_CHILE = 13322
DC_SPANISH_URUGUAY = 14346
DC_SPANISH_PARAGUAY = 15370
DC_SPANISH_BOLIVIA = 16394
DC_SPANISH_EL_SALVADOR = 17418
DC_SPANISH_HONDURAS = 18442
DC_SPANISH_NICARAGUA = 19466
DC_SPANISH_PUERTO_RICO = 20490
DC_SWEDISH = 1053
DC_SWEDISH_FINLAND = 2077
DC_THAI = 1054
DC_TURKISH = 1055
DC_UKRAINIAN = 1058
DC_VIETNAMESE = 1066
-->

<Version>2</Version>

<Enable_Keyboard_Switching>1</Enable_Keyboard_Switching>

<ForceDialect>1041</ForceDialect>

<KeyBoardSync>-1</KeyBoardSync>

</KeyboardMapping>

III - Désactiver la « Font Matching »

Ce procédé intervient dans le cas où la police d'affichage caractère diffère de la police courante :

Dans le cas où vous voudriez saisir des données en mode Utilisation dans une langue différente de celle de votre système, il est nécessaire de forcer le clavier en utilisant l'option dans la liste des propriétés de l'objet (Configuration du clavier).

Pour certaines langues la police utilisée pour l'affichage des caractères ne contient pas certains caractères, ce qui risque de donner à l'affichage une représentation du caractère différente de celle qu'on devrait avoir, car le système utilise une police de substitution pour afficher le caractère qui ne peut pas être affiché dans la police courante. Pour contourner ce problème, il est nécessaire de désactiver la « font matching » dans le fichier KeyboardMapping.xml en mettant :

<KeyBoardSync>0</ KeyBoardSync>.

Exemple

Prenons l'exemple du caractère «?» polonais qui ne pourra s'afficher correctement qu'en désactivant la « font matching » sur un système WinXP polonais avec une version US 4D.

Voici ci-dessous les deux résultats obtenus.

- En laissant la valeur par défaut (-1) de keyBoardSync :

Le caractère «ñ» polonais n'est pas correctement affiché

- En le forçant à « désactivé » (0) :

Dans ce cas on demande au système de ne pas utiliser une police de substitution.

Le caractère «ñ» polonais est correctement affiché

Dans ce cas voici le contenu du fichier KeyboardMapping.XML :

<?xml Version="1.0" Encoding="UTF-8" standalone="no" ?>
<KeyboardMapping>

<!--DC_AFRIKAANS = 1078
DC_ALBANIAN = 1052
DC_ARABIC_SAUDI_ARABIA = 1025
DC_ARABIC_IRAQ = 2049
DC_ARABIC_EGYPT = 3073
DC_ARABIC_LIBYA = 4097
DC_ARABIC_ALGERIA = 5121
DC_ARABIC_MOROCCO = 6145
DC_ARABIC_TUNISIA = 7169
DC_ARABIC_OMAN = 8193
DC_ARABIC_YEMEN = 9217
DC_ARABIC_SYRIA = 10241
DC_ARABIC_JORDAN = 11265
DC_ARABIC_LEBANON = 12289
DC_ARABIC_KUWAIT = 13313
DC_ARABIC_UAE = 14337
DC_ARABIC_BAHRAIN = 15361
DC_ARABIC_QATAR = 16385
DC_BASQUE = 1069
DC_BELARUSIAN = 1059
DC_BULGARIAN = 1026
DC_CATALAN = 1027
DC_CHINESE_TRADITIONAL = 1028
DC_CHINESE_SIMPLIFIED = 2052
DC_CHINESE_HONGKONG = 3076
DC_CHINESE_SINGAPORE = 4100
DC_CROATIAN = 1050
DC_CZECH = 1029
DC_DANISH = 1030
DC_DUTCH = 1043
DC_DUTCH_BELGIAN = 2067
DC_ENGLISH_US = 1033
DC_ENGLISH_UK = 2057
DC_ENGLISH_AUSTRALIA = 3081
DC_ENGLISH_CANADA = 4105
DC_ENGLISH_NEWZEALAND = 5129
DC_ENGLISH_EIRE = 6153
DC_ENGLISH_SOUTH_AFRICA = 7177
DC_ENGLISH_JAMAICA = 8201
DC_ENGLISH_CARIBBEAN = 9225
DC_ENGLISH_BELIZE = 10249
DC_ENGLISH_TRINIDAD = 11273
DC_ESTONIAN = 1061
DC_FAEROESE = 1080
DC_FARSI = 1065
DC_FINNISH = 1035
DC_FRENCH = 1036
DC_FRENCH_BELGIAN = 2060
DC_FRENCH_CANADIAN = 3084
DC_FRENCH_SWISS = 4108
DC_FRENCH_LUXEMBOURG = 5132
DC_GERMAN = 1031
DC_GERMAN_SWISS = 2055
DC_GERMAN_AUSTRIAN = 3079
DC_GERMAN_LUXEMBOURG = 4103
DC_GERMAN_LIECHTENSTEIN = 5127
DC_GREEK = 1032
DC_HEBREW = 1037
DC_HUNGARIAN = 1038
DC_ICELANDIC = 1039
DC_INDONESIAN = 1057
DC_ITALIAN = 1040
DC_ITALIAN_SWISS = 2064
DC_JAPANESE = 1041
DC_KOREAN_WANSUNG = 1042
DC_KOREAN_JOHAB = 2066
DC_LATVIAN = 1062
DC_LITHUANIAN = 1063
DC_NORWEGIAN = 1044
DC_NORWEGIAN_NYNORSK = 2068
DC_POLISH = 1045
DC_PORTUGUESE = 2070
DC_PORTUGUESE_BRAZILIAN = 1046
DC_ROMANIAN = 1048
DC_RUSSIAN = 1049
DC_SERBIAN_LATIN = 2074
DC_SERBIAN_CYRILLIC = 3098
DC_SLOVAK = 1051
DC_SLOVENIAN = 1060
DC_SPANISH_CASTILLAN = 1034
DC_SPANISH_MEXICAN = 2058
DC_SPANISH_MODERN = 3082
DC_SPANISH_GUATEMALA = 4106
DC_SPANISH_COSTA_RICA = 5130
DC_SPANISH_PANAMA = 6154
DC_SPANISH_DOMINICAN_REPUBLIC = 7178
DC_SPANISH_VENEZUELA = 8202
DC_SPANISH_COLOMBIA = 9226
DC_SPANISH_PERU = 10250
DC_SPANISH_ARGENTINA = 11274
DC_SPANISH_ECUADOR = 12298
DC_SPANISH_CHILE = 13322
DC_SPANISH_URUGUAY = 14346
DC_SPANISH_PARAGUAY = 15370
DC_SPANISH_BOLIVIA = 16394
DC_SPANISH_EL_SALVADOR = 17418
DC_SPANISH_HONDURAS = 18442
DC_SPANISH_NICARAGUA = 19466
DC_SPANISH_PUERTO_RICO = 20490
DC_SWEDISH = 1053
DC_SWEDISH_FINLAND = 2077
DC_THAI = 1054
DC_TURKISH = 1055
DC_UKRAINIAN = 1058
DC_VIETNAMESE = 1066
-->

<Version>2</Version>

<Enable_Keyboard_Switching>1</Enable_Keyboard_Switching>

<KeyBoardSync>0</KeyBoardSync>

</KeyboardMapping>

N.B. On peut très bien combiner le fait de forcer le dialecte et de désactiver la recherche de la police de substitution puisqu'il s'agit deux fonctions indépendantes.