def get_negotiated_language(request): """ This function returns a Language from database that best matches one of those requested by the client. If a match cannot be found, it simply returns the first language available """ # Get all the registered and enabled languages of the system. available = [str(locale) for locale in Language.get_locales(request.db_session, enabled=True)] # Get client preferred languages. preferred = [str(locale) for locale in request.accepted_locales] # Choose the best one. negotiated = Locale.negotiate(preferred, available) if negotiated is None: lang = available[0][:2] else: lang = negotiated.language return Language.get_by_lang(request.db_session, lang)
def test_get_locales(self): languages = [ Language(id=1, lang=u'it', country=u'IT', enabled=True), Language(id=2, lang=u'en', country=u'GB', enabled=True), Language(id=3, lang=u'es', country=u'ES', enabled=True), Language(id=4, lang=u'de', country=u'DE', enabled=False), Language(id=5, lang=u'fr', country=u'FR', enabled=False), Language(id=6, lang=u'ru', country=u'RU', enabled=False), Language(id=7, lang=u'zh', country=u'CN', enabled=False)] for language in languages: self.session.add(language) self.session.commit() enabled_locales = [] for language in Language.get_locales(self.session, enabled=True): enabled_locales.append(language) enabled_strict_locales = [] for language in Language.get_locales(self.session, enabled=True, strict=True): enabled_strict_locales.append(language) disabled_locales = [] for language in Language.get_locales(self.session, enabled=False): disabled_locales.append(language) disabled_strict_locales = [] for language in Language.get_locales(self.session, enabled=False, strict=True): disabled_strict_locales.append(language) all_locales = [] for language in Language.get_locales(self.session): all_locales.append(language) all_strict_locales = [] for language in Language.get_locales(self.session, strict=True): all_strict_locales.append(language) for language in languages: full_locale = Locale(language.lang.lower(), language.country.upper()) lang_locale = Locale(language.lang.lower()) if language.enabled: self.assertIn(full_locale, enabled_locales) self.assertIn(lang_locale, enabled_locales) self.assertIn(full_locale, enabled_strict_locales) self.assertNotIn(lang_locale, enabled_strict_locales) else: self.assertIn(full_locale, disabled_locales) self.assertIn(lang_locale, disabled_locales) self.assertIn(full_locale, disabled_strict_locales) self.assertNotIn(lang_locale, disabled_strict_locales) self.assertIn(full_locale, all_locales) self.assertIn(lang_locale, all_locales) self.assertIn(full_locale, all_strict_locales) self.assertNotIn(lang_locale, all_strict_locales)