Home | History | Annotate | Download | only in platform
      1 /*
      2  * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
     14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     23  * THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "DefaultLocalizationStrategy.h"
     28 
     29 #if USE(PLATFORM_STRATEGIES)
     30 
     31 #include "IntSize.h"
     32 #include "LocalizedStrings.h"
     33 #include "NotImplemented.h"
     34 #include <wtf/MathExtras.h>
     35 #include <wtf/text/CString.h>
     36 #include <wtf/UnusedParam.h>
     37 
     38 #if USE(CF)
     39 #include <wtf/RetainPtr.h>
     40 #endif
     41 
     42 namespace WebCore {
     43 
     44 // We can't use String::format for two reasons:
     45 //  1) It doesn't handle non-ASCII characters in the format string.
     46 //  2) It doesn't handle the %2$d syntax.
     47 // Note that because |format| is used as the second parameter to va_start, it cannot be a reference
     48 // type according to section 18.7/3 of the C++ N1905 standard.
     49 static String formatLocalizedString(String format, ...)
     50 {
     51 #if USE(CF)
     52     va_list arguments;
     53     va_start(arguments, format);
     54     RetainPtr<CFStringRef> formatCFString(AdoptCF, format.createCFString());
     55     RetainPtr<CFStringRef> result(AdoptCF, CFStringCreateWithFormatAndArguments(0, 0, formatCFString.get(), arguments));
     56     va_end(arguments);
     57     return result.get();
     58 #elif PLATFORM(QT)
     59     va_list arguments;
     60     va_start(arguments, format);
     61     QString result;
     62     result.vsprintf(format.latin1().data(), arguments);
     63     va_end(arguments);
     64     return result;
     65 #else
     66     notImplemented();
     67     return format;
     68 #endif
     69 }
     70 
     71 DefaultLocalizationStrategy::DefaultLocalizationStrategy()
     72 {
     73 }
     74 
     75 String DefaultLocalizationStrategy::inputElementAltText()
     76 {
     77     return WEB_UI_STRING_KEY("Submit", "Submit (input element)", "alt text for <input> elements with no alt, title, or value");
     78 }
     79 
     80 String DefaultLocalizationStrategy::resetButtonDefaultLabel()
     81 {
     82     return WEB_UI_STRING("Reset", "default label for Reset buttons in forms on web pages");
     83 }
     84 
     85 String DefaultLocalizationStrategy::searchableIndexIntroduction()
     86 {
     87     return WEB_UI_STRING("This is a searchable index. Enter search keywords: ",
     88         "text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'");
     89 }
     90 
     91 String DefaultLocalizationStrategy::submitButtonDefaultLabel()
     92 {
     93     return WEB_UI_STRING("Submit", "default label for Submit buttons in forms on web pages");
     94 }
     95 
     96 String DefaultLocalizationStrategy::fileButtonChooseFileLabel()
     97 {
     98     return WEB_UI_STRING("Choose File", "title for file button used in HTML forms");
     99 }
    100 
    101 String DefaultLocalizationStrategy::fileButtonNoFileSelectedLabel()
    102 {
    103     return WEB_UI_STRING("no file selected", "text to display in file button used in HTML forms when no file is selected");
    104 }
    105 
    106 String DefaultLocalizationStrategy::defaultDetailsSummaryText()
    107 {
    108     return WEB_UI_STRING("Details", "text to display in <details> tag when it has no <summary> child");
    109 }
    110 
    111 #if PLATFORM(MAC)
    112 String DefaultLocalizationStrategy::copyImageUnknownFileLabel()
    113 {
    114     return WEB_UI_STRING("unknown", "Unknown filename");
    115 }
    116 #endif
    117 
    118 #if ENABLE(CONTEXT_MENUS)
    119 
    120 String DefaultLocalizationStrategy::contextMenuItemTagOpenLinkInNewWindow()
    121 {
    122     return WEB_UI_STRING("Open Link in New Window", "Open in New Window context menu item");
    123 }
    124 
    125 String DefaultLocalizationStrategy::contextMenuItemTagDownloadLinkToDisk()
    126 {
    127     return WEB_UI_STRING("Download Linked File", "Download Linked File context menu item");
    128 }
    129 
    130 String DefaultLocalizationStrategy::contextMenuItemTagCopyLinkToClipboard()
    131 {
    132     return WEB_UI_STRING("Copy Link", "Copy Link context menu item");
    133 }
    134 
    135 String DefaultLocalizationStrategy::contextMenuItemTagOpenImageInNewWindow()
    136 {
    137     return WEB_UI_STRING("Open Image in New Window", "Open Image in New Window context menu item");
    138 }
    139 
    140 String DefaultLocalizationStrategy::contextMenuItemTagDownloadImageToDisk()
    141 {
    142     return WEB_UI_STRING("Download Image", "Download Image context menu item");
    143 }
    144 
    145 String DefaultLocalizationStrategy::contextMenuItemTagCopyImageToClipboard()
    146 {
    147     return WEB_UI_STRING("Copy Image", "Copy Image context menu item");
    148 }
    149 
    150 #if PLATFORM(QT)
    151 String DefaultLocalizationStrategy::contextMenuItemTagCopyImageUrlToClipboard()
    152 {
    153     return WEB_UI_STRING("Copy Image Address", "Copy Image Address menu item");
    154 }
    155 #endif
    156 
    157 String DefaultLocalizationStrategy::contextMenuItemTagOpenVideoInNewWindow()
    158 {
    159     return WEB_UI_STRING("Open Video in New Window", "Open Video in New Window context menu item");
    160 }
    161 
    162 String DefaultLocalizationStrategy::contextMenuItemTagOpenAudioInNewWindow()
    163 {
    164     return WEB_UI_STRING("Open Audio in New Window", "Open Audio in New Window context menu item");
    165 }
    166 
    167 String DefaultLocalizationStrategy::contextMenuItemTagCopyVideoLinkToClipboard()
    168 {
    169     return WEB_UI_STRING("Copy Video Address", "Copy Video Address Location context menu item");
    170 }
    171 
    172 String DefaultLocalizationStrategy::contextMenuItemTagCopyAudioLinkToClipboard()
    173 {
    174     return WEB_UI_STRING("Copy Audio Address", "Copy Audio Address Location context menu item");
    175 }
    176 
    177 String DefaultLocalizationStrategy::contextMenuItemTagToggleMediaControls()
    178 {
    179     return WEB_UI_STRING("Controls", "Media Controls context menu item");
    180 }
    181 
    182 String DefaultLocalizationStrategy::contextMenuItemTagToggleMediaLoop()
    183 {
    184     return WEB_UI_STRING("Loop", "Media Loop context menu item");
    185 }
    186 
    187 String DefaultLocalizationStrategy::contextMenuItemTagEnterVideoFullscreen()
    188 {
    189     return WEB_UI_STRING("Enter Fullscreen", "Video Enter Fullscreen context menu item");
    190 }
    191 
    192 String DefaultLocalizationStrategy::contextMenuItemTagMediaPlay()
    193 {
    194     return WEB_UI_STRING("Play", "Media Play context menu item");
    195 }
    196 
    197 String DefaultLocalizationStrategy::contextMenuItemTagMediaPause()
    198 {
    199     return WEB_UI_STRING("Pause", "Media Pause context menu item");
    200 }
    201 
    202 String DefaultLocalizationStrategy::contextMenuItemTagMediaMute()
    203 {
    204     return WEB_UI_STRING("Mute", "Media Mute context menu item");
    205 }
    206 
    207 String DefaultLocalizationStrategy::contextMenuItemTagOpenFrameInNewWindow()
    208 {
    209     return WEB_UI_STRING("Open Frame in New Window", "Open Frame in New Window context menu item");
    210 }
    211 
    212 String DefaultLocalizationStrategy::contextMenuItemTagCopy()
    213 {
    214     return WEB_UI_STRING("Copy", "Copy context menu item");
    215 }
    216 
    217 String DefaultLocalizationStrategy::contextMenuItemTagGoBack()
    218 {
    219     return WEB_UI_STRING("Back", "Back context menu item");
    220 }
    221 
    222 String DefaultLocalizationStrategy::contextMenuItemTagGoForward()
    223 {
    224     return WEB_UI_STRING("Forward", "Forward context menu item");
    225 }
    226 
    227 String DefaultLocalizationStrategy::contextMenuItemTagStop()
    228 {
    229     return WEB_UI_STRING("Stop", "Stop context menu item");
    230 }
    231 
    232 String DefaultLocalizationStrategy::contextMenuItemTagReload()
    233 {
    234     return WEB_UI_STRING("Reload", "Reload context menu item");
    235 }
    236 
    237 String DefaultLocalizationStrategy::contextMenuItemTagCut()
    238 {
    239     return WEB_UI_STRING("Cut", "Cut context menu item");
    240 }
    241 
    242 String DefaultLocalizationStrategy::contextMenuItemTagPaste()
    243 {
    244     return WEB_UI_STRING("Paste", "Paste context menu item");
    245 }
    246 
    247 #if PLATFORM(GTK)
    248 
    249 String DefaultLocalizationStrategy::contextMenuItemTagDelete()
    250 {
    251     notImplemented();
    252     return "Delete";
    253 }
    254 
    255 String DefaultLocalizationStrategy::contextMenuItemTagInputMethods()
    256 {
    257     notImplemented();
    258     return "Input Methods";
    259 }
    260 
    261 String DefaultLocalizationStrategy::contextMenuItemTagUnicode()
    262 {
    263     notImplemented();
    264     return "Unicode";
    265 }
    266 
    267 #endif
    268 
    269 #if PLATFORM(GTK) || PLATFORM(QT)
    270 
    271 String DefaultLocalizationStrategy::contextMenuItemTagSelectAll()
    272 {
    273     notImplemented();
    274     return "Select All";
    275 }
    276 
    277 #endif
    278 
    279 String DefaultLocalizationStrategy::contextMenuItemTagNoGuessesFound()
    280 {
    281     return WEB_UI_STRING("No Guesses Found", "No Guesses Found context menu item");
    282 }
    283 
    284 String DefaultLocalizationStrategy::contextMenuItemTagIgnoreSpelling()
    285 {
    286     return WEB_UI_STRING("Ignore Spelling", "Ignore Spelling context menu item");
    287 }
    288 
    289 String DefaultLocalizationStrategy::contextMenuItemTagLearnSpelling()
    290 {
    291     return WEB_UI_STRING("Learn Spelling", "Learn Spelling context menu item");
    292 }
    293 
    294 String DefaultLocalizationStrategy::contextMenuItemTagSearchWeb()
    295 {
    296     return WEB_UI_STRING("Search in Google", "Search in Google context menu item");
    297 }
    298 
    299 String DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary(const String& selectedString)
    300 {
    301 #if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
    302     UNUSED_PARAM(selectedString);
    303     return WEB_UI_STRING("Look Up in Dictionary", "Look Up in Dictionary context menu item");
    304 #else
    305 #if USE(CF)
    306     RetainPtr<CFStringRef> selectedCFString(AdoptCF, selectedString.createCFString());
    307     return formatLocalizedString(WEB_UI_STRING("Look Up %@", "Look Up context menu item with selected word"), selectedCFString.get());
    308 #else
    309     return WEB_UI_STRING("Look Up <selection>", "Look Up context menu item with selected word").replace("<selection>", selectedString);
    310 #endif
    311 #endif
    312 }
    313 
    314 String DefaultLocalizationStrategy::contextMenuItemTagOpenLink()
    315 {
    316     return WEB_UI_STRING("Open Link", "Open Link context menu item");
    317 }
    318 
    319 String DefaultLocalizationStrategy::contextMenuItemTagIgnoreGrammar()
    320 {
    321     return WEB_UI_STRING("Ignore Grammar", "Ignore Grammar context menu item");
    322 }
    323 
    324 String DefaultLocalizationStrategy::contextMenuItemTagSpellingMenu()
    325 {
    326     return WEB_UI_STRING("Spelling and Grammar", "Spelling and Grammar context sub-menu item");
    327 }
    328 
    329 String DefaultLocalizationStrategy::contextMenuItemTagShowSpellingPanel(bool show)
    330 {
    331     if (show)
    332         return WEB_UI_STRING("Show Spelling and Grammar", "menu item title");
    333     return WEB_UI_STRING("Hide Spelling and Grammar", "menu item title");
    334 }
    335 
    336 String DefaultLocalizationStrategy::contextMenuItemTagCheckSpelling()
    337 {
    338     return WEB_UI_STRING("Check Document Now", "Check spelling context menu item");
    339 }
    340 
    341 String DefaultLocalizationStrategy::contextMenuItemTagCheckSpellingWhileTyping()
    342 {
    343     return WEB_UI_STRING("Check Spelling While Typing", "Check spelling while typing context menu item");
    344 }
    345 
    346 String DefaultLocalizationStrategy::contextMenuItemTagCheckGrammarWithSpelling()
    347 {
    348     return WEB_UI_STRING("Check Grammar With Spelling", "Check grammar with spelling context menu item");
    349 }
    350 
    351 String DefaultLocalizationStrategy::contextMenuItemTagFontMenu()
    352 {
    353     return WEB_UI_STRING("Font", "Font context sub-menu item");
    354 }
    355 
    356 String DefaultLocalizationStrategy::contextMenuItemTagBold()
    357 {
    358     return WEB_UI_STRING("Bold", "Bold context menu item");
    359 }
    360 
    361 String DefaultLocalizationStrategy::contextMenuItemTagItalic()
    362 {
    363     return WEB_UI_STRING("Italic", "Italic context menu item");
    364 }
    365 
    366 String DefaultLocalizationStrategy::contextMenuItemTagUnderline()
    367 {
    368     return WEB_UI_STRING("Underline", "Underline context menu item");
    369 }
    370 
    371 String DefaultLocalizationStrategy::contextMenuItemTagOutline()
    372 {
    373     return WEB_UI_STRING("Outline", "Outline context menu item");
    374 }
    375 
    376 String DefaultLocalizationStrategy::contextMenuItemTagWritingDirectionMenu()
    377 {
    378     return WEB_UI_STRING("Paragraph Direction", "Paragraph direction context sub-menu item");
    379 }
    380 
    381 String DefaultLocalizationStrategy::contextMenuItemTagTextDirectionMenu()
    382 {
    383     return WEB_UI_STRING("Selection Direction", "Selection direction context sub-menu item");
    384 }
    385 
    386 String DefaultLocalizationStrategy::contextMenuItemTagDefaultDirection()
    387 {
    388     return WEB_UI_STRING("Default", "Default writing direction context menu item");
    389 }
    390 
    391 String DefaultLocalizationStrategy::contextMenuItemTagLeftToRight()
    392 {
    393     return WEB_UI_STRING("Left to Right", "Left to Right context menu item");
    394 }
    395 
    396 String DefaultLocalizationStrategy::contextMenuItemTagRightToLeft()
    397 {
    398     return WEB_UI_STRING("Right to Left", "Right to Left context menu item");
    399 }
    400 
    401 #if PLATFORM(MAC)
    402 
    403 String DefaultLocalizationStrategy::contextMenuItemTagSearchInSpotlight()
    404 {
    405     return WEB_UI_STRING("Search in Spotlight", "Search in Spotlight context menu item");
    406 }
    407 
    408 String DefaultLocalizationStrategy::contextMenuItemTagShowFonts()
    409 {
    410     return WEB_UI_STRING("Show Fonts", "Show fonts context menu item");
    411 }
    412 
    413 String DefaultLocalizationStrategy::contextMenuItemTagStyles()
    414 {
    415     return WEB_UI_STRING("Styles...", "Styles context menu item");
    416 }
    417 
    418 String DefaultLocalizationStrategy::contextMenuItemTagShowColors()
    419 {
    420     return WEB_UI_STRING("Show Colors", "Show colors context menu item");
    421 }
    422 
    423 String DefaultLocalizationStrategy::contextMenuItemTagSpeechMenu()
    424 {
    425     return WEB_UI_STRING("Speech", "Speech context sub-menu item");
    426 }
    427 
    428 String DefaultLocalizationStrategy::contextMenuItemTagStartSpeaking()
    429 {
    430     return WEB_UI_STRING("Start Speaking", "Start speaking context menu item");
    431 }
    432 
    433 String DefaultLocalizationStrategy::contextMenuItemTagStopSpeaking()
    434 {
    435     return WEB_UI_STRING("Stop Speaking", "Stop speaking context menu item");
    436 }
    437 
    438 String DefaultLocalizationStrategy::contextMenuItemTagCorrectSpellingAutomatically()
    439 {
    440     return WEB_UI_STRING("Correct Spelling Automatically", "Correct Spelling Automatically context menu item");
    441 }
    442 
    443 String DefaultLocalizationStrategy::contextMenuItemTagSubstitutionsMenu()
    444 {
    445     return WEB_UI_STRING("Substitutions", "Substitutions context sub-menu item");
    446 }
    447 
    448 String DefaultLocalizationStrategy::contextMenuItemTagShowSubstitutions(bool show)
    449 {
    450     if (show)
    451         return WEB_UI_STRING("Show Substitutions", "menu item title");
    452     return WEB_UI_STRING("Hide Substitutions", "menu item title");
    453 }
    454 
    455 String DefaultLocalizationStrategy::contextMenuItemTagSmartCopyPaste()
    456 {
    457     return WEB_UI_STRING("Smart Copy/Paste", "Smart Copy/Paste context menu item");
    458 }
    459 
    460 String DefaultLocalizationStrategy::contextMenuItemTagSmartQuotes()
    461 {
    462     return WEB_UI_STRING("Smart Quotes", "Smart Quotes context menu item");
    463 }
    464 
    465 String DefaultLocalizationStrategy::contextMenuItemTagSmartDashes()
    466 {
    467     return WEB_UI_STRING("Smart Dashes", "Smart Dashes context menu item");
    468 }
    469 
    470 String DefaultLocalizationStrategy::contextMenuItemTagSmartLinks()
    471 {
    472     return WEB_UI_STRING("Smart Links", "Smart Links context menu item");
    473 }
    474 
    475 String DefaultLocalizationStrategy::contextMenuItemTagTextReplacement()
    476 {
    477     return WEB_UI_STRING("Text Replacement", "Text Replacement context menu item");
    478 }
    479 
    480 String DefaultLocalizationStrategy::contextMenuItemTagTransformationsMenu()
    481 {
    482     return WEB_UI_STRING("Transformations", "Transformations context sub-menu item");
    483 }
    484 
    485 String DefaultLocalizationStrategy::contextMenuItemTagMakeUpperCase()
    486 {
    487     return WEB_UI_STRING("Make Upper Case", "Make Upper Case context menu item");
    488 }
    489 
    490 String DefaultLocalizationStrategy::contextMenuItemTagMakeLowerCase()
    491 {
    492     return WEB_UI_STRING("Make Lower Case", "Make Lower Case context menu item");
    493 }
    494 
    495 String DefaultLocalizationStrategy::contextMenuItemTagCapitalize()
    496 {
    497     return WEB_UI_STRING("Capitalize", "Capitalize context menu item");
    498 }
    499 
    500 String DefaultLocalizationStrategy::contextMenuItemTagChangeBack(const String& replacedString)
    501 {
    502     notImplemented();
    503     return replacedString;
    504 }
    505 
    506 #endif
    507 
    508 String DefaultLocalizationStrategy::contextMenuItemTagInspectElement()
    509 {
    510     return WEB_UI_STRING("Inspect Element", "Inspect Element context menu item");
    511 }
    512 
    513 #endif // ENABLE(CONTEXT_MENUS)
    514 
    515 String DefaultLocalizationStrategy::searchMenuNoRecentSearchesText()
    516 {
    517     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");
    518 }
    519 
    520 String DefaultLocalizationStrategy::searchMenuRecentSearchesText()
    521 {
    522     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");
    523 }
    524 
    525 String DefaultLocalizationStrategy::searchMenuClearRecentSearchesText()
    526 {
    527     return WEB_UI_STRING("Clear Recent Searches", "menu item in Recent Searches menu that empties menu's contents");
    528 }
    529 
    530 String DefaultLocalizationStrategy::AXWebAreaText()
    531 {
    532     return WEB_UI_STRING("HTML content", "accessibility role description for web area");
    533 }
    534 
    535 String DefaultLocalizationStrategy::AXLinkText()
    536 {
    537     return WEB_UI_STRING("link", "accessibility role description for link");
    538 }
    539 
    540 String DefaultLocalizationStrategy::AXListMarkerText()
    541 {
    542     return WEB_UI_STRING("list marker", "accessibility role description for list marker");
    543 }
    544 
    545 String DefaultLocalizationStrategy::AXImageMapText()
    546 {
    547     return WEB_UI_STRING("image map", "accessibility role description for image map");
    548 }
    549 
    550 String DefaultLocalizationStrategy::AXHeadingText()
    551 {
    552     return WEB_UI_STRING("heading", "accessibility role description for headings");
    553 }
    554 
    555 String DefaultLocalizationStrategy::AXDefinitionListTermText()
    556 {
    557     return WEB_UI_STRING("term", "term word of a definition");
    558 }
    559 
    560 String DefaultLocalizationStrategy::AXDefinitionListDefinitionText()
    561 {
    562     return WEB_UI_STRING("definition", "definition phrase");
    563 }
    564 
    565 #if PLATFORM(MAC)
    566 String DefaultLocalizationStrategy::AXARIAContentGroupText(const String& ariaType)
    567 {
    568     if (ariaType == "ARIAApplicationAlert")
    569         return WEB_UI_STRING("alert", "An ARIA accessibility group that acts as an alert.");
    570     if (ariaType == "ARIAApplicationAlertDialog")
    571         return WEB_UI_STRING("alert dialog", "An ARIA accessibility group that acts as an alert dialog.");
    572     if (ariaType == "ARIAApplicationDialog")
    573         return WEB_UI_STRING("dialog", "An ARIA accessibility group that acts as an dialog.");
    574     if (ariaType == "ARIAApplicationLog")
    575         return WEB_UI_STRING("log", "An ARIA accessibility group that acts as a console log.");
    576     if (ariaType == "ARIAApplicationMarquee")
    577         return WEB_UI_STRING("marquee", "An ARIA accessibility group that acts as a marquee.");
    578     if (ariaType == "ARIAApplicationStatus")
    579         return WEB_UI_STRING("application status", "An ARIA accessibility group that acts as a status update.");
    580     if (ariaType == "ARIAApplicationTimer")
    581         return WEB_UI_STRING("timer", "An ARIA accessibility group that acts as an updating timer.");
    582     if (ariaType == "ARIADocument")
    583         return WEB_UI_STRING("document", "An ARIA accessibility group that acts as a document.");
    584     if (ariaType == "ARIADocumentArticle")
    585         return WEB_UI_STRING("article", "An ARIA accessibility group that acts as an article.");
    586     if (ariaType == "ARIADocumentNote")
    587         return WEB_UI_STRING("note", "An ARIA accessibility group that acts as a note in a document.");
    588     if (ariaType == "ARIADocumentRegion")
    589         return WEB_UI_STRING("region", "An ARIA accessibility group that acts as a distinct region in a document.");
    590     if (ariaType == "ARIALandmarkApplication")
    591         return WEB_UI_STRING("application", "An ARIA accessibility group that acts as an application.");
    592     if (ariaType == "ARIALandmarkBanner")
    593         return WEB_UI_STRING("banner", "An ARIA accessibility group that acts as a banner.");
    594     if (ariaType == "ARIALandmarkComplementary")
    595         return WEB_UI_STRING("complementary", "An ARIA accessibility group that acts as a region of complementary information.");
    596     if (ariaType == "ARIALandmarkContentInfo")
    597         return WEB_UI_STRING("content", "An ARIA accessibility group that contains content.");
    598     if (ariaType == "ARIALandmarkMain")
    599         return WEB_UI_STRING("main", "An ARIA accessibility group that is the main portion of the website.");
    600     if (ariaType == "ARIALandmarkNavigation")
    601         return WEB_UI_STRING("navigation", "An ARIA accessibility group that contains the main navigation elements of a website.");
    602     if (ariaType == "ARIALandmarkSearch")
    603         return WEB_UI_STRING("search", "An ARIA accessibility group that contains a search feature of a website.");
    604     if (ariaType == "ARIAUserInterfaceTooltip")
    605         return WEB_UI_STRING("tooltip", "An ARIA accessibility group that acts as a tooltip.");
    606     if (ariaType == "ARIATabPanel")
    607         return WEB_UI_STRING("tab panel", "An ARIA accessibility group that contains the content of a tab.");
    608     if (ariaType == "ARIADocumentMath")
    609         return WEB_UI_STRING("math", "An ARIA accessibility group that contains mathematical symbols.");
    610     return String();
    611 }
    612 #endif
    613 
    614 String DefaultLocalizationStrategy::AXButtonActionVerb()
    615 {
    616     return WEB_UI_STRING("press", "Verb stating the action that will occur when a button is pressed, as used by accessibility");
    617 }
    618 
    619 String DefaultLocalizationStrategy::AXRadioButtonActionVerb()
    620 {
    621     return WEB_UI_STRING("select", "Verb stating the action that will occur when a radio button is clicked, as used by accessibility");
    622 }
    623 
    624 String DefaultLocalizationStrategy::AXTextFieldActionVerb()
    625 {
    626     return WEB_UI_STRING("activate", "Verb stating the action that will occur when a text field is selected, as used by accessibility");
    627 }
    628 
    629 String DefaultLocalizationStrategy::AXCheckedCheckBoxActionVerb()
    630 {
    631     return WEB_UI_STRING("uncheck", "Verb stating the action that will occur when a checked checkbox is clicked, as used by accessibility");
    632 }
    633 
    634 String DefaultLocalizationStrategy::AXUncheckedCheckBoxActionVerb()
    635 {
    636     return WEB_UI_STRING("check", "Verb stating the action that will occur when an unchecked checkbox is clicked, as used by accessibility");
    637 }
    638 
    639 String DefaultLocalizationStrategy::AXMenuListActionVerb()
    640 {
    641     notImplemented();
    642     return "select";
    643 }
    644 
    645 String DefaultLocalizationStrategy::AXMenuListPopupActionVerb()
    646 {
    647     notImplemented();
    648     return "select";
    649 }
    650 
    651 String DefaultLocalizationStrategy::AXLinkActionVerb()
    652 {
    653     return WEB_UI_STRING("jump", "Verb stating the action that will occur when a link is clicked, as used by accessibility");
    654 }
    655 
    656 String DefaultLocalizationStrategy::missingPluginText()
    657 {
    658     return WEB_UI_STRING("Missing Plug-in", "Label text to be used when a plugin is missing");
    659 }
    660 
    661 String DefaultLocalizationStrategy::crashedPluginText()
    662 {
    663     return WEB_UI_STRING("Plug-in Failure", "Label text to be used if plugin host process has crashed");
    664 }
    665 
    666 String DefaultLocalizationStrategy::multipleFileUploadText(unsigned numberOfFiles)
    667 {
    668     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);
    669 }
    670 
    671 String DefaultLocalizationStrategy::unknownFileSizeText()
    672 {
    673     return WEB_UI_STRING("Unknown", "Unknown filesize FTP directory listing item");
    674 }
    675 
    676 #if PLATFORM(WIN)
    677 
    678 String DefaultLocalizationStrategy::uploadFileText()
    679 {
    680     notImplemented();
    681     return "upload";
    682 }
    683 
    684 String DefaultLocalizationStrategy::allFilesText()
    685 {
    686     notImplemented();
    687     return "all files";
    688 }
    689 
    690 #endif
    691 
    692 #if PLATFORM(MAC)
    693 
    694 String DefaultLocalizationStrategy::keygenMenuItem512()
    695 {
    696     return WEB_UI_STRING("512 (Low Grade)", "Menu item title for KEYGEN pop-up menu");
    697 }
    698 
    699 String DefaultLocalizationStrategy::keygenMenuItem1024()
    700 {
    701     return WEB_UI_STRING("1024 (Medium Grade)", "Menu item title for KEYGEN pop-up menu");
    702 }
    703 
    704 String DefaultLocalizationStrategy::keygenMenuItem2048()
    705 {
    706     return WEB_UI_STRING("2048 (High Grade)", "Menu item title for KEYGEN pop-up menu");
    707 }
    708 
    709 String DefaultLocalizationStrategy::keygenKeychainItemName(const String& host)
    710 {
    711     RetainPtr<CFStringRef> hostCFString(AdoptCF, host.createCFString());
    712     return formatLocalizedString(WEB_UI_STRING("Key from %@", "Name of keychain key generated by the KEYGEN tag"), hostCFString.get());
    713 }
    714 
    715 #endif
    716 
    717 String DefaultLocalizationStrategy::imageTitle(const String& filename, const IntSize& size)
    718 {
    719 #if USE(CF)
    720 #if !defined(BUILDING_ON_LEOPARD)
    721     RetainPtr<CFStringRef> filenameCFString(AdoptCF, filename.createCFString());
    722     RetainPtr<CFLocaleRef> locale(AdoptCF, CFLocaleCopyCurrent());
    723     RetainPtr<CFNumberFormatterRef> formatter(AdoptCF, CFNumberFormatterCreate(0, locale.get(), kCFNumberFormatterDecimalStyle));
    724 
    725     int widthInt = size.width();
    726     RetainPtr<CFNumberRef> width(AdoptCF, CFNumberCreate(0, kCFNumberIntType, &widthInt));
    727     RetainPtr<CFStringRef> widthString(AdoptCF, CFNumberFormatterCreateStringWithNumber(0, formatter.get(), width.get()));
    728 
    729     int heightInt = size.height();
    730     RetainPtr<CFNumberRef> height(AdoptCF, CFNumberCreate(0, kCFNumberIntType, &heightInt));
    731     RetainPtr<CFStringRef> heightString(AdoptCF, CFNumberFormatterCreateStringWithNumber(0, formatter.get(), height.get()));
    732 
    733     return formatLocalizedString(WEB_UI_STRING("%@ %@%@ pixels", "window title for a standalone image (uses multiplication symbol, not x)"), filenameCFString.get(), widthString.get(), heightString.get());
    734 #else
    735     RetainPtr<CFStringRef> filenameCFString(AdoptCF, filename.createCFString());
    736     return formatLocalizedString(WEB_UI_STRING("%@ %d%d pixels", "window title for a standalone image (uses multiplication symbol, not x)"), filenameCFString.get(), size.width(), size.height());
    737 #endif
    738 #else
    739     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);
    740 #endif
    741 }
    742 
    743 String DefaultLocalizationStrategy::mediaElementLoadingStateText()
    744 {
    745     return WEB_UI_STRING("Loading...", "Media controller status message when the media is loading");
    746 }
    747 
    748 String DefaultLocalizationStrategy::mediaElementLiveBroadcastStateText()
    749 {
    750     return WEB_UI_STRING("Live Broadcast", "Media controller status message when watching a live broadcast");
    751 }
    752 
    753 String DefaultLocalizationStrategy::localizedMediaControlElementString(const String& name)
    754 {
    755     if (name == "AudioElement")
    756         return WEB_UI_STRING("audio element controller", "accessibility role description for audio element controller");
    757     if (name == "VideoElement")
    758         return WEB_UI_STRING("video element controller", "accessibility role description for video element controller");
    759     if (name == "MuteButton")
    760         return WEB_UI_STRING("mute", "accessibility role description for mute button");
    761     if (name == "UnMuteButton")
    762         return WEB_UI_STRING("unmute", "accessibility role description for turn mute off button");
    763     if (name == "PlayButton")
    764         return WEB_UI_STRING("play", "accessibility role description for play button");
    765     if (name == "PauseButton")
    766         return WEB_UI_STRING("pause", "accessibility role description for pause button");
    767     if (name == "Slider")
    768         return WEB_UI_STRING("movie time", "accessibility role description for timeline slider");
    769     if (name == "SliderThumb")
    770         return WEB_UI_STRING("timeline slider thumb", "accessibility role description for timeline thumb");
    771     if (name == "RewindButton")
    772         return WEB_UI_STRING("back 30 seconds", "accessibility role description for seek back 30 seconds button");
    773     if (name == "ReturnToRealtimeButton")
    774         return WEB_UI_STRING("return to realtime", "accessibility role description for return to real time button");
    775     if (name == "CurrentTimeDisplay")
    776         return WEB_UI_STRING("elapsed time", "accessibility role description for elapsed time display");
    777     if (name == "TimeRemainingDisplay")
    778         return WEB_UI_STRING("remaining time", "accessibility role description for time remaining display");
    779     if (name == "StatusDisplay")
    780         return WEB_UI_STRING("status", "accessibility role description for movie status");
    781     if (name == "FullscreenButton")
    782         return WEB_UI_STRING("fullscreen", "accessibility role description for enter fullscreen button");
    783     if (name == "SeekForwardButton")
    784         return WEB_UI_STRING("fast forward", "accessibility role description for fast forward button");
    785     if (name == "SeekBackButton")
    786         return WEB_UI_STRING("fast reverse", "accessibility role description for fast reverse button");
    787     if (name == "ShowClosedCaptionsButton")
    788         return WEB_UI_STRING("show closed captions", "accessibility role description for show closed captions button");
    789     if (name == "HideClosedCaptionsButton")
    790         return WEB_UI_STRING("hide closed captions", "accessibility role description for hide closed captions button");
    791 
    792     // FIXME: the ControlsPanel container should never be visible in the accessibility hierarchy.
    793     if (name == "ControlsPanel")
    794         return String();
    795 
    796     ASSERT_NOT_REACHED();
    797     return String();
    798 }
    799 
    800 String DefaultLocalizationStrategy::localizedMediaControlElementHelpText(const String& name)
    801 {
    802     if (name == "AudioElement")
    803         return WEB_UI_STRING("audio element playback controls and status display", "accessibility role description for audio element controller");
    804     if (name == "VideoElement")
    805         return WEB_UI_STRING("video element playback controls and status display", "accessibility role description for video element controller");
    806     if (name == "MuteButton")
    807         return WEB_UI_STRING("mute audio tracks", "accessibility help text for mute button");
    808     if (name == "UnMuteButton")
    809         return WEB_UI_STRING("unmute audio tracks", "accessibility help text for un mute button");
    810     if (name == "PlayButton")
    811         return WEB_UI_STRING("begin playback", "accessibility help text for play button");
    812     if (name == "PauseButton")
    813         return WEB_UI_STRING("pause playback", "accessibility help text for pause button");
    814     if (name == "Slider")
    815         return WEB_UI_STRING("movie time scrubber", "accessibility help text for timeline slider");
    816     if (name == "SliderThumb")
    817         return WEB_UI_STRING("movie time scrubber thumb", "accessibility help text for timeline slider thumb");
    818     if (name == "RewindButton")
    819         return WEB_UI_STRING("seek movie back 30 seconds", "accessibility help text for jump back 30 seconds button");
    820     if (name == "ReturnToRealtimeButton")
    821         return WEB_UI_STRING("return streaming movie to real time", "accessibility help text for return streaming movie to real time button");
    822     if (name == "CurrentTimeDisplay")
    823         return WEB_UI_STRING("current movie time in seconds", "accessibility help text for elapsed time display");
    824     if (name == "TimeRemainingDisplay")
    825         return WEB_UI_STRING("number of seconds of movie remaining", "accessibility help text for remaining time display");
    826     if (name == "StatusDisplay")
    827         return WEB_UI_STRING("current movie status", "accessibility help text for movie status display");
    828     if (name == "SeekBackButton")
    829         return WEB_UI_STRING("seek quickly back", "accessibility help text for fast rewind button");
    830     if (name == "SeekForwardButton")
    831         return WEB_UI_STRING("seek quickly forward", "accessibility help text for fast forward button");
    832     if (name == "FullscreenButton")
    833         return WEB_UI_STRING("Play movie in fullscreen mode", "accessibility help text for enter fullscreen button");
    834     if (name == "ShowClosedCaptionsButton")
    835         return WEB_UI_STRING("start displaying closed captions", "accessibility help text for show closed captions button");
    836     if (name == "HideClosedCaptionsButton")
    837         return WEB_UI_STRING("stop displaying closed captions", "accessibility help text for hide closed captions button");
    838 
    839     ASSERT_NOT_REACHED();
    840     return String();
    841 }
    842 
    843 String DefaultLocalizationStrategy::localizedMediaTimeDescription(float time)
    844 {
    845     if (!isfinite(time))
    846         return WEB_UI_STRING("indefinite time", "accessibility help text for an indefinite media controller time value");
    847 
    848     int seconds = static_cast<int>(fabsf(time));
    849     int days = seconds / (60 * 60 * 24);
    850     int hours = seconds / (60 * 60);
    851     int minutes = (seconds / 60) % 60;
    852     seconds %= 60;
    853 
    854     if (days)
    855         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);
    856     if (hours)
    857         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);
    858     if (minutes)
    859         return formatLocalizedString(WEB_UI_STRING("%1$d minutes %2$d seconds", "accessibility help text for media controller time value >= 60 seconds"), minutes, seconds);
    860     return formatLocalizedString(WEB_UI_STRING("%1$d seconds", "accessibility help text for media controller time value < 60 seconds"), seconds);
    861 }
    862 
    863 String DefaultLocalizationStrategy::validationMessageValueMissingText()
    864 {
    865     return WEB_UI_STRING("value missing", "Validation message for required form control elements that have no value");
    866 }
    867 
    868 String DefaultLocalizationStrategy::validationMessageTypeMismatchText()
    869 {
    870     return WEB_UI_STRING("type mismatch", "Validation message for input form controls with a value not matching type");
    871 }
    872 
    873 String DefaultLocalizationStrategy::validationMessagePatternMismatchText()
    874 {
    875     return WEB_UI_STRING("pattern mismatch", "Validation message for input form controls requiring a constrained value according to pattern");
    876 }
    877 
    878 String DefaultLocalizationStrategy::validationMessageTooLongText()
    879 {
    880     return WEB_UI_STRING("too long", "Validation message for form control elements with a value longer than maximum allowed length");
    881 }
    882 
    883 String DefaultLocalizationStrategy::validationMessageRangeUnderflowText()
    884 {
    885     return WEB_UI_STRING("range underflow", "Validation message for input form controls with value lower than allowed minimum");
    886 }
    887 
    888 String DefaultLocalizationStrategy::validationMessageRangeOverflowText()
    889 {
    890     return WEB_UI_STRING("range overflow", "Validation message for input form controls with value higher than allowed maximum");
    891 }
    892 
    893 String DefaultLocalizationStrategy::validationMessageStepMismatchText()
    894 {
    895     return WEB_UI_STRING("step mismatch", "Validation message for input form controls with value not respecting the step attribute");
    896 }
    897 
    898 } // namespace WebCore
    899 
    900 #endif // USE(PLATFORM_STRATEGIES)
    901