Bonjour,
Quels conseils pouvez-vous me donner pour créer une application qui gère plusieurs langues ?
Existe-t-il des composants qui permettent de simplifier cette tâche ?
Merci,
ZiP
Bonjour,
Quels conseils pouvez-vous me donner pour créer une application qui gère plusieurs langues ?
Existe-t-il des composants qui permettent de simplifier cette tâche ?
Merci,
ZiP
Bonjour ! Juste pour alimenter la discussion et faire valoir les solutions qui seront proposées par la suite, voici ma proposition.
Dans le programme principal j'ai une variable globale que je passe dans mon tableau pour obtenir le message dont j'ai besoin, dans telle langue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 unit chessmessages; interface uses chess; type tChessMessages = record msg_check: shortstring; msg_wtm: shortstring; msg_btm: shortstring; msg_state: array[tGameState]of shortstring; msg_illegal: shortstring; msg_end: shortstring; msg_loading: shortstring; end; const lang_en = 0; lang_de = 1; lang_fr = 2; var messages: array[lang_en..lang_fr]of tChessMessages; implementation begin with messages[lang_en] do begin msg_check := 'Check!'; msg_wtm := 'White to move.'; msg_btm := 'Black to move.'; msg_state[progress] := 'Game in progress'; msg_state[checkmate] := 'Checkmate'; msg_state[stalemate] := 'Stalemate'; msg_state[draw] := 'Draw'; msg_illegal := 'Illegal move!'; msg_end := 'Game over. See you soon!'; msg_loading := 'Loading ...'; end; with messages[lang_de] do begin msg_check := 'Schach!'; msg_wtm := 'Wei'#223' am Zug.'; msg_btm := 'Schwarz am Zug.'; msg_state[progress] := 'Spiel l'#228'uft'; msg_state[checkmate] := 'Matt'; msg_state[stalemate] := 'Patt'; msg_state[draw] := 'Remis'; msg_illegal := 'Ung'#252'ltiger Zug!'; msg_end := 'Ende des Spiels. Auf Wiedersehen!'; msg_loading := 'Lade ...'; end; with messages[lang_fr] do begin msg_check := #201'chec !'; msg_wtm := 'Les blancs ont le trait.'; msg_btm := 'Les noirs ont le trait.'; msg_state[progress] := 'Partie en cours'; msg_state[checkmate] := 'Mat'; msg_state[stalemate] := 'Pat'; msg_state[draw] := 'Partie remise'; msg_illegal := 'Coup ill'#233'gal !'; msg_end := 'La partie est termin'#233'e. A bient'#244't !'; msg_loading := 'Chargement...'; end; end.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ShowMessage(messages[lang].msg_illegal);
Mon site personnel consacré à MSEide+MSEgui : msegui.net
Bonsoir,
Voyez l'unité Translations et la procédure TranslateUnitResourceStrings pour traduire les ResourceStrings d'une unité avec les fichier .po. Il doit aussi exister un article dans le wiki de Lazarus.
André
Bonjour,
La FAQ Lazarus aborde ce sujet :
- http://lazarus.developpez.com/faq/?p...on-multilingue
- http://lazarus.developpez.com/faq/?p...ne-application
Règles du forum
Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
Mes tutoriels et sources Pascal
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]
Bonsoir,
Merci pour vos réponses !
ZiP
Bonjour,
La méthode canonique est effectivement exposée dans la FAQ comme l'indique Alcatiz, à base de resourcestrings.
Elle présente, tout comme celle de Roland Chastain, l'inconvénient d'être statique et de nécessiter des outils et des connaissances techniques pour faire ou corriger une traduction, et la diffuser.
C'est pourquoi j'ai mis au point une autre technique qui lit les traductions dans des fichiers .ini et qui n'a pas ces inconvénients.
Elle est utilisée notamment par Gestinux, qui comporte des composants qui se traduisent automatiquement. On peut basculer avec une seule touche d'une langue dans une autre et traduire avec un module du logiciel.
Cordialement,
Tintinux
Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.
Bonjour,
Dans la même idée, est-ce que les messages associés aux exceptions de Lazarus existent dans plusieurs langues, si oui comment faire pour qu'elles s'affichent en français, par exemple.
Sinon, existe-t-il un moyen des traduire (donc avoir une liste) et de les faire s'afficher dans la langue voulue ?
Merci
JS
Au nom du pèze, du fisc et du St Estephe
Au nom du fric, on baisse son froc...
Je viens de faire un petit essai de cette méthode : ça a bien fonctionné, sauf au départ pour les accents. La solution que j'ai trouvée est de corriger manuellement le fichier INI dans Notepad++, après avoir sélectionné l'option "encodage ANSI". Là le résultat final est bon. Mais lorsque le fichier est créé par l'application, les accents se perdent en cours de route. Il faudra que je regarde dans Gestinux comment tu as traité le problème.
P.-S. Je joins mon exemple.
Mon site personnel consacré à MSEide+MSEgui : msegui.net
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager