OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 | 2 |
3 # Copyright (c) 2009 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2009 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 # Usage: generate_localizer [xib_path] [output_dot_h_path] [output_dot_mm_path] | 7 # Usage: generate_localizer [xib_path] [output_dot_h_path] [output_dot_mm_path] |
8 # | 8 # |
9 # Extracts all the localizable strings that start with "^IDS" from the given | 9 # Extracts all the localizable strings that start with "^IDS" from the given |
10 # xib file, and then generates a localizer to process those strings. | 10 # xib file, and then generates a localizer to process those strings. |
11 | 11 |
| 12 |
| 13 import argparse |
| 14 import logging |
12 import os | 15 import os |
13 import plistlib | 16 import plistlib |
14 import subprocess | 17 import subprocess |
15 import sys | 18 import sys |
16 | 19 |
17 generate_localizer = "me" | 20 generate_localizer = "me" |
18 | 21 |
19 localizer_template_h = \ | 22 localizer_template_h = \ |
20 '''// ---------- WARNING ---------- | 23 '''// ---------- WARNING ---------- |
21 // THIS IS A GENERATED FILE, DO NOT EDIT IT DIRECTLY! | 24 // THIS IS A GENERATED FILE, DO NOT EDIT IT DIRECTLY! |
22 // | 25 // |
23 // This header includes the table used by ui_localizer.mm. Nothing else should | 26 // This header includes the table used by ui_localizer.mm. Nothing else should |
24 // be including this file. | 27 // be including this file. |
25 // | 28 // |
26 // Generated by %(generate_localizer)s. | 29 // Generated by %(generate_localizer)s. |
27 // Generated from: | 30 // Generated from: |
28 // %(xib_files)s | 31 // %(xib_files)s |
29 // | 32 // |
30 | 33 |
31 #ifndef CHROME_APP_NIBS_LOCALIZER_TABLE_H_ | 34 #ifndef CHROME_APP_NIBS_LOCALIZER_TABLE_H_ |
32 #define CHROME_APP_NIBS_LOCALIZER_TABLE_H_ | 35 #define CHROME_APP_NIBS_LOCALIZER_TABLE_H_ |
33 | 36 |
34 static const UILocalizerResourceMap kUIResources[] = { | 37 static const UILocalizerResourceMap kUIResources[] = { |
35 %(resource_map_list)s }; | 38 %(resource_map_list)s }; |
36 static const size_t kUIResourcesSize = arraysize(kUIResources); | 39 static const size_t kUIResourcesSize = arraysize(kUIResources); |
37 | 40 |
38 #endif // CHROME_APP_NIBS_LOCALIZER_TABLE_H_ | 41 #endif // CHROME_APP_NIBS_LOCALIZER_TABLE_H_ |
39 ''' | 42 ''' |
40 | 43 |
41 def xib_localizable_strings(xib_path): | 44 def xib_localizable_strings(xib_path, xcode_path): |
42 """Runs ibtool to extract the localizable strings data from the xib.""" | 45 """Runs ibtool to extract the localizable strings data from the xib.""" |
43 # Take SDKROOT out of the environment passed to ibtool. ibtool itself has | 46 # Take SDKROOT out of the environment passed to ibtool. ibtool itself has |
44 # no need for it, but when ibtool runs via xcrun and Xcode isn't aware of | 47 # no need for it, but when ibtool runs via xcrun and Xcode isn't aware of |
45 # the SDK in use, its presence causes an error. | 48 # the SDK in use, its presence causes an error. |
| 49 ibtool_env = os.environ.copy() |
46 if 'SDKROOT' in os.environ: | 50 if 'SDKROOT' in os.environ: |
47 ibtool_env = os.environ.copy() | |
48 del ibtool_env['SDKROOT'] | 51 del ibtool_env['SDKROOT'] |
49 else: | 52 if xcode_path: |
50 ibtool_env = os.environ | 53 ibtool_env['DEVELOPER_DIR'] = xcode_path |
51 | 54 |
52 ibtool_cmd = subprocess.Popen(['xcrun', 'ibtool', | 55 command = ['xcrun', 'ibtool', '--localizable-strings', xib_path] |
53 '--localizable-strings', xib_path], | 56 ibtool_cmd = subprocess.Popen(command, |
54 stdout=subprocess.PIPE, stderr=subprocess.PIPE, | 57 stdout=subprocess.PIPE, stderr=subprocess.PIPE, |
55 env=ibtool_env) | 58 env=ibtool_env) |
56 (cmd_out, cmd_err) = ibtool_cmd.communicate() | 59 (cmd_out, cmd_err) = ibtool_cmd.communicate() |
57 if ibtool_cmd.returncode: | 60 if ibtool_cmd.returncode: |
58 sys.stderr.write('%s:0: error: ibtool on "%s" failed (%d):\n%s\n' % | 61 sys.stderr.write('%s:0: error: ibtool on "%s" failed (%d):\n%s\n' % |
59 (generate_localizer, xib_path, ibtool_cmd.returncode, | 62 (generate_localizer, xib_path, ibtool_cmd.returncode, |
60 cmd_err)) | 63 cmd_err)) |
61 return None | 64 return None |
62 return cmd_out | 65 return cmd_out |
63 | 66 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 'xib_files': "\n// ".join(xib_paths), | 100 'xib_files': "\n// ".join(xib_paths), |
98 } | 101 } |
99 h_file = localizer_template_h % values_dict | 102 h_file = localizer_template_h % values_dict |
100 return h_file | 103 return h_file |
101 | 104 |
102 | 105 |
103 def Main(argv=None): | 106 def Main(argv=None): |
104 global generate_localizer | 107 global generate_localizer |
105 generate_localizer = os.path.basename(argv[0]) | 108 generate_localizer = os.path.basename(argv[0]) |
106 | 109 |
107 # Args | 110 parser = argparse.ArgumentParser( |
108 if len(argv) < 3: | 111 description='Generates a header file that localizes libs.') |
109 sys.stderr.write('%s:0: error: Expected output file and then xibs\n' % | 112 parser.add_argument('--output_path', required=True, |
110 generate_localizer); | 113 help='Path to output header file.') |
111 return 1 | 114 parser.add_argument('--developer_dir', required=False, |
112 output_path = argv[1]; | 115 help='Path to Xcode.') |
113 xib_paths = argv[2:] | 116 parser.add_argument('xibs', nargs='+', |
| 117 help='A list of xibs to localize') |
| 118 args = parser.parse_args() |
| 119 |
| 120 output_path = args.output_path |
| 121 xib_paths = args.xibs |
114 | 122 |
115 full_constants_list = [] | 123 full_constants_list = [] |
116 for xib_path in xib_paths: | 124 for xib_path in xib_paths: |
117 # Run ibtool and convert to something Python can deal with | 125 # Run ibtool and convert to something Python can deal with |
118 plist_string = xib_localizable_strings(xib_path) | 126 plist_string = xib_localizable_strings(xib_path, args.developer_dir) |
119 if not plist_string: | 127 if not plist_string: |
120 return 2 | 128 return 2 |
121 plist = plistlib.readPlistFromString(plist_string) | 129 plist = plistlib.readPlistFromString(plist_string) |
122 | 130 |
123 # Extract the resource constant strings | 131 # Extract the resource constant strings |
124 localizable_strings = plist['com.apple.ibtool.document.localizable-strings'] | 132 localizable_strings = plist['com.apple.ibtool.document.localizable-strings'] |
125 constants_list = extract_resource_constants(localizable_strings, xib_path) | 133 constants_list = extract_resource_constants(localizable_strings, xib_path) |
126 if not constants_list: | 134 if not constants_list: |
127 sys.stderr.write("%s:0: warning: %s didn't find any resource strings\n" % | 135 sys.stderr.write("%s:0: warning: %s didn't find any resource strings\n" % |
128 (xib_path, generate_localizer)); | 136 (xib_path, generate_localizer)); |
129 full_constants_list.extend(constants_list) | 137 full_constants_list.extend(constants_list) |
130 | 138 |
131 # Generate our file contents | 139 # Generate our file contents |
132 h_file_content = \ | 140 h_file_content = \ |
133 generate_file_contents(full_constants_list, xib_paths) | 141 generate_file_contents(full_constants_list, xib_paths) |
134 | 142 |
135 # Write out the file | 143 # Write out the file |
136 file_fd = open(output_path, 'w') | 144 file_fd = open(output_path, 'w') |
137 file_fd.write(h_file_content) | 145 file_fd.write(h_file_content) |
138 file_fd.close() | 146 file_fd.close() |
139 | 147 |
140 return 0 | 148 return 0 |
141 | 149 |
142 if __name__ == '__main__': | 150 if __name__ == '__main__': |
143 sys.exit(Main(sys.argv)) | 151 sys.exit(Main(sys.argv)) |
OLD | NEW |