2013-07-11 18 views
7

Ho creato un pannello personalizzato per Inno-Setup e desidero l'internazionalizzazione per questo.Inno setup i18n per pannello personalizzato

Posso usare i file * .isl per aggiungere le chiavi di traduzione o devo usare [custommessages]? E come posso accedere ai tasti nella sezione [codice].

Non degli esempi di inno-setup che utilizzano l'i18n.

thx Tom

risposta

9

1. Posso modificare i file di localizzazione ISL?

È su di voi, se modificate i file standard * .isl, o create i vostri modificati. Di sicuro tieni presente che, se modifichi quelli standard, potrebbero essere aggiornati con una nuova versione di Inno Setup che installi. Questo potrebbe essere il motivo per cui molte persone suggeriscono di creare solo voci nella sezione [CustomMessages].

Tuttavia, è possibile creare un file di lingua separato che verrà unito ad ogni aggiornamento di Inno Setup o, ancora meglio, come suggerisce Miral, specificare i messaggi personalizzati nel proprio file * .isl e quindi nello MessagesFile parametro della sezione [Languages] specificare che file alla fine del comma elenco dei file separati:

[Languages] 
Name: "en"; MessagesFile: "compiler:Default.isl,compiler:YourEnMessages.isl" 
Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl,compiler:YourNlMessages.isl" 

Come gli stati di riferimento per il parametro MessagesFile:

Quando vengono specificati più file, il vengono letti nell'ordine in cui sono specificati , quindi l'ultimo file di messaggio sovrascrive qualsiasi messaggio nei file precedenti di .

Quindi, se si fa solo file * .isl (s) con solo [CustomMessages] sezione e specificare nello script modo sopra, non sarà possibile rompere nulla e si otterrà il file della lingua riutilizzabile separato (s). Struttura di tale file .isl personalizzato * potrebbe apparire eaxctly come la sezione [CustomMessages]:

[CustomMessages] 
SomeCustomKey=Some custom value 
... 

Rendere il proprio file di lingua potrebbe essere migliore per voi, se avete intenzione di riutilizzare quei messaggi personalizzati in molte configurazioni.

2. Come posso accedere ai messaggi personalizzati dalla sezione [Codice]?

Utilizzando la funzione CustomMessage. Ad esempio in questo modo:

... 

[CustomMessages] 
; the following key value pair can be moved to the *.isl file into the same 
; named file section, if needed; as a downside of doing that you'll need to 
; keep track of changes if you update Inno Setup itself 
SomeCustomKey=Some custom value 

[Code] 
procedure InitializeWizard; 
var 
    S: string; 
begin 
    S := CustomMessage('SomeCustomKey'); 
    MsgBox(S, mbInformation, MB_OK); 
end; 
+1

I suggerire di non modificare mai direttamente i file '.isl' standard. Invece, puoi creare un nuovo file '.isl' che contiene solo quei messaggi che desideri modificare o aggiungere. È quindi possibile utilizzare entrambi i file #includendo il file standard da quello personalizzato o specificando entrambi i file (con l'ultimo personalizzato) nel parametro ['MessagesFile'] (http://jrsoftware.org/ishelp/topic_languagessection htm). – Miral

+0

@Miral, buon punto! – TLama

+1

È stato davvero utile, l'unica cosa che manca è come usare i messaggi personalizzati nel codice quando questi messaggi hanno parametri (ad es.% 1, ...,% 9). –

4

La risposta fornita da @TLama è davvero utile. Ho dovuto affrontare un problema aggiuntivo, relativo all'uso dei messaggi personalizzati con i parametri.

Per definire messaggi personalizzati:

I messaggi possono avere argomenti, dal 1% fino al 9%. Puoi riorganizzare l'ordine degli argomenti (ad esempio, spostare% 2 prima di% 1) e anche duplicare gli argomenti, se necessario (ad esempio "% 1 ...% 1% 2").Sui messaggi con argomenti, utilizza due caratteri "%" consecutivi per incorporare un singolo "%". "% n" crea un'interruzione di riga.

Ad esempio:

[CustomMessages] 
... 
NameAndVersion=%1 version %2 
... 

E poi, di utilizzare in sezione di codice, è sufficiente utilizzare la funzione FmtMessage insieme alla funzione CustomMessage:

Esempio:

S := FmtMessage(CustomMessage('NameAndVersion'), ['My Program', '1.0']); 
// S = 'My Program version 1.0' 
+0

Molto bella aggiunta! – TLama

Problemi correlati