blob: 8cc8eb25e729282b54de8594fde1578f03b17fa2 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Formats as a .js file using a map: <english text> -> <localized text>.
"""
import re
from grit import util
"""The required preamble for JS files."""
_HEADER = '// This file is automatically generated by GRIT. Do not edit.\n'
def Format(root, lang='en', output_dir='.'):
from grit.node import empty, message
yield _HEADER
for item in root.ActiveDescendants():
with item:
if isinstance(item, message.MessageNode):
yield _FormatMessage(item, lang)
elif isinstance(item, empty.MessagesNode):
yield '\n'
def _FormatMessage(item, lang):
"""Format a single message."""
en_message = item.ws_at_start + item.Translate('en') + item.ws_at_end
# Remove position numbers from placeholders.
en_message = re.sub(r'%\d\$([a-z])', r'%\1', en_message)
# Escape double quotes.
en_message = re.sub(r'\\', r'\\\\', en_message)
en_message = re.sub(r'"', r'\"', en_message)
loc_message = item.ws_at_start + item.Translate(lang) + item.ws_at_end
# Escape double quotes.
loc_message = re.sub(r'\\', r'\\\\', loc_message)
loc_message = re.sub(r'"', r'\"', loc_message)
return '\nlocalizedStrings["%s"] = "%s";' % (en_message, loc_message)