示例#1
0
 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'])
示例#2
0
 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)
示例#3
0
    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()
示例#4
0
 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}
示例#5
0
    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)
示例#6
0
    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()
示例#7
0
 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'])