def get_locale_from_request(request, session=None, user=None): if user is None: user_id = request.authenticated_userid or Everyone if user_id != Everyone: user = User.get(user_id) session = session or User.default_db if user: if '_LOCALE_' in request.params: locale = request.params['_LOCALE_'] process_locale(locale, user, session, LanguagePreferenceOrder.Parameter) elif '_LOCALE_' in request.cookies: locale = request.cookies['_LOCALE_'] process_locale(locale, user, session, LanguagePreferenceOrder.Cookie) else: # uses my locale negotiator locale = request.locale_name process_locale(locale, user, session, LanguagePreferenceOrder.OS_Default) else: locale = request.localizer.locale_name target_locale = Locale.get_or_create( strip_country(locale), session) return target_locale
def process_locale( locale_code, user, session, source_of_evidence): locale_code = to_posix_string(locale_code) # Updated: Now Locale is a model. Converting posix_string into its # equivalent model. Creates it if it does not exist locale = Locale.get_or_create(locale_code, session) if source_of_evidence in LanguagePreferenceOrder.unique_prefs: lang_pref_signatures = defaultdict(list) for lp in user.language_preference: lang_pref_signatures[lp.source_of_evidence].append(lp) while len(lang_pref_signatures[source_of_evidence]) > 1: # legacy multiple values lp = lang_pref_signatures[source_of_evidence].pop() lp.delete() if len(lang_pref_signatures[source_of_evidence]) == 1: lang_pref_signatures[source_of_evidence][0].locale = locale session.flush() return # else creation below else: lang_pref_signatures = { (lp.locale_id, lp.source_of_evidence) for lp in user.language_preference } if (locale.id, source_of_evidence) in lang_pref_signatures: return lang = UserLanguagePreference( user=user, source_of_evidence=source_of_evidence.value, locale=locale) session.add(lang) session.flush()
def process_locale(locale_code, user, session, source_of_evidence): locale_code = to_posix_string(locale_code) # Updated: Now Locale is a model. Converting posix_string into its # equivalent model. Creates it if it does not exist locale = Locale.get_or_create(locale_code, session) if source_of_evidence in LanguagePreferenceOrder.unique_prefs: lang_pref_signatures = defaultdict(list) for lp in user.language_preference: lang_pref_signatures[lp.source_of_evidence].append(lp) while len(lang_pref_signatures[source_of_evidence]) > 1: # legacy multiple values lp = lang_pref_signatures[source_of_evidence].pop() lp.delete() if len(lang_pref_signatures[source_of_evidence]) == 1: lang_pref_signatures[source_of_evidence][0].locale = locale session.flush() return # else creation below else: lang_pref_signatures = {(lp.locale_id, lp.source_of_evidence) for lp in user.language_preference} if (locale.id, source_of_evidence) in lang_pref_signatures: return lang = UserLanguagePreference(user=user, source_of_evidence=source_of_evidence.value, locale=locale) session.add(lang) session.flush()
def get_locale_from_request(request, session=None, user=None): if user is None: user_id = request.authenticated_userid or Everyone if user_id != Everyone: user = User.get(user_id) session = session or User.default_db if user: if '_LOCALE_' in request.params: locale = request.params['_LOCALE_'] process_locale(locale, user, session, LanguagePreferenceOrder.Parameter) elif '_LOCALE_' in request.cookies: locale = request.cookies['_LOCALE_'] process_locale(locale, user, session, LanguagePreferenceOrder.Cookie) else: # uses my locale negotiator locale = request.locale_name process_locale(locale, user, session, LanguagePreferenceOrder.OS_Default) else: locale = request.localizer.locale_name target_locale = Locale.get_or_create(strip_country(locale), session) return target_locale