示例#1
0
def getlanguage(code):
    """This returns a language class.

    @param code: The ISO 639 language code
    """
    if code:
        code = code.replace("-", "_").replace("@", "_").lower()
    try:
        try:
            if code is None:
                raise ImportError("Can't determine language code")
            exec("from translate.lang import %s" % code)
            exec("langclass = %s.%s" % (code, code))
            return langclass(code)
        except SyntaxError, e:
            # Someone is probably trying to import a language of which the code
            # is a reserved word in python (like Icelandic (is) / Oriya (or))
            # The convention to handle these is to have it in a file like
            # code_is, for example.
            exec("from translate.lang import %s%s" % (prefix, code))
            exec("langclass = %s%s.%s%s" % (prefix, code, prefix, code))
            return langclass(code)
    except ImportError, e:
        if code and code.startswith(prefix):
            code = code[: len(prefix)]
        simplercode = data.simplercode(code)
        if simplercode:
            relatedlanguage = getlanguage(simplercode)
            if isinstance(relatedlanguage, common.Common):
                relatedlanguage = relatedlanguage.__class__(code)
            return relatedlanguage
        else:
            return common.Common(code)
示例#2
0
def getlanguage(code):
    """This returns a language class.

    :param code: The ISO 639 language code
    """
    if code:
        code = code.replace("-", "_").replace("@", "_").lower()
    try:
        if code is None:
            raise ImportError("Can't determine language code")
        if code in ('or', 'is'):
            internal_code = prefix + code
        else:
            internal_code = code
        module = __import__("translate.lang.%s" % internal_code, globals(), {},
                            internal_code)
        langclass = getattr(module, internal_code)
        return langclass(code)
    except ImportError, e:
        simplercode = data.simplercode(code)
        if simplercode:
            relatedlanguage = getlanguage(simplercode)
            if isinstance(relatedlanguage, common.Common):
                relatedlanguage = relatedlanguage.__class__(code)
            return relatedlanguage
        else:
            return common.Common(code)
示例#3
0
def getlanguage(code):
    """This returns a language class.

    @param code: The ISO 639 language code
    """
    if code:
        code = code.replace("-", "_").replace("@", "_")
    try:
        try:
            if code is None:
                raise ImportError ("Can't determine language code")
            exec("from translate.lang import %s" % code)
            exec("langclass = %s.%s" % (code, code))
            return langclass(code)
        except SyntaxError, e:
            # Someone is probably trying to import a language of which the code
            # is a reserved word in python (like Icelandic (is) / Oriya (or))
            # The convention to handle these is to have it in a file like  
            # code_is, for example.
            exec("from translate.lang import %s%s" % (prefix, code))
            exec("langclass = %s%s.%s%s" % (prefix, code, prefix, code))
            return langclass(code)
    except ImportError, e:
        if code and code.startswith(prefix):
            code = code[:len(prefix)]
        simplercode = data.simplercode(code)
        if simplercode:
            relatedlanguage = getlanguage(simplercode)
            if isinstance(relatedlanguage, common.Common):
                relatedlanguage = relatedlanguage.__class__(code)
            return relatedlanguage
        else:
            return common.Common(code)
示例#4
0
def getlanguage(code):
    """This returns a language class.

    :param code: The ISO 639 language code
    """
    if code:
        code = code.replace("-", "_").replace("@", "_").lower()
    try:
        if code is None:
            raise ImportError("Can't determine language code")
        if code in ('or', 'is', 'as'):
            internal_code = prefix + code
        else:
            internal_code = code
        module = __import__("translate.lang.%s" % internal_code, globals(), {},
                            internal_code)
        langclass = getattr(module, internal_code)
        return langclass(code)
    except ImportError as e:
        simplercode = data.simplercode(code)
        if simplercode:
            relatedlanguage = getlanguage(simplercode)
            if isinstance(relatedlanguage, common.Common):
                relatedlanguage = relatedlanguage.__class__(code)
            return relatedlanguage
        else:
            return common.Common(code)
 def _handle_source_lang(self, request, response):
     language = request.id
     result = self._loads_safe(response)
     if result:
         self.source_lang = language
         #logging.debug("source language %s supported" % language)
         self.emit('source-lang-changed', self.source_lang)
     else:
         lang = data.simplercode(language)
         if lang:
             self.lang_negotiate(lang, self._handle_source_lang)
         else:
             self.source_lang = None
             logging.debug("source language %s not supported" % language)
示例#6
0
 def length_difference(cls, length):
     """Returns an estimate to a likely change in length relative to an
     English string of length length."""
     # This is just a rudimentary heuristic guessing that most translations
     # will be somewhat longer than the source language
     expansion_factor = 0
     code = cls.code
     while code:
         expansion_factor = data.expansion_factors.get(cls.code, 0)
         if expansion_factor:
             break
         code = data.simplercode(code)
     else:
         expansion_factor = 0.1  # default
     constant = max(5, int(40 * expansion_factor))
     # The default: return 5 + length/10
     return constant + int(expansion_factor * length)
示例#7
0
 def length_difference(cls, length):
     """Returns an estimate to a likely change in length relative to an
     English string of length length."""
     # This is just a rudimentary heuristic guessing that most translations
     # will be somewhat longer than the source language
     expansion_factor = 0
     code = cls.code
     while code:
         expansion_factor = data.expansion_factors.get(cls.code, 0)
         if expansion_factor:
             break
         code = data.simplercode(code)
     else:
         expansion_factor = 0.1 # default
     constant = max(5, int(40*expansion_factor))
     # The default: return 5 + length/10
     return constant + int(expansion_factor * length)
示例#8
0
    def __new__(cls, code):
        """This returns the language class for the given code, following a
        singleton like approach (only one object per language)."""
        code = code or ""
        # First see if a language object for this code already exists
        if code in cls._languages:
            return cls._languages[code]
        # No existing language. Let's build a new one and keep a copy
        language = cls._languages[code] = object.__new__(cls)

        language.code = code
        while code:
            langdata = data.get_language(code)
            if langdata:
                language.fullname, language.nplurals, language.pluralequation = langdata
                break
            code = data.simplercode(code)
        return language
示例#9
0
    def __new__(cls, code):
        """This returns the language class for the given code, following a
        singleton like approach (only one object per language)."""
        code = code or ""
        # First see if a language object for this code already exists
        if code in cls._languages:
            return cls._languages[code]
        # No existing language. Let's build a new one and keep a copy
        language = cls._languages[code] = object.__new__(cls)

        language.code = code
        while code:
            langdata = data.get_language(code)
            if langdata:
                language.fullname, language.nplurals, \
                    language.pluralequation = langdata
                break
            code = data.simplercode(code)
        return language
示例#10
0
    def set_source_lang(self, language):
        language = language.lower().replace('-', '_').replace('@', '_')
        if not self._languages:
            # for some reason we don't (yet) have supported languages
            self.source_lang = language
            # we'll redo this once we have languages
            return

        if language in self._languages:
            self.source_lang = language
            logging.debug("source language %s supported" % language)
            self.emit('source-lang-changed', self.source_lang)
        else:
            lang = data.simplercode(language)
            if lang:
                self.set_source_lang(lang)
            else:
                self.source_lang = None
                logging.debug("source language %s not supported" % language)
示例#11
0
    def set_source_lang(self, language):
        language = language.lower().replace('-', '_').replace('@', '_')
        if not self._languages:
            # for some reason we don't (yet) have supported languages
            self.source_lang = language
            # we'll redo this once we have languages
            return

        if language in self._languages:
            self.source_lang = language
            logging.debug("source language %s supported" % language)
            self.emit('source-lang-changed', self.source_lang)
        else:
            lang = data.simplercode(language)
            if lang:
                self.set_source_lang(lang)
            else:
                self.source_lang = None
                logging.debug("source language %s not supported" % language)
示例#12
0
    def __new__(cls, code):
        """This returns the language class for the given code, following a
        singleton like approach (only one object per language)."""
        code = code or ""
        # First see if a language object for this code already exists
        if code in cls._languages:
            return cls._languages[code]
        # No existing language. Let's build a new one and keep a copy
        language = cls._languages[code] = object.__new__(cls)

        language.code = code
        while code:
            langdata = data.languages.get(code, None)
            if langdata:
                language.fullname, language.nplurals, language.pluralequation = langdata
                break
            code = data.simplercode(code)
        if not code:
#            print >> sys.stderr, "Warning: No information found about language code %s" % code
            pass
        return language
示例#13
0
    def __new__(cls, code):
        """This returns the language class for the given code, following a
        singleton like approach (only one object per language)."""
        code = code or ""
        # First see if a language object for this code already exists
        if code in cls._languages:
            return cls._languages[code]
        # No existing language. Let's build a new one and keep a copy
        language = cls._languages[code] = object.__new__(cls)

        language.code = code
        while code:
            langdata = data.get_language(code)
            if langdata:
                language.fullname, language.nplurals, \
                    language.pluralequation = langdata
                break
            code = data.simplercode(code)
        if not code:
            # message suppressed by default at level info
            logger.info("No information found about language code %s", code)
            pass
        return language