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
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
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")
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")
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)