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}
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}
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)
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)
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)
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}
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)