| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 3 # Use of this source code is governed by a BSD-style license that can be | |
| 4 # found in the LICENSE file. | |
| 5 | |
| 6 """Formats as a .json file that can be used to localize Google Chrome | |
| 7 extensions.""" | |
| 8 | |
| 9 from json import JSONEncoder | |
| 10 import re | |
| 11 import types | |
| 12 | |
| 13 from grit import util | |
| 14 from grit.node import message | |
| 15 | |
| 16 def Format(root, lang='en', output_dir='.'): | |
| 17 """Format the messages as JSON.""" | |
| 18 yield '{\n' | |
| 19 | |
| 20 encoder = JSONEncoder(); | |
| 21 format = (' "%s": {\n' | |
| 22 ' "message": %s%s\n' | |
| 23 ' }') | |
| 24 placeholder_format = (' "%i": {\n' | |
| 25 ' "content": "$%i"\n' | |
| 26 ' }') | |
| 27 first = True | |
| 28 for child in root.ActiveDescendants(): | |
| 29 if isinstance(child, message.MessageNode): | |
| 30 id = child.attrs['name'] | |
| 31 if id.startswith('IDR_') or id.startswith('IDS_'): | |
| 32 id = id[4:] | |
| 33 | |
| 34 loc_message = encoder.encode(child.ws_at_start + child.Translate(lang) + | |
| 35 child.ws_at_end) | |
| 36 | |
| 37 # Replace $n place-holders with $n$ and add an appropriate "placeholders" | |
| 38 # entry. Note that chrome.i18n.getMessage only supports 9 placeholders: | |
| 39 # https://developer.chrome.com/extensions/i18n#method-getMessage | |
| 40 placeholders = '' | |
| 41 for i in range(1, 10): | |
| 42 if loc_message.find('$%d' % i) == -1: | |
| 43 break | |
| 44 loc_message = loc_message.replace('$%d' % i, '$%d$' % i) | |
| 45 if placeholders: | |
| 46 placeholders += ',\n' | |
| 47 placeholders += placeholder_format % (i, i) | |
| 48 | |
| 49 if not first: | |
| 50 yield ',\n' | |
| 51 first = False | |
| 52 | |
| 53 if placeholders: | |
| 54 placeholders = ',\n "placeholders": {\n%s\n }' % placeholders | |
| 55 yield format % (id, loc_message, placeholders) | |
| 56 | |
| 57 yield '\n}\n' | |
| OLD | NEW |