Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: build/android/gyp/locale_pak_resources.py

Issue 2369683002: Revert of Move language pak files to assets. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/gyp/locale_pak_assets.py ('k') | build/android/gyp/write_build_config.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 #
3 # Copyright 2015 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6 """Creates a resources.zip for locale .pak files.
7
8 Places the locale.pak files into appropriate resource configs
9 (e.g. en-GB.pak -> res/raw-en/en_gb.lpak). Also generates a locale_paks
10 TypedArray so that resource files can be enumerated at runtime.
11 """
12
13 import collections
14 import optparse
15 import os
16 import sys
17 import zipfile
18
19 from util import build_utils
20
21
22 # This should stay in sync with:
23 # base/android/java/src/org/chromium/base/LocaleUtils.java
24 _CHROME_TO_ANDROID_LOCALE_MAP = {
25 'he': 'iw',
26 'id': 'in',
27 'fil': 'tl',
28 }
29
30
31 def ToResourceFileName(name):
32 """Returns the resource-compatible file name for the given file."""
33 # Resources file names must consist of [a-z0-9_.].
34 # Changes extension to .lpak so that compression can be toggled separately for
35 # locale pak files vs other pak files.
36 return name.replace('-', '_').replace('.pak', '.lpak').lower()
37
38
39 def CreateLocalePaksXml(names):
40 """Creates the contents for the locale-paks.xml files."""
41 VALUES_FILE_TEMPLATE = '''<?xml version="1.0" encoding="utf-8"?>
42 <resources>
43 <array name="locale_paks">%s
44 </array>
45 </resources>
46 '''
47 VALUES_ITEM_TEMPLATE = '''
48 <item>@raw/%s</item>'''
49
50 res_names = (os.path.splitext(name)[0] for name in names)
51 items = ''.join((VALUES_ITEM_TEMPLATE % name for name in res_names))
52 return VALUES_FILE_TEMPLATE % items
53
54
55 def ComputeMappings(sources):
56 """Computes the mappings of sources -> resources.
57
58 Returns a tuple of:
59 - mappings: List of (src, dest) paths
60 - lang_to_locale_map: Map of language -> list of resource names
61 e.g. "en" -> ["en_gb.lpak"]
62 """
63 lang_to_locale_map = collections.defaultdict(list)
64 mappings = []
65 for src_path in sources:
66 basename = os.path.basename(src_path)
67 name = os.path.splitext(basename)[0]
68 res_name = ToResourceFileName(basename)
69 if name == 'en-US':
70 dest_dir = 'raw'
71 else:
72 # Chrome's uses different region mapping logic from Android, so include
73 # all regions for each language.
74 android_locale = _CHROME_TO_ANDROID_LOCALE_MAP.get(name, name)
75 lang = android_locale[0:2]
76 dest_dir = 'raw-' + lang
77 lang_to_locale_map[lang].append(res_name)
78 mappings.append((src_path, os.path.join(dest_dir, res_name)))
79 return mappings, lang_to_locale_map
80
81
82 def main():
83 parser = optparse.OptionParser()
84 build_utils.AddDepfileOption(parser)
85 parser.add_option('--locale-paks', help='List of files for res/raw-LOCALE')
86 parser.add_option('--resources-zip', help='Path to output resources.zip')
87 parser.add_option('--print-languages',
88 action='store_true',
89 help='Print out the list of languages that cover the given locale paks '
90 '(using Android\'s language codes)')
91
92 options, _ = parser.parse_args()
93 build_utils.CheckOptions(options, parser,
94 required=['locale_paks'])
95
96 sources = build_utils.ParseGnList(options.locale_paks)
97
98 if options.depfile:
99 assert options.resources_zip
100 build_utils.WriteDepfile(options.depfile, options.resources_zip, sources)
101
102 mappings, lang_to_locale_map = ComputeMappings(sources)
103 if options.print_languages:
104 print '\n'.join(sorted(lang_to_locale_map))
105
106 if options.resources_zip:
107 with zipfile.ZipFile(options.resources_zip, 'w', zipfile.ZIP_STORED) as out:
108 for mapping in mappings:
109 out.write(mapping[0], mapping[1])
110
111 # Create TypedArray resources so ResourceExtractor can enumerate files.
112 def WriteValuesFile(lang, names):
113 dest_dir = 'values'
114 if lang:
115 dest_dir += '-' + lang
116 # Always extract en-US.lpak since it's the fallback.
117 xml = CreateLocalePaksXml(names + ['en_us.lpak'])
118 out.writestr(os.path.join(dest_dir, 'locale-paks.xml'), xml)
119
120 for lang, names in lang_to_locale_map.iteritems():
121 WriteValuesFile(lang, names)
122 WriteValuesFile(None, [])
123
124
125 if __name__ == '__main__':
126 sys.exit(main())
OLDNEW
« no previous file with comments | « build/android/gyp/locale_pak_assets.py ('k') | build/android/gyp/write_build_config.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698