haikuwebkit/Source/WebCore/platform/LocalizedStrings.cpp

1364 lines
49 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2003-2020 Apple Inc. All rights reserved.
* Copyright (C) 2010 Igalia S.L
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "LocalizedStrings.h"
#include "IntSize.h"
#include "NotImplemented.h"
#include <wtf/MathExtras.h>
#include <wtf/text/TextBreakIterator.h>
#include <wtf/unicode/CharacterNames.h>
#if USE(CF)
#include <wtf/RetainPtr.h>
#endif
#if USE(GLIB)
#include <wtf/glib/GUniquePtr.h>
#endif
#if USE(HAIKU)
#include <String.h>
#endif
namespace WebCore {
// 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.
String formatLocalizedString(String format, ...)
{
#if USE(CF)
va_list arguments;
va_start(arguments, format);
ALLOW_NONLITERAL_FORMAT_BEGIN
auto result = adoptCF(CFStringCreateWithFormatAndArguments(0, 0, format.createCFString().get(), arguments));
ALLOW_NONLITERAL_FORMAT_END
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());
#elif USE(HAIKU)
BString formatted;
va_list arguments;
va_start(arguments, format);
formatted.SetToFormatVarArgs(format.utf8().data(), arguments);
va_end(arguments);
return formatted;
#else
notImplemented();
return format;
#endif
}
#if !USE(CF)
String localizedString(const char* key)
{
return String::fromUTF8(key, strlen(key));
}
#endif
#if ENABLE(CONTEXT_MENUS)
static String truncatedStringForMenuItem(const String& original)
{
// Truncate the string if it's too long. This number is roughly the same as the one used by AppKit.
unsigned maxNumberOfGraphemeClustersInLookupMenuItem = 24;
String trimmed = original.stripWhiteSpace();
unsigned numberOfCharacters = numCodeUnitsInGraphemeClusters(trimmed, maxNumberOfGraphemeClustersInLookupMenuItem);
return numberOfCharacters == trimmed.length() ? trimmed : makeString(trimmed.left(numberOfCharacters), horizontalEllipsis);
}
#endif
String inputElementAltText()
{
return WEB_UI_STRING_KEY("Submit", "Submit (input element)", "alt text for <input> elements with no alt, title, or value");
}
String resetButtonDefaultLabel()
{
return WEB_UI_STRING("Reset", "default label for Reset buttons in forms on web pages");
}
String searchableIndexIntroduction()
{
return WEB_UI_STRING("This is a searchable index. Enter search keywords: ",
"text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'");
}
String submitButtonDefaultLabel()
{
return WEB_UI_STRING("Submit", "default label for Submit buttons in forms on web pages");
}
String fileButtonChooseFileLabel()
{
return WEB_UI_STRING("Choose File", "title for a single file chooser button used in HTML forms");
}
String fileButtonChooseMultipleFilesLabel()
{
return WEB_UI_STRING("Choose Files", "title for a multiple file chooser button used in HTML forms. This title should be as short as possible.");
}
String fileButtonNoFileSelectedLabel()
{
return WEB_UI_STRING("no file selected", "text to display in file button used in HTML forms when no file is selected");
}
String fileButtonNoFilesSelectedLabel()
{
return WEB_UI_STRING("no files selected", "text to display in file button used in HTML forms when no files are selected and the button allows multiple files to be selected");
}
String defaultDetailsSummaryText()
{
return WEB_UI_STRING("Details", "text to display in <details> tag when it has no <summary> child");
}
#if ENABLE(CONTEXT_MENUS)
String contextMenuItemTagOpenLinkInNewWindow()
{
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_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_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_WITH_MNEMONIC("Copy Image", "Cop_y Image", "Copy Image context menu item");
}
String contextMenuItemTagOpenFrameInNewWindow()
{
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_WITH_MNEMONIC("Copy", "_Copy", "Copy context menu item");
}
String contextMenuItemTagGoBack()
{
return WEB_UI_STRING_WITH_MNEMONIC("Back", "_Back", "Back context menu item");
}
String contextMenuItemTagGoForward()
{
return WEB_UI_STRING_WITH_MNEMONIC("Forward", "_Forward", "Forward context menu item");
}
String contextMenuItemTagStop()
{
return WEB_UI_STRING_WITH_MNEMONIC("Stop", "_Stop", "Stop context menu item");
}
String contextMenuItemTagReload()
{
return WEB_UI_STRING_WITH_MNEMONIC("Reload", "_Reload", "Reload context menu item");
}
String contextMenuItemTagCut()
{
return WEB_UI_STRING_WITH_MNEMONIC("Cut", "Cu_t", "Cut context menu item");
}
String contextMenuItemTagPaste()
{
return WEB_UI_STRING_WITH_MNEMONIC("Paste", "_Paste", "Paste context menu item");
}
String contextMenuItemTagNoGuessesFound()
{
return WEB_UI_STRING("No Guesses Found", "No Guesses Found context menu item");
}
String contextMenuItemTagIgnoreSpelling()
{
return WEB_UI_STRING_WITH_MNEMONIC("Ignore Spelling", "_Ignore Spelling", "Ignore Spelling context menu item");
}
String contextMenuItemTagLearnSpelling()
{
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 = truncatedStringForMenuItem(selectedString).createCFString();
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"), truncatedStringForMenuItem(selectedString).utf8().data());
#else
return WEB_UI_STRING("Look Up “<selection>”", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForMenuItem(selectedString));
#endif
}
#if HAVE(TRANSLATION_UI_SERVICES)
String contextMenuItemTagTranslate(const String& selectedString)
{
auto selectedCFString = truncatedStringForMenuItem(selectedString).createCFString();
return formatLocalizedString(WEB_UI_CFSTRING("Translate “%@”", "Translate context menu item with selected word"), selectedCFString.get());
}
#endif
String contextMenuItemTagOpenLink()
{
return WEB_UI_STRING_WITH_MNEMONIC("Open Link", "_Open Link", "Open Link context menu item");
}
String contextMenuItemTagIgnoreGrammar()
{
return WEB_UI_STRING_WITH_MNEMONIC("Ignore Grammar", "Ignore _Grammar", "Ignore Grammar context menu item");
}
String contextMenuItemTagSpellingMenu()
{
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_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_WITH_MNEMONIC("Check Document Now", "_Check Document Now", "Check spelling context menu item");
}
String contextMenuItemTagCheckSpellingWhileTyping()
{
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_WITH_MNEMONIC("Check Grammar With Spelling", "Check _Grammar With Spelling", "Check grammar with spelling context menu item");
}
String contextMenuItemTagFontMenu()
{
return WEB_UI_STRING_WITH_MNEMONIC("Font", "_Font", "Font context sub-menu item");
}
String contextMenuItemTagBold()
{
return WEB_UI_STRING_WITH_MNEMONIC("Bold", "_Bold", "Bold context menu item");
}
String contextMenuItemTagItalic()
{
return WEB_UI_STRING_WITH_MNEMONIC("Italic", "_Italic", "Italic context menu item");
}
String contextMenuItemTagUnderline()
{
return WEB_UI_STRING_WITH_MNEMONIC("Underline", "_Underline", "Underline context menu item");
}
String contextMenuItemTagOutline()
{
return WEB_UI_STRING_WITH_MNEMONIC("Outline", "_Outline", "Outline context menu item");
}
#if !PLATFORM(GTK)
String contextMenuItemTagWritingDirectionMenu()
{
return WEB_UI_STRING("Paragraph Direction", "Paragraph direction context sub-menu item");
}
String contextMenuItemTagTextDirectionMenu()
{
return WEB_UI_STRING("Selection Direction", "Selection direction context sub-menu item");
}
String contextMenuItemTagDefaultDirection()
{
return WEB_UI_STRING("Default", "Default writing direction context menu item");
}
String contextMenuItemTagLeftToRight()
{
return WEB_UI_STRING("Left to Right", "Left to Right context menu item");
}
String contextMenuItemTagRightToLeft()
{
return WEB_UI_STRING("Right to Left", "Right to Left context menu item");
}
#endif
String contextMenuItemTagOpenVideoInNewWindow()
{
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_WITH_MNEMONIC("Open Audio in New Window", "Open _Audio in New Window", "Open Audio in New Window context menu item");
}
String contextMenuItemTagDownloadVideoToDisk()
{
return WEB_UI_STRING_WITH_MNEMONIC("Download Video", "Download _Video", "Download Video To Disk context menu item");
}
String contextMenuItemTagDownloadAudioToDisk()
{
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");
}
String contextMenuItemTagCopyAudioLinkToClipboard()
{
return WEB_UI_STRING("Copy Audio Address", "Copy Audio Address Location context menu item");
}
String contextMenuItemTagToggleMediaControls()
{
return WEB_UI_STRING("Controls", "Media Controls context menu item");
}
String contextMenuItemTagShowMediaControls()
{
return WEB_UI_STRING("Show Controls", "Show Media Controls context menu item");
}
String contextMenuItemTagHideMediaControls()
{
return WEB_UI_STRING("Hide Controls", "Hide Media Controls context menu item");
}
String contextMenuItemTagToggleMediaLoop()
{
return WEB_UI_STRING("Loop", "Media Loop context menu item");
}
String contextMenuItemTagEnterVideoFullscreen()
{
return WEB_UI_STRING("Enter Full Screen", "Video Enter Full Screen context menu item");
}
String contextMenuItemTagExitVideoFullscreen()
{
return WEB_UI_STRING_KEY("Exit Full Screen", "Exit Full Screen (context menu)", "Video Exit Full Screen context menu item");
}
#endif
String contextMenuItemTagMediaPlay()
{
return WEB_UI_STRING_WITH_MNEMONIC("Play", "_Play", "Media Play context menu item");
}
String contextMenuItemTagMediaPause()
{
return WEB_UI_STRING_WITH_MNEMONIC("Pause", "_Pause", "Media Pause context menu item");
}
String contextMenuItemTagMediaMute()
{
return WEB_UI_STRING_WITH_MNEMONIC("Mute", "_Mute", "Media Mute context menu item");
}
String contextMenuItemTagInspectElement()
{
return WEB_UI_STRING_WITH_MNEMONIC("Inspect Element", "Inspect _Element", "Inspect Element context menu item");
}
#if !PLATFORM(COCOA)
String contextMenuItemTagSearchWeb()
{
return WEB_UI_STRING_WITH_MNEMONIC("Search the Web", "_Search the Web", "Search the Web context menu item");
}
#endif
#endif // ENABLE(CONTEXT_MENUS)
#if !PLATFORM(IOS_FAMILY)
String searchMenuNoRecentSearchesText()
{
return WEB_UI_STRING("No recent searches", "Label for only item in menu that appears when clicking on the search field image, when no searches have been performed");
}
String searchMenuRecentSearchesText()
{
return WEB_UI_STRING("Recent Searches", "label for first item in the menu that appears when clicking on the search field image, used as embedded menu title");
}
String searchMenuClearRecentSearchesText()
{
return WEB_UI_STRING("Clear Recent Searches", "menu item in Recent Searches menu that empties menu's contents");
}
#endif // !PLATFORM(IOS_FAMILY)
String AXWebAreaText()
{
return WEB_UI_STRING("HTML content", "accessibility role description for web area");
}
String AXLinkText()
{
return WEB_UI_STRING("link", "accessibility role description for link");
}
String AXListMarkerText()
{
return WEB_UI_STRING("list marker", "accessibility role description for list marker");
}
String AXImageMapText()
{
return WEB_UI_STRING("image map", "accessibility role description for image map");
}
String AXHeadingText()
{
return WEB_UI_STRING("heading", "accessibility role description for headings");
}
String AXColorWellText()
{
return WEB_UI_STRING("color well", "accessibility role description for a color well");
}
String AXDefinitionText()
{
return WEB_UI_STRING("definition", "role description of ARIA definition role");
}
String AXDescriptionListText()
{
return WEB_UI_STRING("description list", "accessibility role description of a description list");
}
String AXDescriptionListTermText()
{
return WEB_UI_STRING("term", "term word of a description list");
}
String AXDescriptionListDetailText()
{
return WEB_UI_STRING("description", "description detail");
}
String AXDetailsText()
{
return WEB_UI_STRING("details", "accessibility role description for a details element");
}
String AXSummaryText()
{
return WEB_UI_STRING("summary", "accessibility role description for a summary element");
}
String AXFooterRoleDescriptionText()
{
return WEB_UI_STRING("footer", "accessibility role description for a footer");
}
String AXFileUploadButtonText()
{
return WEB_UI_STRING("file upload button", "accessibility role description for a file upload button");
}
String AXOutputText()
{
return WEB_UI_STRING("output", "accessibility role description for an output element");
}
String AXAttachmentRoleText()
{
return WEB_UI_STRING("attachment", "accessibility role description for an attachment element");
}
String AXSearchFieldCancelButtonText()
{
return WEB_UI_STRING("cancel", "accessibility description for a search field cancel button");
}
String AXFeedText()
{
return WEB_UI_STRING("feed", "accessibility role description for a group containing a scrollable list of articles.");
}
String AXFigureText()
{
return WEB_UI_STRING("figure", "accessibility role description for a figure element.");
}
String AXEmailFieldText()
{
return WEB_UI_STRING("email field", "accessibility role description for an email field.");
}
String AXTelephoneFieldText()
{
return WEB_UI_STRING("telephone number field", "accessibility role description for a telephone number field.");
}
String AXURLFieldText()
{
return WEB_UI_STRING("URL field", "accessibility role description for a URL field.");
}
String AXDateFieldText()
{
return WEB_UI_STRING("date field", "accessibility role description for a date field.");
}
String AXTimeFieldText()
{
return WEB_UI_STRING("time field", "accessibility role description for a time field.");
}
String AXDateTimeFieldText()
{
return WEB_UI_STRING("date and time field", "accessibility role description for a date and time field.");
}
String AXMonthFieldText()
{
return WEB_UI_STRING("month and year field", "accessibility role description for a month field.");
}
String AXNumberFieldText()
{
return WEB_UI_STRING("number field", "accessibility role description for a number field.");
}
String AXWeekFieldText()
{
return WEB_UI_STRING("week and year field", "accessibility role description for a time field.");
}
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");
}
String AXButtonActionVerb()
{
return WEB_UI_STRING("press", "Verb stating the action that will occur when a button is pressed, as used by accessibility");
}
String AXRadioButtonActionVerb()
{
return WEB_UI_STRING("select", "Verb stating the action that will occur when a radio button is clicked, as used by accessibility");
}
String AXTextFieldActionVerb()
{
return WEB_UI_STRING("activate", "Verb stating the action that will occur when a text field is selected, as used by accessibility");
}
String AXCheckedCheckBoxActionVerb()
{
return WEB_UI_STRING("uncheck", "Verb stating the action that will occur when a checked checkbox is clicked, as used by accessibility");
}
String AXUncheckedCheckBoxActionVerb()
{
return WEB_UI_STRING("check", "Verb stating the action that will occur when an unchecked checkbox is clicked, as used by accessibility");
}
String AXLinkActionVerb()
{
return WEB_UI_STRING("jump", "Verb stating the action that will occur when a link is clicked, as used by accessibility");
}
String AXMenuListPopupActionVerb()
{
notImplemented();
return "select";
}
String AXMenuListActionVerb()
{
notImplemented();
return "select";
}
String AXListItemActionVerb()
{
notImplemented();
return "select";
}
#if ENABLE(APPLE_PAY)
String AXApplePayPlainLabel()
{
return WEB_UI_STRING("Apple Pay", "Label for the plain Apple Pay button.");
}
String AXApplePayBuyLabel()
{
return WEB_UI_STRING("Buy with Apple Pay", "Label for the buy with Apple Pay button.");
}
String AXApplePaySetupLabel()
{
return WEB_UI_STRING("Set up with Apple Pay", "Label for the set up with Apple Pay button.");
}
String AXApplePayDonateLabel()
{
return WEB_UI_STRING("Donate with Apple Pay", "Label for the donate with Apple Pay button.");
}
String AXApplePayCheckOutLabel()
{
return WEB_UI_STRING("Check out with Apple Pay", "Label for the check out with Apple Pay button.");
}
String AXApplePayBookLabel()
{
return WEB_UI_STRING("Book with Apple Pay", "Label for the book with Apple Pay button.");
}
String AXApplePaySubscribeLabel()
{
return WEB_UI_STRING("Subscribe with Apple Pay", "Label for the subcribe with Apple Pay button.");
}
#if ENABLE(APPLE_PAY_NEW_BUTTON_TYPES)
String AXApplePayReloadLabel()
{
return WEB_UI_STRING("Reload with Apple Pay", "Label for the reload with Apple Pay button.");
}
String AXApplePayAddMoneyLabel()
{
return WEB_UI_STRING("Add money with Apple Pay", "Label for the add money with Apple Pay button.");
}
String AXApplePayTopUpLabel()
{
return WEB_UI_STRING("Top up with Apple Pay", "Label for the top up with Apple Pay button.");
}
String AXApplePayOrderLabel()
{
return WEB_UI_STRING("Order with Apple Pay", "Label for the order with Apple Pay button.");
}
String AXApplePayRentLabel()
{
return WEB_UI_STRING("Rent with Apple Pay", "Label for the rent with Apple Pay button.");
}
String AXApplePaySupportLabel()
{
return WEB_UI_STRING("Support with Apple Pay", "Label for the support with Apple Pay button.");
}
String AXApplePayContributeLabel()
{
return WEB_UI_STRING("Contribute with Apple Pay", "Label for the contribute with Apple Pay button.");
}
String AXApplePayTipLabel()
{
return WEB_UI_STRING("Tip with Apple Pay", "Label for the tip with Apple Pay button.");
}
#endif
#endif
String AXAutoFillCredentialsLabel()
{
return WEB_UI_STRING("password AutoFill", "Label for the AutoFill credentials button inside a text field.");
}
String AXAutoFillContactsLabel()
{
return WEB_UI_STRING("contact info AutoFill", "Label for the AutoFill contacts button inside a text field.");
}
String AXAutoFillStrongPasswordLabel()
{
return WEB_UI_STRING("strong password AutoFill", "Label for the strong password AutoFill button inside a text field.");
}
String AXAutoFillCreditCardLabel()
{
return WEB_UI_STRING("credit card AutoFill", "Label for the credit card AutoFill button inside a text field.");
}
String autoFillStrongPasswordLabel()
{
return WEB_UI_STRING("Strong Password", "Label for strong password.");
}
String missingPluginText()
{
return WEB_UI_STRING("Missing Plug-in", "Label text to be used when a plugin is missing");
}
String crashedPluginText()
{
return WEB_UI_STRING("Plug-in Failure", "Label text to be used if plugin host process has crashed");
}
String blockedPluginByContentSecurityPolicyText()
{
return WEB_UI_STRING_KEY("Blocked Plug-in", "Blocked Plug-In (Blocked by page's Content Security Policy)", "Label text to be used if plugin is blocked by a page's Content Security Policy");
}
String insecurePluginVersionText()
{
return WEB_UI_STRING_KEY("Blocked Plug-in", "Blocked Plug-In (Insecure plug-in)", "Label text to be used when an insecure plug-in version was blocked from loading");
}
String unsupportedPluginText()
{
return WEB_UI_STRING_KEY("Unsupported Plug-in", "Unsupported Plug-In", "Label text to be used when an unsupported plug-in was blocked from loading");
}
String pluginTooSmallText()
{
return WEB_UI_STRING_KEY("Plug-In too small", "Plug-In too small", "Label text to be used when a plug-in was blocked from loading because it was too small");
}
String multipleFileUploadText(unsigned numberOfFiles)
{
return formatLocalizedString(WEB_UI_STRING("%d files", "Label to describe the number of files selected in a file upload control that allows multiple files"), numberOfFiles);
}
String unknownFileSizeText()
{
return WEB_UI_STRING_KEY("Unknown", "Unknown (filesize)", "Unknown filesize FTP directory listing item");
}
String imageTitle(const String& filename, const IntSize& size)
{
#if USE(CF)
auto locale = adoptCF(CFLocaleCopyCurrent());
auto formatter = adoptCF(CFNumberFormatterCreate(0, locale.get(), kCFNumberFormatterDecimalStyle));
int widthInt = size.width();
auto width = adoptCF(CFNumberCreate(0, kCFNumberIntType, &widthInt));
auto widthString = adoptCF(CFNumberFormatterCreateStringWithNumber(0, formatter.get(), width.get()));
int heightInt = size.height();
auto height = adoptCF(CFNumberCreate(0, kCFNumberIntType, &heightInt));
auto heightString = adoptCF(CFNumberFormatterCreateStringWithNumber(0, formatter.get(), height.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);
#endif
}
String mediaElementLoadingStateText()
{
return WEB_UI_STRING("Loading…", "Media controller status message when the media is loading");
}
String mediaElementLiveBroadcastStateText()
{
return WEB_UI_STRING("Live Broadcast", "Media controller status message when watching a live broadcast");
}
String localizedMediaControlElementString(const String& name)
{
if (name == "AudioElement")
return WEB_UI_STRING("audio playback", "accessibility label for audio element controller");
if (name == "VideoElement")
return WEB_UI_STRING("video playback", "accessibility label for video element controller");
if (name == "MuteButton")
return WEB_UI_STRING("mute", "accessibility label for mute button");
if (name == "UnMuteButton")
return WEB_UI_STRING("unmute", "accessibility label for turn mute off button");
if (name == "PlayButton")
return WEB_UI_STRING("play", "accessibility label for play button");
if (name == "PauseButton")
return WEB_UI_STRING("pause", "accessibility label for pause button");
if (name == "Slider")
return WEB_UI_STRING("movie time", "accessibility label for timeline slider");
if (name == "SliderThumb")
return WEB_UI_STRING("timeline slider thumb", "accessibility label for timeline thumb");
if (name == "RewindButton")
return WEB_UI_STRING("back 30 seconds", "accessibility label for seek back 30 seconds button");
if (name == "ReturnToRealtimeButton")
return WEB_UI_STRING("return to real time", "accessibility label for return to real time button");
if (name == "CurrentTimeDisplay")
return WEB_UI_STRING("elapsed time", "accessibility label for elapsed time display");
if (name == "TimeRemainingDisplay")
return WEB_UI_STRING("remaining time", "accessibility label for time remaining display");
if (name == "StatusDisplay")
return WEB_UI_STRING("status", "accessibility label for movie status");
if (name == "EnterFullscreenButton")
return WEB_UI_STRING("enter full screen", "accessibility label for enter full screen button");
if (name == "ExitFullscreenButton")
return WEB_UI_STRING("exit full screen", "accessibility label for exit full screen button");
if (name == "SeekForwardButton")
return WEB_UI_STRING("fast forward", "accessibility label for fast forward button");
if (name == "SeekBackButton")
return WEB_UI_STRING("fast reverse", "accessibility label for fast reverse button");
if (name == "ShowClosedCaptionsButton")
return WEB_UI_STRING("show closed captions", "accessibility label for show closed captions button");
if (name == "HideClosedCaptionsButton")
return WEB_UI_STRING("hide closed captions", "accessibility label for hide closed captions button");
// FIXME: the ControlsPanel container should never be visible in the accessibility hierarchy.
if (name == "ControlsPanel")
return String();
ASSERT_NOT_REACHED();
return String();
}
String localizedMediaControlElementHelpText(const String& name)
{
if (name == "AudioElement")
return WEB_UI_STRING("audio element playback controls and status display", "accessibility help text for audio element controller");
if (name == "VideoElement")
return WEB_UI_STRING("video element playback controls and status display", "accessibility help text for video element controller");
if (name == "MuteButton")
return WEB_UI_STRING("mute audio tracks", "accessibility help text for mute button");
if (name == "UnMuteButton")
return WEB_UI_STRING("unmute audio tracks", "accessibility help text for un mute button");
if (name == "PlayButton")
return WEB_UI_STRING("begin playback", "accessibility help text for play button");
if (name == "PauseButton")
return WEB_UI_STRING("pause playback", "accessibility help text for pause button");
if (name == "Slider")
return WEB_UI_STRING("movie time scrubber", "accessibility help text for timeline slider");
if (name == "SliderThumb")
return WEB_UI_STRING("movie time scrubber thumb", "accessibility help text for timeline slider thumb");
if (name == "RewindButton")
return WEB_UI_STRING("seek movie back 30 seconds", "accessibility help text for jump back 30 seconds button");
if (name == "ReturnToRealtimeButton")
return WEB_UI_STRING("resume real time streaming", "accessibility help text for return streaming movie to real time button");
if (name == "CurrentTimeDisplay")
return WEB_UI_STRING("current movie time in seconds", "accessibility help text for elapsed time display");
if (name == "TimeRemainingDisplay")
return WEB_UI_STRING("number of seconds of movie remaining", "accessibility help text for remaining time display");
if (name == "StatusDisplay")
return WEB_UI_STRING("current movie status", "accessibility help text for movie status display");
if (name == "SeekBackButton")
return WEB_UI_STRING("seek quickly back", "accessibility help text for fast rewind button");
if (name == "SeekForwardButton")
return WEB_UI_STRING("seek quickly forward", "accessibility help text for fast forward button");
if (name == "FullscreenButton")
return WEB_UI_STRING("Play movie in full screen mode", "accessibility help text for enter full screen button");
if (name == "ShowClosedCaptionsButton")
return WEB_UI_STRING("start displaying closed captions", "accessibility help text for show closed captions button");
if (name == "HideClosedCaptionsButton")
return WEB_UI_STRING("stop displaying closed captions", "accessibility help text for hide closed captions button");
// The description of this button is descriptive enough that it doesn't require help text.
if (name == "EnterFullscreenButton")
return String();
ASSERT_NOT_REACHED();
return String();
}
String localizedMediaTimeDescription(float time)
{
if (!std::isfinite(time))
return WEB_UI_STRING("indefinite time", "accessibility help text for an indefinite media controller time value");
int seconds = static_cast<int>(fabsf(time));
int days = seconds / (60 * 60 * 24);
int hours = seconds / (60 * 60);
int minutes = (seconds / 60) % 60;
seconds %= 60;
if (days)
return formatLocalizedString(WEB_UI_STRING("%1$d days %2$d hours %3$d minutes %4$d seconds", "accessibility help text for media controller time value >= 1 day"), days, hours, minutes, seconds);
if (hours)
return formatLocalizedString(WEB_UI_STRING("%1$d hours %2$d minutes %3$d seconds", "accessibility help text for media controller time value >= 60 minutes"), hours, minutes, seconds);
if (minutes)
return formatLocalizedString(WEB_UI_STRING("%1$d minutes %2$d seconds", "accessibility help text for media controller time value >= 60 seconds"), minutes, seconds);
return formatLocalizedString(WEB_UI_STRING("%1$d seconds", "accessibility help text for media controller time value < 60 seconds"), seconds);
}
String validationMessageValueMissingText()
{
return WEB_UI_STRING("Fill out this field", "Validation message for required form control elements that have no value");
}
String validationMessageValueMissingForCheckboxText()
{
return WEB_UI_STRING("Select this checkbox", "Validation message for required checkboxes that have not be selected");
}
String validationMessageValueMissingForFileText()
{
return WEB_UI_STRING("Select a file", "Validation message for required file inputs that have no value");
}
String validationMessageValueMissingForMultipleFileText()
{
return validationMessageValueMissingForFileText();
}
String validationMessageValueMissingForRadioText()
{
return WEB_UI_STRING("Select one of these options", "Validation message for required radio boxes that have no selection");
}
String validationMessageValueMissingForSelectText()
{
return WEB_UI_STRING("Select an item in the list", "Validation message for required menu list controls that have no selection");
}
String validationMessageTypeMismatchText()
{
return WEB_UI_STRING("Invalid value", "Validation message for input form controls with a value not matching type");
}
String validationMessageTypeMismatchForEmailText()
{
return WEB_UI_STRING("Enter an email address", "Validation message for input form controls of type 'email' that have an invalid value");
}
String validationMessageTypeMismatchForMultipleEmailText()
{
return validationMessageTypeMismatchForEmailText();
}
String validationMessageTypeMismatchForURLText()
{
return WEB_UI_STRING("Enter a URL", "Validation message for input form controls of type 'url' that have an invalid value");
}
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_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");
#endif
}
String validationMessageRangeOverflowText(const String& maximum)
{
#if USE(CF)
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");
#endif
}
String validationMessageStepMismatchText(const String&, const String&)
{
return WEB_UI_STRING("Enter a valid value", "Validation message for input form controls with value not respecting the step attribute");
}
String validationMessageBadInputForNumberText()
{
return WEB_UI_STRING("Enter a number", "Validation message for number fields where the user entered a non-number string");
}
String clickToExitFullScreenText()
{
return WEB_UI_STRING("Click to Exit Full Screen", "Message to display in browser window when in webkit full screen mode.");
}
#if ENABLE(VIDEO)
String trackNoLabelText()
{
return WEB_UI_STRING_KEY("Unknown", "Unknown (audio/text track)", "Menu item label for a audio/text track that has no other name.");
}
String textTrackOffMenuItemText()
{
return WEB_UI_STRING_KEY("Off", "Off (text track)", "Menu item label for the track that represents disabling closed captions.");
}
String textTrackAutomaticMenuItemText()
{
return WEB_UI_STRING_KEY("Auto (Recommended)", "Auto (Recommended) (text track)", "Menu item label for automatic track selection behavior.");
}
#if USE(CF)
String addTrackLabelAsSuffix(const String& text, const String& label)
{
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ (%@)", "%@ (%@) (audio/text track)", "Audio/Text track display name format that includes the label and language of the track, in the form of 'Language (Label)'."), text.createCFString().get(), label.createCFString().get());
}
String textTrackKindClosedCaptionsDisplayName()
{
return WEB_UI_CFSTRING_KEY("CC", "CC (text track)", "Display name for closed captions text tracks.");
}
String addTextTrackKindClosedCaptionsSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindClosedCaptionsDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ CC", "%@ CC (text track)", "Closed captions text track display name format that includes the language and/or locale (e.g. 'English CC')."), text.createCFString().get());
}
String textTrackKindCaptionsDisplayName()
{
return WEB_UI_CFSTRING_KEY("Captions", "Captions (text track)", "Display name for text track kind 'captions'.");
}
String addTextTrackKindCaptionsSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindCaptionsDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Captions", "%@ Captions (text track)", "Captions text track display name format that includes the language and/or locale (e.g. 'English Captions')."), text.createCFString().get());
}
String textTrackKindDescriptionsDisplayName()
{
return WEB_UI_CFSTRING_KEY("Descriptions", "Descriptions (text track)", "Display name for text track kind 'descriptions'.");
}
String addTextTrackKindDescriptionsSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindDescriptionsDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Descriptions", "%@ Descriptions (text track)", "Descriptions text track display name format that includes the language and/or locale (e.g. 'English Descriptions')."), text.createCFString().get());
}
String textTrackKindChaptersDisplayName()
{
return WEB_UI_CFSTRING_KEY("Chapters", "Chapters (text track)", "Display name for text track kind 'chapters'.");
}
String addTextTrackKindChaptersSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindChaptersDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Chapters", "%@ Chapters (text track)", "Chapters text track display name format that includes the language and/or locale (e.g. 'English Chapters')."), text.createCFString().get());
}
String textTrackKindMetadataDisplayName()
{
return WEB_UI_CFSTRING_KEY("Metadata", "Metadata (text track)", "Display name for text track kind 'metadata'.");
}
String addTextTrackKindMetadataSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindMetadataDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Metadata", "%@ Metadata (text track)", "Metadata text track display name format that includes the language and/or locale (e.g. 'English Metadata')."), text.createCFString().get());
}
String textTrackKindSDHDisplayName()
{
return WEB_UI_CFSTRING_KEY("SDH", "SDH (text track)", "Display name for SDH (i.e. deaf and/or hard of hearing) text tracks.");
}
String addTextTrackKindSDHSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindSDHDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ SDH", "%@ SDH (text track)", "SDH (i.e. deaf and/or hard of hearing) text track display name format that includes the language and/or locale (e.g. 'English SDH')."), text.createCFString().get());
}
String textTrackKindEasyReaderDisplayName()
{
return WEB_UI_CFSTRING_KEY("Easy Reader", "Easy Reader (text track)", "Display name for easy reader (i.e. 3rd-grade level) text tracks.");
}
String addTextTrackKindEasyReaderSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindEasyReaderDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Easy Reader", "%@ Easy (text track)", "Easy Reader (i.e. 3rd-grade level) text track display name format that includes the language and/or locale (e.g. 'English Easy Reader')."), text.createCFString().get());
}
String textTrackKindForcedDisplayName()
{
return WEB_UI_CFSTRING_KEY("Forced", "Forced (text track)", "Display name for text track kind 'forced'.");
}
String addTextTrackKindForcedSuffix(const String& text)
{
if (text.isEmpty())
return textTrackKindForcedDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Forced", "%@ Forced (text track)", "Forced text track display name format that includes the language and/or locale (e.g. 'English Forced')."), text.createCFString().get());
}
String audioTrackKindDescriptionsDisplayName()
{
return WEB_UI_CFSTRING_KEY("Descriptions", "Descriptions (audio track)", "Display name for audio track kind 'descriptions'.");
}
String addAudioTrackKindDescriptionsSuffix(const String& text)
{
if (text.isEmpty())
return audioTrackKindDescriptionsDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Descriptions", "%@ Descriptions (audio track)", "Descriptions audio track display name format that includes the language and/or locale (e.g. 'English Descriptions')."), text.createCFString().get());
}
String audioTrackKindCommentaryDisplayName()
{
return WEB_UI_CFSTRING_KEY("Commentary", "Commentary (audio track)", "Display name for audio track kind 'commentary'.");
}
String addAudioTrackKindCommentarySuffix(const String& text)
{
if (text.isEmpty())
return audioTrackKindCommentaryDisplayName();
return formatLocalizedString(WEB_UI_CFSTRING_KEY("%@ Commentary", "%@ Commentary (audio track)", "Commentary audio track display name format that includes the language and/or locale (e.g. 'English Commentary')."), text.createCFString().get());
}
#endif // USE(CF)
#endif // ENABLE(VIDEO)
String snapshottedPlugInLabelTitle()
{
return WEB_UI_STRING("Snapshotted Plug-In", "Title of the label to show on a snapshotted plug-in");
}
String snapshottedPlugInLabelSubtitle()
{
return WEB_UI_STRING("Click to restart", "Subtitle of the label to show on a snapshotted plug-in");
}
String useBlockedPlugInContextMenuTitle()
{
return formatLocalizedString(WEB_UI_STRING("Show in blocked plug-in", "Title of the context menu item to show when PDFPlugin was used instead of a blocked plugin"));
}
#if ENABLE(WEB_CRYPTO)
String webCryptoMasterKeyKeychainLabel(const String& localizedApplicationName)
{
#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 WEB_UI_STRING("<application> WebCrypto Master Key", "Name of application's single WebCrypto master key in Keychain").replace("<application>", localizedApplicationName);
#endif
}
String webCryptoMasterKeyKeychainComment()
{
return WEB_UI_STRING("Used to encrypt WebCrypto keys in persistent storage, such as IndexedDB", "Description of WebCrypto master keys in Keychain");
}
#endif
#if PLATFORM(WATCHOS)
String numberPadOKButtonTitle()
{
return WEB_UI_STRING_KEY("OK", "OK (OK button title in extra zoomed number pad)", "Title of the OK button for the number pad in zoomed form controls.");
}
String formControlCancelButtonTitle()
{
return WEB_UI_STRING("Cancel", "Cancel");
}
String formControlHideButtonTitle()
{
return WEB_UI_STRING("Hide", "Title of the Hide button for zoomed form controls.");
}
String formControlGoButtonTitle()
{
return WEB_UI_STRING("Go", "Title of the Go button for zoomed form controls.");
}
String formControlSearchButtonTitle()
{
return WEB_UI_STRING("Search", "Title of the Search button for zoomed form controls.");
}
String datePickerSetButtonTitle()
{
return WEB_UI_STRING_KEY("Set", "Set (Button below date picker for extra zoom mode)", "Set button below date picker");
}
String datePickerDayLabelTitle()
{
return WEB_UI_STRING_KEY("DAY", "DAY (Date picker for extra zoom mode)", "Day label in date picker");
}
String datePickerMonthLabelTitle()
{
return WEB_UI_STRING_KEY("MONTH", "MONTH (Date picker for extra zoom mode)", "Month label in date picker");
}
String datePickerYearLabelTitle()
{
return WEB_UI_STRING_KEY("YEAR", "YEAR (Date picker for extra zoom mode)", "Year label in date picker");
}
#endif
#if USE(SOUP)
String unacceptableTLSCertificate()
{
return WEB_UI_STRING("Unacceptable TLS certificate", "Unacceptable TLS certificate error");
}
#endif
#if ENABLE(WEB_AUTHN)
// On macOS, Touch ID prompt is not guaranteed to show on top of the UI client, and therefore additional
// information is provided to help users to make decisions.
String makeCredentialTouchIDPromptTitle(const String& bundleName, const String& domain)
{
return formatLocalizedString(WEB_UI_CFSTRING("“%@” would like to use Touch ID for “%@”.", "Allow the specified bundle to use Touch ID to sign in to the specified website on this device"), bundleName.createCFString().get(), domain.createCFString().get());
}
String getAssertionTouchIDPromptTitle(const String& bundleName, const String& domain)
{
return formatLocalizedString(WEB_UI_CFSTRING("“%@” would like to sign in to “%@”.", "Allow the specified bundle to sign in to the specified website"), bundleName.createCFString().get(), domain.createCFString().get());
}
String genericTouchIDPromptTitle()
{
return WEB_UI_STRING("Continue with Touch ID.", "Continue with Touch ID.");
}
#endif // ENABLE(WEB_AUTHN)
} // namespace WebCore