Obligement - L'Amiga au maximum

Samedi 16 décembre 2017 - 02:18  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : Amiga E - locale.library
(Article écrit par Pierre Girard et extrait d'Amiga News - décembre 1996)


Je suppose que vous êtes en train de vous dire que ce sujet a déjà été traité. C'est vrai, mais d'abord pas en E, et ensuite tout le monde n'a pas la collection complète des Amiga News. Mais bon, ce n'est pas tout, mettons-nous au travail.

Do you speak french ?

C'est à peu près ce qu'il fallait dire à son Amiga avant que les ingénieurs de chez Commodore (ce nom vous dit quelque chose ?) ne nous concoctent un moyen simple de créer des logiciels multilingues. Ces petits malins ont créé une nouvelle bibliothèque de fonctions (Kickstart >= 2.1) dénommée locale.library, facilitant le travail des programmeurs pour rendre leurs logiciels utilisables dans plusieurs pays, et, par là même, comblant les utilisateurs ne parlant ni la langue de Benny Hill, ni celle de Papa Schultz.

Mise en oeuvre

Le fonctionnement est celui d'une bibliothèque standard. Il faut d'abord l'ouvrir en spécifiant au minimum la version 38. Ensuite, il faut ouvrir ce que l'on appelle la locale, c'est-à-dire, en fait, le langage souhaité pour l'utilisation du programme. Je sens que ce n'est pas très clair. La fonction OpenLocale(name) ouvre la locale "name" ou plus simplement la locale définie dans les préférences du Workbench si le nom est égal à NULL. Cette fonction remplit une structure locale auparavant définie. Une fois que l'on sait le langage à utiliser, il ne reste plus qu'à ouvrir le fichier "catalog" correspondant au langage, ce qui est réalisé par la fonction OpenCatalogA(locale,name,taglist). En mettant locale à 0, on choisit d'utiliser la locale par défaut. Voilà, c'est tout pour l'initialisation. Il faut quand même savoir que la fonction pour récupérer une châine de caractère dans un catalogue a comme syntaxe GetCatalogStr(locale,stringnum).

Le programme

Passé cette théorie rébarbative qui n'est qu'une redite des autodocs, passons au plus intéressant, c'est-à-dire le cas pratique. Si vous avez jeté un coup d'oeil au programme ci-dessous, vous vous demandez sans doute où sont passés toutes les fonctions décrites dans le paragraphe au-dessus ! Eh bien, ce mois-ci, au lieu de faire mot à mot dans le programme ce que j'annonce dans la théorie, j'ai choisi une autre approche, plus proche de ce que fait le programmeur normal dans un cas comme celui de la localisation d'un programme. J'ai utilisé un programme externe pour créer le fichier "catalog" et même les routines d'accès à ce catalogue.

Ce programme merveilleux s'appelle Flexcat. Je vous conseille la version 1.5 disponible sur Aminet (ou sur les CD du même nom) qui marche avec les versions 3.0+ du E (sinon c'est un peu plus compliqué). Comment faire ? D'abord, il faut ouvrir le module créé par Flexcat avec MODULE "*nom". Ensuite, il reste à définir la structure du catalogue à ouvrir avec DEF cat:PTR TO catalog_nom, et ouvrir la locale.library. En fait, c'est presque tout. Toutes les routines d'ouverture du catalogue et la recherche des chaînes de caractères se trouvent dans le module. Cette définition est orientée objet, ce qui signifie qu'il suffit de connaître le nom des objets et des méthodes pour programmer le reste.

Ainsi, "cat" est le nom de la structure et tout le reste représente les différentes chaînes de caractères. Il existe en tout et pour tout quatre méthodes : "create" pour créer la structure du catalogue (cat.create()), "open()" pour ouvrir le catalogue, "close()" pour... (vous avez trouvé ?) et "getstr()" pour récupérer un message. C'est dans un cas comme celui-ci que l'on trouve que le E est un langage fantastique. Ainsi, dans le cas du nom de la fenêtre, il suffit de remplacer la chaîne de caractère habituelle par cat.msgwintitle.getstr() pour avoir le texte correspondant du catalogue !

Les fichiers de description

Pour définir le catalogue, il faut créer à la main un fichier .cd (catalog description). Regardez bien la syntaxe, je n'ai pas la place de décrire très en détail. Après avoir signalé la version, le langage par défaut, et initialisé codeset à 0 (attention au #), il ne reste plus qu'à remplir les messages. Le principal est bien sûr le nom du message suivi entre parenthèses, si l'on le désire, d'un numéro d'identification, la longueur min. et max. (en général, on évitera en remplaçant le tout par (//). Mais pour créer le catalogue, il faut aussi un fichier de traduction .cd (catalog translation). Celui-ci a quasiment la même forme que le fichier .cd excepté que les commandes dont précédées de ## et qu'il ne possède aucun identificateur ni indicateur de longueur.

Compilation

Il faut tout d'abord créer le fichier source du module wingadlocale.e qu'il faudra ensuite compiler. Cette action se réalise grâce à Flexcat wingad.cd wingadlocale.e=E30b.sd. Ensuite, il faut compiler le module wingadlocale.e afin d'obtenir le module windgadlocale.m. Il faut maintenant créer la fichier catalogue grâce à FlexCat wingad.cd french.ct CATALOG locale:catalogs/français/wingad.catalog. Voilà, tout est prêt et il ne reste plus qu'à compiler notre petit programme wingad.e (que j'ai trouvé je ne sais où dans le domaine public et modifié). On lance et hop c'est en français. On va dans les prefs, on change le langage par défaut et hop c'est en anglais.

Bon, plus de place... stop... amusez-vous bien... stop... bye...

/* Wingad:Utilisation simple de la locale.library */

MODULE 'intuition/intuition'
MODULE 'locale'
MODULE 'libraries/locale'
MODULE '*wingadlocale'

CONST BUFSIZE=GADGETSIZE*3, IFLAGS=IDCMP_CLOSEWINDOW+IDCMP_GADGETUP

DEF buf[BUFSIZE]:ARRAY,next,w,gad:PTR TO gadget
DEF cat:PTR TO catalog_wingad


PROC main()
localebase:=OpenLibrary('locale.library', 0)
        NEW cat.create()
        cat.open()
        next:=Gadget (buf,NIL,1,0,20,20,200, cat.msgbouton1.getstr())
        next:=Gadget (next,buf,2,0,20,35,200, cat.msgbouton2.getstr())
        next:=Gadget (next,buf,3,0,20,50,200, cat.msgbouton3.getstr())

        IF w:=OpenW (20,11,300,100,IFLAGS,$F, cat.msgwintitle.getstr(), NIL, 1, buf)
            WHILE WaitIMessage(w)<>IDCMP_CLOSEWINDOW
                gad:=MsgIaddr()
                TextF(20,80,cat.msgpressedgadget.getstr())
                TextF(20,90,'#\d',gad.userdata)
            ENDWHILE
            CloseW(w)
        ENDIF
        cat.close()
CloseLibrary(localebase);
ENDPROC

;Fichier Wingad.cd
#version 1
#language english
# codeset 0
;
; Ma première fenêtre en E
msgwintitle (//)
My first window in E!
;
; Ceci est le bouton 1
msgbouton1 (//)
This is first gadget
;
; Ceci est le bouton 2
msgbouton2 (//)
This is second gadget
;
; Ceci est le bouton 3
msgbouton3 (//)
This is third gadget
;
; Vous avez appuyé sur le gadget
msgpressedgadget (//)
You pressed gadget

;Fichier french.ct
## version $VER: wingad 1.0 (28.10.96)
## language français
## codeset 0
;
; Ma première fenêtre en E
msgwintitle
Ma première fenêtre en E
;
; Ceci est le bouton 1
msgbouton1
Ceci est le bouton 1
;
; Ceci est le bouton 2
msgbouton2
Ceci est le bouton 2
;
; Ceci est le bouton 3
msgbouton3
Ceci est le bouton 3
;
; Vous avez appuyé sur le gadget
msgpressedgadget
Vous avez appuyé sur le gadget


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]