Index: /CKEditor/trunk/_source/lang/en.js
===================================================================
--- /CKEditor/trunk/_source/lang/en.js	(revision 3638)
+++ /CKEditor/trunk/_source/lang/en.js	(revision 3639)
@@ -93,5 +93,8 @@
 		validateNumberFailed	: 'This value is not a number.',
 		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',
-		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?'
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?',
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>'
 	},
 
Index: /CKEditor/trunk/_source/plugins/button/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/button/plugin.js	(revision 3638)
+++ /CKEditor/trunk/_source/plugins/button/plugin.js	(revision 3639)
@@ -71,4 +71,5 @@
 
 		var id = this._.id = 'cke_' + CKEDITOR.tools.getNextNumber();
+		this._.editor = editor;
 
 		var instance =
@@ -184,5 +185,15 @@
 			return;
 
-		CKEDITOR.document.getById( this._.id ).setState( state );
+		var element = CKEDITOR.document.getById( this._.id );
+		element.setState( state );
+
+		var htmlTitle = this.title,
+			unavailable = this._.editor.lang.common.unavailable,
+			labelElement = element.getChild( 1 );
+
+		if ( state == CKEDITOR.TRISTATE_DISABLED )
+			htmlTitle = unavailable.replace( '%1', this.title );
+
+		labelElement.setHtml( htmlTitle );
 
 		this._.state = state;
Index: /CKEditor/trunk/_source/plugins/menu/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/menu/plugin.js	(revision 3638)
+++ /CKEditor/trunk/_source/plugins/menu/plugin.js	(revision 3639)
@@ -281,4 +281,8 @@
 				state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' :
 				'off' );
+
+			var htmlLabel = this.label;
+			if ( state == CKEDITOR.TRISTATE_DISABLED )
+				htmlLabel = this.editor.lang.common.unavailable.replace( '%1', htmlLabel );
 
 			if ( this.className )
@@ -331,5 +335,5 @@
 
 			output.push(
-							this.label,
+							htmlLabel,
 						'</span>' +
 				'</a>' +
