1#!/usr/bin/env python3 2# 3# Copyright 2018 The Chromium Authors 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6 7"""Generate a zip archive containing localized locale name Android resource 8strings! 9 10This script takes a list of input Chrome-specific locale names, as well as an 11output zip file path. 12 13Each output file will contain the definition of a single string resource, 14named 'current_locale', whose value will be the matching Chromium locale name. 15E.g. values-en-rUS/strings.xml will define 'current_locale' as 'en-US'. 16""" 17 18import argparse 19import os 20import sys 21import zipfile 22 23sys.path.insert( 24 0, 25 os.path.join( 26 os.path.dirname(__file__), '..', '..', '..', 'build', 'android', 'gyp')) 27 28from util import build_utils 29from util import resource_utils 30import action_helpers # build_utils adds //build to sys.path. 31import zip_helpers 32 33 34# A small string template for the content of each strings.xml file. 35# NOTE: The name is chosen to avoid any conflicts with other string defined 36# by other resource archives. 37_TEMPLATE = """\ 38<?xml version="1.0" encoding="utf-8"?> 39<resources> 40 <string name="current_detected_ui_locale_name">{resource_text}</string> 41</resources> 42""" 43 44# The default Chrome locale value. 45_DEFAULT_CHROME_LOCALE = 'en-US' 46 47 48def _GenerateLocaleStringsXml(locale): 49 return _TEMPLATE.format(resource_text=locale) 50 51 52def _AddLocaleResourceFileToZip(out_zip, android_locale, locale): 53 locale_data = _GenerateLocaleStringsXml(locale) 54 if android_locale: 55 zip_path = 'values-%s/strings.xml' % android_locale 56 else: 57 zip_path = 'values/strings.xml' 58 zip_helpers.add_to_zip_hermetic(out_zip, 59 zip_path, 60 data=locale_data, 61 compress=False) 62 63 64def main(): 65 parser = argparse.ArgumentParser( 66 description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) 67 68 parser.add_argument( 69 '--locale-list', 70 required=True, 71 help='GN-list of Chrome-specific locale names.') 72 parser.add_argument( 73 '--output-zip', required=True, help='Output zip archive path.') 74 75 args = parser.parse_args() 76 77 locale_list = action_helpers.parse_gn_list(args.locale_list) 78 if not locale_list: 79 raise Exception('Locale list cannot be empty!') 80 81 with action_helpers.atomic_output(args.output_zip) as tmp_file: 82 with zipfile.ZipFile(tmp_file, 'w') as out_zip: 83 # First, write the default value, since aapt requires one. 84 _AddLocaleResourceFileToZip(out_zip, '', _DEFAULT_CHROME_LOCALE) 85 86 for locale in locale_list: 87 android_locale = resource_utils.ToAndroidLocaleName(locale) 88 _AddLocaleResourceFileToZip(out_zip, android_locale, locale) 89 90 91if __name__ == '__main__': 92 main() 93