IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Application multi langage


Sujet :

Windows

  1. #1
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut Application multi langage
    Bonjour,

    Pour mon projet en cours, j'aimerais que celui-ci soit "multi-langages". Pour cela, j'avais pensé à créer une DLL ayant une string-table (multi), contenant toutes les chaînes que mon lecteur affichera, en plusieurs langages. Cependant, après quelques recherches, je ne tombe que sur des how-to sur Visual C++, or j'aimerais créer la DLL par le biais du code.

    Deux questions me viennent donc à l'esprit :

    • Comment dois-je déclarer la string-table (multi) ?
    • Comment récupérer simplement une chaîne, en fonction du langage sélectionné (d'après ce que j'ai vu, c'est possible) ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Salut,
    Pour la syntaxe de déclaration, je ne peux rien te dire.
    Mais pour récupérer la chaîne selon la bonne langue, on utilise la fonction SetThreadLocale(), qui affecte le comportement LoadString() et consorts.

  3. #3
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    D'après ce que j'ai vu sur msdn, SetThreadLocale() ne doit pas être utilisé pour définir le langage d'une interface utilisateur :
    Windows 2000/XP: Do not use SetThreadLocale to select a user interface language. To select the resource that is defined in the .rc file with a LANGUAGE statement, the application must use the Win32 FindResourceEx function.
    Pourtant, il y a juste au dessus :
    SetThreadLocale affects the selection of resources with a LANGUAGE statement. The statement affects such Win32 functions as CreateDialog, DialogBox, LoadMenu, LoadString, and FindResource. It sets the code page implied by CP_THREAD_ACP, but does not affect FindResourceEx.
    Ce qui m'intéresse bien évidemment. Lequel dois-je suivre ?

    Par contre, j'ai trouvé le mode de déclaration des Stringtables (en fait, c'était tout attaché ). Donc, que dois-je faire, par exemple, avec SetThreadLocale(), si je veux sélectionner la première stringtable pour l'utilisation ?
    Code C : 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
    #define FRENCH LANG_FRENCH, SUBLANG_FRENCH
    #define ENGLISH LANG_ENGLISH, SUBLANG_ENGLISH_US
     
    #define WELCOM (WM_USER+1)
    #define MESSAGB (WM_USER+2)
     
    STRINGTABLE LANGUAGE ENGLISH
    BEGIN
        WELCOM, "Welcome in PlayTyle\012\
                       You may select application's langage\
                       using the helper program in the same\
                       directory"
        MESSAGB, "This is a messagebox"
    END
     
    STRINGTABLE LANGUAGE FRENCH
    BEGIN
        WELCOM, "Bienvenue dans PlayTyle\012\
                       Vous pourrez changer le langage de cette\
                       application en utilisant le programme assistant\
                       situé dans le même dossier"
        MESSAGB, "Ceci est une messagebox"
    END

    Merci d'avance.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Pour moi, SetThreadLocale() est à utiliser quand c'est pour toute l'application, je pense.

    Pour utiliser la string table anglaise, je pense qu'il faut faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetThreadLocale( MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL), SORT_DEFAULT) );

  5. #5
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    A quoi peut bien servir le deuxième paramètre de MAKELCID ? Où as-tu trouvé SORT_DEFAULT ? Merci.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Trouvé dans la doc de MAKELCID sur MSDN.

  7. #7
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Compris. J'irai essayer ça (comme d'habitude, je me renseigne pour avoir tout ce qu'il faut pour travailler) .

    Sinon, tu ne connaîtrais pas, par hasard, un bon parseur de fichiers INI (apparemment, il n'y a rien dans l'API Windows), si possible en C++ et GPL ?

    P.S: Tiens pendant que j'y suis : l'API Windows tolère toutes les licences, ou en impose une ?

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    L'API Windows fait partie du système d'exploitation, donc il me semble qu'elle est exclue de toute license.

    Il y a une fonction qui parse les fichiers .ini (GetPrivateProfileString()), mais elle n'est pas présente sur pocket PC. Voir dans la FAQ, il y a quelque part un parseur de fichier ini produit exprès pour l'occasion.

  9. #9
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Une seule fonction ? Bizarre... sinon tu parles de la FAQ de developpez.com ? je vais voir de ce pas

    Edit: Non, c'est du MFC ou du C++ Builder

    ReEdit : En ce qui concerne Msdn, GetPrivateProfileString(), comme son nom l'indique, ne permet que de récupérer des string. Si je ne trouve rien pour les booléens et integer, il va falloir que je me tourne de nouveau vers les INI parsers..

    ReReEdit : finalement, il y a aussi GetPrivateProfileInt(), et au besoin (pour les booléens) GetPrivateProfileStruct(). Ca devrait aller maintenant. Néanmoins, si tu trouves un bon parser INI, tu sais où me trouver ^^

Discussions similaires

  1. Bien créer une application multi-langues ? Unicode ou non ?
    Par Maxime Abbey dans le forum Composants VCL
    Réponses: 28
    Dernier message: 10/09/2007, 17h20
  2. Quel langage pour application multi-plateforme ?
    Par yukimura_s33 dans le forum Langages de programmation
    Réponses: 22
    Dernier message: 21/11/2005, 13h22
  3. [Application multi-langues] Compilateur ou fichier lng ?
    Par Teb dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/08/2005, 16h48
  4. Debug application multi thread
    Par Razowsky dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 18h14
  5. Réponses: 4
    Dernier message: 25/11/2004, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo