diff options
author | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2010-01-20 04:31:03 +0000 |
---|---|---|
committer | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2010-01-20 04:31:03 +0000 |
commit | 53974a084bc914ea8666918b43803574515c9aef (patch) | |
tree | 2f22d47535abce712562870043865b52b2a090d3 /AppKit/GTMUILocalizer.m | |
parent | 00ac975413b92871834ecd54af73474bd6ddcd81 (diff) |
[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)
Diffstat (limited to 'AppKit/GTMUILocalizer.m')
-rw-r--r-- | AppKit/GTMUILocalizer.m | 51 |
1 files changed, 51 insertions, 0 deletions
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 |