2010-08-06 29 views

Respuesta

17

Puede usar el getdefaultlocale function in the locale module. Devuelve el código del idioma y la codificación de la localización por defecto del sistema en una tupla:

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

Gracias! ¿Es OS independiente? – banx

+1

@bank - Sí, eso creo. Funciona en Windows y la documentación describe cómo funciona en entornos POSIX, por lo que debería estar bien. –

+1

funciona para mí en MS Windows y FreeBSD. –

15

Por favor, no se puede confiar módulo de configuración regional para detectar el idioma del sistema operativo !!!

Quien haya utilizado esta información sin haber verificado antes, tendrá un programa que falla en todo el mundo, con aquellos usuarios cuyo idioma del sistema operativo no es el mismo que el de la región.

Son diferentes, (1) el idioma del sistema operativo y (2) la información de localización.

MSDN afirma que "Un identificador de configuración regional refleja las convenciones locales y el lenguaje para una región geográfica en particular.", http://msdn.microsoft.com/en-us/library/8w60z792.aspx

y documentación de Python,

"El mecanismo de localización POSIX permite a los programadores para hacer frente a cierta culturales problemas en una aplicación, sin requerir que el programador conozca todos los detalles de cada país donde se ejecuta el software ". https://docs.python.org/2/library/locale.html

Mi Windows7 está en inglés. Pero estoy viviendo en España así que ... mi localidad es 'es_ES' ... no 'en_EN'

No conozco una forma de plataforma cruzada, para linux lo tienes. Para Windows, le daré:

Otra publicación habla sobre el uso de win32 GetSystemDefaultUILanguage, Find out the language windows was installed as.

Pero si desea obtener el identificador de idioma de Windows, se recomienda utilizar el lugar GetUserDefaultUILanguage(), porque como se dijo en MSDN, buscará recursivamente hasta que alcanza el idioma:

"Devuelve el identificador de idioma para el el idioma de usuario de la interfaz de usuario para el usuario actual. Si el usuario actual no ha configurado un idioma, GetUserDefaultUILanguage devuelve el idioma preferido para el sistema. Si no hay un idioma preferido configurado para el sistema, el idioma de la interfaz de usuario predeterminada del sistema (también conocido como " se devuelve el idioma de instalación.) Para obtener más información sobre el idioma de la IU del usuario, consulte Administración del idioma de la interfaz del usuario.

Código:

>>> 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

mejor respuesta :) –

Cuestiones relacionadas