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

Langages de programmation Discussion :

Programmation par module : applications multilingues


Sujet :

Langages de programmation

  1. #1
    Membre confirmé
    Avatar de argoet
    Inscrit en
    mai 2002
    Messages
    575
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 575
    Points : 545
    Points
    545
    Par défaut Programmation par module : applications multilingues
    Existe t'il une technique de programmation par module ?
    Je m'explique :
    je vais devoir déployer un ensemble de programmes informatiques dans différents pays .
    Cependant l'ensemble de ces pays n'ont pas besoin de certaines évolutions développées spécifiquement pour un pays.
    Autrement dit : j'ai une base commune à tous les pays et selon les spécificité propre à chaque pays des modules les concernant.

    ma première idée est de faire évoluer les programmes de base en appelant de manière dynamique un module .
    Par exemple : Afficher du texte dans la langue du pays

    je ne veux pas faire un truc du type
    If Français Then Texte_Français
    Else If Anglais Then Texte_Anglais
    Else ...........


    Mais Plutôt :
    Lance le Module "Texte_$Variable_Langue_du_pays"

    Intérêt : Si évolution sur la langue anglaise seul le module concerné est à modifier sans toucher aux autres code ni au programme de base

    Qu'en pensez vous ?


    2ème Idée (Un peu dans le même esprit) mais légèrement différente : l'appel des modules se fait via un support (Table SGDB ou un Fichier PLAT par exemple)
    Ici on lance les modules (spécifique par pays) associé au programme sur le même principe que précédemment puisque le module ou programme à lancé est généré dynamiquement




    Merci de vos commentaires ... ou mieux , de vos expériences dans ce domaine

    Bonne et heureuse année à tous !!!
    Signé : Capitaine Jean-Luc Picard

  2. #2
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : avril 2003
    Messages : 542
    Points : 847
    Points
    847
    Par défaut
    Tu peux utiliser un langage orienté objet et faire de l'héritage pour tout ce qui est spécifique pour un pays.

    PS : J'imagine que la spécifité ne s'arrête pas au langage...

  3. #3
    Membre confirmé
    Avatar de argoet
    Inscrit en
    mai 2002
    Messages
    575
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 575
    Points : 545
    Points
    545
    Par défaut
    Catbull à écrit
    PS : J'imagine que la spécifité ne s'arrête pas au langage...
    Evidemment , ceci n'était qu'un exemple au même titre que le pays pourrait l'être d'ailleurs

    Ce qui m'interesse le plus , ce sont vos expériences dans ce domaine, la methode utilisée ...
    Signé : Capitaine Jean-Luc Picard

  4. #4
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    janvier 2003
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2003
    Messages : 388
    Points : 731
    Points
    731
    Par défaut
    perso je développe un truc un peu en modules.

    C'est un projet PHP qui liste des fichiers d'un répertoire, mais peut faire pleins d'autre choses avec.
    j'ai le moteur main.php

    un truc tout bête, afficher des icônes (word, html, pdf...) à côté de mes fichiers, et pour compliquer un peu, plusieurs jeux d'icônes possibles.

    J'ai plusieurs langues.

    J'ai donc plusieurs "templates", que j'organise ainsi :
    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
    template
    +- default.php
    +- default/
    |  +- ico/
    |  |  +- pdf.gif
    |  |  +- html.gif
    |  +- lang/
    |  |  +- fr.lng en.lng hu.lng...
    |  +- style.css
    +- skin1/
    |  +- ico/
    |  |  +- pdf.gif
    |  +- style.css
    +- gallerie.php
    +- gallerie/
       +- lang/
       |  +- ...
       +- style.css
    L'utilisateur peut se créer facilement un skin, en créant un répertoire, en y mettant des icônes (dans l'exemple il surcharge l'icône du PDF), une feuille de style...
    Dans le fichier de config il choisit $template='skin1'.

    -------------------------------------

    Problème n°1 : FICHIERS

    si je fais <img src="$template/ico/html.gif"> le skin1 n'aura rien. Comment alors prendre le html.gif du template par défaut ?
    Solution : une fonction choisir_fichier du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function choisir_fichier&#40;$fichier&#41;
    &#123;
      if &#40;is_file&#40;$template.'/'.$fichier&#41;&#41; return $template.'/'.$fichier
      else return 'defaut/'.$fichier;
    &#125;
    et donc pour afficher mon icône,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="<?php echo choisir_fichier&#40;'ico/html.gif'&#41;; ?>">
    Si fichier html.gif existe dans le template choisi dans la config, alors prend dans le truc par défaut.

    Il peut en être de même pour tes fichiers, si tu détecte le pays (par config ou autre), un répertoire par pays, avec les fichiers variables d'un pays à l'autre, et une fonction choisir_fichier. Et le pays par défaut est "français" ou "anglais".

    -----------------------------------

    Problème n° 2 - TRADUCTIONS

    Tes fichiers anglais et français sont impeccable car tu maîtrises ces langues, mais certains mots t'échappent en hongrois, polonais et russe ^^.
    Comment faire pour qu'un mot qui n'existe pas dans le fichier hongrois soit remplacé par un mot en français ou anglais ?

    cherche "php multilingue iubito" sans les guillemets sur google Cette solution consomme plus de mémoire car elle stocke toutes les variables de toutes les langues depuis je me suis amélioré ^^

    j'ai une autre solution que j'utilise dans mon projet actuel.
    Si tu fais des fichiers du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //anglais.php
    $lang = array&#40;
      'bonjour' => 'hello',
      'au revoir' => 'good bye',
      'merci' => 'thank you'
      ...
    &#41;;
    
    //hongrois.php
    $lang = array&#40;
      'merci' => 'koszonom' <- chui pa sur de l'ortograf &#58;-p
    &#41;;
    l'inclusion du fichier hongrois ne traduira pas bonjour et au revoir

    J'ai donc fait des fichiers texte du genre un peu comme des fichiers INI
    anglais.lng
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     bonjour = hello
    au revoir = good bye
    merci = thank you
    hongrois.lngune fonction init_lang lit le fichier par défaut (disons l'anglais) du template par défaut, puis le fichier hongrois du même template par défaut.
    Ensuite, mes templates peuvent avoir du vocabulaire spécifique (par ex pour une gallerie d'image : "photo suivante", "convertir en JPEG"...).
    Je lis donc le fichier anglais de ce template, puis le fichier hongrois.
    (bien sûr je teste l'existence des fichiers avant de lire, certains template n'ont pas de vocabulaire spécifique!)
    J'ai plus la fonction en tête mais c'est du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    - lit chaque ligne d'un fichier
    - découpe la chaîne au niveau du =
    - $lang&#91;texte_à_gauche&#93; = texte_à_droite
    ainsi la fonction va faire:
    --> anglais
    $lang['bonjour'] = 'hello';
    $lang['au revoir'] = 'good bye';
    $lang['merci'] = 'thank you';
    --> hongrois
    $lang['merci'] = 'koszonom'; <-- ça remplace

    et le tour est joué !

    --------------------------------------

    Tu as peut-être remarqué dans l'arborescence un default.php et un gallerie.php.
    Dans mon appli c'est du code html pour faire afficher ce que je veux, avec quelques appels de php au milieu.
    le main initialise des tas de variables, crée un array avec les noms des fichiers...
    et ensuite il donne la main au $template.php, ou default.php si $template.php n'existe pas

    Donc mon template "skin1", il utilise le default.php, mais avec un css différent et un fichier pdf.gif différent,
    tandis que mon "gallerie" à son propre code (affiche les miniatures des images...).

    Voilà, j'espère que l'exposé est compréhensible, alors ainsi mon appli va très très loin dans ces modules, en rajouter un est presque ( ) un jeu d'enfant
    Lé SMS cé kom lé ognon, sa pike lé yeu

  5. #5
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    janvier 2003
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2003
    Messages : 388
    Points : 731
    Points
    731
    Par défaut
    j'ai oublié de dire, la config marche un peu comme la traduc, sauf que je passe pas par des fichiers textes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    config.php&#58;
    $var = 'toto';
    $template = '...';
    ....
    L'utilisateur peut mettre plusieurs instance du programme, mais garder un seul "moteur".
    Une partie du site peut être une gallerie d'image, une autre un listing de fichier, et autre (héhé surprise ... ) le tout basé sur le même programme.

    donc un répertoire moteur qui contient tout un tas de bazar
    et chaque répertoire d'application
    /photos réveillon
    /listing
    contient un index.php qui donne le chemin vers le moteur (/moteur)

    on peut mettre un config.php, un répertoire template.... dans /photos réveillon/ pas de problème, les fonction init_lang, choisir_fichier font des teste aussi là-dessus.
    C'est-à-dire que si dans le listing, avec template par défaut, on décide que 'au revoir' se dira 'à la r'voyure!' en français, il suffit de créer un fichier /photos réveillon/template/default/lang/fr.lng qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    au revoir = à la r'voyure!
    Lé SMS cé kom lé ognon, sa pike lé yeu

  6. #6
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : avril 2002
    Messages : 2 663
    Points : 6 627
    Points
    6 627
    Par défaut
    je pense que ça dépend pas mal du langage

    Pourrais tu préciser en quoi tu veux faire ton projet ?

  7. #7
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    janvier 2003
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2003
    Messages : 388
    Points : 731
    Points
    731
    Par défaut
    c vrai qu'en Delphi ça doit être plus dur, qu'il faut créer des dll et les déployer....
    mais en php c'est aisé.
    Lé SMS cé kom lé ognon, sa pike lé yeu

  8. #8
    Membre confirmé
    Avatar de argoet
    Inscrit en
    mai 2002
    Messages
    575
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 575
    Points : 545
    Points
    545
    Par défaut Le Language
    c'est effectivement aussi lié au language , à titre indicatif j'utilise le "C" et le "PL/SQL Sur Oracle9i" 8)

    Nota : Merci de vos réponses !!!!
    Signé : Capitaine Jean-Luc Picard

  9. #9
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    janvier 2003
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : janvier 2003
    Messages : 388
    Points : 731
    Points
    731
    Par défaut
    en C ça doit être jouable avec des inclusions conditionnelles... la condition étant que le fichier existe, et donc tu as tes modules.
    mais bon je me souviens plus très bien des préprocesseurs en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #IF moduleexiste THEN
    #   INCLUDE <lemodule>
    #END IF
    un truc dans le style, ça fait longtemps le C....
    Lé SMS cé kom lé ognon, sa pike lé yeu

  10. #10
    Membre régulier
    Inscrit en
    avril 2002
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 61
    Points : 72
    Points
    72
    Par défaut
    A mon avis tu as intérêt à utiliser des systèmes de gestion de configuration logicielle (genre CVS) puisque tu vas avoir à maintenir plusieurs branches correspondant à chacun de tes clients.

    Par exemple supposons que le module A possède la fonctionnalité
    F1 pour le client C1 et la fonctionnalité F2 pour le client C2.
    En réalité, le module A possède un seul point d'entrée fonctionnel,
    mais la fonction est spécifique à chaque client.

    Tu vas donc créer deux branches dans ton système de configuration :
    La branche MA_F1 pour le client C1 et la branche MA_F2 pour le client C2.


    Tu me diras : pourquoi ne pas mettre de directive de compilation
    conditionnelle dans l'implémentation de la fonction selon le client ?
    Parce que d'un point de vue strict, si le client C2 te demande de faire
    une évolution sur F2, cela va automatiquement provoquer
    un changement de version de ton module et donc un décalage entre
    la version du module en production chez le client C1 et ta version de développement.
    Donc cela complique la tâche de traçage des versions.

  11. #11
    Membre confirmé
    Avatar de argoet
    Inscrit en
    mai 2002
    Messages
    575
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 575
    Points : 545
    Points
    545
    Par défaut
    J'utilise effectivement un PGCL (PLan de Gestion de Configuration Logitiel) :
    Pour info : PVCS Dimension développé par Merant
    Signé : Capitaine Jean-Luc Picard

  12. #12
    Membre du Club
    Inscrit en
    avril 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : avril 2003
    Messages : 52
    Points : 61
    Points
    61
    Par défaut
    La plate-forme Java est très forte pour gérer ce genre de choses, mais apparemment tu ne sembles pas l'utiliser. Cependant, tu peux reprendre ses trucs.

    Ils sont basés sur le fait qu'il existe une normalisation ou des habitudes communes pour repérer les pays et les langues. Ainsi, le français de France se repère par fr_FR, le français du Canada fr_CA, l'allemand d'Allemagne de_DE, l'allemand de Suisse de_CH, et ainsi de suite.

    A partir de là, il suffit d'organiser ces fichiers et répertoires en jouant sur les conventions de noms. Par exemple tu te donnes une base de fichier qui caractérise les erreurs, et un suffixe pour la langue : par exemple erreurs_de_DE.txt te donne les erreurs en allemand de Suisse. Et ainsi de suite.

    La base des suffixes de localisation pour Java : Supported Locales.

    A toi de t'en inspirer. Mais très vite il te faudra autre chose que de l'inspiration s'il te faut gérer une grande diversité de langues.

    Il existe certainement des trucs similaires pour Windows, ou même pour ton environnement, car c'est absolument nécessaire dans une plate-forme moderne.

  13. #13
    Membre à l'essai
    Inscrit en
    mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Salut.

    En effet, avec un langage comme le C, c'est un peu + prise de tête pour faire des DLL.

    Perso je dvlp en Delphi et il est assez simle de créer des dll avec ce dont tu as besoin.

    Pour le C, je ne sais plus comment on fait.

    Mais les dll me semblent une bonne idée.

  14. #14
    Membre habitué Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    octobre 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : octobre 2002
    Messages : 290
    Points : 186
    Points
    186
    Par défaut
    Je ne sais pas si ca va t'aider, je ne m'en suis jamais servi, mais regarde du coté de la "compilation conditionnelle"

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

Discussions similaires

  1. Spring et la programmation par modules Maven
    Par Lagoon94 dans le forum Spring
    Réponses: 2
    Dernier message: 06/12/2010, 22h45
  2. Programmation par contrat, application au C++
    Par white_tentacle dans le forum C++
    Réponses: 16
    Dernier message: 24/12/2009, 15h07
  3. Réponses: 9
    Dernier message: 22/03/2003, 22h47

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