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

Langage Delphi Discussion :

Internationalisation et Dates


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut Internationalisation et Dates
    Bonjour,

    je me heurte a un petit problème en internationalisation et les dates .

    Je force l'affichage des dates dans un DBGrid au format dd.mm.yyyy , jusque là rien de bien difficile , le Hic c'est qu’apparemment la saise dans la Grille ,elle , reste au format local ! embêtant pour notre ami anglophone , l'affichage est bon mais la saisie doit se faire "à l'anglaise" mm.dd.yyyy ce qui est vous vous en doutez , perturbant !

    J'ai essayé divers choses mais sans résultats
    - changer le ShortdateFormat au niveau de la création de la fiche
    - changer ce même format au niveau du source du projet
    - changer au niveau du dfm "traduit" ,pour ce petit programme j'ai utilisé l'internationalisation fournie avec delphi (2010 en l'occurence) mais je ne vois vraiment pas où se situerai ce format

    une idée ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tu ne devrais pas toucher au format manuellement pour l'affichage
    laisse ton programme gérer les FormatSettings initialisés par la VCL en fonction de la région en cours !
    Un utilisateur anglophone aura une localisation anglaise avec tout ce qui va avec : langue, date, monnaie ...
    Idem pour un utilisateur français, laisse l'OS le gérer !

    toi en interne, tu dois faire des fonctions au besoin, pour transformer une date format local en format SQL, si tu gères du SQL à la main sans passer par des DBEdit ou DBGrid
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Tu ne devrais pas toucher au format manuellement pour l'affichage
    Oui , mais non , la date est dans la BDD en DatetimeStamp, et donc , je suis bien obligé de changer le formattage au niveau des champs
    laisse ton programme gérer les FormatSettings initialisés par la VCL en fonction de la région en cours !
    Un utilisateur anglophone aura une localisation anglaise avec tout ce qui va avec : langue, date, monnaie ...
    Idem pour un utilisateur français, laisse l'OS le gérer !
    dans un autre soft (pas de date) , mais des ordinateurs français /anglais/etc... j'avais réussi sans soucis a faire que tous le monde est la même devise
    (sinon il y avait dollars , francs suisses, euros etc.. selon les postes et sur le même réseau local !!)

    en fait , je viens de trouver , pour chaque champ date , il y a bien sur le displayformat , mais il y a aussi le editmask (que je n'avais pas rempli => format par défaut) donc , c'est résolu (du moins pour la partie "urgente")

    reste que durant mes tests , avec un petit programme simplifiée , j'ai mis un TDateTimePicker et là , j'ai revu le même comportement mais bon , je ney suis pas allé jusqu'au fond des choses (donc bémol)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Oui , mais non , la date est dans la BDD en DatetimeStamp, et donc , je suis bien obligé de changer le formattage au niveau des champs
    DatetimeStamp de quel SGBD ?
    DATETIME ou TIMESTAMP, c'est au format de la DB sans lien avec la locale surtout avec du MySQL ou Oracle installé sur un serveur Linux !

    Ainsi, deux postes, l'un OS Anglais et l'autres OS Français peuvent accéder aux données, le format de Date DATETIME\TIMESTAMP sera lu tout à correctement et transforme en TDateTime qui est une valeur numérique, ensuite l'affichage des champs TDateField utilise les locales de l'OS en cours, tu n'as pas besoin de le gérer manuellement

    le problème c'est qu'avec les DATETIME \ TIMESTAMP, selon le SGBD et le Provider utilisé, cela peut-être géré en TDateField ou TSQLTimeStampField et parfois malheureusement en TStringField

    Si TStringField, c'est la qu'intervient une fonction de conversion du format SQL vers le format local
    La DB DOIT TOUJOURS utilisé le même format mais tu ne peux pas l'imposer à un utilisateur lambda habitué à ses locales

    Si c'est un TDateField, tu devrais vraiment évité les bidouilles, fait confiance à l'OS, et utilise des ParamByName pour les mises à jour, ne manipule pas le SQL à la mano !

    Voir OnGetText du TField et OnSetText justement conçu pour l'affichage (DisplayText à true) ou le stockage (DisplayText à false)

    Citation Envoyé par SergioMaster Voir le message
    dans un autre soft (pas de date) , mais des ordinateurs français /anglais/etc... j'avais réussi sans soucis a faire que tous le monde est la même devise
    (sinon il y avait dollars , francs suisses, euros etc.. selon les postes et sur le même réseau local !!)
    Heureusement que tu peux t'adapter à la devise de l'utilisateur mais c'est un cas plus complexe, j'ai travaillé sur une application financière, tout était stocké en dollar, en plus, l'utilisateur pouvait avoir l'affichage en monnaie locale et en monnaie du bénéficiaire (dans cette application, c'était souvent du Franc CFA dans ce dernier cas)
    La monnaie utilisée dans ce genre d'application est souvent plus globalisé à l'entreprise\compte qu'à la langue de l'OS d'un poste parmi d'autre
    En plus le champ Currency ou Float n'est pas typé par la monnaie, peu importe dollar, euro, ... on manipule un chiffre, c'est très différent d'une date stockée\affichée en nombre\chaine avec une grande variabilité de format

    Citation Envoyé par SergioMaster Voir le message
    en fait , je viens de trouver , pour chaque champ date , il y a bien sur le displayformat , mais il y a aussi le editmask (que je n'avais pas rempli => format par défaut) donc , c'est résolu (du moins pour la partie "urgente")
    DisplayFormat, DisplayText va de paire avec OnGetText
    EditMask est effectivement indispensable surtout que la modification directement en DBGrid ce n'est pas très ergonomique, mieux vaut un TDBCtrlGrid avec des TDBEdit, c'est un plus agréable et l'on peut y mettre des composants JEDI ou TMS

    Citation Envoyé par SergioMaster Voir le message
    reste que durant mes tests , avec un petit programme simplifiée , j'ai mis un TDateTimePicker et là , j'ai revu le même comportement mais bon , je ney suis pas allé jusqu'au fond des choses (donc bémol)
    TDateTimePicker utilise le format local, ce n'est plus un composant DB, donc encore une fois, on en revient à faire une fonction de conversion du TDateTime vers FormatSQL si l'on génère le SQL à la main ou utilisation de ParamByName qui évite ce genre de soucis
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Internationalisation de la date
    Par iReporter dans le forum BIRT
    Réponses: 2
    Dernier message: 22/10/2010, 10h01
  2. Probleme internationalisation date
    Par developpeur_débutant dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 10/11/2009, 21h54
  3. Pb d'internationalisation de date ?
    Par javaDev dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 10/05/2006, 14h18
  4. Réponses: 3
    Dernier message: 06/05/2002, 18h24
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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