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

Java Discussion :

Gestion de langues avec NSIS et programme Java


Sujet :

Java

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut Gestion de langues avec NSIS et programme Java
    Bonjour a tous

    Voici mon problème.

    Je développe une application Java avec libellés en français.
    Je voudrais que l'installation (installateur crée via NSIS) donne le choix de faire l'installation en français ou en anglais (ça je sais faire) et selon le choix effectué, les libellés de mon appli seront dans la même langue.

    Ma question est la suivante :
    Comment faire le lien entre le côté NSIS (je choisis l'anglais ou le français) et le côté JAVA (si j'ai choisi français, j'utilise le fichier de libellés français sinon le fichier anglais)

    Merci

  2. #2
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    Salut, il y a plusieurs manières, une fois que tu as sélectionné le pays, tu récupères le code pays $LANGUAGE et tu peux faire un copie de ton fichier de properties correspondant à la langue dans celui de référence pour qu'au chargement ton appli prenne celui par défaut présent, ou mettre le language dans un fichier lang.properties (fr,FR) et en faire une lecture au démarrage pour charger au travers d'une classe Locale utilisée après par un getBundle, tu vois il existe plusieurs méthodes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //lecture de ton fichier langnsis.properties -> lang=fr
        Properties nsisprop=loadProperties("nsislang.properties");
        String nsislang=nsisprop.getProperty("lang");
        if

  3. #3
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    Salut, il y a plusieurs manières, une fois que tu as sélectionné le pays, tu récupères le code pays $LANGUAGE et tu peux faire un copie de ton fichier de properties correspondant à la langue dans celui de référence pour qu'au chargement ton appli prenne celui par défaut présent, ou mettre le language dans un fichier lang.properties (fr,FR) et en faire une lecture au démarrage pour charger au travers d'une classe Locale utilisée après par un getBundle, tu vois il existe plusieurs méthodes.

    un truc dans ce goût là ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        //lecture de ton fichier langnsis.properties -> lang=fr
        Properties nsisprop=loadProperties("nsislang.properties");
        String nsislang=nsisprop.getProperty("lang");
        if (lang.equalsIgnoreCase("fr")) locale = new Locale("fr","FR"); else //FR
        ...//GB
     
        ResourceBundle applang= ResourceBundle.getBundle("./settings/lang.properties", locale);

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut
    Ok merci r2d2abc

    Effectivement ta 2ème solution semble impecc' (d'autant plus que j'ai pas très bien compris la 1ère ).

    Il y a toutefois une chose que je ne saisis pas complètement. Dans mon fichier nsislang.properties, il y aurait plusieurs property "lang" (car plusieurs langues proposées fr et en) donc, comment je sais, à ce moment là quelle lang a été choisie (ou lequel prendre quand je fais mon getProperty).

    J'tente le coup demain.
    Merci

  5. #5
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    En fait si j'ai bien compris, l'utilisateur durant l'installation choisit la langue (fr,gb,..) de l'appli (et de l'installateur), à partir de là tu génères le fichier nsislang.properties avec la langue choisie (d'où le lang=fr) qui doit se reflèter dans ton appli au démarrage de celle-ci et la boucle est bouclée. A chaque fois que ton appli se lancera tu liras le .properties et tu linkeras avec le fichier de resources idoine. N'est-ce pas le but fixé ?
    ...

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut
    Si, c'est exactement cela. Ce que je comprends et maitrises moyennement, c'est le "à partir de là tu génères le fichier nsislang.properties avec la langue choisie".

    C'est NSIS qui me charge/génère mon fichier de langue? je dois lui mettre quoi pour qu'il me fasse cela?

    pour le moment, la seule chose que je fais est un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function .onInit
    !insertmacro MUI_LANGUAGE "English"
    !insertmacro MUI_LANGUAGE "French"
    FunctionEnd
    maintenant,comment faire le lien entre mon scriptNSIS et un quelconque fichier de langue, selon la langue choisie ?

  7. #7
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    En fait tu dois utiliser une macro dans ton .init ou ailleurs du type !insertmacro MUI_LANGDLL_DISPLAY qui te permet de choisir le langage. Juste après tu testes $LANGUAGE avec des constantes internes et tu sors le réultat dans le fichier nsislang.prop.. , see below.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      !insertmacro MUI_LANGDLL_DISPLAY
      ...
     
      StrCpy $lang "fr"                                     ; default language
      StrCmp $LANGUAGE ${LANG_FRENCH} 0 +2  ; if french choosen ... 
      StrCpy $lang "fr"
      StrCmp $LANGUAGE ${LANG_ENGLISH} 0 +2
      StrCpy $lang "gb"
     
      FileOpen  $0 $EXEDIR\nsislang.properties w  ; output value in file
      FileWrite $0 'lang=$lang$\r$\n'
      FileClose $0
    hope this helps...

  8. #8
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut
    Ok, je comprends beaucoup mieux.
    Par contre, désolé de faire le boulet mais malgré toutes mes recherches sur google, je ne trouve pas de solution a mon problème.

    Lorsque j'exécute ce code, j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Usage: StrCpy $(user_var: output) str [maxlen] [startoffset]
    Je débute en ce qui concerne NSIS mais je comprends bien qu'il y a un souci avec $lang sur cette commande : StrCpy $lang "fr" .

    Comment est-ce que je dois le déclarer dans mon fichier
    J'ai essayé push, !define mais rien n'y fait...

    Merci beaucoup

  9. #9
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    OK je comprends ... lang est une variable globale mais pourrait être autre chose. Tu la positionnes où tu veux dans le script et elle est globale (conseil: -> tu crées un block en entête avec un comment après).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ;-----------------------------[variable block]-------------------------------
    Var lang                ; fixed user language choice
    ...
    ;---------------------------------------------------------------------------
    voilà

  10. #10
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut
    Ok r2d2abc, je pense que mon problème est résolu. Le seul souci que j'ai maintenant et avec lequel je me tire les cheveux est que mon fichier properties n'est pas trouvé par mon getBundle (mais bon, c'est une autre histoire)

    Merci beaucoup pour ton aide.

  11. #11
    Membre confirmé Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Par défaut
    bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Java / NSIS - Gestion de langue à la déinstallation
    Par identifiant_bidon dans le forum Général Java
    Réponses: 1
    Dernier message: 10/06/2010, 13h16
  2. [c# 2.0] Gestion des langues avec SQL
    Par oolon dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 14/03/2007, 16h42
  3. Problème de gestion des langues avec MFC
    Par Figaro dans le forum Visual C++
    Réponses: 4
    Dernier message: 20/11/2006, 15h56
  4. JSmooth avec des programmes Java conséquents...
    Par phyll dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 28/04/2006, 10h25
  5. [votre avis m'interesse] Interface avec un programme Java
    Par LineLe dans le forum Interfaces Graphiques en Java
    Réponses: 29
    Dernier message: 11/12/2004, 11h39

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