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