diff options
author | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-12-30 16:34:56 +0000 |
---|---|---|
committer | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-12-30 16:34:56 +0000 |
commit | a3bd0d4f83bf1d2c2e6f60b2bd39f22a655711ac (patch) | |
tree | 00aa1e57c418c8be9ba6307426460222bfa1980e | |
parent | 8ff44a626d511444b06e378075e0bbc13e4f6519 (diff) |
[Author: avi]
Since we can't localize the AXDescription on elements, we shouldn't even try.
R=dmaclach,thomasvl
DELTA=55 (28 added, 20 deleted, 7 changed)
-rw-r--r-- | AppKit/GTMUILocalizer.h | 10 | ||||
-rw-r--r-- | AppKit/GTMUILocalizer.m | 50 |
2 files changed, 34 insertions, 26 deletions
diff --git a/AppKit/GTMUILocalizer.h b/AppKit/GTMUILocalizer.h index d346ae6..e3521e9 100644 --- a/AppKit/GTMUILocalizer.h +++ b/AppKit/GTMUILocalizer.h @@ -36,9 +36,12 @@ // - stringValue (for labels) // - tooltips // - accessibility help -// - accessibility description // - menus // +// Due to technical limitations, accessibility description cannot be localized. +// See http://lists.apple.com/archives/Accessibility-dev/2009/Dec/msg00004.html +// and http://openradar.appspot.com/7496255 for more information. +// // As an example if I wanted to localize a button with the word "Print" on // it, I would put it in a window controlled by a NSWindowController that was // the owner of the nib. I would set it's title to be "^Print". I would then @@ -82,11 +85,16 @@ // localizing all non-default toolbar items by hand. - (void)localizeToolbar:(NSToolbar *)toolbar; +// Localize an object for accessibility; can be called for both NSViews and +// NSCells as they are both accessibility objects. +- (void)localizeAccessibility:(id)object; + // A method for subclasses to override in case you have a different // way to go about getting localized strings. // If |string| does not start with ^ you should return nil. // If |string| is nil, you should return nil - (NSString *)localizedStringForString:(NSString *)string; + // Allows subclasses to override how the bundle is picked up + (NSBundle *)bundleForOwner:(id)owner; @end diff --git a/AppKit/GTMUILocalizer.m b/AppKit/GTMUILocalizer.m index 72c0b9d..eb3c8c4 100644 --- a/AppKit/GTMUILocalizer.m +++ b/AppKit/GTMUILocalizer.m @@ -161,32 +161,13 @@ } } - // Then do accessibility stuff - NSArray *supportedAttrs = [view accessibilityAttributeNames]; - if ([supportedAttrs containsObject:NSAccessibilityHelpAttribute]) { - NSString *accessibilityHelp - = [view accessibilityAttributeValue:NSAccessibilityHelpAttribute]; - if (accessibilityHelp) { - NSString *localizedAccessibilityHelp - = [self localizedStringForString:accessibilityHelp]; - if (localizedAccessibilityHelp) { - [view accessibilitySetValue:localizedAccessibilityHelp - forAttribute:NSAccessibilityHelpAttribute]; - } - } - } + // Then do accessibility both on views directly... + [self localizeAccessibility:view]; - if ([supportedAttrs containsObject:NSAccessibilityDescriptionAttribute]) { - NSString *accessibilityDesc - = [view accessibilityAttributeValue:NSAccessibilityDescriptionAttribute]; - if (accessibilityDesc) { - NSString *localizedAccessibilityDesc - = [self localizedStringForString:accessibilityDesc]; - if (localizedAccessibilityDesc) { - [view accessibilitySetValue:localizedAccessibilityDesc - forAttribute:NSAccessibilityDescriptionAttribute]; - } - } + // ...and on control cells (which implement accessibility for the controls + // that contain them) + if ([view isKindOfClass:[NSControl class]]) { + [self localizeAccessibility:[(NSControl *)view cell]]; } // Must do the menu before the titles, or else this will screw up @@ -282,6 +263,25 @@ } } +- (void)localizeAccessibility:(id)object { + NSArray *supportedAttrs = [object accessibilityAttributeNames]; + if ([supportedAttrs containsObject:NSAccessibilityHelpAttribute]) { + NSString *accessibilityHelp + = [object accessibilityAttributeValue:NSAccessibilityHelpAttribute]; + if (accessibilityHelp) { + NSString *localizedAccessibilityHelp + = [self localizedStringForString:accessibilityHelp]; + if (localizedAccessibilityHelp) { + [object accessibilitySetValue:localizedAccessibilityHelp + forAttribute:NSAccessibilityHelpAttribute]; + } + } + } + + // We cannot do the same thing with NSAccessibilityDescriptionAttribute; see + // the links in the header file for more details. +} + - (void)localizeMenu:(NSMenu *)menu recursively:(BOOL)recursive { if (menu) { NSString *title = [menu title]; |