2010-08-06 33 views

risposta

17

È possibile utilizzare lo getdefaultlocale function in the locale module. Esso restituisce il codice della lingua e la codifica della locale predefinita di sistema in una tupla:

>>> import locale 
>>> locale.getdefaultlocale() 
('en_GB', 'cp1252') 
+0

Grazie! È indipendente dal sistema operativo? – banx

+1

@bank - Sì, lo credo. Funziona su Windows e la documentazione descrive come funziona in ambienti POSIX quindi dovresti stare bene. –

+1

funziona per me su MS Windows e FreeBSD. –

15

prega, non ci si può fidare modulo locale per rilevare la lingua del sistema operativo !!!

Chiunque abbia utilizzato queste informazioni senza verificarle prima, avrà un programma in errore in tutto il mondo, con quegli utenti la cui lingua del sistema operativo non è la stessa della lingua della regione.

Sono diversi, (1) la lingua del sistema operativo e (2) le informazioni di localizzazione.

MSDN afferma che "Un ID impostazioni riflette le convenzioni locali e la lingua per una particolare regione geografica.", http://msdn.microsoft.com/en-us/library/8w60z792.aspx

e documenti pitone,

"Il meccanismo di localizzazione POSIX consente ai programmatori di affrontare determinati culturale problemi in un'applicazione, senza richiedere al programmatore di conoscere tutte le specifiche di ogni paese in cui viene eseguito il software. " https://docs.python.org/2/library/locale.html

Il mio Windows7 è in inglese. Ma io vivo in Spagna quindi ... il mio locale è 'es_ES' .. non 'en_EN'

Non conosco un modo multipiattaforma, per Linux ce l'hai. Per Windows ti darò:

Un altro post parla dell'utilizzo di win32 GetSystemDefaultUILanguage, Find out the language windows was installed as.

Ma se si vuole ottenere l'identificatore finestre lingua, vi consiglio di usare al posto GetUserDefaultUILanguage(), perché come detto en MSDN, cercherà in modo ricorsivo fino a quando raggiunge la lingua:

"Restituisce l'identificatore di lingua per il lingua dell'interfaccia utente dell'utente per l'utente corrente.Se l'utente corrente non ha impostato una lingua, GetUserDefaultUILanguage restituisce la lingua preferita impostata per il sistema.Se non esiste una lingua preferita impostata per il sistema, quindi la lingua dell'interfaccia utente predefinita del sistema (detta anche " Installa lingua ") Viene restituito. Per ulteriori informazioni sulla lingua dell'interfaccia utente, vedere Gestione dell'interfaccia utente."

Codice:

>>> import locale 
>>> locale.getdefaultlocale() 
('es_ES', 'cp1252')   # <------------- Bad! I'm on english OS. 

>>> import ctypes 
>>> windll = ctypes.windll.kernel32 
>>> windll.GetUserDefaultUILanguage() 
1033 
>>> locale.windows_locale[ windll.GetUserDefaultUILanguage() ] 
'en_US'   # <----------- Good work 
+2

risposta migliore :) –

Problemi correlati