Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1087 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Interface utilisateur multi-langue.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Interface utilisateur multi-langue.

n°1061632
Cate Winig​an
Paranormal activity detected.
Posté le 26-04-2005 à 17:33:02  profilanswer
 

Hello ! Vague idée qui me vient alors que je ferais mieux de travailler :
 
Je me dis que moins mon appli aura de chaînes de caractères codées en dur, plus elle sera facile à traduire. J'ai bien envie de mettre un maximum de ces chaînes dans un fichier texte (français.lng, english.lng...). Stocker les chaînes sous une forme clef=valeur me paraît pratique.
 
Pour la lecture du fichier de langue et la modif de masse des Caption et Hint, je sais pas encore vraiment comment faire. Je n'ai vraiment pas envie de me lancer dans le codage d'un million de lignes du genre ButtonCancel.Caption := GetLanguageValue('cancel') (avec GetLangageValue(string) une fonction que j'aurais codée). Je pense plutôt opérer un balayage de tous les composants d'une fiche lors de sa création, et faire un TheComposant.Caption := GetLangageValue(TheComposant.Caption).
 
Je m'avance vers de graves ennuis à votre avis ? Tous les composants ont-il un Caption et un Hint ? Si non comment m'en assurer avant de faire l'affectation ? Je vais rencontrer des problèmes si je gère pas l'unicode ? Si oui faut que je fasse quoi pour le gérer ?... Etc, etc.. Je ferai des essais ce soir et je posterai ce que je trouverai. Si vous avez déjà fait de tels trucs, vous pourrez peut-être m'éviter des errements :).
 
Merci en tout cas.

mood
Publicité
Posté le 26-04-2005 à 17:33:02  profilanswer
 

n°1062613
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-04-2005 à 12:52:47  profilanswer
 

Solution facile : utiliser un truc tout fait :D
 
J'avais fait une classe qui gère la traduction des éléments.
www.antp.be/temp/AntTranslator.pas
 
Tu as par exemple dans ton fichier .lng ceci :
 
[Form1]
Caption=Titre de fenêtre
Button1.Caption=Le bouton
 
etc.
 
Pour créer l'objet tu fais ceci :
 
Translator := TAntTranslator.Create(nil);
Translator.SetLanguageFile('français.lng');
 
Puis quand tu veux traduire une Form (dans le OnCreate des forms par exemple) tu fais :
 
Translator.Translate(Self);
 
Et il ira chercher dans français.lng la section ayant le nom de la Form en cours et il traduira tous les éléments.
 
Sinon il y a un composant gratuit de traduction qui fonctionne de manière similaire, mais j'ai pas l'URL sous la main.


Message édité par antp le 27-04-2005 à 12:56:07

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1062617
Elmoricq
Modérateur
Posté le 27-04-2005 à 13:02:15  profilanswer
 

Personnellement, j'utiliserais les mêmes variables partout (un genre de constantes initialisées), avec une fonction unique qui lit un fichier langage pour initialiser ces "constantes".
 
Changement de langage => appel de la fonction (+ rafraîchissement de l'affichage). Et basta, rien d'autre ne change.
Toute l'appli devra par contre utiliser les variables au lieu des chaînes en dur, néanmoins il n'y aura pas besoin de faire n appels de fonction.
 
Mais il y a peut-être plus élégant, ma solution est quand même assez basique.


Message édité par Elmoricq le 27-04-2005 à 13:02:58
n°1062650
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-04-2005 à 13:32:50  profilanswer
 

Ha oui j'avais oublié de dire un truc, la solution que j'ai donné c'est pour traduire les Forms.
Pour traduire les chaînes "en dur", je passais par un composant qui les stocke sur les forms, comme ça elles sont traduites directement par le même système que pour traduire les forms. Si nécessaire je peux mettre ce composant sur mon serveur aussi.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1063906
endemyon
Posté le 28-04-2005 à 09:58:54  profilanswer
 

Moi je suis intéressé par le composant qui stocke les chaines sur les form. J'avais déja vu ton composant AntTranslator et je me demandais comment tu fesais pour les chaines.


---------------
Mes photos : http://500px.com/endemyon
n°1063923
antp
Super Administrateur
Champion des excuses bidons
Posté le 28-04-2005 à 10:05:25  profilanswer
 


unit AntStringList;
 
interface
 
uses
  Classes;
 
type
 
  TAntStringList = class(TComponent)
  private
    FStrings: TStrings;
    procedure SetStrings(Value: TStrings);
  protected
  public
    constructor Create(Owner: TComponent); override;
    destructor  Destroy; override;
  published
    property Strings: TStrings read FStrings write SetStrings;
  end;
 
procedure Register;
 
implementation
 
procedure Register;
begin
  RegisterComponents('Ant', [TAntStringList]);
end;
 
constructor TAntStringList.Create(Owner: TComponent);
begin
  inherited;
  FStrings := TStringList.Create;
end;
 
destructor TAntStringList.Destroy;
begin
  FStrings.Free;
  inherited;
end;
 
procedure TAntStringList.SetStrings(Value: TStrings);
begin
  FStrings.Assign(Value);
end;
 
end.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Interface utilisateur multi-langue.

 

Sujets relatifs
Exporter une table vers un repertoire de l'utilisateur courrantpb interface/variable
Interface Web[HELP] Creation interface HTML pour un CD
Interface/VB/access[C++] Aide pour interface graphique
interface homme machine[access/SQL]recherche multi-table
Requete multi Bases ?¿Logiciel simulant x utilisateur
Plus de sujets relatifs à : Interface utilisateur multi-langue.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR