def add_language_menu(self): language_menu = self.toolbar.get_or_create_menu(LANGUAGE_MENU_IDENTIFIER, _('Language')) language_changer = getattr(self.request, '_language_changer', DefaultLanguageChanger(self.request)) for language in get_language_objects(self.current_site.pk): try: url = language_changer(language['code']) except NoReverseMatch: url = DefaultLanguageChanger(self.request)(language['code']) language_menu.add_link_item(language['name'], url=url, active=self.current_lang == language['code'])
def add_language_menu(self): if settings.USE_I18N and not self._language_menu: self._language_menu = self.toolbar.get_or_create_menu(LANGUAGE_MENU_IDENTIFIER, _('Language'), position=-1) language_changer = getattr(self.request, '_language_changer', DefaultLanguageChanger(self.request)) for code, name in get_language_tuple(self.current_site.pk): try: url = language_changer(code) except NoReverseMatch: url = DefaultLanguageChanger(self.request)(code) self._language_menu.add_link_item(name, url=url, active=self.current_lang == code)
def test_default_language_changer_with_implicit_current_app(self): self.create_base_structure(NS_APP_NAME, ['en', 'de'], 'namespaced_app_ns') self.reload_urls() with force_language("en"): path = reverse('namespaced_app_ns:translated-url') request = self.get_request(path) request.LANGUAGE_CODE = 'en' url = DefaultLanguageChanger(request)('en') self.assertEqual(url, path) url = DefaultLanguageChanger(request)('de') self.assertEqual(url, '/de%s' % path[3:].replace('/page', '/Seite')) self.apphook_clear()
def get_context(self, context, lang): try: # If there's an exception (500), default context_processors may not be called. request = context['request'] except KeyError: return {'template': 'cms/content.html'} if hasattr(request, "_language_changer"): try: url = request._language_changer(lang) except NoReverseMatch: url = DefaultLanguageChanger(request)(lang) else: # use the default language changer url = DefaultLanguageChanger(request)(lang) return {'content': url}
def test_default_language_changer_with_public_page(self): """ The DefaultLanguageChanger should not try to resolve the url for unpublished languages. """ cms_page = create_page('en-page', 'nav_playground.html', 'en', published=True) for language in get_language_list(site_id=1): if language != 'en': create_title(language, '%s-page' % language, cms_page) cms_page.publish(language) else: cms_page.unpublish('pt-br') cms_page.unpublish('es-mx') request = self.get_request( path=cms_page.get_absolute_url(), language='en', page=cms_page.publisher_public, ) urls_expected = [ '/en/en-page/', '/de/de-page/', '/fr/fr-page/', '/en/en-page/', # the pt-br url is en because that's a fallback '/en/en-page/', # the es-mx url is en because that's a fallback ] urls_found = [ DefaultLanguageChanger(request)(code) for code in get_language_list(site_id=1) ] self.assertSequenceEqual(urls_expected, urls_found)
def test_default_language_changer_with_implicit_current_app(self): with SettingsOverride(ROOT_URLCONF='cms.test_utils.project.second_urls_for_apphook_tests'): titles = self.create_base_structure(NS_APP_NAME, ['en', 'de'], 'namespaced_app_ns') # nopyflakes self.reload_urls() with force_language("en"): path = reverse('namespaced_app_ns:translated-url') request = self.get_request(path) request.LANGUAGE_CODE = 'en' url = DefaultLanguageChanger(request)('en') self.assertEqual(url, path) url = DefaultLanguageChanger(request)('de') self.assertEqual(url, '/de%s' % path[3:].replace('/page', '/Seite')) apphook_pool.clear()
def add_language_menu(self): try: current_lang = get_language_object( get_language_from_request(self.request), self.current_site.pk) except LanguageError: current_lang = None language_menu = self.toolbar.get_or_create_menu( LANGUAGE_MENU_IDENTIFIER, _('Language')) language_changer = getattr(self.request, '_language_changer', DefaultLanguageChanger(self.request)) for language in get_language_objects(self.current_site.pk): url = language_changer(language['code']) language_menu.add_link_item( language['name'], url=url, active=current_lang['code'] == language['code'])