6.26.1 Ambiente, dettagli, suggerimenti, trucchi ed avvertimenti

Lo standard C definisce la localizzazione come una proprietà del programma che può essere relativamente difficile da cambiare. Oltre a questo, alcune implementazioni vengono rovinate in modo tale che freqenti cambiamenti della localizzazione possono causare dei core dump. Tutto questo rende la localizzazione qualcosa di particolarmente complicato per poter essere usato correttamente.

Inizialmente , quando un programma viene avviato, la localizzazione corrisponde alla localizzazione "C", indipendentemente da quella definita dall'utente. Il programma deve esplicitamente dire che vuole utilizzare le localizzazioni impostate dall'utente, attraverso una chiamata a setlocale(LC_ALL, '').

È generalmente una cattiva idea chiamare setlocale() in qualche routine di libreria, poiché l'effetto collaterale sarebbe quello di influenzare l'intero programma. Salvare e ripristinare la localizzazione è un male quasi identico, in quanto è dispendioso ed influenza altri thread che potrebbero essere mandati in esecuzione prima che le impostazioni vengano ripristinate.

Se, usando un modulo di codifica per uso generale, avete bisogno di una versione di localizzazione indipendente da una operazione che è stata interessata dalla stessa localizzazione (come string.lower(), o certi formati usati con time.strftime()), dovreste avere trovato un modo per fare questo senza usare le routine delle libreria standard. Sarebbe ancora meglio se vi convinceste che usare le localizzazioni impostate è giusto. Solo come ultima risorsa dovreste documentare che il vostro modulo non è compatibile con le impostazioni di localizzazione non "C".

La funzioni di conversione delle maiuscole nel modulo string vengono influenzate dalle impostazioni della localizzazione. Quando una chiamata alla funzione setlocale() cambia le impostazioni di LC_CTYPE, le variabili string.lowercase, string.uppercase e string.letters vengono ricalcolate. Notate che questo codice che usa queste variabili attraverso `from ... import ...', per esempio from string import letters, non viene influenzato dalle chiamate successive a setlocale().

L'unico modo per utilizzare operazioni numeriche secondo la localizzazione è quello di utilizzare le funzioni speciali definite da questo modulo: atof(), atoi(), format(), str().

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.