Ответ 1
Вы можете использовать функцию getdefaultlocale
в модуле locale
. Он возвращает код языка и кодировку стандартного языкового стандарта системы в кортеже:
>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
Есть ли универсальный метод определения языка ОС по умолчанию? (независимо от того, какая ОС работает с кодом)
import os
os.getenv('LANG')
Вышеприведенный код работает под Linux, работает ли он под другой ОС?
Вы можете использовать функцию getdefaultlocale
в модуле locale
. Он возвращает код языка и кодировку стандартного языкового стандарта системы в кортеже:
>>> import locale
>>> locale.getdefaultlocale()
('en_GB', 'cp1252')
Пожалуйста, вы не можете доверять языковой модуль для обнаружения языка ОС!!!
Тот, кто использовал эту информацию без проверки ранее, будет иметь провал программы во всем мире, с теми пользователями, язык ОС которых не совпадает с языком региона.
Они разные, (1) язык ОС и (2) информация о локализации.
MSDN заявляет, что "идентификатор локали отражает локальные соглашения и язык для определенного географического региона". http://msdn.microsoft.com/en-us/library/8w60z792.aspx
и документы python,
"Механизм локализации POSIX позволяет программистам решать определенные культурные проблемы в приложении, не требуя от программиста знать всю специфику каждой страны, где выполняется программное обеспечение". https://docs.python.org/2/library/locale.html
Мой Windows7 находится на английском языке. Но я живу в Испании, поэтому... мой язык - это "es_ES".. не "en_EN"
Я не знаю кросс-платформенного способа, для Linux у вас это есть. Для окон я дам вам:
Другое сообщение рассказывает об использовании win32 GetSystemDefaultUILanguage, Узнайте, какие окна языка были установлены как.
Но если вы хотите получить идентификатор языка Windows, я рекомендую вместо этого использовать GetUserDefaultUILanguage(), потому что, как указано в MSDN, будет искать рекурсивно, пока не достигнет языка:
"Возвращает идентификатор языка для пользовательского интерфейса пользователя для текущего пользователя. Если текущий пользователь не установил язык, GetUserDefaultUILanguage возвращает предпочтительный языковой набор для системы. Если для системы не установлен предпочтительный язык, тогда выводится язык интерфейса пользователя по умолчанию (также известный как" язык установки "). Дополнительные сведения об пользовательском интерфейсе пользователя см. в разделе" Управление языками пользовательского интерфейса".
код:
>>> 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