PDA

Visualizza la versione completa : [DELPHI] Creare un'applicazione VCL multilingua


denis76
10-09-2014, 09:35
Sto cercando di introdurre una seconda lingua in un programma Delphi vcl, cosa non semplice come in altri ambienti di sviluppo.
Per la traduzione delle labels dei componenti visuali è possibile scrivere una funzione da invocare at OnCreate allo scopo di inserire i testi corretti?

alka
10-09-2014, 10:37
Creare applicazioni multilingua in Delphi è semplicissimo, ed esistono miriadi di possibilità, usando tool incorporati oppure ricorrendo a componenti generalmente disponibili.

Guarda questa ricerca Google (https://www.google.it/search?q=delphi+multilanguage) per un approfondimento.

Ciao! :ciauz:

denis76
10-09-2014, 10:47
Il fatto è che quei componenti sono a pagamento ed alcuni costano davvero molto.

Per vlc Delphi include un sistema di traduzione interna che, una volta abilitato, mi ha dato subito un memory leak rilevato dal modulo Eureka Log (al ché mi sono molto spaventato!), oltre a fare copie dei vari dfm per ogni lingua preoccupandomi non poco.

Di certo è che la via semplice è quella di mollare vcl e passare a firemonkey, cosa non immediata.

alka
10-09-2014, 17:18
Il fatto è che quei componenti sono a pagamento ed alcuni costano davvero molto.

Tieni conto che anche lavorarci due giorni ha il suo costo. :)
Comunque queste sono ovviamente scelte personali, per cui sorvoliamo.



Per vlc Delphi include un sistema di traduzione interna che, una volta abilitato, mi ha dato subito un memory leak rilevato dal modulo Eureka Log (al ché mi sono molto spaventato!), oltre a fare copie dei vari dfm per ogni lingua preoccupandomi non poco.

Bisogna vedere in quale frangente si verifica il memory leak, e se è sistematico o solo all'uscita dal programma, ad esempio.



Di certo è che la via semplice è quella di mollare vcl e passare a firemonkey, cosa non immediata.
In base alle specifiche che hai riportato, non sarebbe sufficiente fare un semplice file INI da cui caricare le stringhe nella lingua desiderata? Facendo un file per lingua, o un file per "modulo logico" della tua applicazione, non so...
Qual è il problema di questo approccio?

Ciao! :ciauz:

denis76
10-09-2014, 17:51
Era quello che pensavo di fare.
Per i componenti visuali è possibile scrivere una funzione che venga incovata ad onCreate, che controlli tutti i componenti attivi e traduca le labels?

alka
10-09-2014, 18:19
Per i componenti visuali è possibile scrivere una funzione che venga incovata ad onCreate, che controlli tutti i componenti attivi e traduca le labels?

Nella OnCreate puoi fare tutto quello che vuoi. Cosa non ti convince?

denis76
10-09-2014, 20:14
Cercavo una funzione già fatta che, all'evento onCreate, cercasse tutti i componenti visuali (pulsanti, label, descrizioni di goupbox) contenuti nel form e per ogn'uno di esso verificasse se c'è la traduzione in un elenco da fornirgli.

alka
12-09-2014, 10:34
Cercavo una funzione già fatta che, all'evento onCreate, cercasse tutti i componenti visuali (pulsanti, label, descrizioni di goupbox) contenuti nel form e per ogn'uno di esso verificasse se c'è la traduzione in un elenco da fornirgli.

Una funzione già fatta e pronta all'uso per fare esattamente questa cosa non c'è, ma usando l'RTTI (RunTime Type Information), non è difficile da creare, magari che agisca su un generico TComponent e su tutti quelli di cui è l'owner, così puoi passargli un Form, un Frame o qualsiasi altra cosa.

Nel codice dovresti usare le funzioni dell'RTTI per esaminare le proprietà possedute da ciascun componente e, se appartengono ai tipi che vuoi "localizzare", estrarne il valore e usare il nome del componente e della proprietà per andare a ricercare in un file INI le corrispondenti traduzioni, se presenti.

Prova ad abbozzare il codice, poi approfondiamo se ci sono problemi.

Ciao! :ciauz:

denis76
12-09-2014, 10:43
Sto preparando la funzione che elenchi tutte le labels di un form e vada a vedere se c'è una traduzione.
Certo è che su altri ambienti di sviluppo, anche gratuiti, per tradurre basta fare 2 - 3 click e tutto funziona.

alka
12-09-2014, 11:16
Certo è che su altri ambienti di sviluppo, anche gratuiti, per tradurre basta fare 2 - 3 click e tutto funziona.

Quali sono? Io non ne conosco. :|

Loading