 -          static_cast<base::string16::value_type>(base::ToUpperASCII(c));
 +      shortcut = key;
 +    }
++#endif
++    if (key_code_ > VKEY_F1 && key_code_ <= VKEY_F24)
++      shortcut = base::UTF8ToUTF16(
++          base::StringPrintf("F%d", key_code_ - VKEY_F1 + 1));
++  } else if (IsShiftDown()) {
++#if defined(OS_MACOSX)
++    const base::char16 kShiftSymbol[] = {0x21e7, 0};
++    shortcut = kShiftSymbol;
++#else
++    shortcut = l10n_util::GetStringFUTF16(IDS_APP_SHIFT_MODIFIER, shortcut);
  #endif
-+    if (key_code_ > VKEY_F1 && key_code_ <= VKEY_F24)
-+      shortcut += base::UTF8ToUTF16(
-+          base::StringPrintf("F%d", key_code_ - VKEY_F1 + 1));
-   } else {
-     shortcut = l10n_util::GetStringUTF16(string_id);
-+    if (IsShiftDown())
-+      shortcut = l10n_util::GetStringFUTF16(IDS_APP_SHIFT_MODIFIER, shortcut);
    }
  
-   // Checking whether the character used for the accelerator is alphanumeric.
-@@ -247,15 +253,13 @@ base::string16 Accelerator::GetShortcutText() const {
-     shortcut_rtl.assign(shortcut);
-   }
+@@ -221,15 +233,12 @@ base::string16 Accelerator::GetShortcutText() const {
  
+ base::string16 Accelerator::ApplyLongFormModifiers(
+     base::string16 shortcut) const {
 -  if (IsShiftDown())
 -    shortcut = l10n_util::GetStringFUTF16(IDS_APP_SHIFT_MODIFIER, shortcut);
 -

   if (IsCtrlDown())
     shortcut = l10n_util::GetStringFUTF16(IDS_APP_CONTROL_MODIFIER, shortcut);
-  else if (IsAltDown())
+
+  if (IsAltDown())
     shortcut = l10n_util::GetStringFUTF16(IDS_APP_ALT_MODIFIER, shortcut);
 
   if (IsCmdDown()) {

 
 namespace ui {
 
@@ -145,7 +144,17 @@ base::string16 Accelerator::GetShortcutText() const {
   shortcut = KeyCodeToName(key_code_);
 #endif
 
+  unsigned int flags = 0;
   if (shortcut.empty()) {
+    if (IsShiftDown())
+      flags = ui::EF_SHIFT_DOWN;
+    const uint16_t c = DomCodeToUsLayoutCharacter(
+        UsLayoutKeyboardCodeToDomCode(key_code_), flags);
+    if (c != 0) {
+      shortcut =
+          static_cast<base::string16::value_type>(
+              base::ToUpperASCII(static_cast<base::char16>(c)));
+    }
 #if defined(OS_WIN)
     // Our fallback is to try translate the key code to a regular character
     // unless it is one of digits (VK_0 to VK_9). Some keyboard
@@ -154,17 +163,20 @@ base::string16 Accelerator::GetShortcutText() const {
     // accent' for '0'). For display in the menu (e.g. Ctrl-0 for the
     // default zoom level), we leave VK_[0-9] alone without translation.
     wchar_t key;
