Example #1
0
    def _decide_page(self, req):
        """decide page name to use regarding client language.
        This function is called from hook with self as WikiModule instance.
        Returns page name to be displayed.
        """
        orig = req.args.get('page', 'WikiStart')

        # This negotiation is only for viewing.
        # If without this rule, you may edit 'SomePage.en' by edit
        # button on 'SomePage.' page.
        if req.args.get('action', None):
            return orig

        # Get language from session to keep selected language if possible.
        lang = req.session.get('wiki_lang', None)
        
        # Use requested page itself if the page name has language
        # suffix. As special case, if the name ends with period '.',
        # use non-suffixed page is used.
        # This action means user choose the language.
        if orig.endswith('.'):
            req.session['wiki_lang'] = 'default'
            return orig[:-1]                    # force un suffixed page

        page, lang = util.split_lang(orig)
        if lang:
            #debug('case 1 : requested page name has lang suffix')
            req.session['wiki_lang'] = lang
            return orig
        page = page or 'WikiStart'

        # At this point, page name does not have language suffix.

        # List preffered language codes from http request.
        # Check language suffixed page existance in order of preffered
        # language codes in http request and use it if exist.
        wiki = WikiSystem(self.env)
        for lang in util.get_preferred_langs(req):
            if lang in ['default', 'other']:
                lpage = page
            else:
                lpage = '%s.%s' % (page, lang)
            if wiki.has_page(lpage):
                #debug('case 2 : have suffixed page: %s' % lpage)
                return lpage
            # Consideration of default_lang setting.
            # This is required not access to lower ordered
            # language page. For example,
            #   preferred language:  ja, en, fr
            #   default_lang: en
            #   existing pages:  'page', 'page.fr'
            # We should search page in order:
            #   'page.ja', 'page.en', 'page', 'page.fr'
            if lang == self._default_lang and wiki.has_page(page):
                return page

        # No page matched with preffered language.
        # Use requested page.
        #debug('case 3 : no page for preffered lang')
        return orig
Example #2
0
    def _decide_page(self, req):
        """decide page name to use regarding client language.
        This function is called from hook with self as WikiModule instance.
        Returns page name to be displayed.
        """
        orig = req.args.get('page', 'WikiStart')

        # This negotiation is only for viewing.
        # If without this rule, you may edit 'SomePage.en' by edit
        # button on 'SomePage.' page.
        if req.args.get('action', None):
            return orig

        # Get language from session to keep selected language if possible.
        lang = req.session.get('wiki_lang', None)

        # Use requested page itself if the page name has language
        # suffix. As special case, if the name ends with period '.',
        # use non-suffixed page is used.
        # This action means user choose the language.
        if orig.endswith('.'):
            req.session['wiki_lang'] = 'default'
            return orig[:-1]  # force un suffixed page

        page, lang = util.split_lang(orig)
        if lang:
            #debug('case 1 : requested page name has lang suffix')
            req.session['wiki_lang'] = lang
            return orig
        page = page or 'WikiStart'

        # At this point, page name does not have language suffix.

        # List preffered language codes from http request.
        # Check language suffixed page existance in order of preffered
        # language codes in http request and use it if exist.
        wiki = WikiSystem(self.env)
        for lang in util.get_preferred_langs(req):
            if lang in ['default', 'other']:
                lpage = page
            else:
                lpage = '%s.%s' % (page, lang)
            if wiki.has_page(lpage):
                #debug('case 2 : have suffixed page: %s' % lpage)
                return lpage
            # Consideration of default_lang setting.
            # This is required not access to lower ordered
            # language page. For example,
            #   preferred language:  ja, en, fr
            #   default_lang: en
            #   existing pages:  'page', 'page.fr'
            # We should search page in order:
            #   'page.ja', 'page.en', 'page', 'page.fr'
            if lang == self._default_lang and wiki.has_page(page):
                return page

        # No page matched with preffered language.
        # Use requested page.
        #debug('case 3 : no page for preffered lang')
        return orig
Example #3
0
 def _format_term(self, formatter, ns, target, label):
     wiki = WikiSystem(self.env)
     page = self._wiki_prefix + target
     href = formatter.href.wiki(page)
     link_label = label
     if wiki.has_page(page):
         if not link_label:
             link_label = self._term_desc(target)
         return html.A(wiki.format_page_name(link_label), href=href)
     else:
         if not link_label:
             link_label = self._term_ns + ":" + target
         return html.A(wiki.format_page_name(link_label) + "?",
                         href=href, class_="missing wiki", rel="nofollow")
Example #4
0
 def _format_term(self, formatter, ns, target, label):
     wiki = WikiSystem(self.env)
     page = self._wiki_prefix + target
     href = formatter.href.wiki(page)
     link_label = label
     if wiki.has_page(page):
         if not link_label:
             link_label = self._term_desc(target)
         return html.A(wiki.format_page_name(link_label), href=href)
     else:
         if not link_label:
             link_label = self._term_ns + ":" + target
         return html.A(wiki.format_page_name(link_label) + "?",
                       href=href,
                       class_="missing wiki",
                       rel="nofollow")
Example #5
0
 def get_page_text(self, *args):
     """Return a tuple of `(text, exists)` for the given page (resource).
     The page is altered if lang suffix is not exist in page name
     like wiki page negotiation. 
     """
     # Since TracTOC macro r4366, 'formatter' argument is added
     # as 2nd argument.
     if len(args) == 1:
         # old code
         formatter = self.formatter
         page_resource = args[0]
     else:
         formatter, page_resource = args
     if page_resource.id == formatter.context.resource.id:
         return (formatter.source, True)
     else:
         req = formatter.context(page_resource).req
         nego = wikinegotiator.negotiator.WikiNegotiator(self.env)
         # know lang of parent page where this macro is on.
         parent = req.args.get('page', 'WikiStart')
         bname, blang = util.split_lang(parent, 'default')
         # get body name and lang from given page name.
         name, lang = util.split_lang(page_resource.id)
         wiki = WikiSystem(self.env)
         if lang is None:
             # When no lang suffix is in given page name,
             # find localized page for lang of parent page,
             # then preferred language.
             langs = [blang] + util.get_preferred_langs(req)
             for lang in langs:
                 dname = util.make_page_name(name, lang)
                 if wiki.has_page(dname):
                     name = dname
                     break # from for
         else:
             # with suffix, exact page is used
             name = page_resource.id
         page = WikiPage(self.env, name)
         # update resource id to highlight current page.
         page_resource.id = name
         return (page.text, page.exists)