Exemplo n.º 1
0
    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('_', '-')]
Exemplo n.º 2
0
    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('_','-')]
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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()]
Exemplo n.º 5
0
    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()]
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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