Make it possible to use WEB_UI_STRING macros to mark translatable strings in glib...
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Mar 2017 09:55:34 +0000 (09:55 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Mar 2017 09:55:34 +0000 (09:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=169672

Reviewed by Michael Catanzaro.

Source/WebCore:

WEB_UI_STRING macros are currently used by Cocoa based ports and Windows port. For other ports it simply returns
the given string, but it's not translated. In the GTK+ port we have all translatable strings from
LocalizedStrings.cpp copied in LocalizedStringsGtk.cpp to use the glib macros to mark them as translatable. In
most of the cases the strings are exactly in the same, in some others (the context menu ones) the string only
differs in the mnemonics used by GTK, and only in a few cases the strings are different. We could remove most of
that duplication if strings used by WEB_UI_STRING were marked as translatable in glib based ports too.

This patch makes that possible with the following changes:

  - Add WEB_UI_STRING_WITH_MNEMONIC() to handle the cases where the strings only differ in the mnemonics. It
    receives the string with mnemonics that is ignored in all ports except GTK+.
  - All platform specific strings have been moved to the platform files, to ensure scanners don't include
    strings from other ports.
  - For the same reason a new macro WEB_UI_CFSTRING has been also added, just to make sure that CF strings are
    only used by CF based ports. The implementation is the same as WEB_UI_STRING, it only changes the name to
    not confuse the scanners.
  - And again for the same reason, for non-CF and non-Glib cases WEB_UI_STRING is not used, since in those cases
    strings are not really translated and String::fromUTF8() is actually used. So, now we use String::fromUTF8()
    directly instead of WEB_UI_STRING to not confuse the scanners.

* CMakeLists.txt: Add LocalizedStrings.cpp to the compilation.
* PlatformGTK.cmake: Move LocalizedStringsGtk.cpp to the list of sources not depending on GTK+, since it no
longer uses GTK+.
* extract-localizable-strings.pl: Update it to handle the new macros.
* platform/LocalizedStrings.cpp:
(WebCore::formatLocalizedString):
(WebCore::contextMenuItemTagOpenLinkInNewWindow):
(WebCore::contextMenuItemTagDownloadLinkToDisk):
(WebCore::contextMenuItemTagOpenImageInNewWindow):
(WebCore::contextMenuItemTagCopyImageToClipboard):
(WebCore::contextMenuItemTagOpenFrameInNewWindow):
(WebCore::contextMenuItemTagCopy):
(WebCore::contextMenuItemTagGoBack):
(WebCore::contextMenuItemTagGoForward):
(WebCore::contextMenuItemTagStop):
(WebCore::contextMenuItemTagReload):
(WebCore::contextMenuItemTagCut):
(WebCore::contextMenuItemTagPaste):
(WebCore::contextMenuItemTagIgnoreSpelling):
(WebCore::contextMenuItemTagLearnSpelling):
(WebCore::contextMenuItemTagLookUpInDictionary):
(WebCore::contextMenuItemTagOpenLink):
(WebCore::contextMenuItemTagIgnoreGrammar):
(WebCore::contextMenuItemTagSpellingMenu):
(WebCore::contextMenuItemTagShowSpellingPanel):
(WebCore::contextMenuItemTagCheckSpelling):
(WebCore::contextMenuItemTagCheckSpellingWhileTyping):
(WebCore::contextMenuItemTagCheckGrammarWithSpelling):
(WebCore::contextMenuItemTagFontMenu):
(WebCore::contextMenuItemTagBold):
(WebCore::contextMenuItemTagItalic):
(WebCore::contextMenuItemTagUnderline):
(WebCore::contextMenuItemTagOutline):
(WebCore::contextMenuItemTagOpenVideoInNewWindow):
(WebCore::contextMenuItemTagOpenAudioInNewWindow):
(WebCore::contextMenuItemTagDownloadVideoToDisk):
(WebCore::contextMenuItemTagDownloadAudioToDisk):
(WebCore::contextMenuItemTagExitVideoFullscreen):
(WebCore::contextMenuItemTagMediaPlay):
(WebCore::contextMenuItemTagMediaPause):
(WebCore::contextMenuItemTagMediaMute):
(WebCore::contextMenuItemTagInspectElement):
(WebCore::AXAutoFillContactsLabel):
(WebCore::imageTitle):
(WebCore::validationMessageRangeUnderflowText):
(WebCore::validationMessageRangeOverflowText):
(WebCore::textTrackCountryAndLanguageMenuItemText):
(WebCore::textTrackLanguageMenuItemText):
(WebCore::closedCaptionTrackMenuItemText):
(WebCore::sdhTrackMenuItemText):
(WebCore::easyReaderTrackMenuItemText):
(WebCore::forcedTrackMenuItemText):
(WebCore::audioDescriptionTrackSuffixText):
(WebCore::webCryptoMasterKeyKeychainLabel):
* platform/LocalizedStrings.h:
* platform/cocoa/LocalizedStringsCocoa.mm:
(WebCore::copyImageUnknownFileLabel):
(WebCore::contextMenuItemTagSearchInSpotlight):
(WebCore::contextMenuItemTagSearchWeb):
(WebCore::contextMenuItemTagShowFonts):
(WebCore::contextMenuItemTagStyles):
(WebCore::contextMenuItemTagShowColors):
(WebCore::contextMenuItemTagSpeechMenu):
(WebCore::contextMenuItemTagStartSpeaking):
(WebCore::contextMenuItemTagStopSpeaking):
(WebCore::contextMenuItemTagCorrectSpellingAutomatically):
(WebCore::contextMenuItemTagSubstitutionsMenu):
(WebCore::contextMenuItemTagShowSubstitutions):
(WebCore::contextMenuItemTagSmartCopyPaste):
(WebCore::contextMenuItemTagSmartQuotes):
(WebCore::contextMenuItemTagSmartDashes):
(WebCore::contextMenuItemTagSmartLinks):
(WebCore::contextMenuItemTagTextReplacement):
(WebCore::contextMenuItemTagTransformationsMenu):
(WebCore::contextMenuItemTagMakeUpperCase):
(WebCore::contextMenuItemTagMakeLowerCase):
(WebCore::contextMenuItemTagCapitalize):
(WebCore::contextMenuItemTagChangeBack):
(WebCore::contextMenuItemTagEnterVideoEnhancedFullscreen):
(WebCore::contextMenuItemTagExitVideoEnhancedFullscreen):
(WebCore::AXARIAContentGroupText):
(WebCore::AXHorizontalRuleDescriptionText):
(WebCore::AXMarkText):
(WebCore::AXMeterGaugeRegionOptimumText):
(WebCore::AXMeterGaugeRegionSuboptimalText):
(WebCore::AXMeterGaugeRegionLessGoodText):
(WebCore::builtInPDFPluginName):
(WebCore::pdfDocumentTypeDescription):
(WebCore::postScriptDocumentTypeDescription):
(WebCore::keygenMenuItem2048):
(WebCore::keygenKeychainItemName):
(WebCore::htmlSelectMultipleItems):
(WebCore::fileButtonChooseMediaFileLabel):
(WebCore::fileButtonChooseMultipleMediaFilesLabel):
(WebCore::fileButtonNoMediaFileSelectedLabel):
(WebCore::fileButtonNoMediaFilesSelectedLabel):
(WebCore::insertListTypeNone):
(WebCore::insertListTypeBulleted):
(WebCore::insertListTypeBulletedAccessibilityTitle):
(WebCore::insertListTypeNumbered):
(WebCore::insertListTypeNumberedAccessibilityTitle):
(WebCore::exitFullScreenButtonAccessibilityTitle):
* platform/gtk/LocalizedStringsGtk.cpp:
(WebCore::contextMenuItemTagDelete):
(WebCore::contextMenuItemTagSelectAll):
* platform/win/LocalizedStringsWin.cpp:
(WebCore::contextMenuItemTagSearchWeb):
(WebCore::uploadFileText):
(WebCore::allFilesText):

Source/WebCore/platform/gtk/po:

* CMakeLists.txt: Add keyword parameters for WEB_UI_STRING macros.
* POTFILES.in: Add LocalizedStrings.cpp to the list.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214244 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/PlatformGTK.cmake
Source/WebCore/extract-localizable-strings.pl
Source/WebCore/platform/LocalizedStrings.cpp
Source/WebCore/platform/LocalizedStrings.h
Source/WebCore/platform/cocoa/LocalizedStringsCocoa.mm
Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp
Source/WebCore/platform/gtk/po/CMakeLists.txt
Source/WebCore/platform/gtk/po/ChangeLog
Source/WebCore/platform/gtk/po/POTFILES.in
Source/WebCore/platform/win/LocalizedStringsWin.cpp

index c8d6e5b..1d9f04b 100644 (file)
@@ -2163,6 +2163,7 @@ set(WebCore_SOURCES
     platform/LengthPoint.cpp
     platform/LengthSize.cpp
     platform/LinkHash.cpp
+    platform/LocalizedStrings.cpp
     platform/Logging.cpp
     platform/LowPowerModeNotifier.cpp
     platform/MIMETypeRegistry.cpp
index 78d43c0..9cd4c42 100644 (file)
@@ -1,3 +1,140 @@
+2017-03-22  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        Make it possible to use WEB_UI_STRING macros to mark translatable strings in glib based ports
+        https://bugs.webkit.org/show_bug.cgi?id=169672
+
+        Reviewed by Michael Catanzaro.
+
+        WEB_UI_STRING macros are currently used by Cocoa based ports and Windows port. For other ports it simply returns
+        the given string, but it's not translated. In the GTK+ port we have all translatable strings from
+        LocalizedStrings.cpp copied in LocalizedStringsGtk.cpp to use the glib macros to mark them as translatable. In
+        most of the cases the strings are exactly in the same, in some others (the context menu ones) the string only
+        differs in the mnemonics used by GTK, and only in a few cases the strings are different. We could remove most of
+        that duplication if strings used by WEB_UI_STRING were marked as translatable in glib based ports too.
+
+        This patch makes that possible with the following changes:
+
+          - Add WEB_UI_STRING_WITH_MNEMONIC() to handle the cases where the strings only differ in the mnemonics. It
+            receives the string with mnemonics that is ignored in all ports except GTK+.
+          - All platform specific strings have been moved to the platform files, to ensure scanners don't include
+            strings from other ports.
+          - For the same reason a new macro WEB_UI_CFSTRING has been also added, just to make sure that CF strings are
+            only used by CF based ports. The implementation is the same as WEB_UI_STRING, it only changes the name to
+            not confuse the scanners.
+          - And again for the same reason, for non-CF and non-Glib cases WEB_UI_STRING is not used, since in those cases
+            strings are not really translated and String::fromUTF8() is actually used. So, now we use String::fromUTF8()
+            directly instead of WEB_UI_STRING to not confuse the scanners.
+
+        * CMakeLists.txt: Add LocalizedStrings.cpp to the compilation.
+        * PlatformGTK.cmake: Move LocalizedStringsGtk.cpp to the list of sources not depending on GTK+, since it no
+        longer uses GTK+.
+        * extract-localizable-strings.pl: Update it to handle the new macros.
+        * platform/LocalizedStrings.cpp:
+        (WebCore::formatLocalizedString):
+        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
+        (WebCore::contextMenuItemTagDownloadLinkToDisk):
+        (WebCore::contextMenuItemTagOpenImageInNewWindow):
+        (WebCore::contextMenuItemTagCopyImageToClipboard):
+        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
+        (WebCore::contextMenuItemTagCopy):
+        (WebCore::contextMenuItemTagGoBack):
+        (WebCore::contextMenuItemTagGoForward):
+        (WebCore::contextMenuItemTagStop):
+        (WebCore::contextMenuItemTagReload):
+        (WebCore::contextMenuItemTagCut):
+        (WebCore::contextMenuItemTagPaste):
+        (WebCore::contextMenuItemTagIgnoreSpelling):
+        (WebCore::contextMenuItemTagLearnSpelling):
+        (WebCore::contextMenuItemTagLookUpInDictionary):
+        (WebCore::contextMenuItemTagOpenLink):
+        (WebCore::contextMenuItemTagIgnoreGrammar):
+        (WebCore::contextMenuItemTagSpellingMenu):
+        (WebCore::contextMenuItemTagShowSpellingPanel):
+        (WebCore::contextMenuItemTagCheckSpelling):
+        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
+        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
+        (WebCore::contextMenuItemTagFontMenu):
+        (WebCore::contextMenuItemTagBold):
+        (WebCore::contextMenuItemTagItalic):
+        (WebCore::contextMenuItemTagUnderline):
+        (WebCore::contextMenuItemTagOutline):
+        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
+        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
+        (WebCore::contextMenuItemTagDownloadVideoToDisk):
+        (WebCore::contextMenuItemTagDownloadAudioToDisk):
+        (WebCore::contextMenuItemTagExitVideoFullscreen):
+        (WebCore::contextMenuItemTagMediaPlay):
+        (WebCore::contextMenuItemTagMediaPause):
+        (WebCore::contextMenuItemTagMediaMute):
+        (WebCore::contextMenuItemTagInspectElement):
+        (WebCore::AXAutoFillContactsLabel):
+        (WebCore::imageTitle):
+        (WebCore::validationMessageRangeUnderflowText):
+        (WebCore::validationMessageRangeOverflowText):
+        (WebCore::textTrackCountryAndLanguageMenuItemText):
+        (WebCore::textTrackLanguageMenuItemText):
+        (WebCore::closedCaptionTrackMenuItemText):
+        (WebCore::sdhTrackMenuItemText):
+        (WebCore::easyReaderTrackMenuItemText):
+        (WebCore::forcedTrackMenuItemText):
+        (WebCore::audioDescriptionTrackSuffixText):
+        (WebCore::webCryptoMasterKeyKeychainLabel):
+        * platform/LocalizedStrings.h:
+        * platform/cocoa/LocalizedStringsCocoa.mm:
+        (WebCore::copyImageUnknownFileLabel):
+        (WebCore::contextMenuItemTagSearchInSpotlight):
+        (WebCore::contextMenuItemTagSearchWeb):
+        (WebCore::contextMenuItemTagShowFonts):
+        (WebCore::contextMenuItemTagStyles):
+        (WebCore::contextMenuItemTagShowColors):
+        (WebCore::contextMenuItemTagSpeechMenu):
+        (WebCore::contextMenuItemTagStartSpeaking):
+        (WebCore::contextMenuItemTagStopSpeaking):
+        (WebCore::contextMenuItemTagCorrectSpellingAutomatically):
+        (WebCore::contextMenuItemTagSubstitutionsMenu):
+        (WebCore::contextMenuItemTagShowSubstitutions):
+        (WebCore::contextMenuItemTagSmartCopyPaste):
+        (WebCore::contextMenuItemTagSmartQuotes):
+        (WebCore::contextMenuItemTagSmartDashes):
+        (WebCore::contextMenuItemTagSmartLinks):
+        (WebCore::contextMenuItemTagTextReplacement):
+        (WebCore::contextMenuItemTagTransformationsMenu):
+        (WebCore::contextMenuItemTagMakeUpperCase):
+        (WebCore::contextMenuItemTagMakeLowerCase):
+        (WebCore::contextMenuItemTagCapitalize):
+        (WebCore::contextMenuItemTagChangeBack):
+        (WebCore::contextMenuItemTagEnterVideoEnhancedFullscreen):
+        (WebCore::contextMenuItemTagExitVideoEnhancedFullscreen):
+        (WebCore::AXARIAContentGroupText):
+        (WebCore::AXHorizontalRuleDescriptionText):
+        (WebCore::AXMarkText):
+        (WebCore::AXMeterGaugeRegionOptimumText):
+        (WebCore::AXMeterGaugeRegionSuboptimalText):
+        (WebCore::AXMeterGaugeRegionLessGoodText):
+        (WebCore::builtInPDFPluginName):
+        (WebCore::pdfDocumentTypeDescription):
+        (WebCore::postScriptDocumentTypeDescription):
+        (WebCore::keygenMenuItem2048):
+        (WebCore::keygenKeychainItemName):
+        (WebCore::htmlSelectMultipleItems):
+        (WebCore::fileButtonChooseMediaFileLabel):
+        (WebCore::fileButtonChooseMultipleMediaFilesLabel):
+        (WebCore::fileButtonNoMediaFileSelectedLabel):
+        (WebCore::fileButtonNoMediaFilesSelectedLabel):
+        (WebCore::insertListTypeNone):
+        (WebCore::insertListTypeBulleted):
+        (WebCore::insertListTypeBulletedAccessibilityTitle):
+        (WebCore::insertListTypeNumbered):
+        (WebCore::insertListTypeNumberedAccessibilityTitle):
+        (WebCore::exitFullScreenButtonAccessibilityTitle):
+        * platform/gtk/LocalizedStringsGtk.cpp:
+        (WebCore::contextMenuItemTagDelete):
+        (WebCore::contextMenuItemTagSelectAll):
+        * platform/win/LocalizedStringsWin.cpp:
+        (WebCore::contextMenuItemTagSearchWeb):
+        (WebCore::uploadFileText):
+        (WebCore::allFilesText):
+
 2017-03-21  Myles C. Maxfield  <mmaxfield@apple.com>
 
         [iOS] Migrate off of CTFontCreateForCSS
index 822bbc0..6252eb9 100644 (file)
@@ -139,6 +139,7 @@ list(APPEND WebCore_SOURCES
 
     platform/gtk/DragDataGtk.cpp
     platform/gtk/ErrorsGtk.cpp
+    platform/gtk/LocalizedStringsGtk.cpp
     platform/gtk/MIMETypeRegistryGtk.cpp
     platform/gtk/PasteboardGtk.cpp
     platform/gtk/ScrollAnimatorGtk.cpp
@@ -200,7 +201,6 @@ list(APPEND WebCorePlatformGTK_SOURCES
     platform/gtk/GRefPtrGtk.cpp
     platform/gtk/GtkUtilities.cpp
     platform/gtk/GtkVersioning.c
-    platform/gtk/LocalizedStringsGtk.cpp
     platform/gtk/PasteboardHelper.cpp
     platform/gtk/PlatformKeyboardEventGtk.cpp
     platform/gtk/PlatformMouseEventGtk.cpp
index b2c6939..822d293 100755 (executable)
@@ -132,6 +132,7 @@ for my $file (sort @files) {
     my $UIString;
     my $key;
     my $comment;
+    my $mnemonic;
     
     my $string;
     my $stringLine;
@@ -188,6 +189,9 @@ handleString:
                         # FIXME: Validate UTF-8 here?
                         $key = $string;
                         $expected = ",";
+                    } elsif (($macro =~ /WEB_UI_STRING_WITH_MNEMONIC$/) and !defined $mnemonic) {
+                        $mnemonic = $string;
+                        $expected = ",";
                     } elsif (!defined $comment) {
                         # FIXME: Validate UTF-8 here?
                         $comment = $string;
@@ -240,12 +244,13 @@ handleString:
                     emitError($file, $., "found $token but expected $expected");
                     $expected = "";
                 }
-                if (($token =~ /(WEB_)?UI_STRING(_KEY)?(_INTERNAL)?$/) || ($token =~ /WEB_UI_NSSTRING$/)) {
+                if (($token =~ /(WEB_)?UI_STRING(_KEY)?(_INTERNAL)?$/) || ($token =~ /WEB_UI_NSSTRING$/) || ($token =~ /WEB_UI_STRING_WITH_MNEMONIC$/) || ($token =~ /WEB_UI_CFSTRING$/)) {
                     $expected = "(";
                     $macro = $token;
                     $UIString = undef;
                     $key = undef;
                     $comment = undef;
+                    $mnemonic = undef;
                     $macroLine = $.;
                 } elsif ($token eq "(" or $token eq "[") {
                     ++$nestingLevel if defined $nestingLevel;
index 58a969b..d7b2a8f 100644 (file)
@@ -38,8 +38,8 @@
 #include <wtf/RetainPtr.h>
 #endif
 
-#if PLATFORM(COCOA)
-#include "WebCoreSystemInterface.h"
+#if USE(GLIB)
+#include <wtf/glib/GUniquePtr.h>
 #endif
 
 namespace WebCore {
@@ -49,7 +49,7 @@ namespace WebCore {
 //  2) It doesn't handle the %2$d syntax.
 // Note that because |format| is used as the second parameter to va_start, it cannot be a reference
 // type according to section 18.7/3 of the C++ N1905 standard.
-static String formatLocalizedString(String format, ...)
+String formatLocalizedString(String format, ...)
 {
 #if USE(CF)
     va_list arguments;
@@ -66,6 +66,12 @@ static String formatLocalizedString(String format, ...)
 
     va_end(arguments);
     return result.get();
+#elif USE(GLIB)
+    va_list arguments;
+    va_start(arguments, format);
+    GUniquePtr<gchar> result(g_strdup_vprintf(format.utf8().data(), arguments));
+    va_end(arguments);
+    return String::fromUTF8(result.get());
 #else
     notImplemented();
     return format;
@@ -132,85 +138,80 @@ String defaultDetailsSummaryText()
     return WEB_UI_STRING("Details", "text to display in <details> tag when it has no <summary> child");
 }
 
-#if PLATFORM(COCOA)
-
-String copyImageUnknownFileLabel()
-{
-    return WEB_UI_STRING("unknown", "Unknown filename");
-}
-
-#endif
-
 #if ENABLE(CONTEXT_MENUS)
 
 String contextMenuItemTagOpenLinkInNewWindow()
 {
-    return WEB_UI_STRING("Open Link in New Window", "Open in New Window context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Open Link in New Window", "Open Link in New _Window", "Open in New Window context menu item");
 }
 
 String contextMenuItemTagDownloadLinkToDisk()
 {
-    return WEB_UI_STRING("Download Linked File", "Download Linked File context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Download Linked File", "_Download Linked File", "Download Linked File context menu item");
 }
 
+#if !PLATFORM(GTK)
 String contextMenuItemTagCopyLinkToClipboard()
 {
     return WEB_UI_STRING("Copy Link", "Copy Link context menu item");
 }
+#endif
 
 String contextMenuItemTagOpenImageInNewWindow()
 {
-    return WEB_UI_STRING("Open Image in New Window", "Open Image in New Window context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Open Image in New Window", "Open _Image in New Window", "Open Image in New Window context menu item");
 }
 
+#if !PLATFORM(GTK)
 String contextMenuItemTagDownloadImageToDisk()
 {
     return WEB_UI_STRING("Download Image", "Download Image context menu item");
 }
+#endif
 
 String contextMenuItemTagCopyImageToClipboard()
 {
-    return WEB_UI_STRING("Copy Image", "Copy Image context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Copy Image", "Cop_y Image", "Copy Image context menu item");
 }
 
 String contextMenuItemTagOpenFrameInNewWindow()
 {
-    return WEB_UI_STRING("Open Frame in New Window", "Open Frame in New Window context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Open Frame in New Window", "Open _Frame in New Window", "Open Frame in New Window context menu item");
 }
 
 String contextMenuItemTagCopy()
 {
-    return WEB_UI_STRING("Copy", "Copy context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Copy", "_Copy", "Copy context menu item");
 }
 
 String contextMenuItemTagGoBack()
 {
-    return WEB_UI_STRING("Back", "Back context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Back", "_Back", "Back context menu item");
 }
 
 String contextMenuItemTagGoForward()
 {
-    return WEB_UI_STRING("Forward", "Forward context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Forward", "_Forward", "Forward context menu item");
 }
 
 String contextMenuItemTagStop()
 {
-    return WEB_UI_STRING("Stop", "Stop context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Stop", "_Stop", "Stop context menu item");
 }
 
 String contextMenuItemTagReload()
 {
-    return WEB_UI_STRING("Reload", "Reload context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Reload", "_Reload", "Reload context menu item");
 }
 
 String contextMenuItemTagCut()
 {
-    return WEB_UI_STRING("Cut", "Cut context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Cut", "Cu_t", "Cut context menu item");
 }
 
 String contextMenuItemTagPaste()
 {
-    return WEB_UI_STRING("Paste", "Paste context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Paste", "_Paste", "Paste context menu item");
 }
 
 String contextMenuItemTagNoGuessesFound()
@@ -220,139 +221,89 @@ String contextMenuItemTagNoGuessesFound()
 
 String contextMenuItemTagIgnoreSpelling()
 {
-    return WEB_UI_STRING("Ignore Spelling", "Ignore Spelling context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Ignore Spelling", "_Ignore Spelling", "Ignore Spelling context menu item");
 }
 
 String contextMenuItemTagLearnSpelling()
 {
-    return WEB_UI_STRING("Learn Spelling", "Learn Spelling context menu item");
-}
-
-#if PLATFORM(COCOA)
-String contextMenuItemTagSearchInSpotlight()
-{
-    return WEB_UI_STRING("Search in Spotlight", "Search in Spotlight context menu item");
-}
-#endif
-
-String contextMenuItemTagSearchWeb()
-{
-#if PLATFORM(COCOA)
-    auto searchProviderName = adoptCF(wkCopyDefaultSearchProviderDisplayName());
-    return formatLocalizedString(WEB_UI_STRING("Search with %@", "Search with search provider context menu item with provider name inserted"), searchProviderName.get());
-#else
-    return WEB_UI_STRING("Search with Google", "Search with Google context menu item");
-#endif
+    return WEB_UI_STRING_WITH_MNEMONIC("Learn Spelling", "_Learn Spelling", "Learn Spelling context menu item");
 }
 
 String contextMenuItemTagLookUpInDictionary(const String& selectedString)
 {
 #if USE(CF)
     auto selectedCFString = truncatedStringForLookupMenuItem(selectedString).createCFString();
-    return formatLocalizedString(WEB_UI_STRING("Look Up “%@”", "Look Up context menu item with selected word"), selectedCFString.get());
+    return formatLocalizedString(WEB_UI_CFSTRING("Look Up “%@”", "Look Up context menu item with selected word"), selectedCFString.get());
+#elif USE(GLIB)
+    return formatLocalizedString(WEB_UI_STRING("Look Up “%s”", "Look Up context menu item with selected word"), truncatedStringForLookupMenuItem(selectedString).utf8().data());
 #else
-    return WEB_UI_STRING("Look Up “<selection>”", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
+    return String::fromUTF8("Look Up “<selection>”", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));
 #endif
 }
 
 String contextMenuItemTagOpenLink()
 {
-    return WEB_UI_STRING("Open Link", "Open Link context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Open Link", "_Open Link", "Open Link context menu item");
 }
 
 String contextMenuItemTagIgnoreGrammar()
 {
-    return WEB_UI_STRING("Ignore Grammar", "Ignore Grammar context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Ignore Grammar", "Ignore _Grammar", "Ignore Grammar context menu item");
 }
 
 String contextMenuItemTagSpellingMenu()
 {
-    return WEB_UI_STRING("Spelling and Grammar", "Spelling and Grammar context sub-menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Spelling and Grammar", "Spelling and _Grammar", "Spelling and Grammar context sub-menu item");
 }
 
 String contextMenuItemTagShowSpellingPanel(bool show)
 {
     if (show)
-        return WEB_UI_STRING("Show Spelling and Grammar", "menu item title");
-    return WEB_UI_STRING("Hide Spelling and Grammar", "menu item title");
+        return WEB_UI_STRING_WITH_MNEMONIC("Show Spelling and Grammar", "_Show Spelling and Grammar", "menu item title");
+    return WEB_UI_STRING_WITH_MNEMONIC("Hide Spelling and Grammar", "_Hide Spelling and Grammar", "menu item title");
 }
 
 String contextMenuItemTagCheckSpelling()
 {
-    return WEB_UI_STRING("Check Document Now", "Check spelling context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Check Document Now", "_Check Document Now", "Check spelling context menu item");
 }
 
 String contextMenuItemTagCheckSpellingWhileTyping()
 {
-    return WEB_UI_STRING("Check Spelling While Typing", "Check spelling while typing context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Check Spelling While Typing", "Check Spelling While _Typing", "Check spelling while typing context menu item");
 }
 
 String contextMenuItemTagCheckGrammarWithSpelling()
 {
-    return WEB_UI_STRING("Check Grammar With Spelling", "Check grammar with spelling context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Check Grammar With Spelling", "Check _Grammar With Spelling", "Check grammar with spelling context menu item");
 }
 
 String contextMenuItemTagFontMenu()
 {
-    return WEB_UI_STRING("Font", "Font context sub-menu item");
-}
-
-#if PLATFORM(COCOA)
-String contextMenuItemTagShowFonts()
-{
-    return WEB_UI_STRING("Show Fonts", "Show fonts context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Font", "_Font", "Font context sub-menu item");
 }
-#endif
 
 String contextMenuItemTagBold()
 {
-    return WEB_UI_STRING("Bold", "Bold context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Bold", "_Bold", "Bold context menu item");
 }
 
 String contextMenuItemTagItalic()
 {
-    return WEB_UI_STRING("Italic", "Italic context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Italic", "_Italic", "Italic context menu item");
 }
 
 String contextMenuItemTagUnderline()
 {
-    return WEB_UI_STRING("Underline", "Underline context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Underline", "_Underline", "Underline context menu item");
 }
 
 String contextMenuItemTagOutline()
 {
-    return WEB_UI_STRING("Outline", "Outline context menu item");
-}
-
-#if PLATFORM(COCOA)
-
-String contextMenuItemTagStyles()
-{
-    return WEB_UI_STRING("Styles...", "Styles context menu item");
-}
-
-String contextMenuItemTagShowColors()
-{
-    return WEB_UI_STRING("Show Colors", "Show colors context menu item");
-}
-
-String contextMenuItemTagSpeechMenu()
-{
-    return WEB_UI_STRING("Speech", "Speech context sub-menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Outline", "_Outline", "Outline context menu item");
 }
 
-String contextMenuItemTagStartSpeaking()
-{
-    return WEB_UI_STRING("Start Speaking", "Start speaking context menu item");
-}
-
-String contextMenuItemTagStopSpeaking()
-{
-    return WEB_UI_STRING("Stop Speaking", "Stop speaking context menu item");
-}
-
-#endif
-
+#if !PLATFORM(GTK)
 String contextMenuItemTagWritingDirectionMenu()
 {
     return WEB_UI_STRING("Paragraph Direction", "Paragraph direction context sub-menu item");
@@ -377,99 +328,29 @@ String contextMenuItemTagRightToLeft()
 {
     return WEB_UI_STRING("Right to Left", "Right to Left context menu item");
 }
-
-#if PLATFORM(COCOA)
-
-String contextMenuItemTagCorrectSpellingAutomatically()
-{
-    return WEB_UI_STRING("Correct Spelling Automatically", "Correct Spelling Automatically context menu item");
-}
-
-String contextMenuItemTagSubstitutionsMenu()
-{
-    return WEB_UI_STRING("Substitutions", "Substitutions context sub-menu item");
-}
-
-String contextMenuItemTagShowSubstitutions(bool show)
-{
-    if (show)
-        return WEB_UI_STRING("Show Substitutions", "menu item title");
-    return WEB_UI_STRING("Hide Substitutions", "menu item title");
-}
-
-String contextMenuItemTagSmartCopyPaste()
-{
-    return WEB_UI_STRING("Smart Copy/Paste", "Smart Copy/Paste context menu item");
-}
-
-String contextMenuItemTagSmartQuotes()
-{
-    return WEB_UI_STRING("Smart Quotes", "Smart Quotes context menu item");
-}
-
-String contextMenuItemTagSmartDashes()
-{
-    return WEB_UI_STRING("Smart Dashes", "Smart Dashes context menu item");
-}
-
-String contextMenuItemTagSmartLinks()
-{
-    return WEB_UI_STRING("Smart Links", "Smart Links context menu item");
-}
-
-String contextMenuItemTagTextReplacement()
-{
-    return WEB_UI_STRING("Text Replacement", "Text Replacement context menu item");
-}
-
-String contextMenuItemTagTransformationsMenu()
-{
-    return WEB_UI_STRING("Transformations", "Transformations context sub-menu item");
-}
-
-String contextMenuItemTagMakeUpperCase()
-{
-    return WEB_UI_STRING("Make Upper Case", "Make Upper Case context menu item");
-}
-
-String contextMenuItemTagMakeLowerCase()
-{
-    return WEB_UI_STRING("Make Lower Case", "Make Lower Case context menu item");
-}
-
-String contextMenuItemTagCapitalize()
-{
-    return WEB_UI_STRING("Capitalize", "Capitalize context menu item");
-}
-
-String contextMenuItemTagChangeBack(const String& replacedString)
-{
-    notImplemented();
-    return replacedString;
-}
-
-#endif // PLATFORM(COCOA)
+#endif
 
 String contextMenuItemTagOpenVideoInNewWindow()
 {
-    return WEB_UI_STRING("Open Video in New Window", "Open Video in New Window context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Open Video in New Window", "Open _Video in New Window", "Open Video in New Window context menu item");
 }
 
 String contextMenuItemTagOpenAudioInNewWindow()
 {
-    return WEB_UI_STRING("Open Audio in New Window", "Open Audio in New Window context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Open Audio in New Window", "Open _Video in New Window", "Open Audio in New Window context menu item");
 }
 
 String contextMenuItemTagDownloadVideoToDisk()
 {
-    return WEB_UI_STRING("Download Video", "Download Video To Disk context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Download Video", "Download _Video", "Download Video To Disk context menu item");
 }
 
 String contextMenuItemTagDownloadAudioToDisk()
 {
-    return WEB_UI_STRING("Download Audio", "Download Audio To Disk context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Download Audio", "Download _Audio", "Download Audio To Disk context menu item");
 }
 
+#if !PLATFORM(GTK)
 String contextMenuItemTagCopyVideoLinkToClipboard()
 {
     return WEB_UI_STRING("Copy Video Address", "Copy Video Address Location context menu item");
@@ -509,39 +390,26 @@ String contextMenuItemTagExitVideoFullscreen()
 {
     return WEB_UI_STRING("Exit Full Screen", "Video Exit Fullscreen context menu item");
 }
-
-#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
-
-String contextMenuItemTagEnterVideoEnhancedFullscreen()
-{
-    return WEB_UI_STRING("Enter Picture in Picture", "menu item");
-}
-
-String contextMenuItemTagExitVideoEnhancedFullscreen()
-{
-    return WEB_UI_STRING("Exit Picture in Picture", "menu item");
-}
-
 #endif
 
 String contextMenuItemTagMediaPlay()
 {
-    return WEB_UI_STRING("Play", "Media Play context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Play", "_Play", "Media Play context menu item");
 }
 
 String contextMenuItemTagMediaPause()
 {
-    return WEB_UI_STRING("Pause", "Media Pause context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Pause", "_Pause", "Media Pause context menu item");
 }
 
 String contextMenuItemTagMediaMute()
 {
-    return WEB_UI_STRING("Mute", "Media Mute context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Mute", "_Mute", "Media Mute context menu item");
 }
-    
+
 String contextMenuItemTagInspectElement()
 {
-    return WEB_UI_STRING("Inspect Element", "Inspect Element context menu item");
+    return WEB_UI_STRING_WITH_MNEMONIC("Inspect Element", "Inspect _Element", "Inspect Element context menu item");
 }
 
 #endif // ENABLE(CONTEXT_MENUS)
@@ -752,82 +620,6 @@ String AXAutoFillContactsLabel()
 {
     return WEB_UI_STRING("contact info auto fill", "Label for the auto fill contacts button inside a text field.");
 }
-    
-#if PLATFORM(COCOA)
-String AXARIAContentGroupText(const String& ariaType)
-{
-    if (ariaType == "ARIAApplicationAlert")
-        return WEB_UI_STRING("alert", "An ARIA accessibility group that acts as an alert.");
-    if (ariaType == "ARIAApplicationAlertDialog")
-        return WEB_UI_STRING("web alert dialog", "An ARIA accessibility group that acts as an alert dialog.");
-    if (ariaType == "ARIAApplicationDialog")
-        return WEB_UI_STRING("web dialog", "An ARIA accessibility group that acts as an dialog.");
-    if (ariaType == "ARIAApplicationLog")
-        return WEB_UI_STRING("log", "An ARIA accessibility group that acts as a console log.");
-    if (ariaType == "ARIAApplicationMarquee")
-        return WEB_UI_STRING("marquee", "An ARIA accessibility group that acts as a marquee.");
-    if (ariaType == "ARIAApplicationStatus")
-        return WEB_UI_STRING("application status", "An ARIA accessibility group that acts as a status update.");
-    if (ariaType == "ARIAApplicationTimer")
-        return WEB_UI_STRING("timer", "An ARIA accessibility group that acts as an updating timer.");
-    if (ariaType == "ARIADocument")
-        return WEB_UI_STRING("document", "An ARIA accessibility group that acts as a document.");
-    if (ariaType == "ARIADocumentArticle")
-        return WEB_UI_STRING("article", "An ARIA accessibility group that acts as an article.");
-    if (ariaType == "ARIADocumentNote")
-        return WEB_UI_STRING("note", "An ARIA accessibility group that acts as a note in a document.");
-    if (ariaType == "ARIAWebApplication")
-        return WEB_UI_STRING("web application", "An ARIA accessibility group that acts as an application.");
-    if (ariaType == "ARIALandmarkBanner")
-        return WEB_UI_STRING("banner", "An ARIA accessibility group that acts as a banner.");
-    if (ariaType == "ARIALandmarkComplementary")
-        return WEB_UI_STRING("complementary", "An ARIA accessibility group that acts as a region of complementary information.");
-    if (ariaType == "ARIALandmarkContentInfo")
-        return WEB_UI_STRING("content information", "An ARIA accessibility group that contains content.");
-    if (ariaType == "ARIALandmarkMain")
-        return WEB_UI_STRING("main", "An ARIA accessibility group that is the main portion of the website.");
-    if (ariaType == "ARIALandmarkNavigation")
-        return WEB_UI_STRING("navigation", "An ARIA accessibility group that contains the main navigation elements of a website.");
-    if (ariaType == "ARIALandmarkRegion")
-        return WEB_UI_STRING("region", "An ARIA accessibility group that acts as a distinct region in a document.");
-    if (ariaType == "ARIALandmarkSearch")
-        return WEB_UI_STRING("search", "An ARIA accessibility group that contains a search feature of a website.");
-    if (ariaType == "ARIAUserInterfaceTooltip")
-        return WEB_UI_STRING("tooltip", "An ARIA accessibility group that acts as a tooltip.");
-    if (ariaType == "ARIATabPanel")
-        return WEB_UI_STRING("tab panel", "An ARIA accessibility group that contains the content of a tab.");
-    if (ariaType == "ARIADocumentMath")
-        return WEB_UI_STRING("math", "An ARIA accessibility group that contains mathematical symbols.");
-    return String();
-}
-
-String AXHorizontalRuleDescriptionText()
-{
-    return WEB_UI_STRING("separator", "accessibility role description for a horizontal rule [<hr>]");
-}
-    
-String AXMarkText()
-{
-    return WEB_UI_STRING("highlighted", "accessibility role description for a mark element");
-}
-
-#if ENABLE(METER_ELEMENT)
-String AXMeterGaugeRegionOptimumText()
-{
-    return WEB_UI_STRING("optimal value", "The optimum value description for a meter element.");
-}
-
-String AXMeterGaugeRegionSuboptimalText()
-{
-    return WEB_UI_STRING("suboptimal value", "The suboptimal value description for a meter element.");
-}
-
-String AXMeterGaugeRegionLessGoodText()
-{
-    return WEB_UI_STRING("critical value", "The less good value description for a meter element.");
-}
-#endif // ENABLE(METER_ELEMENT)
-#endif // PLATFORM(COCOA)
 
 String missingPluginText()
 {
@@ -859,87 +651,6 @@ String unknownFileSizeText()
     return WEB_UI_STRING_KEY("Unknown", "Unknown (filesize)", "Unknown filesize FTP directory listing item");
 }
 
-#if PLATFORM(WIN)
-String uploadFileText()
-{
-    notImplemented();
-    return "upload";
-}
-
-String allFilesText()
-{
-    notImplemented();
-    return "all files";
-}
-#endif
-
-#if PLATFORM(COCOA)
-String builtInPDFPluginName()
-{
-    // Also exposed to DOM.
-    return WEB_UI_STRING("WebKit built-in PDF", "Pseudo plug-in name, visible in the Installed Plug-ins page in Safari.");
-}
-
-String pdfDocumentTypeDescription()
-{
-    // Also exposed to DOM.
-    return WEB_UI_STRING("Portable Document Format", "Description of the primary type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari.");
-}
-
-String postScriptDocumentTypeDescription()
-{
-    // Also exposed to DOM.
-    return WEB_UI_STRING("PostScript", "Description of the PostScript type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari.");
-}
-
-String keygenMenuItem2048()
-{
-    return WEB_UI_STRING("2048 (High Grade)", "Menu item title for KEYGEN pop-up menu");
-}
-
-String keygenKeychainItemName(const String& host)
-{
-    return formatLocalizedString(WEB_UI_STRING("Key from %@", "Name of keychain key generated by the KEYGEN tag"), host.createCFString().get());
-}
-
-#endif
-
-#if PLATFORM(IOS)
-
-String htmlSelectMultipleItems(size_t count)
-{
-    switch (count) {
-    case 0:
-        return WEB_UI_STRING("0 Items", "Present the element <select multiple> when no <option> items are selected (iOS only)");
-    case 1:
-        return WEB_UI_STRING("1 Item", "Present the element <select multiple> when a single <option> is selected (iOS only)");
-    default:
-        return formatLocalizedString(WEB_UI_STRING("%zu Items", "Present the number of selected <option> items in a <select multiple> element (iOS only)"), count);
-    }
-}
-
-String fileButtonChooseMediaFileLabel()
-{
-    return WEB_UI_STRING("Choose Media (Single)", "Title for file button used in HTML forms for media files");
-}
-
-String fileButtonChooseMultipleMediaFilesLabel()
-{
-    return WEB_UI_STRING("Choose Media (Multiple)", "Title for file button used in HTML5 forms for multiple media files");
-}
-
-String fileButtonNoMediaFileSelectedLabel()
-{
-    return WEB_UI_STRING("no media selected (single)", "Text to display in file button used in HTML forms for media files when no media file is selected");
-}
-
-String fileButtonNoMediaFilesSelectedLabel()
-{
-    return WEB_UI_STRING("no media selected (multiple)", "Text to display in file button used in HTML forms for media files when no media files are selected and the button allows multiple files to be selected");
-}
-
-#endif
-
 String imageTitle(const String& filename, const IntSize& size)
 {
 #if USE(CF)
@@ -954,9 +665,11 @@ String imageTitle(const String& filename, const IntSize& size)
     auto height = adoptCF(CFNumberCreate(0, kCFNumberIntType, &heightInt));
     auto heightString = adoptCF(CFNumberFormatterCreateStringWithNumber(0, formatter.get(), height.get()));
 
-    return formatLocalizedString(WEB_UI_STRING("%@ %@×%@ pixels", "window title for a standalone image (uses multiplication symbol, not x)"), filename.createCFString().get(), widthString.get(), heightString.get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ %@×%@ pixels", "window title for a standalone image (uses multiplication symbol, not x)"), filename.createCFString().get(), widthString.get(), heightString.get());
+#elif USE(GLIB)
+    return formatLocalizedString(WEB_UI_STRING("%s %d×%d pixels", "window title for a standalone image (uses multiplication symbol, not x)"), filename.utf8().data(), size.width(), size.height());
 #else
-    return formatLocalizedString(WEB_UI_STRING("<filename> %d×%d pixels", "window title for a standalone image (uses multiplication symbol, not x)"), size.width(), size.height()).replace("<filename>", filename);
+    return formatLocalizedString(String::fromUTF8("<filename> %d×%d pixels", "window title for a standalone image (uses multiplication symbol, not x)"), size.width(), size.height()).replace("<filename>", filename);
 #endif
 }
 
@@ -1141,37 +854,41 @@ String validationMessagePatternMismatchText()
     return WEB_UI_STRING("Match the requested format", "Validation message for input form controls requiring a constrained value according to pattern");
 }
 
+#if !PLATFORM(GTK)
 String validationMessageTooShortText(int, int minLength)
 {
     return formatLocalizedString(WEB_UI_STRING("Use at least %d characters", "Validation message for form control elements with a value shorter than minimum allowed length"), minLength);
 }
 
 #if !PLATFORM(COCOA)
-
 String validationMessageTooLongText(int, int maxLength)
 {
     return formatLocalizedString(WEB_UI_STRING("Use no more than %d characters", "Validation message for form control elements with a value shorter than maximum allowed length"), maxLength);
 }
-
+#endif
 #endif
 
 String validationMessageRangeUnderflowText(const String& minimum)
 {
 #if USE(CF)
-    return formatLocalizedString(WEB_UI_STRING("Value must be greater than or equal to %@", "Validation message for input form controls with value lower than allowed minimum"), minimum.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("Value must be greater than or equal to %@", "Validation message for input form controls with value lower than allowed minimum"), minimum.createCFString().get());
+#elif USE(GLIB)
+    return formatLocalizedString(WEB_UI_STRING("Value must be greater than or equal to %s", "Validation message for input form controls with value lower than allowed minimum"), minimum.utf8().data());
 #else
     UNUSED_PARAM(minimum);
-    return WEB_UI_STRING("range underflow", "Validation message for input form controls with value lower than allowed minimum");
+    return String::fromUTF8("range underflow", "Validation message for input form controls with value lower than allowed minimum");
 #endif
 }
 
 String validationMessageRangeOverflowText(const String& maximum)
 {
 #if USE(CF)
-    return formatLocalizedString(WEB_UI_STRING("Value must be less than or equal to %@", "Validation message for input form controls with value higher than allowed maximum"), maximum.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("Value must be less than or equal to %@", "Validation message for input form controls with value higher than allowed maximum"), maximum.createCFString().get());
+#elif USE(GLIB)
+    return formatLocalizedString(WEB_UI_STRING("Value must be less than or equal to %s", "Validation message for input form controls with value higher than allowed maximum"), maximum.utf8().data());
 #else
     UNUSED_PARAM(maximum);
-    return WEB_UI_STRING("range overflow", "Validation message for input form controls with value higher than allowed maximum");
+    return String::fromUTF8("range overflow", "Validation message for input form controls with value higher than allowed maximum");
 #endif
 }
 
@@ -1223,37 +940,37 @@ String audioTrackNoLabelText()
 
 String textTrackCountryAndLanguageMenuItemText(const String& title, const String& country, const String& language)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ (%@-%@)", "Text track display name format that includes the country and language of the subtitle, in the form of 'Title (Language-Country)'"), title.createCFString().get(), language.createCFString().get(), country.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ (%@-%@)", "Text track display name format that includes the country and language of the subtitle, in the form of 'Title (Language-Country)'"), title.createCFString().get(), language.createCFString().get(), country.createCFString().get());
 }
 
 String textTrackLanguageMenuItemText(const String& title, const String& language)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ (%@)", "Text track display name format that includes the language of the subtitle, in the form of 'Title (Language)'"), title.createCFString().get(), language.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ (%@)", "Text track display name format that includes the language of the subtitle, in the form of 'Title (Language)'"), title.createCFString().get(), language.createCFString().get());
 }
 
 String closedCaptionTrackMenuItemText(const String& title)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ CC", "Text track contains closed captions"), title.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ CC", "Text track contains closed captions"), title.createCFString().get());
 }
 
 String sdhTrackMenuItemText(const String& title)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ SDH", "Text track contains subtitles for the deaf and hard of hearing"), title.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ SDH", "Text track contains subtitles for the deaf and hard of hearing"), title.createCFString().get());
 }
 
 String easyReaderTrackMenuItemText(const String& title)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ Easy Reader", "Text track contains simplified (3rd grade level) subtitles"), title.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ Easy Reader", "Text track contains simplified (3rd grade level) subtitles"), title.createCFString().get());
 }
 
 String forcedTrackMenuItemText(const String& title)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ Forced", "Text track contains forced subtitles"), title.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ Forced", "Text track contains forced subtitles"), title.createCFString().get());
 }
 
 String audioDescriptionTrackSuffixText(const String& title)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ AD", "Text track contains Audio Descriptions"), title.createCFString().get());
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ AD", "Text track contains Audio Descriptions"), title.createCFString().get());
 }
 
 #endif
@@ -1277,7 +994,13 @@ String useBlockedPlugInContextMenuTitle()
 
 String webCryptoMasterKeyKeychainLabel(const String& localizedApplicationName)
 {
-    return formatLocalizedString(WEB_UI_STRING("%@ WebCrypto Master Key", "Name of application's single WebCrypto master key in Keychain"), localizedApplicationName.createCFString().get());
+#if USE(CF)
+    return formatLocalizedString(WEB_UI_CFSTRING("%@ WebCrypto Master Key", "Name of application's single WebCrypto master key in Keychain"), localizedApplicationName.createCFString().get());
+#elif USE(GLIB)
+    return formatLocalizedString(WEB_UI_STRING("%s WebCrypto Master Key", "Name of application's single WebCrypto master key in Keychain"), localizedApplicationName.utf8().data());
+#else
+    return String::fromUTF8("<application> WebCrypto Master Key", "Name of application's single WebCrypto master key in Keychain").replace("<application>", localizedApplicationName);
+#endif
 }
 
 String webCryptoMasterKeyKeychainComment()
@@ -1287,38 +1010,6 @@ String webCryptoMasterKeyKeychainComment()
 
 #endif
 
-#if PLATFORM(MAC)
-
-String insertListTypeNone()
-{
-    return WEB_UI_STRING("None", "Option in segmented control for choosing list type in text editing");
-}
-
-String insertListTypeBulleted()
-{
-    return WEB_UI_STRING("•", "Option in segmented control for choosing list type in text editing");
-}
-
-String insertListTypeBulletedAccessibilityTitle()
-{
-    return WEB_UI_STRING("Bulleted list", "Option in segmented control for inserting a bulleted list in text editing");
-}
-
-String insertListTypeNumbered()
-{
-    return WEB_UI_STRING("1. 2. 3.", "Option in segmented control for choosing list type in text editing");
-}
-
-String insertListTypeNumberedAccessibilityTitle()
-{
-    return WEB_UI_STRING("Numbered list", "Option in segmented control for inserting a numbered list in text editing");
-}
-
-String exitFullScreenButtonAccessibilityTitle()
-{
-    return WEB_UI_STRING("Exit Fullscreen", "Button for exiting fullscreen when in fullscreen media playback");
-}
 
-#endif // PLATFORM(MAC)
 
 } // namespace WebCore
index d9662dc..7ab6ed4 100644 (file)
 
 #include <wtf/Forward.h>
 
+#if USE(GLIB) && defined(GETTEXT_PACKAGE)
+#include <glib/gi18n-lib.h>
+#endif
+
 namespace WebCore {
 
     class IntSize;
@@ -307,10 +311,23 @@ namespace WebCore {
     WEBCORE_EXPORT String exitFullScreenButtonAccessibilityTitle();
 #endif
 
+#if USE(GLIB) && defined(GETTEXT_PACKAGE)
+#define WEB_UI_STRING(string, description) WebCore::localizedString(_(string))
+#define WEB_UI_STRING_KEY(string, key, description) WebCore::localizedString(C_(key, string))
+#define WEB_UI_STRING_WITH_MNEMONIC(string, mnemonic, description) WebCore::localizedString(_(mnemonic))
+#else
 #define WEB_UI_STRING(string, description) WebCore::localizedString(string)
 #define WEB_UI_STRING_KEY(string, key, description) WebCore::localizedString(key)
+#define WEB_UI_STRING_WITH_MNEMONIC(string, mnemonic, description) WebCore::localizedString(string)
+#endif
+
+#if USE(CF)
+// This is exactly as WEB_UI_STRING, but renamed to ensure the string is not scanned by non-CF ports.
+#define WEB_UI_CFSTRING(string, description) WebCore::localizedString(string)
+#endif
 
     WEBCORE_EXPORT String localizedString(const char* key);
+    String formatLocalizedString(String format, ...);
 
 #ifdef __OBJC__
 #define WEB_UI_NSSTRING(string, description) WebCore::localizedNSString(string)
index fb596f2..42a5fce 100644 (file)
@@ -26,6 +26,8 @@
 #include "config.h"
 #include "LocalizedStrings.h"
 
+#include "NotImplemented.h"
+#include "WebCoreSystemInterface.h"
 #include <wtf/Assertions.h>
 #include <wtf/MainThread.h>
 #include <wtf/RetainPtr.h>
@@ -51,9 +53,305 @@ String localizedString(const char* key)
     return localizedNSString((NSString *)keyString.get());
 }
 
+String copyImageUnknownFileLabel()
+{
+    return WEB_UI_STRING("unknown", "Unknown filename");
+}
+
+#if ENABLE(CONTEXT_MENUS)
+String contextMenuItemTagSearchInSpotlight()
+{
+    return WEB_UI_STRING("Search in Spotlight", "Search in Spotlight context menu item");
+}
+
+String contextMenuItemTagSearchWeb()
+{
+    auto searchProviderName = adoptCF(wkCopyDefaultSearchProviderDisplayName());
+    return formatLocalizedString(WEB_UI_STRING("Search with %@", "Search with search provider context menu item with provider name inserted"), searchProviderName.get());
+}
+
+String contextMenuItemTagShowFonts()
+{
+    return WEB_UI_STRING("Show Fonts", "Show fonts context menu item");
+}
+
+String contextMenuItemTagStyles()
+{
+    return WEB_UI_STRING("Styles...", "Styles context menu item");
+}
+
+String contextMenuItemTagShowColors()
+{
+    return WEB_UI_STRING("Show Colors", "Show colors context menu item");
+}
+
+String contextMenuItemTagSpeechMenu()
+{
+    return WEB_UI_STRING("Speech", "Speech context sub-menu item");
+}
+
+String contextMenuItemTagStartSpeaking()
+{
+    return WEB_UI_STRING("Start Speaking", "Start speaking context menu item");
+}
+
+String contextMenuItemTagStopSpeaking()
+{
+    return WEB_UI_STRING("Stop Speaking", "Stop speaking context menu item");
+}
+
+String contextMenuItemTagCorrectSpellingAutomatically()
+{
+    return WEB_UI_STRING("Correct Spelling Automatically", "Correct Spelling Automatically context menu item");
+}
+
+String contextMenuItemTagSubstitutionsMenu()
+{
+    return WEB_UI_STRING("Substitutions", "Substitutions context sub-menu item");
+}
+
+String contextMenuItemTagShowSubstitutions(bool show)
+{
+    if (show)
+        return WEB_UI_STRING("Show Substitutions", "menu item title");
+    return WEB_UI_STRING("Hide Substitutions", "menu item title");
+}
+
+String contextMenuItemTagSmartCopyPaste()
+{
+    return WEB_UI_STRING("Smart Copy/Paste", "Smart Copy/Paste context menu item");
+}
+
+String contextMenuItemTagSmartQuotes()
+{
+    return WEB_UI_STRING("Smart Quotes", "Smart Quotes context menu item");
+}
+
+String contextMenuItemTagSmartDashes()
+{
+    return WEB_UI_STRING("Smart Dashes", "Smart Dashes context menu item");
+}
+
+String contextMenuItemTagSmartLinks()
+{
+    return WEB_UI_STRING("Smart Links", "Smart Links context menu item");
+}
+
+String contextMenuItemTagTextReplacement()
+{
+    return WEB_UI_STRING("Text Replacement", "Text Replacement context menu item");
+}
+
+String contextMenuItemTagTransformationsMenu()
+{
+    return WEB_UI_STRING("Transformations", "Transformations context sub-menu item");
+}
+
+String contextMenuItemTagMakeUpperCase()
+{
+    return WEB_UI_STRING("Make Upper Case", "Make Upper Case context menu item");
+}
+
+String contextMenuItemTagMakeLowerCase()
+{
+    return WEB_UI_STRING("Make Lower Case", "Make Lower Case context menu item");
+}
+
+String contextMenuItemTagCapitalize()
+{
+    return WEB_UI_STRING("Capitalize", "Capitalize context menu item");
+}
+
+String contextMenuItemTagChangeBack(const String& replacedString)
+{
+    notImplemented();
+    return replacedString;
+}
+
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+String contextMenuItemTagEnterVideoEnhancedFullscreen()
+{
+    return WEB_UI_STRING("Enter Picture in Picture", "menu item");
+}
+
+String contextMenuItemTagExitVideoEnhancedFullscreen()
+{
+    return WEB_UI_STRING("Exit Picture in Picture", "menu item");
+}
+#endif
+#endif // ENABLE(CONTEXT_MENUS)
+
+String AXARIAContentGroupText(const String& ariaType)
+{
+    if (ariaType == "ARIAApplicationAlert")
+        return WEB_UI_STRING("alert", "An ARIA accessibility group that acts as an alert.");
+    if (ariaType == "ARIAApplicationAlertDialog")
+        return WEB_UI_STRING("web alert dialog", "An ARIA accessibility group that acts as an alert dialog.");
+    if (ariaType == "ARIAApplicationDialog")
+        return WEB_UI_STRING("web dialog", "An ARIA accessibility group that acts as an dialog.");
+    if (ariaType == "ARIAApplicationLog")
+        return WEB_UI_STRING("log", "An ARIA accessibility group that acts as a console log.");
+    if (ariaType == "ARIAApplicationMarquee")
+        return WEB_UI_STRING("marquee", "An ARIA accessibility group that acts as a marquee.");
+    if (ariaType == "ARIAApplicationStatus")
+        return WEB_UI_STRING("application status", "An ARIA accessibility group that acts as a status update.");
+    if (ariaType == "ARIAApplicationTimer")
+        return WEB_UI_STRING("timer", "An ARIA accessibility group that acts as an updating timer.");
+    if (ariaType == "ARIADocument")
+        return WEB_UI_STRING("document", "An ARIA accessibility group that acts as a document.");
+    if (ariaType == "ARIADocumentArticle")
+        return WEB_UI_STRING("article", "An ARIA accessibility group that acts as an article.");
+    if (ariaType == "ARIADocumentNote")
+        return WEB_UI_STRING("note", "An ARIA accessibility group that acts as a note in a document.");
+    if (ariaType == "ARIAWebApplication")
+        return WEB_UI_STRING("web application", "An ARIA accessibility group that acts as an application.");
+    if (ariaType == "ARIALandmarkBanner")
+        return WEB_UI_STRING("banner", "An ARIA accessibility group that acts as a banner.");
+    if (ariaType == "ARIALandmarkComplementary")
+        return WEB_UI_STRING("complementary", "An ARIA accessibility group that acts as a region of complementary information.");
+    if (ariaType == "ARIALandmarkContentInfo")
+        return WEB_UI_STRING("content information", "An ARIA accessibility group that contains content.");
+    if (ariaType == "ARIALandmarkMain")
+        return WEB_UI_STRING("main", "An ARIA accessibility group that is the main portion of the website.");
+    if (ariaType == "ARIALandmarkNavigation")
+        return WEB_UI_STRING("navigation", "An ARIA accessibility group that contains the main navigation elements of a website.");
+    if (ariaType == "ARIALandmarkRegion")
+        return WEB_UI_STRING("region", "An ARIA accessibility group that acts as a distinct region in a document.");
+    if (ariaType == "ARIALandmarkSearch")
+        return WEB_UI_STRING("search", "An ARIA accessibility group that contains a search feature of a website.");
+    if (ariaType == "ARIAUserInterfaceTooltip")
+        return WEB_UI_STRING("tooltip", "An ARIA accessibility group that acts as a tooltip.");
+    if (ariaType == "ARIATabPanel")
+        return WEB_UI_STRING("tab panel", "An ARIA accessibility group that contains the content of a tab.");
+    if (ariaType == "ARIADocumentMath")
+        return WEB_UI_STRING("math", "An ARIA accessibility group that contains mathematical symbols.");
+    return String();
+}
+
+String AXHorizontalRuleDescriptionText()
+{
+    return WEB_UI_STRING("separator", "accessibility role description for a horizontal rule [<hr>]");
+}
+
+String AXMarkText()
+{
+    return WEB_UI_STRING("highlighted", "accessibility role description for a mark element");
+}
+
+#if ENABLE(METER_ELEMENT)
+String AXMeterGaugeRegionOptimumText()
+{
+    return WEB_UI_STRING("optimal value", "The optimum value description for a meter element.");
+}
+
+String AXMeterGaugeRegionSuboptimalText()
+{
+    return WEB_UI_STRING("suboptimal value", "The suboptimal value description for a meter element.");
+}
+
+String AXMeterGaugeRegionLessGoodText()
+{
+    return WEB_UI_STRING("critical value", "The less good value description for a meter element.");
+}
+#endif // ENABLE(METER_ELEMENT)
+
+String builtInPDFPluginName()
+{
+    // Also exposed to DOM.
+    return WEB_UI_STRING("WebKit built-in PDF", "Pseudo plug-in name, visible in the Installed Plug-ins page in Safari.");
+}
+
+String pdfDocumentTypeDescription()
+{
+    // Also exposed to DOM.
+    return WEB_UI_STRING("Portable Document Format", "Description of the primary type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari.");
+}
+
+String postScriptDocumentTypeDescription()
+{
+    // Also exposed to DOM.
+    return WEB_UI_STRING("PostScript", "Description of the PostScript type supported by the PDF pseudo plug-in. Visible in the Installed Plug-ins page in Safari.");
+}
+
+String keygenMenuItem2048()
+{
+    return WEB_UI_STRING("2048 (High Grade)", "Menu item title for KEYGEN pop-up menu");
+}
+
+String keygenKeychainItemName(const String& host)
+{
+    return formatLocalizedString(WEB_UI_STRING("Key from %@", "Name of keychain key generated by the KEYGEN tag"), host.createCFString().get());
+}
+
+#if PLATFORM(IOS)
+String htmlSelectMultipleItems(size_t count)
+{
+    switch (count) {
+    case 0:
+        return WEB_UI_STRING("0 Items", "Present the element <select multiple> when no <option> items are selected (iOS only)");
+    case 1:
+        return WEB_UI_STRING("1 Item", "Present the element <select multiple> when a single <option> is selected (iOS only)");
+    default:
+        return formatLocalizedString(WEB_UI_STRING("%zu Items", "Present the number of selected <option> items in a <select multiple> element (iOS only)"), count);
+    }
+}
+
+String fileButtonChooseMediaFileLabel()
+{
+    return WEB_UI_STRING("Choose Media (Single)", "Title for file button used in HTML forms for media files");
+}
+
+String fileButtonChooseMultipleMediaFilesLabel()
+{
+    return WEB_UI_STRING("Choose Media (Multiple)", "Title for file button used in HTML5 forms for multiple media files");
+}
+
+String fileButtonNoMediaFileSelectedLabel()
+{
+    return WEB_UI_STRING("no media selected (single)", "Text to display in file button used in HTML forms for media files when no media file is selected");
+}
+
+String fileButtonNoMediaFilesSelectedLabel()
+{
+    return WEB_UI_STRING("no media selected (multiple)", "Text to display in file button used in HTML forms for media files when no media files are selected and the button allows multiple files to be selected");
+}
+#endif
+
 String validationMessageTooLongText(int, int maxLength)
 {
     return [NSString localizedStringWithFormat:WEB_UI_NSSTRING(@"Use no more than %d character(s)", @"Validation message for form control elements with a value shorter than maximum allowed length"), maxLength];
 }
 
+#if PLATFORM(MAC)
+String insertListTypeNone()
+{
+    return WEB_UI_STRING("None", "Option in segmented control for choosing list type in text editing");
+}
+
+String insertListTypeBulleted()
+{
+    return WEB_UI_STRING("•", "Option in segmented control for choosing list type in text editing");
+}
+
+String insertListTypeBulletedAccessibilityTitle()
+{
+    return WEB_UI_STRING("Bulleted list", "Option in segmented control for inserting a bulleted list in text editing");
+}
+
+String insertListTypeNumbered()
+{
+    return WEB_UI_STRING("1. 2. 3.", "Option in segmented control for choosing list type in text editing");
+}
+
+String insertListTypeNumberedAccessibilityTitle()
+{
+    return WEB_UI_STRING("Numbered list", "Option in segmented control for inserting a numbered list in text editing");
+}
+
+String exitFullScreenButtonAccessibilityTitle()
+{
+    return WEB_UI_STRING("Exit Fullscreen", "Button for exiting fullscreen when in fullscreen media playback");
+}
+#endif // PLATFORM(MAC)
+
 } // namespace WebCore
index ae8dadd..750ece3 100644 (file)
 #include "config.h"
 #include "LocalizedStrings.h"
 
-#include "IntSize.h"
-#include "NotImplemented.h"
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-#include <wtf/MathExtras.h>
 #include <wtf/glib/GUniquePtr.h>
 #include <wtf/text/CString.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-static const char* gtkStockLabel(const char* stockID)
-{
-    GtkStockItem item;
-    if (!gtk_stock_lookup(stockID, &item))
-        return stockID;
-    return item.label;
-}
-
-String submitButtonDefaultLabel()
-{
-    return String::fromUTF8(_("Submit"));
-}
-
-String inputElementAltText()
-{
-    return String::fromUTF8(_("Submit"));
-}
-
-String resetButtonDefaultLabel()
-{
-    return String::fromUTF8(_("Reset"));
-}
-
-String defaultDetailsSummaryText()
-{
-    return String::fromUTF8(_("Details"));
-}
-
-String searchableIndexIntroduction()
-{
-    return String::fromUTF8(_("This is a searchable index. Enter search keywords: "));
-}
-
-String fileButtonChooseFileLabel()
-{
-    return String::fromUTF8(_("Choose File"));
-}
-
-String fileButtonChooseMultipleFilesLabel()
-{
-    return String::fromUTF8(_("Choose Files"));
-}
-
-String fileButtonNoFileSelectedLabel()
-{
-    return String::fromUTF8(_("(None)"));
-}
-
-String fileButtonNoFilesSelectedLabel()
-{
-    return String::fromUTF8(_("(None)"));
-}
-
-String contextMenuItemTagOpenLinkInNewWindow()
-{
-    return String::fromUTF8(_("Open Link in New _Window"));
-}
-
-String contextMenuItemTagDownloadLinkToDisk()
-{
-    return String::fromUTF8(_("_Download Linked File"));
-}
-
+#if ENABLE(CONTEXT_MENUS)
 String contextMenuItemTagCopyLinkToClipboard()
 {
     return String::fromUTF8(_("Copy Link Loc_ation"));
 }
 
-String contextMenuItemTagOpenImageInNewWindow()
-{
-    return String::fromUTF8(_("Open _Image in New Window"));
-}
-
 String contextMenuItemTagDownloadImageToDisk()
 {
     return String::fromUTF8(_("Sa_ve Image As"));
 }
 
-String contextMenuItemTagCopyImageToClipboard()
-{
-    return String::fromUTF8(_("Cop_y Image"));
-}
-
 String contextMenuItemTagCopyImageUrlToClipboard()
 {
     return String::fromUTF8(_("Copy Image _Address"));
 }
 
-String contextMenuItemTagOpenVideoInNewWindow()
-{
-    return String::fromUTF8(_("Open _Video in New Window"));
-}
-
-String contextMenuItemTagOpenAudioInNewWindow()
-{
-    return String::fromUTF8(_("Open _Audio in New Window"));
-}
-
-String contextMenuItemTagDownloadVideoToDisk()
-{
-    return String::fromUTF8(_("Download _Video"));
-}
-
-String contextMenuItemTagDownloadAudioToDisk()
-{
-    return String::fromUTF8(_("Download _Audio"));
-}
-
 String contextMenuItemTagCopyVideoLinkToClipboard()
 {
     return String::fromUTF8(_("Cop_y Video Link Location"));
@@ -185,42 +88,14 @@ String contextMenuItemTagEnterVideoFullscreen()
     return String::fromUTF8(_("Switch Video to _Fullscreen"));
 }
 
-String contextMenuItemTagMediaPlay()
-{
-    return String::fromUTF8(_("_Play"));
-}
-
-String contextMenuItemTagMediaPause()
-{
-    return String::fromUTF8(_("_Pause"));
-}
-
-String contextMenuItemTagMediaMute()
-{
-    return String::fromUTF8(_("_Mute"));
-}
-
-String contextMenuItemTagOpenFrameInNewWindow()
-{
-    return String::fromUTF8(_("Open _Frame in New Window"));
-}
-
-String contextMenuItemTagCopy()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_COPY));
-    return stockLabel;
-}
-
 String contextMenuItemTagDelete()
 {
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_DELETE));
-    return stockLabel;
+    return String::fromUTF8(_("_Delete"));
 }
 
 String contextMenuItemTagSelectAll()
 {
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_SELECT_ALL));
-    return stockLabel;
+    return String::fromUTF8(_("Select _All"));
 }
 
 String contextMenuItemTagUnicode()
@@ -233,134 +108,11 @@ String contextMenuItemTagInputMethods()
     return String::fromUTF8(_("Input _Methods"));
 }
 
-String contextMenuItemTagGoBack()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_GO_BACK));
-    return stockLabel;
-}
-
-String contextMenuItemTagGoForward()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_GO_FORWARD));
-    return stockLabel;
-}
-
-String contextMenuItemTagStop()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_STOP));
-    return stockLabel;
-}
-
-String contextMenuItemTagReload()
-{
-    return String::fromUTF8(_("_Reload"));
-}
-
-String contextMenuItemTagCut()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_CUT));
-    return stockLabel;
-}
-
-String contextMenuItemTagPaste()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_PASTE));
-    return stockLabel;
-}
-
-String contextMenuItemTagNoGuessesFound()
-{
-    return String::fromUTF8(_("No Guesses Found"));
-}
-
-String contextMenuItemTagIgnoreSpelling()
-{
-    return String::fromUTF8(_("_Ignore Spelling"));
-}
-
-String contextMenuItemTagLearnSpelling()
-{
-    return String::fromUTF8(_("_Learn Spelling"));
-}
-
 String contextMenuItemTagSearchWeb()
 {
     return String::fromUTF8(_("_Search the Web"));
 }
 
-String contextMenuItemTagLookUpInDictionary(const String&)
-{
-    return String::fromUTF8(_("_Look Up in Dictionary"));
-}
-
-String contextMenuItemTagOpenLink()
-{
-    return String::fromUTF8(_("_Open Link"));
-}
-
-String contextMenuItemTagIgnoreGrammar()
-{
-    return String::fromUTF8(_("Ignore _Grammar"));
-}
-
-String contextMenuItemTagSpellingMenu()
-{
-    return String::fromUTF8(_("Spelling and _Grammar"));
-}
-
-String contextMenuItemTagShowSpellingPanel(bool show)
-{
-    return String::fromUTF8(show ? _("_Show Spelling and Grammar") : _("_Hide Spelling and Grammar"));
-}
-
-String contextMenuItemTagCheckSpelling()
-{
-    return String::fromUTF8(_("_Check Document Now"));
-}
-
-String contextMenuItemTagCheckSpellingWhileTyping()
-{
-    return String::fromUTF8(_("Check Spelling While _Typing"));
-}
-
-String contextMenuItemTagCheckGrammarWithSpelling()
-{
-    return String::fromUTF8(_("Check _Grammar With Spelling"));
-}
-
-String contextMenuItemTagFontMenu()
-{
-    return String::fromUTF8(_("_Font"));
-}
-
-String contextMenuItemTagBold()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_BOLD));
-    return stockLabel;
-}
-
-String contextMenuItemTagItalic()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_ITALIC));
-    return stockLabel;
-}
-
-String contextMenuItemTagUnderline()
-{
-    static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_UNDERLINE));
-    return stockLabel;
-}
-
-String contextMenuItemTagOutline()
-{
-    return String::fromUTF8(_("_Outline"));
-}
-
-String contextMenuItemTagInspectElement()
-{
-    return String::fromUTF8(_("Inspect _Element"));
-}
-
 String contextMenuItemTagUnicodeInsertLRMMark()
 {
     return String::fromUTF8(_("LRM _Left-to-right mark"));
@@ -410,404 +162,7 @@ String contextMenuItemTagUnicodeInsertZWNJMark()
 {
     return String::fromUTF8(_("ZWNJ Zero width _non-joiner"));
 }
-
-String searchMenuNoRecentSearchesText()
-{
-    return String::fromUTF8(_("No recent searches"));
-}
-
-String searchMenuRecentSearchesText()
-{
-    return String::fromUTF8(_("Recent searches"));
-}
-
-String searchMenuClearRecentSearchesText()
-{
-    return String::fromUTF8(_("_Clear recent searches"));
-}
-
-String AXDefinitionText()
-{
-    return String::fromUTF8(_("definition"));
-}
-
-String AXDescriptionListText()
-{
-    return String::fromUTF8(_("description list"));
-}
-
-String AXDescriptionListTermText()
-{
-    return String::fromUTF8(_("term"));
-}
-
-String AXDescriptionListDetailText()
-{
-    return String::fromUTF8(_("description"));
-}
-
-String AXDetailsText()
-{
-    return String::fromUTF8(_("details"));
-}
-
-String AXSummaryText()
-{
-    return String::fromUTF8(_("summary"));
-}
-
-String AXFigureText()
-{
-    return String::fromUTF8(_("figure"));
-}
-
-String AXOutputText()
-{
-    return String::fromUTF8(_("output"));
-}
-
-String AXEmailFieldText()
-{
-    return String::fromUTF8(_("email field"));
-}
-
-String AXTelephoneFieldText()
-{
-    return String::fromUTF8(_("telephone number field"));
-}
-
-String AXURLFieldText()
-{
-    return String::fromUTF8(_("URL field"));
-}
-
-String AXDateFieldText()
-{
-    return String::fromUTF8(_("date field"));
-}
-
-String AXTimeFieldText()
-{
-    return String::fromUTF8(_("time field"));
-}
-
-String AXDateTimeFieldText()
-{
-    return String::fromUTF8(_("date and time field"));
-}
-
-String AXMonthFieldText()
-{
-    return String::fromUTF8(_("month and year field"));
-}
-
-String AXNumberFieldText()
-{
-    return String::fromUTF8(_("number field"));
-}
-
-String AXWeekFieldText()
-{
-    return String::fromUTF8(_("week and year field"));
-}
-
-String AXFooterRoleDescriptionText()
-{
-    return String::fromUTF8(_("footer"));
-}
-
-String AXSearchFieldCancelButtonText()
-{
-    return String::fromUTF8(_("cancel"));
-}
-
-String AXAutoFillCredentialsLabel()
-{
-    return String::fromUTF8(_("password auto fill"));
-}
-
-String AXAutoFillContactsLabel()
-{
-    return String::fromUTF8(_("contact info auto fill"));
-}
-    
-String AXButtonActionVerb()
-{
-    return String::fromUTF8(_("press"));
-}
-
-String AXRadioButtonActionVerb()
-{
-    return String::fromUTF8(_("select"));
-}
-
-String AXTextFieldActionVerb()
-{
-    return String::fromUTF8(_("activate"));
-}
-
-String AXCheckedCheckBoxActionVerb()
-{
-    return String::fromUTF8(_("uncheck"));
-}
-
-String AXUncheckedCheckBoxActionVerb()
-{
-    return String::fromUTF8(_("check"));
-}
-
-String AXLinkActionVerb()
-{
-    return String::fromUTF8(_("jump"));
-}
-
-String AXMenuListPopupActionVerb()
-{
-    return String();
-}
-
-String AXMenuListActionVerb()
-{
-    return String();
-}
-
-String AXListItemActionVerb()
-{
-    return String();
-}
-    
-String missingPluginText()
-{
-    return String::fromUTF8(_("Missing Plug-in"));
-}
-
-String crashedPluginText()
-{
-    notImplemented();
-    return String::fromUTF8(_("Plug-in Failure"));
-}
-
-String blockedPluginByContentSecurityPolicyText()
-{
-    notImplemented();
-    return String();
-}
-
-String insecurePluginVersionText()
-{
-    notImplemented();
-    return String();
-}
-
-String multipleFileUploadText(unsigned numberOfFiles)
-{
-    // FIXME: If this file gets localized, this should really be localized as one string with a wildcard for the number.
-    return String::number(numberOfFiles) + String::fromUTF8(_(" files"));
-}
-
-String unknownFileSizeText()
-{
-    return String::fromUTF8(_("Unknown"));
-}
-
-String imageTitle(const String& filename, const IntSize& size)
-{
-    GUniquePtr<gchar> string(g_strdup_printf(C_("window title for a standalone image (uses multiplication symbol, not x)", "%s %d×%d pixels"),
-        filename.utf8().data(), size.width(), size.height()));
-
-    return String::fromUTF8(string.get());
-}
-
-
-#if ENABLE(VIDEO)
-
-String mediaElementLoadingStateText()
-{
-    return String::fromUTF8(_("Loading..."));
-}
-
-String mediaElementLiveBroadcastStateText()
-{
-    return String::fromUTF8(_("Live Broadcast"));
-}
-
-String localizedMediaControlElementString(const String& name)
-{
-    if (name == "AudioElement")
-        return String::fromUTF8(_("audio playback"));
-    if (name == "VideoElement")
-        return String::fromUTF8(_("video playback"));
-    if (name == "MuteButton")
-        return String::fromUTF8(_("mute"));
-    if (name == "UnMuteButton")
-        return String::fromUTF8(_("unmute"));
-    if (name == "PlayButton")
-        return String::fromUTF8(_("play"));
-    if (name == "PauseButton")
-        return String::fromUTF8(_("pause"));
-    if (name == "Slider")
-        return String::fromUTF8(_("movie time"));
-    if (name == "SliderThumb")
-        return String::fromUTF8(_("timeline slider thumb"));
-    if (name == "RewindButton")
-        return String::fromUTF8(_("back 30 seconds"));
-    if (name == "ReturnToRealtimeButton")
-        return String::fromUTF8(_("return to realtime"));
-    if (name == "CurrentTimeDisplay")
-        return String::fromUTF8(_("elapsed time"));
-    if (name == "TimeRemainingDisplay")
-        return String::fromUTF8(_("remaining time"));
-    if (name == "StatusDisplay")
-        return String::fromUTF8(_("status"));
-    if (name == "EnterFullscreenButton")
-        return String::fromUTF8(_("enter fullscreen"));
-    if (name == "ExitFullscreenButton")
-        return String::fromUTF8(_("exit fullscreen"));
-    if (name == "SeekForwardButton")
-        return String::fromUTF8(_("fast forward"));
-    if (name == "SeekBackButton")
-        return String::fromUTF8(_("fast reverse"));
-    if (name == "ShowClosedCaptionsButton")
-        return String::fromUTF8(_("show closed captions"));
-    if (name == "HideClosedCaptionsButton")
-        return String::fromUTF8(_("hide closed captions"));
-    if (name == "ControlsPanel")
-        return String::fromUTF8(_("media controls"));
-
-    ASSERT_NOT_REACHED();
-    return String();
-}
-
-String localizedMediaControlElementHelpText(const String& name)
-{
-    if (name == "AudioElement")
-        return String::fromUTF8(_("audio element playback controls and status display"));
-    if (name == "VideoElement")
-        return String::fromUTF8(_("video element playback controls and status display"));
-    if (name == "MuteButton")
-        return String::fromUTF8(_("mute audio tracks"));
-    if (name == "UnMuteButton")
-        return String::fromUTF8(_("unmute audio tracks"));
-    if (name == "PlayButton")
-        return String::fromUTF8(_("begin playback"));
-    if (name == "PauseButton")
-        return String::fromUTF8(_("pause playback"));
-    if (name == "Slider")
-        return String::fromUTF8(_("movie time scrubber"));
-    if (name == "SliderThumb")
-        return String::fromUTF8(_("movie time scrubber thumb"));
-    if (name == "RewindButton")
-        return String::fromUTF8(_("seek movie back 30 seconds"));
-    if (name == "ReturnToRealtimeButton")
-        return String::fromUTF8(_("return streaming movie to real time"));
-    if (name == "CurrentTimeDisplay")
-        return String::fromUTF8(_("current movie time in seconds"));
-    if (name == "TimeRemainingDisplay")
-        return String::fromUTF8(_("number of seconds of movie remaining"));
-    if (name == "StatusDisplay")
-        return String::fromUTF8(_("current movie status"));
-    if (name == "SeekBackButton")
-        return String::fromUTF8(_("seek quickly back"));
-    if (name == "SeekForwardButton")
-        return String::fromUTF8(_("seek quickly forward"));
-    if (name == "EnterFullscreenButton")
-        return String::fromUTF8(_("Play movie in fullscreen mode"));
-    if (name == "EnterFullscreenButton")
-        return String::fromUTF8(_("Exit fullscreen mode"));
-    if (name == "ShowClosedCaptionsButton")
-        return String::fromUTF8(_("start displaying closed captions"));
-    if (name == "HideClosedCaptionsButton")
-        return String::fromUTF8(_("stop displaying closed captions"));
-
-    ASSERT_NOT_REACHED();
-    return String();
-}
-
-String localizedMediaTimeDescription(float time)
-{
-    if (!std::isfinite(time))
-        return String::fromUTF8(_("indefinite time"));
-
-    int seconds = abs(static_cast<int>(time));
-    int days = seconds / (60 * 60 * 24);
-    int hours = seconds / (60 * 60);
-    int minutes = (seconds / 60) % 60;
-    seconds %= 60;
-
-    if (days) {
-        GUniquePtr<gchar> string(g_strdup_printf("%d days %d hours %d minutes %d seconds", days, hours, minutes, seconds));
-        return String::fromUTF8(string.get());
-    }
-
-    if (hours) {
-        GUniquePtr<gchar> string(g_strdup_printf("%d hours %d minutes %d seconds", hours, minutes, seconds));
-        return String::fromUTF8(string.get());
-    }
-
-    if (minutes) {
-        GUniquePtr<gchar> string(g_strdup_printf("%d minutes %d seconds", minutes, seconds));
-        return String::fromUTF8(string.get());
-    }
-
-    GUniquePtr<gchar> string(g_strdup_printf("%d seconds", seconds));
-    return String::fromUTF8(string.get());
-}
-#endif  // ENABLE(VIDEO)
-
-String validationMessageValueMissingText()
-{
-    return String::fromUTF8(_("Fill out this field"));
-}
-
-String validationMessageValueMissingForCheckboxText()
-{
-    return String::fromUTF8(_("Select this checkbox"));
-}
-
-String validationMessageValueMissingForFileText()
-{
-    return String::fromUTF8(_("Select a file"));
-}
-
-String validationMessageValueMissingForMultipleFileText()
-{
-    return validationMessageValueMissingForFileText();
-}
-
-String validationMessageValueMissingForRadioText()
-{
-    return String::fromUTF8(_("Select one of these options"));
-}
-
-String validationMessageValueMissingForSelectText()
-{
-    return String::fromUTF8(_("Select an item in the list"));
-}
-
-String validationMessageTypeMismatchText()
-{
-    return String::fromUTF8(_("Invalid value"));
-}
-
-String validationMessageTypeMismatchForEmailText()
-{
-    return String::fromUTF8(_("Enter an email address"));
-}
-
-String validationMessageTypeMismatchForMultipleEmailText()
-{
-    return validationMessageTypeMismatchForEmailText();
-}
-
-String validationMessageTypeMismatchForURLText()
-{
-    return String::fromUTF8(_("Enter a URL"));
-}
-
-String validationMessagePatternMismatchText()
-{
-    return String::fromUTF8(_("Match the requested format"));
-}
+#endif // ENABLE(CONTEXT_MENUS)
 
 String validationMessageTooShortText(int, int minLength)
 {
@@ -821,28 +176,6 @@ String validationMessageTooLongText(int, int maxLength)
     return String::fromUTF8(string.get());
 }
 
-String validationMessageRangeUnderflowText(const String& minimum)
-{
-    GUniquePtr<char> string(g_strdup_printf(_("Value must be greater than or equal to %s"), minimum.utf8().data()));
-    return String::fromUTF8(string.get());
-}
-
-String validationMessageRangeOverflowText(const String& maximum)
-{
-    GUniquePtr<char> string(g_strdup_printf(_("Value must be less than or equal to %s"), maximum.utf8().data()));
-    return String::fromUTF8(string.get());
-}
-
-String validationMessageStepMismatchText(const String&, const String&)
-{
-    return String::fromUTF8(_("Enter a valid value"));
-}
-
-String validationMessageBadInputForNumberText()
-{
-    return String::fromUTF8(_("Enter a number"));
-}
-
 String unacceptableTLSCertificate()
 {
     return String::fromUTF8(_("Unacceptable TLS certificate"));
@@ -853,41 +186,4 @@ String localizedString(const char* key)
     return String::fromUTF8(key, strlen(key));
 }
 
-#if ENABLE(VIDEO_TRACK)
-String textTrackSubtitlesText()
-{
-    return String::fromUTF8(C_("Menu section heading for subtitles", "Subtitles"));
-}
-
-String textTrackOffMenuItemText()
-{
-    return String::fromUTF8(C_("Menu item label for the track that represents disabling closed captions", "Off"));
-}
-
-String textTrackAutomaticMenuItemText()
-{
-    return String::fromUTF8(C_("Menu item label for the automatically chosen track", "Auto"));
-}
-
-String textTrackNoLabelText()
-{
-    return String::fromUTF8(C_("Menu item label for a closed captions track that has no other name", "No label"));
-}
-
-String audioTrackNoLabelText()
-{
-    return String::fromUTF8(C_("Menu item label for an audio track that has no other name", "No label"));
-}
-#endif
-
-String snapshottedPlugInLabelTitle()
-{
-    return String::fromUTF8(C_("Snapshotted Plug-In", "Title of the label to show on a snapshotted plug-in"));
-}
-
-String snapshottedPlugInLabelSubtitle()
-{
-    return String::fromUTF8(C_("Click to restart", "Subtitle of the label to show on a snapshotted plug-in"));
-}
-
-}
+} // namespace WebCore
index e44934d..ba81c12 100644 (file)
@@ -25,6 +25,9 @@ add_custom_command(
             --package-name="webkitgtk"
             --keyword=_
             --keyword=N_
+            --keyword=WEB_UI_STRING:1
+            --keyword=WEB_UI_STRING_KEY:3c,1
+            --keyword=WEB_UI_STRING_WITH_MNEMONIC:2
             --from-code=UTF-8
             -o ${pot_file}
     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/..
index 8026454..7a9f53f 100644 (file)
@@ -1,3 +1,13 @@
+2017-03-22  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        Make it possible to use WEB_UI_STRING macros to mark translatable strings in glib based ports
+        https://bugs.webkit.org/show_bug.cgi?id=169672
+
+        Reviewed by Michael Catanzaro.
+
+        * CMakeLists.txt: Add keyword parameters for WEB_UI_STRING macros.
+        * POTFILES.in: Add LocalizedStrings.cpp to the list.
+
 2017-03-18  Yuri Chornoivan  <yurchor@ukr.net>
 
         Update Ukrainian translation
index 8122112..8710120 100644 (file)
@@ -1,6 +1,7 @@
 # List of source files which contain translatable strings.
 ErrorsGtk.cpp
 LocalizedStringsGtk.cpp
+../LocalizedStrings.cpp
 ../../../WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp
 ../../../WebKit2/UIProcess/API/gtk/WebKitDownload.cpp
 ../../../WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp
index 4dc698b..4beff30 100644 (file)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "LocalizedStrings.h"
 
+#include "NotImplemented.h"
 #include "WebCoreInstanceHandle.h"
 #include <windows.h>
 #include <wtf/Assertions.h>
@@ -59,4 +60,23 @@ String localizedString(const char* key)
 #endif
 }
 
+#if ENABLE(CONTEXT_MENUS)
+String contextMenuItemTagSearchWeb()
+{
+    return WEB_UI_STRING("Search with Google", "Search with Google context menu item");
+}
+#endif
+
+String uploadFileText()
+{
+    notImplemented();
+    return "upload";
+}
+
+String allFilesText()
+{
+    notImplemented();
+    return "all files";
+}
+
 } // namespace WebCore