From 53974a084bc914ea8666918b43803574515c9aef Mon Sep 17 00:00:00 2001 From: "gtm.daemon" Date: Wed, 20 Jan 2010 04:31:03 +0000 Subject: [Author: dmaclach] Fix for http://code.google.com/p/google-toolbox-for-mac/issues/detail?id=40. Sets up GTMUILocalizer to localize some bindings. Handles: NSMultipleValuesPlaceholderBindingOption NSNoSelectionPlaceholderBindingOption NSNotApplicablePlaceholderBindingOption NSNullPlaceholderBindingOption NSDisplayNameBindingOption, NSDisplayPatternBindingOption, R=thomasvl DELTA=1475 (815 added, 596 deleted, 64 changed) --- AppKit/GTMUILocalizer.m | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'AppKit/GTMUILocalizer.m') diff --git a/AppKit/GTMUILocalizer.m b/AppKit/GTMUILocalizer.m index eb3c8c4..d87f1b4 100644 --- a/AppKit/GTMUILocalizer.m +++ b/AppKit/GTMUILocalizer.m @@ -100,6 +100,7 @@ } else if ([object isKindOfClass:[NSCell class]]) { [self localizeCell:(NSCell *)object recursively:recursive]; } + [self localizeBindings:object]; } } @@ -317,4 +318,54 @@ } } +- (void)localizeBindings:(id)object { + NSArray *exposedBindings = [object exposedBindings]; + if (exposedBindings) { + NSString *optionsToLocalize[] = { + NSDisplayNameBindingOption, + NSDisplayPatternBindingOption, + NSMultipleValuesPlaceholderBindingOption, + NSNoSelectionPlaceholderBindingOption, + NSNotApplicablePlaceholderBindingOption, + NSNullPlaceholderBindingOption, + }; + Class stringClass = [NSString class]; + NSString *exposedBinding; + GTM_FOREACH_OBJECT(exposedBinding, exposedBindings) { + NSDictionary *bindingInfo = [object infoForBinding:exposedBinding]; + if (bindingInfo) { + id observedObject = [bindingInfo objectForKey:NSObservedObjectKey]; + NSString *path = [bindingInfo objectForKey:NSObservedKeyPathKey]; + NSDictionary *options = [bindingInfo objectForKey:NSOptionsKey]; + if (observedObject && path && options) { + NSMutableDictionary *newOptions + = [NSMutableDictionary dictionaryWithDictionary:options]; + BOOL valueChanged = NO; + for (size_t i = 0; + i < sizeof(optionsToLocalize) / sizeof(optionsToLocalize[0]); + ++i) { + NSString *key = optionsToLocalize[i]; + NSString *value = [newOptions objectForKey:key]; + if ([value isKindOfClass:stringClass]) { + NSString *localizedValue = [self localizedStringForString:value]; + if (localizedValue) { + valueChanged = YES; + [newOptions setObject:localizedValue forKey:key]; + } + } + } + if (valueChanged) { + // Only unbind and rebind if there is a change. + [object unbind:exposedBinding]; + [object bind:exposedBinding + toObject:observedObject + withKeyPath:path + options:newOptions]; + } + } + } + } + } +} + @end -- cgit v1.2.3