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

Unified Diff: build/mac/generate_localizer

Issue 155774: Starting mac l10n:... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/app/chromium_strings.grd » ('j') | chrome/browser/cocoa/ui_localizer.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/mac/generate_localizer
===================================================================
--- build/mac/generate_localizer (revision 0)
+++ build/mac/generate_localizer (revision 0)
@@ -0,0 +1,175 @@
+#!/usr/bin/python
+
+# Copyright (c) 2009 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.
+
+# Usage: generate_localizer [xib_path] [output_dot_h_path] [output_dot_mm_path]
+#
+# Extracts all the localizable strings that start with "^IDS" from the given
+# xib file, and then generates a localizer to process those strings.
+
+import os.path
+import plistlib
+import subprocess
+import sys
+
+generate_localizer = "me"
+
+localizer_template_h = \
+'''// ---------- WARNING ----------
+// THIS IS A GENERATED FILE, DO NOT EDIT IT DIRECTLY!
+//
+// Generated by %(generate_localizer)s.
+// Generated from %(xib_file)s.
+//
+
+#ifndef %(class_name)s_LOCALIZER_H_
+#define %(class_name)s_LOCALIZER_H_
+
+#import "third_party/GTM/AppKit/GTMUILocalizer.h"
+
+// A subclass of GTMUILocalizer that handles localizes based on resource
+// constants.
+
+@interface %(class_name)sLocalizer : GTMUILocalizer {
+}
+@end
+
+#endif // %(class_name)s_LOCALIZER_H_
+'''
+
+localizer_template_mm = \
+'''// ---------- WARNING ----------
+// THIS IS A GENERATED FILE, DO NOT EDIT IT DIRECTLY!
+//
+// Generated by '%(generate_localizer)s'.
+// Generated from '%(xib_file)s'.
+//
+
+#import "%(header_name)s"
+
+#import "chrome/browser/cocoa/ui_localizer.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+
+@implementation %(class_name)sLocalizer
+
+- (NSString *)localizedStringForString:(NSString *)string {
+
+ static const ui_localizer::ResourceMap kUIResources[] = {
+%(resource_map_list)s };
+ static const size_t kUIResourcesSize = arraysize(kUIResources);
+
+ return ui_localizer::LocalizedStringForKeyFromMapList(string,
+ kUIResources,
+ kUIResourcesSize);
+}
+
+@end
+'''
+
+def xib_localizable_strings(xib_path):
+ """Runs ibtool to extract the localizable strings data from the xib."""
+ ibtool_cmd = subprocess.Popen(['/usr/bin/ibtool', '--localizable-strings',
+ xib_path],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ (cmd_out, cmd_err) = ibtool_cmd.communicate()
+ if ibtool_cmd.returncode:
+ sys.stderr.write('%s:0: error: ibtool on "%s" failed (%d):\n%s\n' %
+ (generate_localizer, xib_path, ibtool_cmd.returncode,
+ cmd_err))
+ return None
+ return cmd_out
+
+def extract_resource_constants(plist_localizable_strings_dict, xib_path):
+ """Extracts all the values that start with ^IDS from the localizable
+ strings plist entry."""
+ constants_list = []
+ for item_dict in plist_localizable_strings_dict.itervalues():
+ for item_value in item_dict.itervalues():
+ if item_value.startswith('^IDS'):
+ constants_list.append(item_value)
+ elif item_value.startswith('IDS'):
+ sys.stderr.write(
+ '%s:0: warning: %s found a string with questionable prefix, "%s"\n'
+ % (xib_path, generate_localizer, item_value));
+ return constants_list
+
+def generate_files_contents(class_name, constants_list, header_name, xib_path):
+ """Generates a localizer files contents from the list of constants."""
+ # Copy and sort the list, then build the strings we need from it.
+ constants_list = constants_list[:]
+ constants_list.sort()
+ constant_list_str = ''
+ for item in constants_list:
+ parts = item.split('$', 1)
+ label_id = parts[0]
+ if len(parts) == 2:
+ label_arg_id = parts[1]
+ else:
+ label_arg_id = '0'
+ constant_list_str += ' { "%s", %s, %s },\n' % \
+ ( item, label_id[1:], label_arg_id)
+ # Assemble the contents from the templates.
+ values_dict = {
+ 'class_name': class_name,
+ 'header_name': header_name,
+ 'resource_map_list': constant_list_str,
+ 'generate_localizer': generate_localizer,
+ 'xib_file': xib_path,
+ }
+ h_file = localizer_template_h % values_dict
+ mm_file = localizer_template_mm % values_dict
+ return (h_file, mm_file)
+
+
+def Main(argv=None):
+ global generate_localizer
+ generate_localizer = os.path.basename(argv[0])
+
+ # Args
+ if len(argv) != 4:
+ sys.stderr.write('%s:0: error: Expected xib and output file arguments\n' %
+ generate_localizer);
+ return 1
+ xib_path, output_h_path, output_mm_path = argv[1:]
+
+ # Run ibtool and convert to something Python can deal with
+ plist_string = xib_localizable_strings(xib_path)
+ if not plist_string:
+ return 2
+ plist = plistlib.readPlistFromString(plist_string)
+
+ # Extract the resource constant strings
+ localizable_strings = plist['com.apple.ibtool.document.localizable-strings']
+ constants_list = extract_resource_constants(localizable_strings, xib_path)
+ if not constants_list:
+ sys.stderr.write("%s:0: warning: %s didn't find any resource strings\n" %
+ xib_path, generate_localizer);
+
+ # Name the class based on the output file
+ class_name = os.path.splitext(os.path.basename(output_h_path))[0]
+ suffix = '_localizer'
+ if class_name.endswith(suffix):
+ class_name = class_name[:-len(suffix)];
+ class_name = class_name.replace('_', ' ').title().replace(' ', '');
+
+ # Generate our file contents
+ (h_file_content, mm_file_content) = \
+ generate_files_contents(class_name, constants_list,
+ os.path.basename(output_h_path),
+ xib_path)
+
+ # Write out the files
+ file_fd = open(output_h_path, 'w')
+ file_fd.write(h_file_content)
+ file_fd.close()
+ file_fd = open(output_mm_path, 'w')
+ file_fd.write(mm_file_content)
+ file_fd.close()
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv))
Property changes on: build/mac/generate_localizer
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:eol-style
+ LF
« no previous file with comments | « no previous file | chrome/app/chromium_strings.grd » ('j') | chrome/browser/cocoa/ui_localizer.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698