|  | @@ -59,18 +59,7 @@ class EnumStringSetting(Setting):
 | 
	
		
			
			| 59 | 59 |          self._validate_selection(self.value)
 | 
	
		
			
			| 60 | 60 |  
 | 
	
		
			
			| 61 | 61 |      def parse(self, data):
 | 
	
		
			
			| 62 |  | -        if data not in self.choices and data != self.value:
 | 
	
		
			
			| 63 |  | -            # hack to give some backwards compatibility with old language cookies
 | 
	
		
			
			| 64 |  | -            data = str(data).replace('_', '-')
 | 
	
		
			
			| 65 |  | -            lang = data[:2]
 | 
	
		
			
			| 66 |  | -            if data in self.choices:
 | 
	
		
			
			| 67 |  | -                pass
 | 
	
		
			
			| 68 |  | -            elif lang in self.choices:
 | 
	
		
			
			| 69 |  | -                data = lang
 | 
	
		
			
			| 70 |  | -            elif data == 'ar-XA':
 | 
	
		
			
			| 71 |  | -                data = 'ar-SA'
 | 
	
		
			
			| 72 |  | -            else:
 | 
	
		
			
			| 73 |  | -                data = 'all'
 | 
	
		
			
			|  | 62 | +        self._validate_selection(data)
 | 
	
		
			
			| 74 | 63 |          self.value = data
 | 
	
		
			
			| 75 | 64 |  
 | 
	
		
			
			| 76 | 65 |  
 | 
	
	
		
			
			|  | @@ -106,6 +95,25 @@ class MultipleChoiceSetting(EnumStringSetting):
 | 
	
		
			
			| 106 | 95 |          resp.set_cookie(name, ','.join(self.value), max_age=COOKIE_MAX_AGE)
 | 
	
		
			
			| 107 | 96 |  
 | 
	
		
			
			| 108 | 97 |  
 | 
	
		
			
			|  | 98 | +class SearchLanguageSetting(EnumStringSetting):
 | 
	
		
			
			|  | 99 | +    """Available choices may change, so user's value may not be in choices anymore"""
 | 
	
		
			
			|  | 100 | +
 | 
	
		
			
			|  | 101 | +    def parse(self, data):
 | 
	
		
			
			|  | 102 | +        if data not in self.choices and data != self.value:
 | 
	
		
			
			|  | 103 | +            # hack to give some backwards compatibility with old language cookies
 | 
	
		
			
			|  | 104 | +            data = str(data).replace('_', '-')
 | 
	
		
			
			|  | 105 | +            lang = data.split('-')[0]
 | 
	
		
			
			|  | 106 | +            if data in self.choices:
 | 
	
		
			
			|  | 107 | +                pass
 | 
	
		
			
			|  | 108 | +            elif lang in self.choices:
 | 
	
		
			
			|  | 109 | +                data = lang
 | 
	
		
			
			|  | 110 | +            elif data == 'ar-XA':
 | 
	
		
			
			|  | 111 | +                data = 'ar-SA'
 | 
	
		
			
			|  | 112 | +            else:
 | 
	
		
			
			|  | 113 | +                data = 'all'
 | 
	
		
			
			|  | 114 | +        self.value = data
 | 
	
		
			
			|  | 115 | +
 | 
	
		
			
			|  | 116 | +
 | 
	
		
			
			| 109 | 117 |  class MapSetting(Setting):
 | 
	
		
			
			| 110 | 118 |      """Setting of a value that has to be translated in order to be storable"""
 | 
	
		
			
			| 111 | 119 |  
 | 
	
	
		
			
			|  | @@ -227,8 +235,8 @@ class Preferences(object):
 | 
	
		
			
			| 227 | 235 |          super(Preferences, self).__init__()
 | 
	
		
			
			| 228 | 236 |  
 | 
	
		
			
			| 229 | 237 |          self.key_value_settings = {'categories': MultipleChoiceSetting(['general'], choices=categories),
 | 
	
		
			
			| 230 |  | -                                   'language': EnumStringSetting(settings['search']['language'],
 | 
	
		
			
			| 231 |  | -                                                                 choices=LANGUAGE_CODES),
 | 
	
		
			
			|  | 238 | +                                   'language': SearchLanguageSetting(settings['search']['language'],
 | 
	
		
			
			|  | 239 | +                                                                     choices=LANGUAGE_CODES),
 | 
	
		
			
			| 232 | 240 |                                     'locale': EnumStringSetting(settings['ui']['default_locale'],
 | 
	
		
			
			| 233 | 241 |                                                                 choices=settings['locales'].keys() + ['']),
 | 
	
		
			
			| 234 | 242 |                                     'autocomplete': EnumStringSetting(settings['search']['autocomplete'],
 |