199776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org#!/usr/bin/env python 299776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved. 399776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org# Use of this source code is governed by a BSD-style license that can be 499776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org# found in the LICENSE file. 599776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org 699776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org"""Formats as a .json file that can be used to localize Google Chrome 799776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgextensions.""" 899776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org 9fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.orgfrom json import JSONEncoder 1099776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgimport re 1199776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgimport types 1299776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org 1399776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgfrom grit import util 1499776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.orgfrom grit.node import message 1599776fe1478b6a3efca5ce1f33919556f9d5fc46sergeyu@chromium.org 16ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.orgdef Format(root, lang='en', output_dir='.'): 17ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org """Format the messages as JSON.""" 18ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org yield '{\n' 19ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org 20fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.org encoder = JSONEncoder(); 21ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org format = (' "%s": {\n' 22fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.org ' "message": %s\n' 23ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org ' }') 24ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org first = True 25376fd9b1ffd91cfad9a4a7006a5218bc1ab4e652sergeyu@chromium.org for child in root.ActiveDescendants(): 26ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org if isinstance(child, message.MessageNode): 27ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org id = child.attrs['name'] 28e297aa63727b070e6095c669fcb79cc5a996ced7sergeyu@chromium.org if id.startswith('IDR_') or id.startswith('IDS_'): 29ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org id = id[4:] 30ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org 3107bb47d85119a022535b1f054627d7eeb13d5cc9sergeyu@chromium.org loc_message = encoder.encode(child.ws_at_start + child.Translate(lang) + 3207bb47d85119a022535b1f054627d7eeb13d5cc9sergeyu@chromium.org child.ws_at_end) 33fbf8c54856bccf2d3e2431127ab334ab1dbd619ejoi@chromium.org 34ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org if not first: 35ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org yield ',\n' 36ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org first = False 37ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org yield format % (id, loc_message) 38ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org 39ccda47032903a6550dac2921f88c51b4da55aa36benrg@chromium.org yield '\n}\n' 40