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.