 -          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);
 -

 
 namespace ui {
 
@@ -210,7 +209,16 @@ base::string16 Accelerator::GetShortcutText() const {
   }
 
   base::string16 shortcut;
+  unsigned int flags = 0;
   if (!string_id) {
+    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
@@ -219,20 +227,18 @@ 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;

diff --git a/ui/base/accelerators/accelerator.cc b/ui/base/accelerators/accelerator.cc
index a6756c2..5352958 100644
--- a/ui/base/accelerators/accelerator.cc
+++ b/ui/base/accelerators/accelerator.cc
@@ -11,6 +11,7 @@
 #include "base/logging.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -21,9 +22,7 @@
 #include <windows.h>
 #endif
 
