Domanda

Ho bisogno di localizzare i messaggi di errore da parte del compilatore.Così com'è, tutti i messaggi di errore sono diffuse in tutto il codice sorgente di valori letterali stringa in inglese.Vogliamo tradurre questi messaggi di errore in tedesco.Quale sarebbe il modo migliore per avvicinarsi a questo?Lasciare i valori letterali stringa così com'è, e la mappa char* in un'altra lingua dentro la segnalazione di routine, o sostituire l'inglese letterali con una descrizione macro, ad esempio. ERR_UNDEFINED_LABEL_NAME e hanno questa mappa per la stringa corretta in fase di compilazione?

Come è una cosa avvicinato in progetti simili?

È stato utile?

Soluzione

In Windows, in genere questo viene fatto sostituendo la stringa con costanti intere, e quindi utilizzando LoadString o simili per ottenere da loro una risorsa in una DLL o EXE. Quindi è possibile avere più DLL di lingua e di un singolo file EXE.

Su sistemi Unixy credo che l'approccio più tipico è gettext . Il risultato finale è simile, ma invece di definire costanti intere, si avvolgere le stringhe letterali in inglese in una macro, e sarà applicare un po 'di magia a trasformarla in una stringa localizzata.

Altri suggerimenti

Il modo più flessibile sarebbe per il compilatore per leggere i messaggi tradotti dai cataloghi dei messaggi, con la scelta della lingua che viene fatta in base alle impostazioni internazionali. Ciò richiederebbe la modifica al compilatore di usare qualche strumento come gettext .

Solo un pensiero rapido ...

Potrebbe sovraccaricare il vostro errore di reporting di routine? Diciamo che si sta utilizzando

printf("MESSAGE")

Si potrebbe sovraccaricare in modo che "MESSAGE" è l'ingresso, e si hash al messaggio corrispondente in lingua tedesca.

Potrebbe questo lavoro?

Si potrebbe utilizzare il mio CMSG () e CFMsg () wrapper intorno la LoadString () API. Essi rendono la vita più facile per caricare e formattare le stringhe tirato fuori le risorse.

E, naturalmente, appTranslator è il tuo migliore amico di tradurre le risorse; -)

. Disclaimer: io sono l'autore di appTranslator

Su Windows è possibile utilizzare il compilatore di risorse e WinAPI carico di funzioni per le stringhe localizzate e di altre risorse. FindResource() e specializzato derivati come LoadString() per caricare automaticamente il linguaggio specifico delle risorse in base alle impostazioni internazionali correnti. FindResourceEx() consente anche di specificare manualmente la versione di lingua la risorsa che si desidera recuperare.

Per attivare questo nel vostro programma, è necessario modificare il vostro programma per compilare le stringhe in un file di risorse(.rc) e utilizzare LoadString() per recuperare le stringhe in fase di runtime invece di utilizzare una stringa letterale.All'interno del file di risorse è quindi l'installazione di più versioni di lingua di STRINGTABLEs si utilizza, con il LINGUA modificatore.Il multilingue risorse vengono poi caricati in base alla ricerca di ordine descritto qui su MSDN: Le Risorse Di Più Lingue

Nota:Se non hai motivo di bisogno di un unico file eseguibile, o stanno facendo qualcosa di simile utilizzando un utente di lingua selezionata dall'applicazione, ti dà più controllo e meno confusione per la compilazione di ogni lingua in una stanza separata dll e caricare in modo dinamico, piuttosto che avere un unico grande file di risorse e cercando di cambiare dinamicamente le impostazioni internazionali.

Ecco un esempio di un linguaggio più StringTable file di risorse (vale a dire:le stringhe.rc):

#define IDS_HELLOSTR     361

STRINGTABLE
  LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
  BEGIN
     IDS_HELLO, "Hello!"
  END

STRINGTABLE
   LANG_FRENCH, SUBLANG_NEUTRAL
   BEGIN
      IDS_HELLO, "Bonjour!"
   END
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top