aboutsummaryrefslogtreecommitdiff
path: root/AppKit/GTMUILocalizer.m
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-01-20 04:31:03 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-01-20 04:31:03 +0000
commit53974a084bc914ea8666918b43803574515c9aef (patch)
tree2f22d47535abce712562870043865b52b2a090d3 /AppKit/GTMUILocalizer.m
parent00ac975413b92871834ecd54af73474bd6ddcd81 (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.m51
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