begin process at 2012 02 16 17:39:45
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > APPLICATION MULTILINGUE SANS DOULEUR

APPLICATION MULTILINGUE SANS DOULEUR


 Information sur le tutoriel

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

Comment créer une application multilingue sans vous damner. Basé sur six ans d'expérience.

Tutorial

PLANIFICATION

Premièrement-
Comme de bon codeurs/programmeurs/analystes, vous avez bien sûr, nommé tous vos contrôles aves des noms qui ont du sens (...riez pas dans le fond: j'ai vu de mes yeux vu quelqu'un (pas d'ici) nommer ses boutons 'Ici' et ses variables 'Arthur' et 'Maurice').
Utilisez la convention Polonaise racourcie.
Ex.: bouton OK sur forme 'frmMain' = frmMain_btnOK
Ces noms serviront de Id distinctifs pour chaque ligne de cette table. Ils doivent donc être uniques.

Je crois tout le monde a compris.

Deuxièmement-
Planifiez vos 'captions', surtout les captions qui sont en deux parties avec un rajout programmé au milieu. Ex.: "Le document " & strDocName & " sera enregistré à " & strClose/strSave/etc
En Francais, ca va. En Anglais aussi. En Allemand, ca va pas trop (basé sur mon expérience). En Polonais, je suis prêt à gager que non.

Troisièmement-
L'Anglais est très synthétique (court). Une phrase en Anglais va s'allonger de 40% en Francais. En Allemand, c'est pire.
Le bouton "OK" devient "Accepter" devient "Akzeptieren". Vous remarquerez l'allongement progressif.

Le résultat est que les boutons s'allongent, les labels aussi et tout ceci doit être mesuré d'avance.
Comme le traducteur vous aura remis des 'captions' traduites selon vos listes, ligne par ligne, vous choisirez donc la plus longue de chaque langue pour arranger vos contrôles.

La liste du traducteur peut ressembler à ceci

Contrôle                    Anglais        Français
frmMain                    "How To"    "Mais comment y fait"
frmMain_cmdOK        "OK"        "Accepter"
frmMain_cmdQuit        "Quit"        (A VENIR) :-)

Pour les contrôles ayant des textes génériques (OK, Cancel) une série de strings applicables à tout le projet peuvent être prévue.

PREPARATIONS

D'abord sauvegarder le projet à sa positon de dévelopement finale. Ceci est important car les opérations qui suivent vont créer à l'instant un document de type resource (*.RES).

Aller dans le menu "Add-ins", ouvrir le "Add-In Manager..."
Dans la liste du "Add-in manager" sélectionner le "VB 6 Resource editor"

Dans le "Project Explorer" cliquer-droit et sélectionner "Add...". Dans le menu pop-up, sélectionner le dernier item: "Resource File" (avec le RubikCube vert). Entrer le nom choisi. En cliquant OK, VB vous avertira que ce document n'existe pas, voulez-vous le créer? Dites oui.

Vous avez maintenant un dossier "Related Documents" dans votre "Project Explorer" dans lequel il y a "<NomChoisi>.RES"
Double-cliquer dessus. Un éditeur s'ouvre qui montre votre doc resource vide.

Sélectionner l'icône "Edit String Table" (elle ressemble à un sandwich de 'abc'): vous verrez une table avec une colonne Id (un Id pour chaque string) et un Id par défaut: '101'.
Par défault, une colonne est ajoutée dans le language de base du systême.

Pour changer de language, cliquer sur la tête de colonne et sélectionner un language différent dans la liste Combo.
Pour ajouter une autre langue, cliquer sur le 'sandwich' abc dans l'éditeur de la table.

Ajouter un module dans votre projet. Ce module servira à définir les correspondances Id - variables représentant les Ids.
Désolé, y a pas plus court.
Ex.:

Public Const CfrmMain                         As Long = 101   ' mettre ici le Id de la table
Public Const CfrmMain_cmdOK         As Long = 102
Public Const CfrmMain_cmdQuit         As Long = 103

Pour les 'captions' en deux morceaux, nommer chaque morceau avec des index qui se suivent.

Public Const CtxtSomeText_1         As Long = 106     ' "Le document ouvert ("
Public Const CtxtSomeText_2         As Long = 107    ' " ) sera traité."    

Un truc: collectionner les noms de tous les contrôles dans ce module. Vous n'aurez plus qu'a les transformer en Const d'un seul trait.

CODE

Je reproduit ici le code d'un mini-projet example.
------------------------------------------------
Option Explicit

Private blnFirstTime As Boolean

Private Sub cmdOpen_Click()
    ' le contrôle 'txtSomeText' ne recoit son texte que lors de l'ouverture d'un document
    txtSomeText.Text = LoadResString(CtxtSomeText_1) & _
                lblFileName.Caption & _
                LoadResString(CtxtSomeText_2)
End Sub

Private Sub Form_Load()
    'Ceci empèchera des actions à répétition.
    blnFirstTime = True
End Sub
Private Sub Form_Activate()
    If blnFirstTime Then
        LoadAllCaptions
    End If
End Sub

Private Sub LoadAllCaptions()
    frmMain.Caption = LoadResString(CfrmMain)
    lblFName.Caption = LoadResString(ClblFName)
    
    cmdOpen.Caption = LoadResString(CcmdOpen)
    cmdSave.Caption = LoadResString(CcmdSave)
    cmdQuit.Caption = LoadResString(CcmdQuit)
    
End Sub
-----------------------------------------

Bonne chance.

Tout ceci est distillé de six ans d'expérience sur une suite-application (style MS Office) multi-applications en trois langues.

Commentaires

Commentaire de econs le 07/09/2006 00:24:06 administrateur CS

Clair, bien présenté et pointant du doigt des choses importantes.
Bref, un tutoriel à lire !

Commentaire de nico1610 le 30/09/2006 20:53:15

il est vrai que l'on sens la personne qui à déjà fait ca pendant longtemps et qui sait de quoi elle parle.

Je n'ai pas grand chose à dire sur ce tuto, il est bien !!

J'ajouterai seulement que pour ma part quand le projet est un gros projet je trouve préférable de faire ca sous forme de fichier externe (type ini) car a ce moment là quand le projet commence a être connu, on peut laissé librement au autre le soin de modifier les langues. de plus si le gestionnaire de langue est bien fait (recherche de fichier dans un dossier) il trouvera ainsi toute nouvelle langue fraichement installé sans avoir eu besoin de modifier l'exe, ce qui est le cas pour ta solution !

Apres, c'est au programmeur de choisir entre une meilleur portabilité (mais là je pense qu'il faut alors arreté de codé en VB ;) ) ou dans une meilleur diversification de son programme.

Commentaire de interkira le 31/10/2006 16:43:34

Bonjour,

pareil que nico1610, la ressource vb n'est pas très intéressante car on doit obligatoirement écrire dans le source alors que réaliser des fichiers ini ex:
french.ini, english.ini.... et mettre une séléction de langue dans le programme
permet de créer autant de fichier langue que l'on veut sans devoir recompiler.

Exemple mes programmes (ConfigWindows et TrImage XP) sur mon site http://eric.chaudagne.free.fr/

le seul soucis est de trouver des traducteurs, à bon entendeur... ;)

Cordialement

Commentaire de bitshifter le 20/11/2006 21:20:51

Plutot que d'utiliser un dossier ini par langue, pourquoi ne pas utiliser une DLL qui serait redistribuée comme 'patch' (rustine?)
Mais ca rendrait le code d'appel autrement plus complexe...

Commentaire de jackso40 le 02/02/2008 01:58:28

Mais le problème avec ce système d'après ce que j'ai pu comprendre, c'est que l'utilisateur ne peut pas choisir sa langue... La langue est choisie automatique suivant la langue du systeme d'exploitation donc si mon os est en anglais, il va me charger mon programme en anglais...(???)
Si ce n'est pas correct, serait-il possible de me dire comment fait-on pour que l'utilisateur puisse choisir la langue?
Merci

Commentaire de nico1610 le 02/02/2008 15:57:57

Elas si tu fais comme le tuto, ca serra impossible.

Ensuite pour BitShifter, on parlais de mettre dans un dossier unique ("./language") les fichiers .ini (french.ini english.ini ...) qui aurai les bonne traductions, apres tu peux même faire un soft pour la conception des traductions.

Commentaire de Florent_maf le 07/02/2008 11:45:08

Bonjour ;
je suis en train de chercher partout comment utiliser un fichier de ressource à partir de VBA.
En l'occurence, je travaille VBA intégré à SolidWorks, un soft de CAO.
En terme de performance, je prefererai utiliser un fichier ".res" plutot qu'un vulgaire ".ini" en texte.

Si toutefois, l'utilisation d'un fichier ".res" n'est pas possible, je suis preneur pour une classe déjà toute faite pour l'importation d'un ".ini".

Merci pour vos conseils.

Commentaire de lillith212 le 20/03/2008 12:25:42

Bonjour, Un bon tutoriel en effet, cependant, je suis d'accord avec les remarques concernant l'externalisation. En effet, travaillant régulierement sur des programmes pouvant être utilisé un peu partout en Europe je ne peux modifier mon code source systematiquement. Or en passant par des fichiers de type ini, le code n'est pas modifié alors que je projet deviens completement multilangue...
Mais je répéte, c'est un bon tutoriel.
Merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,231 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales