I caratteri non-ascii sono dolorosi in Visual Studio. Sebbene il nostro team non sia composto da persone che utilizzano impostazioni locali diverse, abbiamo occasionalmente bisogno di caratteri provenienti da diverse località e utilizziamo diversi altri compilatori che si comportano diversamente. Quindi ecco cosa abbiamo trovato funziona:
- Visual Studio riconosce il marchio di ordine byte UTF-8. È possibile modificare la codifica in "File / Opzioni di salvataggio avanzate" per i singoli file e di default da qualche parte in Opzioni. Se scegli Unicode (UTF-8 con firma) - Codepage 65001 , verrà sempre visualizzato lo stesso per tutti i membri del team.
- I caratteri Unicode nei letterali wide (L "...") sono correttamente codificati nei sorgenti UTF-8.
- I caratteri Unicode in letterali stretti ("...") sono ricodificati in set caratteri locali . Senza possibilità di selezionare quale vuoi ricodificare. Quindi sarà ricodificato in modo diverso quando diverse persone lo compilano. Assolutamente inutile; anche se non sono sicuro che non sia ancora possibile in VS2010, usiamo VS2008 e lì non è possibile.
- Le sequenze di escape sono mai ricodificate.
Quindi usa UTF-8 per far sì che i file vengano visualizzati correttamente per tutti, ma in stringhe strette devi sempre usare gli escape comunque. Puoi usare i caratteri direttamente in letterali di grandi dimensioni, ma se hai mai bisogno di eseguire il porting del codice, usando le sequenze di escape preferirai comunque. Non è leggibile, sì. Puoi avere il testo attuale nel commento, verrà visualizzato correttamente se è UTF-8.
Hm, che era in particolare per la codifica , che so è possibile di worm in Visual Studio. Per le altre cose, nei commenti si usa solo una lingua comune, di solito l'inglese. E nell'output utente devi usare std::locale
.
Per quanto riguarda la localizzazione effettiva, il sistema risorse per impostazione predefinita fornito da Microsoft toolchain è notoriamente difficile da mantenere . Raccomando vivamente di utilizzare il sistema, che contiene inglese letterali direttamente nel codice e cataloghi di traduzione dall'inglese all'altra lingua. Ciò garantisce che non ti dimentichi di aggiornare le traduzioni quando cambia la fonte.
Utilizza Gettext , che ora può essere letto da Boost.Locale o framework simile (ad es. Qt ha un sistema simile integrato (e KDE lo sostituisce comunque con Gettext)).
Boost.Locale fornisce anche alcune funzioni che utilizzano std::locale
più conveniente. Ampliata la funzione tipicamente estesa di printf-like estesa a supportare internamente i formati std::locale
number / currency / date ...