コード例 #1
0
ファイル: translations.py プロジェクト: gsathya/bridgedb
def getLocaleFromHTTPRequest(request):
    """Retrieve the languages from an HTTP ``Accept-Language:`` header.

    Parse the languages from the header, use them to install a
    ``gettext.translation`` chain via :func:`installTranslations`, and lastly
    return the requested languages.

    :type request: :api:`twisted.web.server.Request`
    :param request: An incoming request from a client.
    :rtype: list
    :returns: All requested languages.
    """
    header = request.getHeader('accept-language')
    if header is None:
        logging.debug("Client sent no 'Accept-Language' header. Using fallback.")
        header = 'en,en-US'

    langs = headers.parseAcceptLanguage(header)
    if not safelog.safe_logging:  # pragma: no cover
        logging.debug("Client Accept-Language (top 5): %s" % langs[:5])

    # Check if we got a ?lang=foo argument, and if we did, insert it first
    chosenLang = request.args.get("lang", [None,])[0]
    if chosenLang:
        logging.debug("Client requested language: %r" % chosenLang)
        langs.insert(0, chosenLang)

    installTranslations(langs)
    return langs
コード例 #2
0
def getLocaleFromHTTPRequest(request):
    """Retrieve the languages from an HTTP ``Accept-Language:`` header.

    Parse the languages from the header, use them to install a
    ``gettext.translation`` chain via :func:`installTranslations`, and lastly
    return the requested languages.

    :type request: :api:`twisted.web.server.Request`
    :param request: An incoming request from a client.
    :rtype: list
    :returns: All requested languages.
    """
    header = request.getHeader('accept-language')
    if header is None:
        logging.debug(
            "Client sent no 'Accept-Language' header. Using fallback.")
        header = 'en,en-US'

    langs = headers.parseAcceptLanguage(header)
    if not safelog.safe_logging:  # pragma: no cover
        logging.debug("Client Accept-Language (top 5): %s" % langs[:5])

    # Check if we got a ?lang=foo argument, and if we did, insert it first
    chosenLang = request.args.get("lang", [
        None,
    ])[0]
    if chosenLang:
        logging.debug("Client requested language: %r" % chosenLang)
        langs.insert(0, chosenLang)

    installTranslations(langs)
    return langs
コード例 #3
0
 def test_defaultTBBHeader(self):
     """The header 'en-us,en;q=0.5' should return ['en_us', 'en']."""
     header = 'en-us,en;q=0.5'
     langs = headers.parseAcceptLanguage(header)
     self.assertIsInstance(langs, list)
     self.assertEqual(len(langs), 2)
     self.assertEqual(langs[0], 'en_us')
     self.assertEqual(langs[1], 'en')
コード例 #4
0
 def test_defaultTBBHeader(self):
     """The header 'en-us,en;q=0.5' should return ['en_us', 'en']."""
     header = 'en-us,en;q=0.5'
     langs = headers.parseAcceptLanguage(header)
     self.assertIsInstance(langs, list)
     self.assertEqual(len(langs), 2)
     self.assertEqual(langs[0], 'en_us')
     self.assertEqual(langs[1], 'en')
コード例 #5
0
 def test_addNonLocalizedVariant(self):
     """The header 'en-us,en-gb;q=0.5' should return
     ['en_us', 'en', 'en_gb'].
     """
     header = 'en-us,en-gb;q=0.5'
     langs = headers.parseAcceptLanguage(header)
     self.assertIsInstance(langs, list)
     self.assertEqual(len(langs), 3)
     self.assertEqual(langs[0], 'en_us')
     self.assertEqual(langs[1], 'en')
     self.assertEqual(langs[2], 'en_gb')
コード例 #6
0
 def test_addNonLocalizedVariant(self):
     """The header 'en-us,en-gb;q=0.5' should return
     ['en_us', 'en', 'en_gb'].
     """
     header = 'en-us,en-gb;q=0.5'
     langs = headers.parseAcceptLanguage(header)
     self.assertIsInstance(langs, list)
     self.assertEqual(len(langs), 3)
     self.assertEqual(langs[0], 'en_us')
     self.assertEqual(langs[1], 'en')
     self.assertEqual(langs[2], 'en_gb')
コード例 #7
0
ファイル: HTTPServer.py プロジェクト: wfn/bridgedb
def setLocaleFromRequestHeader(request):
    """Retrieve the languages from the accept-language header and install them.

    Parse the languages in the header, and attempt to install the first one in
    the list. If that fails, we receive a :class:`gettext.NullTranslation`
    object, if it worked then we have a :class:`gettext.GNUTranslation`
    object. Whichever one we end up with, get the other languages and add them
    as fallbacks to the first. Lastly, install this chain of translations.

    :type request: :api:`twisted.web.server.Request`
    :param request: An incoming request from a client.
    :rtype: list
    :returns: All requested languages.
    """
    logging.debug("Getting client 'Accept-Language' header...")
    header = request.getHeader('accept-language')

    if header is None:
        logging.debug("Client sent no 'Accept-Language' header. Using fallback.")
        header = 'en,en-US'

    localedir = os.path.join(os.path.dirname(__file__), 'i18n/')
    langs = headers.parseAcceptLanguage(header)
    ## XXX the 'Accept-Language' header is potentially identifying
    logging.debug("Client Accept-Language (top 5): %s" % langs[:5])

    try:
        language = gettext.translation("bridgedb", localedir=localedir,
                                       languages=langs, fallback=True)
        for lang in langs:
            language.add_fallback(gettext.translation("bridgedb",
                                                      localedir=localedir,
                                                      languages=langs,
                                                      fallback=True))
    except IOError as error:
        logging.error(error.message)

    language.install(unicode=True)
    return langs
コード例 #8
0
 def test_noHeaders(self):
     """No header should return an empty list."""
     header = None
     langs = headers.parseAcceptLanguage(header)
     self.assertIsInstance(langs, list)
     self.assertEqual(len(langs), 0)
コード例 #9
0
 def test_noHeaders(self):
     """No header should return an empty list."""
     header = None
     langs = headers.parseAcceptLanguage(header)
     self.assertIsInstance(langs, list)
     self.assertEqual(len(langs), 0)