comparison babel/messages/catalog.py @ 545:afdab04b8527

Catalog class should not do decoding of input strings (fixes #256)
author fschwarz
date Sat, 19 Mar 2011 19:34:40 +0000
parents 030ddf3f5b13
children
comparison
equal deleted inserted replaced
544:030ddf3f5b13 545:afdab04b8527
322 headers.append(('Generated-By', 'Babel %s\n' % VERSION)) 322 headers.append(('Generated-By', 'Babel %s\n' % VERSION))
323 return headers 323 return headers
324 324
325 def _set_mime_headers(self, headers): 325 def _set_mime_headers(self, headers):
326 for name, value in headers: 326 for name, value in headers:
327 if name.lower() == 'content-type': 327 name = name.lower()
328 mimetype, params = parse_header(value)
329 if 'charset' in params:
330 self.charset = params['charset'].lower()
331 break
332 for name, value in headers:
333 name = name.lower().decode(self.charset)
334 value = value.decode(self.charset)
335 if name == 'project-id-version': 328 if name == 'project-id-version':
336 parts = value.split(' ') 329 parts = value.split(' ')
337 self.project = u' '.join(parts[:-1]) 330 self.project = u' '.join(parts[:-1])
338 self.version = parts[-1] 331 self.version = parts[-1]
339 elif name == 'report-msgid-bugs-to': 332 elif name == 'report-msgid-bugs-to':
340 self.msgid_bugs_address = value 333 self.msgid_bugs_address = value
341 elif name == 'last-translator': 334 elif name == 'last-translator':
342 self.last_translator = value 335 self.last_translator = value
343 elif name == 'language-team': 336 elif name == 'language-team':
344 self.language_team = value 337 self.language_team = value
338 elif name == 'content-type':
339 mimetype, params = parse_header(value)
340 if 'charset' in params:
341 self.charset = params['charset'].lower()
345 elif name == 'plural-forms': 342 elif name == 'plural-forms':
346 _, params = parse_header(' ;' + value) 343 _, params = parse_header(' ;' + value)
347 self._num_plurals = int(params.get('nplurals', 2)) 344 self._num_plurals = int(params.get('nplurals', 2))
348 self._plural_expr = params.get('plural', '(n != 1)') 345 self._plural_expr = params.get('plural', '(n != 1)')
349 elif name == 'pot-creation-date': 346 elif name == 'pot-creation-date':
588 message.user_comments)) 585 message.user_comments))
589 current.flags |= message.flags 586 current.flags |= message.flags
590 message = current 587 message = current
591 elif id == '': 588 elif id == '':
592 # special treatment for the header message 589 # special treatment for the header message
593 headers = message_from_string(message.string.encode(self.charset)) 590 def _parse_header(header_string):
594 self.mime_headers = headers.items() 591 # message_from_string only works for str, not for unicode
592 headers = message_from_string(header_string.encode('utf8'))
593 decoded_headers = {}
594 for name, value in headers.items():
595 name = name.decode('utf8')
596 value = value.decode('utf8')
597 decoded_headers[name] = value
598 return decoded_headers
599 self.mime_headers = _parse_header(message.string).items()
595 self.header_comment = '\n'.join(['# %s' % comment for comment 600 self.header_comment = '\n'.join(['# %s' % comment for comment
596 in message.user_comments]) 601 in message.user_comments])
597 self.fuzzy = message.fuzzy 602 self.fuzzy = message.fuzzy
598 else: 603 else:
599 if isinstance(id, (list, tuple)): 604 if isinstance(id, (list, tuple)):
Copyright (C) 2012-2017 Edgewall Software