Index: grit/format/chrome_messages_json.py |
diff --git a/grit/format/chrome_messages_json.py b/grit/format/chrome_messages_json.py |
index be934ab1175924657a79796dbf0def4c2464ec5f..27ac36135f40b727c36fd669bc34902ef407781b 100644 |
--- a/grit/format/chrome_messages_json.py |
+++ b/grit/format/chrome_messages_json.py |
@@ -19,8 +19,11 @@ def Format(root, lang='en', output_dir='.'): |
encoder = JSONEncoder(); |
format = (' "%s": {\n' |
- ' "message": %s\n' |
+ ' "message": %s%s\n' |
' }') |
+ placeholder_format = (' "%i": {\n' |
+ ' "content": "$%i"\n' |
+ ' }') |
first = True |
for child in root.ActiveDescendants(): |
if isinstance(child, message.MessageNode): |
@@ -31,9 +34,24 @@ def Format(root, lang='en', output_dir='.'): |
loc_message = encoder.encode(child.ws_at_start + child.Translate(lang) + |
child.ws_at_end) |
+ # Replace $n place-holders with $n$ and add an appropriate "placeholders" |
+ # entry. Note that chrome.i18n.getMessage only supports 9 placeholders: |
+ # https://developer.chrome.com/extensions/i18n#method-getMessage |
+ placeholders = '' |
+ for i in range(1, 10): |
+ if loc_message.find('$%d' % i) == -1: |
+ break |
+ loc_message = loc_message.replace('$%d' % i, '$%d$' % i) |
+ if placeholders: |
+ placeholders += ',\n' |
+ placeholders += placeholder_format % (i, i) |
+ |
if not first: |
yield ',\n' |
first = False |
- yield format % (id, loc_message) |
+ |
+ if placeholders: |
+ placeholders = ',\n "placeholders": {\n%s\n }' % placeholders |
+ yield format % (id, loc_message, placeholders) |
yield '\n}\n' |