2010-08-06 37 views

Trả lời

17

Bạn có thể sử dụng getdefaultlocale function in the locale module. Nó trả về mã ngôn ngữ và mã hóa của miền địa phương mặc định hệ thống trong một tuple:

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

Cảm ơn! Hệ điều hành có độc lập không? – banx

+1

@bank - Vâng, tôi tin như vậy. Hoạt động trên Windows và tài liệu hướng dẫn mô tả cách hoạt động của nó trong môi trường POSIX vì vậy bạn sẽ ổn. –

+1

hoạt động với tôi trên MS Windows và FreeBSD. –

15

Xin vui lòng, bạn không thể tin tưởng mô-đun locale để phát hiện ngôn ngữ OS !!!

Bất kỳ ai đã sử dụng thông tin này mà không xác minh trước, sẽ có chương trình không hoạt động trên toàn thế giới, với những người dùng có ngôn ngữ hệ điều hành không giống ngôn ngữ vùng.

Chúng khác nhau, (1) ngôn ngữ hệ điều hành và (2) thông tin bản địa hóa.

MSDN nói rằng "Một ID locale phản ánh ước địa phương và ngôn ngữ cho một khu vực địa lý cụ thể.", http://msdn.microsoft.com/en-us/library/8w60z792.aspx

và tài liệu python,

"Cơ chế locale POSIX cho phép các lập trình viên để đối phó với một số văn hóa các vấn đề trong một ứng dụng, mà không yêu cầu người lập trình biết tất cả các chi tiết cụ thể của mỗi quốc gia nơi phần mềm được thực thi. " https://docs.python.org/2/library/locale.html

Windows7 của tôi bằng tiếng Anh. Nhưng tôi sống ở Tây Ban Nha nên ... miền địa phương của tôi là 'es_ES' .. không 'en_EN'

Tôi không biết một cách đa nền tảng, cho Linux bạn đã có nó. Đối với cửa sổ, tôi sẽ cung cấp cho bạn:

Bài đăng khác nói về việc sử dụng win32 GetSystemDefaultUILanguage, Find out the language windows was installed as.

Nhưng nếu bạn muốn nhận được nhận dạng cửa sổ ngôn ngữ, tôi khuyên bạn nên sử dụng thay vì GetUserDefaultUILanguage(), bởi vì như đã nêu en MSDN, sẽ tìm kiếm một cách đệ quy cho đến khi đạt ngôn ngữ:

"Trả về nhận dạng ngôn ngữ cho ngôn ngữ giao diện người dùng cho người dùng hiện tại.Nếu người dùng hiện tại chưa đặt ngôn ngữ, GetUserDefaultUILanguage sẽ trả lại bộ ngôn ngữ ưa thích cho hệ thống.Nếu không có ngôn ngữ ưa thích nào được đặt cho hệ thống, thì ngôn ngữ giao diện người dùng mặc định của hệ thống (còn được gọi là " cài đặt ngôn ngữ ") được trả về. Để biết thêm thông tin về ngôn ngữ giao diện người dùng, hãy xem Quản lý ngôn ngữ giao diện người dùng."

Code:

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

Câu trả lời hay hơn :) –

Các vấn đề liên quan