def language_settings(request):

    # CONTENT
    # Pull language setting from cookie or Accept-Lanugage header or default to english
    content = request.COOKIES.get('contentLang') or request.LANGUAGE_CODE or 'english'
    # URL parameter trumps cookie
    #content = request.GET.get("lang", content)
    """content = "bilingual" if content in ("bi", "he-en", "en-he") else content
    content = 'hebrew' if content in ('he', 'he-il') else content
    content = "english" if content in ('en') else content"""
    content = short_to_long_lang_code(content)
    # Don't allow languages other than what we currently handle
    content = 'english' if content not in ('english', 'hebrew', 'bilingual') else content

    # INTERFACE
    interface = None
    if request.user.is_authenticated():
        profile = UserProfile(id=request.user.id)
        interface = profile.settings["interface_language"] if "interface_language" in profile.settings else None 
    if not interface: 
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        interface = request.COOKIES.get('interfaceLang') or request.LANGUAGE_CODE or 'english'
        interface = 'hebrew' if interface in ('he', 'he-il') else interface
        # Don't allow languages other than what we currently handle
        interface = 'english' if interface not in ('english', 'hebrew') else interface

    return {"contentLang": content, "interfaceLang": interface}
예제 #2
0
def language_settings(request):
    # INTERFACE
    interface = None
    if request.user.is_authenticated():
        profile = UserProfile(id=request.user.id)
        interface = profile.settings[
            "interface_language"] if "interface_language" in profile.settings else None
    if not interface:
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        interface = request.COOKIES.get(
            'interfaceLang') or request.LANGUAGE_CODE or 'english'
        interface = 'hebrew' if interface in ('he', 'he-il') else interface
        # Don't allow languages other than what we currently handle
        interface = 'english' if interface not in ('english',
                                                   'hebrew') else interface

    # CONTENT
    default_content_lang = 'hebrew' if interface == 'hebrew' else 'bilingual'
    # Pull language setting from cookie or Accept-Lanugage header or default to english
    content = request.COOKIES.get('contentLang') or default_content_lang
    content = short_to_long_lang_code(content)
    # Don't allow languages other than what we currently handle
    content = default_content_lang if content not in ('english', 'hebrew',
                                                      'bilingual') else content
    # Note: URL parameters may override values set her, handled in reader view.

    return {"contentLang": content, "interfaceLang": interface}
예제 #3
0
def language_settings(request):

    # CONTENT
    # Pull language setting from cookie or Accept-Lanugage header or default to english
    content = request.COOKIES.get('contentLang') or request.LANGUAGE_CODE or 'english'
    # URL parameter trumps cookie
    #content = request.GET.get("lang", content)
    """content = "bilingual" if content in ("bi", "he-en", "en-he") else content
    content = 'hebrew' if content in ('he', 'he-il') else content
    content = "english" if content in ('en') else content"""
    content = short_to_long_lang_code(content)
    # Don't allow languages other than what we currently handle
    content = 'english' if content not in ('english', 'hebrew', 'bilingual') else content

    # INTERFACE
    interface = None
    if request.user.is_authenticated():
        profile = UserProfile(id=request.user.id)
        interface = profile.settings["interface_language"] if "interface_language" in profile.settings else None 
    if not interface: 
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        interface = request.COOKIES.get('interfaceLang') or request.LANGUAGE_CODE or 'english'
        interface = 'hebrew' if interface in ('he', 'he-il') else interface
        # Don't allow languages other than what we currently handle
        interface = 'english' if interface not in ('english', 'hebrew') else interface

    return {"contentLang": content, "interfaceLang": interface}
예제 #4
0
    def process_request(self, request):
        excluded = ('/linker.js', "/api/", "/interface/", "/apple-app-site-association", STATIC_URL)
        if any([request.path.startswith(start) for start in excluded]):
            return # Save looking up a UserProfile, or redirecting when not needed

        # INTERFACE 
        # Our logic for setting interface lang checks (1) User profile, (2) cookie, (3) geolocation, (4) HTTP language code
        interface = None
        if request.user.is_authenticated and not interface:
            profile = UserProfile(id=request.user.id)
            interface = profile.settings["interface_language"] if "interface_language" in profile.settings else interface 
        if not interface: 
            # Pull language setting from cookie, location (set by Cloudflare) or Accept-Lanugage header or default to english
            interface = request.COOKIES.get('interfaceLang') or request.META.get("HTTP_CF_IPCOUNTRY") or request.LANGUAGE_CODE or 'english'
            interface = 'hebrew' if interface in ('IL', 'he', 'he-il') else interface
            # Don't allow languages other than what we currently handle
            interface = 'english' if interface not in ('english', 'hebrew') else interface

        # Check if the current domain is pinned to  particular language in settings
        domain_lang = current_domain_lang(request)

        if domain_lang and domain_lang != interface:
            # For crawlers, don't redirect -- just return the pinned language
            no_direct = ("Googlebot", "Bingbot", "Slurp", "DuckDuckBot", "Baiduspider", 
                            "YandexBot", "Facebot", "facebookexternalhit", "ia_archiver", "Sogou",
                            "python-request", "curl", "Wget", "sefaria-node")
            if any([bot in request.META.get('HTTP_USER_AGENT', '') for bot in no_direct]):
                interface = domain_lang
            else:
                redirect_domain = None
                for domain in DOMAIN_LANGUAGES:
                    if DOMAIN_LANGUAGES[domain] == interface:
                        redirect_domain = domain
                if redirect_domain:
                    # When detected language doesn't match current domain langauge, redirect
                    path = request.get_full_path()
                    path = path + ("&" if "?" in path else "?") + "set-language-cookie"
                    return redirect(redirect_domain + path)
                    # If no pinned domain exists for the language the user wants,
                    # the user will stay on this domain with the detected language

        # CONTENT
        default_content_lang = 'hebrew' if interface == 'hebrew' else 'bilingual'
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        content = request.GET.get('lang') or request.COOKIES.get('contentLang') or default_content_lang
        content = short_to_long_lang_code(content)
        # Don't allow languages other than what we currently handle
        content = default_content_lang if content not in ('english', 'hebrew', 'bilingual') else content
        # Note: URL parameters may override values set here, handled in reader view.

        if not SITE_SETTINGS["TORAH_SPECIFIC"]:
            content = "english"

        request.LANGUAGE_CODE = interface[0:2]
        request.interfaceLang = interface
        request.contentLang   = content

        translation.activate(request.LANGUAGE_CODE)
예제 #5
0
    def process_request(self, request):
        excluded = ('/linker.js', "/api/", "/interface/", STATIC_URL)
        if any([request.path.startswith(start) for start in excluded]):
            return # Save looking up a UserProfile, or redirecting when not needed

        # INTERFACE 
        # Our logic for setting interface lang checks (1) User profile, (2) cookie, (3) geolocation, (4) HTTP language code
        interface = None
        if request.user.is_authenticated and not interface:
            profile = UserProfile(id=request.user.id)
            interface = profile.settings["interface_language"] if "interface_language" in profile.settings else interface 
        if not interface: 
            # Pull language setting from cookie, location (set by Cloudflare) or Accept-Lanugage header or default to english
            interface = request.COOKIES.get('interfaceLang') or request.META.get("HTTP_CF_IPCOUNTRY") or request.LANGUAGE_CODE or 'english'
            interface = 'hebrew' if interface in ('IL', 'he', 'he-il') else interface
            # Don't allow languages other than what we currently handle
            interface = 'english' if interface not in ('english', 'hebrew') else interface

        # Check if the current domain is pinned to  particular language in settings
        domain_lang = current_domain_lang(request)

        if domain_lang and domain_lang != interface:
            # For crawlers, don't redirect -- just return the pinned language
            no_direct = ("Googlebot", "Bingbot", "Slurp", "DuckDuckBot", "Baiduspider", 
                            "YandexBot", "Facebot", "facebookexternalhit", "ia_archiver", "Sogou",
                            "python-request", "curl", "Wget", "sefaria-node")
            if any([bot in request.META.get('HTTP_USER_AGENT', '') for bot in no_direct]):
                interface = domain_lang
            else:
                redirect_domain = None
                for domain in DOMAIN_LANGUAGES:
                    if DOMAIN_LANGUAGES[domain] == interface:
                        redirect_domain = domain
                if redirect_domain:
                    # When detected language doesn't match current domain langauge, redirect
                    path = request.get_full_path()
                    path = path + ("&" if "?" in path else "?") + "set-language-cookie"
                    return redirect(redirect_domain + path)
                    # If no pinned domain exists for the language the user wants,
                    # the user will stay on this domain with the detected language

        # CONTENT
        default_content_lang = 'hebrew' if interface == 'hebrew' else 'bilingual'
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        content = request.GET.get('lang') or request.COOKIES.get('contentLang') or default_content_lang
        content = short_to_long_lang_code(content)
        # Don't allow languages other than what we currently handle
        content = default_content_lang if content not in ('english', 'hebrew', 'bilingual') else content
        # Note: URL parameters may override values set here, handled in reader view.

        if not SITE_SETTINGS["TORAH_SPECIFIC"]:
            content = "english"

        request.LANGUAGE_CODE = interface[0:2]
        request.interfaceLang = interface
        request.contentLang   = content

        translation.activate(request.LANGUAGE_CODE)
예제 #6
0
    def process_request(self, request):
        excluded = ('/linker.js',)
        if request.path.startswith("/api/") or request.path in excluded:
            return # Save potentially looking up a UserProfile when not needed

        # INTERFACE
        interface = None
        domain = request.get_host()
        try:
            if "https://" + domain in DOMAIN_LANGUAGES:
                interface = DOMAIN_LANGUAGES["https://" + domain]
            elif "http://" + domain in DOMAIN_LANGUAGES:
                interface = DOMAIN_LANGUAGES["http://" + domain]
        except:
            pass
        if request.user.is_authenticated() and not interface:
            profile = UserProfile(id=request.user.id)
            interface = profile.settings["interface_language"] if "interface_language" in profile.settings else interface 
        if not interface: 
            # Pull language setting from cookie, location (set by Cloudflare) or Accept-Lanugage header or default to english
            interface = request.COOKIES.get('interfaceLang') or request.META.get("HTTP_CF_IPCOUNTRY") or request.LANGUAGE_CODE or 'english'
            interface = 'hebrew' if interface in ('IL', 'he', 'he-il') else interface
            # Don't allow languages other than what we currently handle
            interface = 'english' if interface not in ('english', 'hebrew') else interface

        # CONTENT
        default_content_lang = 'hebrew' if interface == 'hebrew' else 'bilingual'
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        content = request.COOKIES.get('contentLang') or default_content_lang
        content = short_to_long_lang_code(content)
        # Don't allow languages other than what we currently handle
        content = default_content_lang if content not in ('english', 'hebrew', 'bilingual') else content
        # Note: URL parameters may override values set her, handled in reader view.

        request.LANGUAGE_CODE = interface[0:2]
        request.interfaceLang = interface
        request.contentLang   = content

        translation.activate(request.LANGUAGE_CODE)
예제 #7
0
def language_settings(request):
    # INTERFACE
    interface = None
    if request.user.is_authenticated():
        profile = UserProfile(id=request.user.id)
        interface = profile.settings["interface_language"] if "interface_language" in profile.settings else None 
    if not interface: 
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        interface = request.COOKIES.get('interfaceLang') or request.LANGUAGE_CODE or 'english'
        interface = 'hebrew' if interface in ('he', 'he-il') else interface
        # Don't allow languages other than what we currently handle
        interface = 'english' if interface not in ('english', 'hebrew') else interface

    # CONTENT
    default_content_lang = 'hebrew' if interface == 'hebrew' else 'bilingual'
    # Pull language setting from cookie or Accept-Lanugage header or default to english
    content = request.COOKIES.get('contentLang') or default_content_lang
    content = short_to_long_lang_code(content)
    # Don't allow languages other than what we currently handle
    content = default_content_lang if content not in ('english', 'hebrew', 'bilingual') else content
    # Note: URL parameters may override values set her, handled in reader view.

    return {"contentLang": content, "interfaceLang": interface}
예제 #8
0
    def process_request(self, request):
        excluded = ('/linker.js', "/api/", "/interface/",
                    "/apple-app-site-association", STATIC_URL)
        if any([request.path.startswith(start) for start in excluded]):
            request.interfaceLang = "english"
            request.contentLang = "bilingual"
            return  # Save looking up a UserProfile, or redirecting when not needed

        profile = UserProfile(
            id=request.user.id) if request.user.is_authenticated else None
        # INTERFACE
        # Our logic for setting interface lang checks (1) User profile, (2) cookie, (3) geolocation, (4) HTTP language code
        interface = None
        if request.user.is_authenticated and not interface:
            interface = profile.settings[
                "interface_language"] if "interface_language" in profile.settings else interface
        if not interface:
            # Pull language setting from cookie, location (set by Cloudflare) or Accept-Lanugage header or default to english
            interface = request.COOKIES.get(
                'interfaceLang') or request.META.get(
                    "HTTP_CF_IPCOUNTRY") or request.LANGUAGE_CODE or 'english'
            interface = 'hebrew' if interface in ('IL', 'he',
                                                  'he-il') else interface
            # Don't allow languages other than what we currently handle
            interface = 'english' if interface not in ('english',
                                                       'hebrew') else interface

        # Check if the current domain is pinned to  particular language in settings
        domain_lang = current_domain_lang(request)

        if domain_lang and domain_lang != interface:
            # For crawlers, don't redirect -- just return the pinned language
            no_direct = ("Googlebot", "Bingbot", "Slurp", "DuckDuckBot",
                         "Baiduspider", "YandexBot", "Facebot",
                         "facebookexternalhit", "ia_archiver", "Sogou",
                         "python-request", "curl", "Wget", "sefaria-node")
            if any([
                    bot in request.META.get('HTTP_USER_AGENT', '')
                    for bot in no_direct
            ]):
                interface = domain_lang
            else:
                redirect_domain = None
                for domain in DOMAIN_LANGUAGES:
                    if DOMAIN_LANGUAGES[domain] == interface:
                        redirect_domain = domain
                if redirect_domain:
                    # When detected language doesn't match current domain langauge, redirect
                    path = request.get_full_path()
                    path = path + ("&" if "?" in path else
                                   "?") + "set-language-cookie"
                    return redirect(redirect_domain + path)
                    # If no pinned domain exists for the language the user wants,
                    # the user will stay on this domain with the detected language

        # CONTENT
        default_content_lang = 'hebrew' if interface == 'hebrew' else 'bilingual'
        # Pull language setting from cookie or Accept-Lanugage header or default to english
        content = request.GET.get('lang') or request.COOKIES.get(
            'contentLang') or default_content_lang
        content = short_to_long_lang_code(content)
        # Don't allow languages other than what we currently handle
        content = default_content_lang if content not in (
            'english', 'hebrew', 'bilingual') else content
        # Note: URL parameters may override values set here, handled in reader view.

        if not SITE_SETTINGS["TORAH_SPECIFIC"]:
            content = "english"
            interface = "english"

        # TRANSLATION LANGUAGE PREFERENCE
        translation_language_preference = (
            profile is not None
            and profile.settings.get("translation_language_preference", None)
        ) or request.COOKIES.get("translation_language_preference", None)
        langs_in_country = get_lang_codes_for_territory(
            request.META.get("HTTP_CF_IPCOUNTRY", None))
        translation_language_preference_suggestion = None
        trans_lang_pref_suggested = (
            profile is not None and profile.settings.get(
                "translation_language_preference_suggested",
                False)) or request.COOKIES.get(
                    "translation_language_preference_suggested", False)
        if translation_language_preference is None and not trans_lang_pref_suggested:
            supported_translation_langs = set(
                SITE_SETTINGS['SUPPORTED_TRANSLATION_LANGUAGES'])
            for lang in langs_in_country:
                if lang in supported_translation_langs:
                    translation_language_preference_suggestion = lang
                    break
        if translation_language_preference_suggestion == "en":
            # dont ever suggest English to our users
            translation_language_preference_suggestion = None

        # VERSION PREFERENCE
        import json
        from urllib.parse import unquote
        version_preferences_by_corpus_cookie = json.loads(
            unquote(
                request.COOKIES.get("version_preferences_by_corpus", "null")))
        request.version_preferences_by_corpus = (
            profile is not None
            and getattr(profile, "version_preferences_by_corpus",
                        None)) or version_preferences_by_corpus_cookie or {}
        request.LANGUAGE_CODE = interface[0:2]
        request.interfaceLang = interface
        request.contentLang = content
        request.translation_language_preference = translation_language_preference
        request.translation_language_preference_suggestion = translation_language_preference_suggestion

        translation.activate(request.LANGUAGE_CODE)