Example #1
0
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
Example #2
0
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()
Example #3
0
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()
Example #4
0
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