aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2009-12-30 16:34:56 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2009-12-30 16:34:56 +0000
commita3bd0d4f83bf1d2c2e6f60b2bd39f22a655711ac (patch)
tree00aa1e57c418c8be9ba6307426460222bfa1980e
parent8ff44a626d511444b06e378075e0bbc13e4f6519 (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.h10
-rw-r--r--AppKit/GTMUILocalizer.m50
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];