Newsgroup: it.comp.lang.delphi
Titolo: Resource String per Messagi in lingue diverse

Ho necessita' di aggiungere altre lingue
usare una unit con resoursestring e' ancora
una buona idea ?
 
Delphi XE2/XE3 vcl
 
unit rsPulsanti;
 
interface
 
resourcestring
 
  {Inglese}
  EN_User = 'User Name';
  EN_Password = 'Password';
 
  {Italiano}
  IT_User = 'Nome Utente';
  IT_Password = 'Password';
 
  {Ucraino}
  UC_User = 'Iм'+ #39 + 'я користувача';
  UC_Password = 'Nароль';
 
implementation
end.
 
che uso cosi'
.. uses rcPulsanti
 
   EdUtente.Text := rsPulsanti.UC_User;
   EdPassword.Text := rsPulsanti.UC_Password;

Onestamente, non ho capito come fa la tua app a capire quali strinhe deve usare.
 
A.
 
 
 
 

> A.
il suffisso UC_ o IT_
 
EdUtente.Text := rsPulsanti.UC_User;  //Ucraino
EdUtente.Text := rsPulsanti.IT_User;  //Italiano
 

 la tua app a capire quali strinhe deve usare. 
 
PROBABILMENTE, NON SO PIU' SCRIVERE IN ITALIANO.
DOMANI TROVO UNA INSEGNANTE DI SOSTEGNO E RICOMINCIO DALL'ALFABETO.
IO QUA SOTTO LEGGO DUE ASSEGNAZIONI. 
 
EdUtente.Text := rsPulsanti.UC_User;  //Ucraino
EdUtente.Text := rsPulsanti.IT_User;  //Italiano
 
FORSE TU VIVI NELLA 78A DIMENSIONE.. IO NO.
E IN QUESTA DIMENSI0NE LA 2A ASSEGNAZIONE SOVRASCTIVE LA 1A.
QUINDI, IL TEXT SARA SEMPRE IN ITALIANO. 
 
QUINDI, CI DEVE ESSERE *QUALCOSA* CHE DICA AL SOFTWARE SE USARE 
*UC_USER* OPPURE  *IT_USER*, GIUSTO? 
 
LA MIA DOMANDA QUINDI E':  COSA E' QUESTO FOTTUTO *QUALCOSA*??????
CIOE': 
COME CAZZO FA LA TUA APP A CAPIRE SE DEVE USARE UC_USER O IT_USER???
 
 
Grazie.
 
A.
 

 Delphi XE2/XE3 vcl
E' sempre una buona idea usare le resourcestring, perchè centralizzano 
il messaggio.
Una volta usate le resourcestring, usa un tool che permette di tradurle 
e ricompilare il tuo programma nella lingua destinazione.
Uno di questi che ho usato in un'azienda dove ho lavorato si chiama 
sisulizer (
http://www.sisulizer.com
)
cerca che ce ne sono in giro anche di simili.
 
il concetto di funzionamento è il seguente: tutti i tuoi controlli usano 
le resourcestrings.
con il tool di localizzazione devi andare a tradurre tutte le 
resourcestring nelle lingue desiderate.
il tool poi ricompila per te il programma in modo che tu non devi 
cambiare il tuo codice in funzione della locale.
Avrai così una versione in italiano, una in inglese, una in ucraino, 
ecc... tu ti devi solo preoccupare di usare le resourcestring.
 
ciao
 
ciao
 
-- 
morde
Android
QT 4.7
Delphi (5,6,7.. expired)
Firebird Database
 

>
che puo' essere 0 : Inglese; 1 : Italiano , etc
 
Case iLingua of
  0 : begin
        EdUtente.Text := rsPulsanti.EN_User;
        EdPassword.Text := rsPulsanti.EN_Password;
      end;
  1 : begin
        EdUtente.Text := rsPulsanti.IT_User;
        EdPassword.Text := rsPulsanti.IT_Password;
      end;
end;
 
che pero' risulta scomodo, altra via quella del Define
cambio il nome delle unit ma uso sempre User e non
IT_User
 
{$DEFINE LANG_UCR}
uses
 
   {$IfDef LANG_UCR}
     rsPulsantiUCR;
   {$EndIf}
   {$IfDef LANG_ITA}
     rsPulsantiITA;
   {$EndIf}
 
ma devo trovare modo di creare un riferimento per Resource string
del tipo aLingua := rsPulsantiITA e poter usare
 
aLingua.EdUtemte.Text := User;
 
ma qui mi fermo, non so se sia possibile.

 usare una unit con resoursestring e' ancora una buona idea ? 
 
L'idea di usare una unit con le stringe sotto resourcestring ha degli ovvi (ma non per tutti) pro e contro.
 
Ma a prescindere da dove le metti, comncia a vedere dalla guida in linea a cosa serve il RESOURCE DLL WIZARD e scoprirai il magico mondo dei file di risorse e del mitico resource compiler.
Se poi non ti basta vedi anche questo che non è agratis:
 
http://www.sisulizer.com
 
 
Altro che IF come se piovesse.....
 
 
 
 
A.

>
hai ragione non si possono avere n mila If
 
creare un file .rc e compilare, sicuramente sara' migliore
ma meno rapido, inoltre nelle opzioni Progetto va selezionata
la lingua aggiuntiva.
 
opto per una classe, in una unit separata che e' piu' flessibile sia del 
resourcestring che del .rc
 
una prima idea e' qualcosa di simile;
quando creo il Form richiesto carico anche i messaggi dal Db realtivi
a quella sezione (diciamo un 150-200 stringhe per i form complessi)
 
type TLingue = class
 
   private
 
   public
     procedure CaricaMessaggi(sLingua: string; var sMsg: TStringList);
end;
 
l'idea del resourcestring non e' adatta in questa situazione.

 l'idea del resourcestring non e' adatta in questa situazione.
 
Io finora non ho visto "situazioni".
Ho visto solo un "faccio cosi?" seguito da un "faccio cosi!".
Contento tu....
 
 
A.