Changeset 2135

Show
Ignore:
Timestamp:
03/30/07 23:47:50 (2 years ago)
Author:
gotoh
Message:

TracWikiNegotiatorPlugin:

(Commit again from unix, for r3133 and r3134)

  • Set 'Vary' and 'Content-Language' in response header.
  • Fix for previous strange commit (r2133).
    • Return edited page without negotiation on page commit.
    • Fix typo.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tracwikinegotiatorplugin/0.10/wikinegotiator/negotiator.py

    r2130 r2135  
    22 
    33import re 
     4from urlparse import urlparse 
    45from trac.core import Component, implements 
    56from trac.wiki import WikiSystem 
     
    3536                req.args['page'] = page 
    3637                self.env.log.debug('Negotiated: %s' % page) 
     38                # Set Content-Language only when language specific 
     39                # page is selected. 
     40                # TODO: I don't know we should set default language 
     41                #       for base page. 
     42                _, lang = self._split_lang(page) 
     43                req.send_header('Content-Language', 
     44                                lang or self._default_lang) 
     45            # always send Vary header to tell language negitiation is 
     46            # available 
     47            req.send_header('Vary', 'Accept-Language') 
    3748        return handler 
    3849 
     
    5768            return orig 
    5869 
     70        # No negotiation to display edited page after commit. 
     71        # 'Referrer' header can be used to detect this case 
     72        # by checking 'action=edit' parameter. 
     73        # ex. "Referer: http://host/wiki/WikiStart?action=edit" 
     74        referer = req.get_header('Referer') 
     75        if referer and referer.startswith(req.base_url) and \ 
     76                'action=edit' in urlparse(referer)[4].split('&'): 
     77            self.env.log.debug('disable negotiation for edited page.') 
     78            return orig 
     79 
    5980        # Use requested page itself if the page name has language 
    6081        # suffix. As special case, if the name ends with period '.', 
     
    7596        # language codes in http request and use it if exist. 
    7697        wiki = WikiSystem(self.env) 
    77         for lang in self._get_prefered_langs(req): 
     98        for lang in self._get_preferred_langs(req): 
    7899            lpage = '%s.%s' % (page, lang) 
    79100            if wiki.has_page(lpage): 
     
    83104            # This is required not access to lower ordered 
    84105            # language page. For example, 
    85             #   prefered language:  ja, en, fr 
     106            #   preferred language:  ja, en, fr 
    86107            #   default_lang: en 
    87108            #   existing pages:  'page', 'page.fr' 
     
    109130 
    110131 
    111     def _get_prefered_langs(self, req): 
     132    def _get_preferred_langs(self, req): 
    112133        # decide by language denotation in url parameter: '?lang=xx' 
    113134        if req.args.has_key('lang'): 
     
    122143 
    123144    def _parse_langs(self, al): 
    124         """Make list of language tag in prefered order. 
     145        """Make list of language tag in preferred order. 
    125146        For example, 
    126147        Accept-Language: ja,en-us;q=0.8,en;q=0.2