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

Unified Diff: chrome/browser/cocoa/ui_localizer.mm

Issue 164260: ObjC classes generated by the build and used in Xib files is already getting ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 4 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 | « chrome/browser/cocoa/ui_localizer.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/cocoa/ui_localizer.mm
===================================================================
--- chrome/browser/cocoa/ui_localizer.mm (revision 23016)
+++ chrome/browser/cocoa/ui_localizer.mm (working copy)
@@ -6,53 +6,33 @@
#import <Foundation/Foundation.h>
+#include <stdlib.h>
#include "app/l10n_util_mac.h"
#include "base/sys_string_conversions.h"
#include "base/logging.h"
+#include "grit/app_strings.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
-namespace ui_localizer {
+struct UILocalizerResourceMap {
+ const char* const name;
+ unsigned int label_id;
+ unsigned int label_arg_id;
+};
-NSString* LocalizedStringForKeyFromMapList(NSString* key,
- const ResourceMap* map_list,
- size_t map_list_len) {
- DCHECK(key != nil);
- DCHECK(map_list != NULL);
- // Look up the string for the resource id to fetch.
- const char* utf8_key = [key UTF8String];
- if (utf8_key) {
- // If we end up with enough string constants in here, look at using bsearch
- // to speed up the searching.
- for (size_t i = 0; i < map_list_len; ++i) {
- int strcmp_result = strcmp(utf8_key, map_list[i].name);
- if (strcmp_result == 0) {
- // Do we need to build the string, or just fetch it?
- if (map_list[i].label_arg_id != 0) {
- const string16 label_arg(
- l10n_util::GetStringUTF16(map_list[i].label_arg_id));
- return l10n_util::GetNSStringFWithFixup(map_list[i].label_id,
- label_arg);
- }
+namespace {
- return l10n_util::GetNSStringWithFixup(map_list[i].label_id);
- }
-
- // If we've passed where the string would be, give up.
- if (strcmp_result < 0)
- break;
- }
- }
-
- // Sanity check, there shouldn't be any strings with this id that aren't
- // in our map.
- DLOG_IF(WARNING, [key hasPrefix:@"^ID"]) << "Key '" << utf8_key
- << "' wasn't in the resource map?";
-
- // If we didn't find anything, this string doesn't need localizing.
- return nil;
+// Utility function for bsearch on a ResourceMap table
+int ResourceMapCompare(const void* utf8Void,
+ const void* resourceMapVoid) {
+ const char* utf8_key = reinterpret_cast<const char*>(utf8Void);
+ const UILocalizerResourceMap* res_map =
+ reinterpret_cast<const UILocalizerResourceMap*> (resourceMapVoid);
+ return strcmp(utf8_key, res_map->name);
}
-} // namespace ui_localizer
+} // namespace
@interface GTMUILocalizer (PrivateAdditions)
- (void)localizedObjects;
@@ -69,17 +49,49 @@
@end
@implementation ChromeUILocalizer
+
- (void)awakeFromNib {
// The GTM base is bundle based, since don't need the bundle, use this
// override to bypass the bundle lookup and directly do the localization
// calls.
[self localizedObjects];
}
-#ifndef NDEBUG
-// Catch anyone that uses this directly.
+
- (NSString *)localizedStringForString:(NSString *)string {
- LOG(FATAL) << "Don't use ChromeUILocalizer directly.";
- return @"Don't use ChromeUILocalizer directly.";
+
+ // Include the table here so it is a local static. This header provides
+ // kUIResources and kUIResourcesSize.
+#include "ui_localizer_table.h"
+
+ // Look up the string for the resource id to fetch.
+ const char* utf8_key = [string UTF8String];
+ if (utf8_key) {
+ const void* valVoid = bsearch(utf8_key,
+ kUIResources,
+ kUIResourcesSize,
+ sizeof(UILocalizerResourceMap),
+ ResourceMapCompare);
+ const UILocalizerResourceMap* val =
+ reinterpret_cast<const UILocalizerResourceMap*>(valVoid);
+ if (val) {
+ // Do we need to build the string, or just fetch it?
+ if (val->label_arg_id != 0) {
+ const string16 label_arg(l10n_util::GetStringUTF16(val->label_arg_id));
+ return l10n_util::GetNSStringFWithFixup(val->label_id,
+ label_arg);
+ }
+
+ return l10n_util::GetNSStringWithFixup(val->label_id);
+ }
+
+ // Sanity check, there shouldn't be any strings with this id that aren't
+ // in our map.
+ DLOG_IF(WARNING, [string hasPrefix:@"^ID"]) << "Key '" << utf8_key
+ << "' wasn't in the resource map?";
+ }
+
+ // If we didn't find anything, this string doesn't need localizing.
+ return nil;
}
-#endif
+
@end
« no previous file with comments | « chrome/browser/cocoa/ui_localizer.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698