def preferredLanguages(self): if platform == 'darwin': return NSLocale.preferredLanguages() or None elif platform == 'win32': def wszarray_to_list(array): offset = 0 while offset < len(array): sz = ctypes.wstring_at( ctypes.addressof(array) + offset * 2) if sz: yield sz offset += len(sz) + 1 else: break num = ctypes.c_ulong() size = ctypes.c_ulong(0) if (GetUserPreferredUILanguages( MUI_LANGUAGE_NAME, ctypes.byref(num), None, ctypes.byref(size)) and size.value): buf = ctypes.create_unicode_buffer(size.value) if GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, ctypes.byref(num), ctypes.byref(buf), ctypes.byref(size)): return wszarray_to_list(buf) return None else: # POSIX lang = locale.getlocale()[0] return lang and [lang.replace('_', '-')]
def preferredLanguages(self): if platform=='darwin': return NSLocale.preferredLanguages() or None elif platform=='win32': def wszarray_to_list(array): offset = 0 while offset < len(array): sz = ctypes.wstring_at(ctypes.addressof(array) + offset*2) if sz: yield sz offset += len(sz)+1 else: break num = ctypes.c_ulong() size = ctypes.c_ulong(0) if (GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, ctypes.byref(num), None, ctypes.byref(size)) and size.value): buf = ctypes.create_unicode_buffer(size.value) if GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, ctypes.byref(num), ctypes.byref(buf), ctypes.byref(size)): return wszarray_to_list(buf) return None else: # POSIX lang = locale.getlocale()[0] return lang and [lang.replace('_','-')]
def __init__(self): if platform.system() == "Darwin": self.current_language = list( NSLocale.preferredLanguages())[0][:-3].lower() else: self.current_language = locale.getdefaultlocale()[0][:-3].lower() self.check_availability()
def preferred(self): if platform == "darwin": from Foundation import NSLocale return [x.lower() for x in NSLocale.preferredLanguages()] or None elif platform == "win32": def wszarray_to_list(array): offset = 0 while offset < len(array): sz = ctypes.wstring_at(ctypes.addressof(array) + offset * 2) if sz: yield sz offset += len(sz) + 1 else: break # https://msdn.microsoft.com/en-us/library/windows/desktop/dd318124%28v=vs.85%29.aspx import ctypes MUI_LANGUAGE_ID = 4 MUI_LANGUAGE_NAME = 8 GetUserPreferredUILanguages = ctypes.windll.kernel32.GetUserPreferredUILanguages num = ctypes.c_ulong() size = ctypes.c_ulong(0) if ( GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, ctypes.byref(num), None, ctypes.byref(size)) and size.value ): buf = ctypes.create_unicode_buffer(size.value) if GetUserPreferredUILanguages( MUI_LANGUAGE_NAME, ctypes.byref(num), ctypes.byref(buf), ctypes.byref(size) ): return [x.lower() for x in wszarray_to_list(buf)] return None else: # POSIX import locale lang = locale.getdefaultlocale()[0] return lang and [lang.replace("_", "-").lower()]
def preferred(self): if platform == 'darwin': from Foundation import NSLocale return [x.lower() for x in NSLocale.preferredLanguages()] or None elif platform == 'win32': def wszarray_to_list(array): offset = 0 while offset < len(array): sz = ctypes.wstring_at( ctypes.addressof(array) + offset * 2) if sz: yield sz offset += len(sz) + 1 else: break # https://msdn.microsoft.com/en-us/library/windows/desktop/dd318124%28v=vs.85%29.aspx import ctypes MUI_LANGUAGE_ID = 4 MUI_LANGUAGE_NAME = 8 GetUserPreferredUILanguages = ctypes.windll.kernel32.GetUserPreferredUILanguages num = ctypes.c_ulong() size = ctypes.c_ulong(0) if (GetUserPreferredUILanguages( MUI_LANGUAGE_NAME, ctypes.byref(num), None, ctypes.byref(size)) and size.value): buf = ctypes.create_unicode_buffer(size.value) if GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, ctypes.byref(num), ctypes.byref(buf), ctypes.byref(size)): return [x.lower() for x in wszarray_to_list(buf)] return None else: # POSIX import locale lang = locale.getdefaultlocale()[0] return lang and [lang.replace('_', '-').lower()]
def getLanguage(config): """ If the language has been specified explicitly in the config, return it. Otherwise look it up via NSLocale on OS X. Failing that, return "en" @param config: The configuration object to examine @type config: ConfigDict @return: The two-letter language code -- on OS X the supported ones are: de, en, es, fr, it, ja, ko, nl @rtype: C{str} """ if config.Localization.Language: return config.Localization.Language try: language = NSLocale.preferredLanguages()[0] except: language = "en" return language
def getLanguage(config): """ If the language has been specified explicitly in the config, return it. Otherwise look it up via NSLocale on OS X. Failing that, return "en" @param config: The configuration object to examine @type config: ConfigDict @return: The language code -- on OS X the supported ones are: de, en, es, fr, it, ja, ko, nl, zh_CN, zh_TW @rtype: C{str} """ if config.Localization.Language: return config.Localization.Language try: language = NSLocale.preferredLanguages()[0] language = _remapLanguageCode(language) except: language = "en" return language