Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247

    Problema localizzazione costanti

    Sto realizzando un programma con un'interfaccia multilingua.

    L'unico problema è che non trovo un modo di tradurre "dinamicamente" le costanti presenti nell'unità Consts.pas

    Mi spiego meglio: posso alterare le strighe da codice, ma non in runtime, quando l'utente cambia la lingua.

    Se provo ad eliminare le costanti che mi interessano dall'unità Consts.pas e le definisco come variabili in un'altra unità, Delphi si rifiuta addirittura di compilare...

    Il mio sistema di localizzazione lavora con una semplice funzione

    codice:
    function LGS(Section : string; Identifier : string) : string;
    begin
      Result := StringReplace(LangFile.ReadString(Section,Identifier,'$'+Identifier+'!'),'%r',#13#10,[rfReplaceAll]);
    end;
    che serve a prendere le stringhe dal file .ini corrispondente alla lingua dell'utente.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da firefox88
    L'unico problema è che non trovo un modo di tradurre "dinamicamente" le costanti presenti nell'unità Consts.pas
    Trattandosi di costanti, ovviamente non sono in alcun modo modificabili.

    Originariamente inviato da firefox88
    Se provo ad eliminare le costanti che mi interessano dall'unità Consts.pas e le definisco come variabili in un'altra unità, Delphi si rifiuta addirittura di compilare...
    Mai, mai, mai, e se non fosse ancora chiaro, mai modificare i file della libreria VCL, soprattutto se non si è perfettamente consci di ciò che si sta facendo.

    Inoltre, per utilizzare una versione modificata del file Consts.pas, è sufficiente farne una copia nella cartella del progetto e aggiungerla ai file che costituiscono il proprio programma.

    Ad ogni modo, non vedo il problema nella localizzazione delle costanti: proprio perché sono costanti, basta non farne uso adottando un altro sistema per generare le stringhe nella lingua impostata a runtime.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Mai, mai, mai, e se non fosse ancora chiaro, mai modificare i file della libreria VCL, soprattutto se non si è perfettamente consci di ciò che si sta facendo.
    Io ho modificato una copia di Consts.pas presente nel progetto, non ho modificato le VCL.


    Ad ogni modo, non vedo il problema nella localizzazione delle costanti: proprio perché sono costanti, basta non farne uso adottando un altro sistema per generare le stringhe nella lingua impostata a runtime.
    Non so come fare con i MessageDlg, le cui stringhe predefinite ("OK", "Annulla", "Sì", "No") vengono prese direttamente da Consts.pas, e quindi non sono localizzabili... E non mi va di farmi da zero le form per le finestre di dialogo, ci dev'essere un altro sistema

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da firefox88
    Io ho modificato una copia di Consts.pas presente nel progetto, non ho modificato le VCL.
    Da come avevi scritto, non sembrava.

    Originariamente inviato da firefox88
    Non so come fare con i MessageDlg, le cui stringhe predefinite ("OK", "Annulla", "Sì", "No") vengono prese direttamente da Consts.pas, e quindi non sono localizzabili... E non mi va di farmi da zero le form per le finestre di dialogo, ci dev'essere un altro sistema
    Sì, non usare la funzione MessageDlg, ma la casella di messaggio nativa di Windows con Application.MessageBox, che usa la lingua del sistema operativo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Originariamente inviato da alka
    Da come avevi scritto, non sembrava.
    Mi sono espresso male... Ad ogni modo ho imparato la lezione: non si modificano le librerie VCL.


    Sì, non usare la funzione MessageDlg, ma la casella di messaggio nativa di Windows con Application.MessageBox, che usa la lingua del sistema operativo.
    OK, mi rassegno ad utilizzare quella, anche se esteticamente non mi piace molto (è grande e si posiziona sempre al centro dello schermo)... Pazienza!

    Grazie ancora,
    Ciao

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da firefox88
    OK, mi rassegno ad utilizzare quella, anche se esteticamente non mi piace molto (è grande e si posiziona sempre al centro dello schermo)... Pazienza!
    Sì, la MessageDlg è stata introdotta per disporre di una finestra maggiormente personalizzabile. Come ultima alternativa, potresti creare una copia della unit Dialogs (che definisce la MessageBox personalizzata) e modificarla a piacimento in modo che prelevi le stringhe da dove preferisci o stravolgendo completamente il codice.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.