464c9477d9bf77f1ae0231e7615050b06c799a45
[WebKit-https.git] / Source / WebCore / platform / gtk / LocalizedStringsGtk.cpp
1 /*
2  * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
3  * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com
4  * Copyright (C) 2007 Holger Hans Peter Freyther
5  * Copyright (C) 2008 Christian Dywan <christian@imendio.com>
6  * Copyright (C) 2008 Nuanti Ltd.
7  * Copyright (C) 2010 Igalia S.L
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
22  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32 #include "LocalizedStrings.h"
33
34 #include "IntSize.h"
35 #include "NotImplemented.h"
36 #include <glib/gi18n-lib.h>
37 #include <gtk/gtk.h>
38 #include <wtf/MathExtras.h>
39 #include <wtf/gobject/GUniquePtr.h>
40 #include <wtf/text/CString.h>
41 #include <wtf/text/WTFString.h>
42
43 namespace WebCore {
44
45 static const char* gtkStockLabel(const char* stockID)
46 {
47     GtkStockItem item;
48     if (!gtk_stock_lookup(stockID, &item))
49         return stockID;
50     return item.label;
51 }
52
53 String submitButtonDefaultLabel()
54 {
55     return String::fromUTF8(_("Submit"));
56 }
57
58 String inputElementAltText()
59 {
60     return String::fromUTF8(_("Submit"));
61 }
62
63 String resetButtonDefaultLabel()
64 {
65     return String::fromUTF8(_("Reset"));
66 }
67
68 String defaultDetailsSummaryText()
69 {
70     return String::fromUTF8(_("Details"));
71 }
72
73 String searchableIndexIntroduction()
74 {
75     return String::fromUTF8(_("This is a searchable index. Enter search keywords: "));
76 }
77
78 String fileButtonChooseFileLabel()
79 {
80     return String::fromUTF8(_("Choose File"));
81 }
82
83 String fileButtonChooseMultipleFilesLabel()
84 {
85     return String::fromUTF8(_("Choose Files"));
86 }
87
88 String fileButtonNoFileSelectedLabel()
89 {
90     return String::fromUTF8(_("(None)"));
91 }
92
93 String fileButtonNoFilesSelectedLabel()
94 {
95     return String::fromUTF8(_("(None)"));
96 }
97
98 String contextMenuItemTagOpenLinkInNewWindow()
99 {
100     return String::fromUTF8(_("Open Link in New _Window"));
101 }
102
103 String contextMenuItemTagDownloadLinkToDisk()
104 {
105     return String::fromUTF8(_("_Download Linked File"));
106 }
107
108 String contextMenuItemTagCopyLinkToClipboard()
109 {
110     return String::fromUTF8(_("Copy Link Loc_ation"));
111 }
112
113 String contextMenuItemTagOpenImageInNewWindow()
114 {
115     return String::fromUTF8(_("Open _Image in New Window"));
116 }
117
118 String contextMenuItemTagDownloadImageToDisk()
119 {
120     return String::fromUTF8(_("Sa_ve Image As"));
121 }
122
123 String contextMenuItemTagCopyImageToClipboard()
124 {
125     return String::fromUTF8(_("Cop_y Image"));
126 }
127
128 String contextMenuItemTagCopyImageUrlToClipboard()
129 {
130     return String::fromUTF8(_("Copy Image _Address"));
131 }
132
133 String contextMenuItemTagOpenVideoInNewWindow()
134 {
135     return String::fromUTF8(_("Open _Video in New Window"));
136 }
137
138 String contextMenuItemTagOpenAudioInNewWindow()
139 {
140     return String::fromUTF8(_("Open _Audio in New Window"));
141 }
142
143 String contextMenuItemTagDownloadVideoToDisk()
144 {
145     return String::fromUTF8(_("Download _Video"));
146 }
147
148 String contextMenuItemTagDownloadAudioToDisk()
149 {
150     return String::fromUTF8(_("Download _Audio"));
151 }
152
153 String contextMenuItemTagCopyVideoLinkToClipboard()
154 {
155     return String::fromUTF8(_("Cop_y Video Link Location"));
156 }
157
158 String contextMenuItemTagCopyAudioLinkToClipboard()
159 {
160     return String::fromUTF8(_("Cop_y Audio Link Location"));
161 }
162
163 String contextMenuItemTagToggleMediaControls()
164 {
165     return String::fromUTF8(_("_Toggle Media Controls"));
166 }
167
168 String contextMenuItemTagShowMediaControls()
169 {
170     return String::fromUTF8(_("_Show Media Controls"));
171 }
172
173 String contextMenuItemTagHideMediaControls()
174 {
175     return String::fromUTF8(_("_Hide Media Controls"));
176 }
177
178 String contextMenuItemTagToggleMediaLoop()
179 {
180     return String::fromUTF8(_("Toggle Media _Loop Playback"));
181 }
182
183 String contextMenuItemTagEnterVideoFullscreen()
184 {
185     return String::fromUTF8(_("Switch Video to _Fullscreen"));
186 }
187
188 String contextMenuItemTagMediaPlay()
189 {
190     return String::fromUTF8(_("_Play"));
191 }
192
193 String contextMenuItemTagMediaPause()
194 {
195     return String::fromUTF8(_("_Pause"));
196 }
197
198 String contextMenuItemTagMediaMute()
199 {
200     return String::fromUTF8(_("_Mute"));
201 }
202
203 String contextMenuItemTagOpenFrameInNewWindow()
204 {
205     return String::fromUTF8(_("Open _Frame in New Window"));
206 }
207
208 String contextMenuItemTagCopy()
209 {
210     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_COPY));
211     return stockLabel;
212 }
213
214 String contextMenuItemTagDelete()
215 {
216     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_DELETE));
217     return stockLabel;
218 }
219
220 String contextMenuItemTagSelectAll()
221 {
222     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_SELECT_ALL));
223     return stockLabel;
224 }
225
226 String contextMenuItemTagUnicode()
227 {
228     return String::fromUTF8(_("_Insert Unicode Control Character"));
229 }
230
231 String contextMenuItemTagInputMethods()
232 {
233     return String::fromUTF8(_("Input _Methods"));
234 }
235
236 String contextMenuItemTagGoBack()
237 {
238     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_GO_BACK));
239     return stockLabel;
240 }
241
242 String contextMenuItemTagGoForward()
243 {
244     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_GO_FORWARD));
245     return stockLabel;
246 }
247
248 String contextMenuItemTagStop()
249 {
250     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_STOP));
251     return stockLabel;
252 }
253
254 String contextMenuItemTagReload()
255 {
256     return String::fromUTF8(_("_Reload"));
257 }
258
259 String contextMenuItemTagCut()
260 {
261     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_CUT));
262     return stockLabel;
263 }
264
265 String contextMenuItemTagPaste()
266 {
267     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_PASTE));
268     return stockLabel;
269 }
270
271 String contextMenuItemTagNoGuessesFound()
272 {
273     return String::fromUTF8(_("No Guesses Found"));
274 }
275
276 String contextMenuItemTagIgnoreSpelling()
277 {
278     return String::fromUTF8(_("_Ignore Spelling"));
279 }
280
281 String contextMenuItemTagLearnSpelling()
282 {
283     return String::fromUTF8(_("_Learn Spelling"));
284 }
285
286 String contextMenuItemTagSearchWeb()
287 {
288     return String::fromUTF8(_("_Search the Web"));
289 }
290
291 String contextMenuItemTagLookUpInDictionary(const String&)
292 {
293     return String::fromUTF8(_("_Look Up in Dictionary"));
294 }
295
296 String contextMenuItemTagOpenLink()
297 {
298     return String::fromUTF8(_("_Open Link"));
299 }
300
301 String contextMenuItemTagIgnoreGrammar()
302 {
303     return String::fromUTF8(_("Ignore _Grammar"));
304 }
305
306 String contextMenuItemTagSpellingMenu()
307 {
308     return String::fromUTF8(_("Spelling and _Grammar"));
309 }
310
311 String contextMenuItemTagShowSpellingPanel(bool show)
312 {
313     return String::fromUTF8(show ? _("_Show Spelling and Grammar") : _("_Hide Spelling and Grammar"));
314 }
315
316 String contextMenuItemTagCheckSpelling()
317 {
318     return String::fromUTF8(_("_Check Document Now"));
319 }
320
321 String contextMenuItemTagCheckSpellingWhileTyping()
322 {
323     return String::fromUTF8(_("Check Spelling While _Typing"));
324 }
325
326 String contextMenuItemTagCheckGrammarWithSpelling()
327 {
328     return String::fromUTF8(_("Check _Grammar With Spelling"));
329 }
330
331 String contextMenuItemTagFontMenu()
332 {
333     return String::fromUTF8(_("_Font"));
334 }
335
336 String contextMenuItemTagBold()
337 {
338     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_BOLD));
339     return stockLabel;
340 }
341
342 String contextMenuItemTagItalic()
343 {
344     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_ITALIC));
345     return stockLabel;
346 }
347
348 String contextMenuItemTagUnderline()
349 {
350     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_UNDERLINE));
351     return stockLabel;
352 }
353
354 String contextMenuItemTagOutline()
355 {
356     return String::fromUTF8(_("_Outline"));
357 }
358
359 String contextMenuItemTagInspectElement()
360 {
361     return String::fromUTF8(_("Inspect _Element"));
362 }
363
364 String contextMenuItemTagUnicodeInsertLRMMark()
365 {
366     return String::fromUTF8(_("LRM _Left-to-right mark"));
367 }
368
369 String contextMenuItemTagUnicodeInsertRLMMark()
370 {
371     return String::fromUTF8(_("RLM _Right-to-left mark"));
372 }
373
374 String contextMenuItemTagUnicodeInsertLREMark()
375 {
376     return String::fromUTF8(_("LRE Left-to-right _embedding"));
377 }
378
379 String contextMenuItemTagUnicodeInsertRLEMark()
380 {
381     return String::fromUTF8(_("RLE Right-to-left e_mbedding"));
382 }
383
384 String contextMenuItemTagUnicodeInsertLROMark()
385 {
386     return String::fromUTF8(_("LRO Left-to-right _override"));
387 }
388
389 String contextMenuItemTagUnicodeInsertRLOMark()
390 {
391     return String::fromUTF8(_("RLO Right-to-left o_verride"));
392 }
393
394 String contextMenuItemTagUnicodeInsertPDFMark()
395 {
396     return String::fromUTF8(_("PDF _Pop directional formatting"));
397 }
398
399 String contextMenuItemTagUnicodeInsertZWSMark()
400 {
401     return String::fromUTF8(_("ZWS _Zero width space"));
402 }
403
404 String contextMenuItemTagUnicodeInsertZWJMark()
405 {
406     return String::fromUTF8(_("ZWJ Zero width _joiner"));
407 }
408
409 String contextMenuItemTagUnicodeInsertZWNJMark()
410 {
411     return String::fromUTF8(_("ZWNJ Zero width _non-joiner"));
412 }
413
414 String searchMenuNoRecentSearchesText()
415 {
416     return String::fromUTF8(_("No recent searches"));
417 }
418
419 String searchMenuRecentSearchesText()
420 {
421     return String::fromUTF8(_("Recent searches"));
422 }
423
424 String searchMenuClearRecentSearchesText()
425 {
426     return String::fromUTF8(_("_Clear recent searches"));
427 }
428
429 String AXDefinitionText()
430 {
431     return String::fromUTF8(_("definition"));
432 }
433
434 String AXDescriptionListText()
435 {
436     return String::fromUTF8(_("description list"));
437 }
438
439 String AXDescriptionListTermText()
440 {
441     return String::fromUTF8(_("term"));
442 }
443
444 String AXDescriptionListDetailText()
445 {
446     return String::fromUTF8(_("description"));
447 }
448
449 String AXFooterRoleDescriptionText()
450 {
451     return String::fromUTF8(_("footer"));
452 }
453
454 String AXSearchFieldCancelButtonText()
455 {
456     return String::fromUTF8(_("cancel"));
457 }
458
459 String AXAutoFillButtonText()
460 {
461     return String::fromUTF8(_("autofill"));
462 }
463
464 String AXButtonActionVerb()
465 {
466     return String::fromUTF8(_("press"));
467 }
468
469 String AXRadioButtonActionVerb()
470 {
471     return String::fromUTF8(_("select"));
472 }
473
474 String AXTextFieldActionVerb()
475 {
476     return String::fromUTF8(_("activate"));
477 }
478
479 String AXCheckedCheckBoxActionVerb()
480 {
481     return String::fromUTF8(_("uncheck"));
482 }
483
484 String AXUncheckedCheckBoxActionVerb()
485 {
486     return String::fromUTF8(_("check"));
487 }
488
489 String AXLinkActionVerb()
490 {
491     return String::fromUTF8(_("jump"));
492 }
493
494 String AXMenuListPopupActionVerb()
495 {
496     return String();
497 }
498
499 String AXMenuListActionVerb()
500 {
501     return String();
502 }
503
504 String AXListItemActionVerb()
505 {
506     return String();
507 }
508     
509 String missingPluginText()
510 {
511     return String::fromUTF8(_("Missing Plug-in"));
512 }
513
514 String crashedPluginText()
515 {
516     notImplemented();
517     return String::fromUTF8(_("Plug-in Failure"));
518 }
519
520 String blockedPluginByContentSecurityPolicyText()
521 {
522     notImplemented();
523     return String();
524 }
525
526 String insecurePluginVersionText()
527 {
528     notImplemented();
529     return String();
530 }
531
532 String inactivePluginText()
533 {
534     notImplemented();
535     return String();
536 }
537
538 String multipleFileUploadText(unsigned numberOfFiles)
539 {
540     // FIXME: If this file gets localized, this should really be localized as one string with a wildcard for the number.
541     return String::number(numberOfFiles) + String::fromUTF8(_(" files"));
542 }
543
544 String unknownFileSizeText()
545 {
546     return String::fromUTF8(_("Unknown"));
547 }
548
549 String imageTitle(const String& filename, const IntSize& size)
550 {
551     GUniquePtr<gchar> string(g_strdup_printf(C_("Title string for images", "%s  (%dx%d pixels)"),
552         filename.utf8().data(), size.width(), size.height()));
553
554     return String::fromUTF8(string.get());
555 }
556
557
558 #if ENABLE(VIDEO)
559
560 String mediaElementLoadingStateText()
561 {
562     return String::fromUTF8(_("Loading..."));
563 }
564
565 String mediaElementLiveBroadcastStateText()
566 {
567     return String::fromUTF8(_("Live Broadcast"));
568 }
569
570 String localizedMediaControlElementString(const String& name)
571 {
572     if (name == "AudioElement")
573         return String::fromUTF8(_("audio playback"));
574     if (name == "VideoElement")
575         return String::fromUTF8(_("video playback"));
576     if (name == "MuteButton")
577         return String::fromUTF8(_("mute"));
578     if (name == "UnMuteButton")
579         return String::fromUTF8(_("unmute"));
580     if (name == "PlayButton")
581         return String::fromUTF8(_("play"));
582     if (name == "PauseButton")
583         return String::fromUTF8(_("pause"));
584     if (name == "Slider")
585         return String::fromUTF8(_("movie time"));
586     if (name == "SliderThumb")
587         return String::fromUTF8(_("timeline slider thumb"));
588     if (name == "RewindButton")
589         return String::fromUTF8(_("back 30 seconds"));
590     if (name == "ReturnToRealtimeButton")
591         return String::fromUTF8(_("return to realtime"));
592     if (name == "CurrentTimeDisplay")
593         return String::fromUTF8(_("elapsed time"));
594     if (name == "TimeRemainingDisplay")
595         return String::fromUTF8(_("remaining time"));
596     if (name == "StatusDisplay")
597         return String::fromUTF8(_("status"));
598     if (name == "EnterFullscreenButton")
599         return String::fromUTF8(_("enter fullscreen"));
600     if (name == "ExitFullscreenButton")
601         return String::fromUTF8(_("exit fullscreen"));
602     if (name == "SeekForwardButton")
603         return String::fromUTF8(_("fast forward"));
604     if (name == "SeekBackButton")
605         return String::fromUTF8(_("fast reverse"));
606     if (name == "ShowClosedCaptionsButton")
607         return String::fromUTF8(_("show closed captions"));
608     if (name == "HideClosedCaptionsButton")
609         return String::fromUTF8(_("hide closed captions"));
610     if (name == "ControlsPanel")
611         return String::fromUTF8(_("media controls"));
612
613     ASSERT_NOT_REACHED();
614     return String();
615 }
616
617 String localizedMediaControlElementHelpText(const String& name)
618 {
619     if (name == "AudioElement")
620         return String::fromUTF8(_("audio element playback controls and status display"));
621     if (name == "VideoElement")
622         return String::fromUTF8(_("video element playback controls and status display"));
623     if (name == "MuteButton")
624         return String::fromUTF8(_("mute audio tracks"));
625     if (name == "UnMuteButton")
626         return String::fromUTF8(_("unmute audio tracks"));
627     if (name == "PlayButton")
628         return String::fromUTF8(_("begin playback"));
629     if (name == "PauseButton")
630         return String::fromUTF8(_("pause playback"));
631     if (name == "Slider")
632         return String::fromUTF8(_("movie time scrubber"));
633     if (name == "SliderThumb")
634         return String::fromUTF8(_("movie time scrubber thumb"));
635     if (name == "RewindButton")
636         return String::fromUTF8(_("seek movie back 30 seconds"));
637     if (name == "ReturnToRealtimeButton")
638         return String::fromUTF8(_("return streaming movie to real time"));
639     if (name == "CurrentTimeDisplay")
640         return String::fromUTF8(_("current movie time in seconds"));
641     if (name == "TimeRemainingDisplay")
642         return String::fromUTF8(_("number of seconds of movie remaining"));
643     if (name == "StatusDisplay")
644         return String::fromUTF8(_("current movie status"));
645     if (name == "SeekBackButton")
646         return String::fromUTF8(_("seek quickly back"));
647     if (name == "SeekForwardButton")
648         return String::fromUTF8(_("seek quickly forward"));
649     if (name == "EnterFullscreenButton")
650         return String::fromUTF8(_("Play movie in fullscreen mode"));
651     if (name == "EnterFullscreenButton")
652         return String::fromUTF8(_("Exit fullscreen mode"));
653     if (name == "ShowClosedCaptionsButton")
654         return String::fromUTF8(_("start displaying closed captions"));
655     if (name == "HideClosedCaptionsButton")
656         return String::fromUTF8(_("stop displaying closed captions"));
657
658     ASSERT_NOT_REACHED();
659     return String();
660 }
661
662 String localizedMediaTimeDescription(float time)
663 {
664     if (!std::isfinite(time))
665         return String::fromUTF8(_("indefinite time"));
666
667     int seconds = static_cast<int>(abs(time));
668     int days = seconds / (60 * 60 * 24);
669     int hours = seconds / (60 * 60);
670     int minutes = (seconds / 60) % 60;
671     seconds %= 60;
672
673     if (days) {
674         GUniquePtr<gchar> string(g_strdup_printf("%d days %d hours %d minutes %d seconds", days, hours, minutes, seconds));
675         return String::fromUTF8(string.get());
676     }
677
678     if (hours) {
679         GUniquePtr<gchar> string(g_strdup_printf("%d hours %d minutes %d seconds", hours, minutes, seconds));
680         return String::fromUTF8(string.get());
681     }
682
683     if (minutes) {
684         GUniquePtr<gchar> string(g_strdup_printf("%d minutes %d seconds", minutes, seconds));
685         return String::fromUTF8(string.get());
686     }
687
688     GUniquePtr<gchar> string(g_strdup_printf("%d seconds", seconds));
689     return String::fromUTF8(string.get());
690 }
691 #endif  // ENABLE(VIDEO)
692
693 String validationMessageValueMissingText()
694 {
695     return String::fromUTF8(_("value missing"));
696 }
697
698 String validationMessageValueMissingForCheckboxText()
699 {
700     notImplemented();
701     return validationMessageValueMissingText();
702 }
703
704 String validationMessageValueMissingForFileText()
705 {
706     notImplemented();
707     return validationMessageValueMissingText();
708 }
709
710 String validationMessageValueMissingForMultipleFileText()
711 {
712     notImplemented();
713     return validationMessageValueMissingText();
714 }
715
716 String validationMessageValueMissingForRadioText()
717 {
718     notImplemented();
719     return validationMessageValueMissingText();
720 }
721
722 String validationMessageValueMissingForSelectText()
723 {
724     notImplemented();
725     return validationMessageValueMissingText();
726 }
727
728 String validationMessageTypeMismatchText()
729 {
730     notImplemented();
731     return String::fromUTF8(_("type mismatch"));
732 }
733
734 String validationMessageTypeMismatchForEmailText()
735 {
736     notImplemented();
737     return validationMessageTypeMismatchText();
738 }
739
740 String validationMessageTypeMismatchForMultipleEmailText()
741 {
742     notImplemented();
743     return validationMessageTypeMismatchText();
744 }
745
746 String validationMessageTypeMismatchForURLText()
747 {
748     notImplemented();
749     return validationMessageTypeMismatchText();
750 }
751
752 String validationMessagePatternMismatchText()
753 {
754     return String::fromUTF8(_("pattern mismatch"));
755 }
756
757 String validationMessageTooLongText(int, int)
758 {
759     return String::fromUTF8(_("too long"));
760 }
761
762 String validationMessageRangeUnderflowText(const String&)
763 {
764     return String::fromUTF8(_("range underflow"));
765 }
766
767 String validationMessageRangeOverflowText(const String&)
768 {
769     return String::fromUTF8(_("range overflow"));
770 }
771
772 String validationMessageStepMismatchText(const String&, const String&)
773 {
774     return String::fromUTF8(_("step mismatch"));
775 }
776
777 String unacceptableTLSCertificate()
778 {
779     return String::fromUTF8(_("Unacceptable TLS certificate"));
780 }
781
782 String localizedString(const char* key)
783 {
784     return String::fromUTF8(key, strlen(key));
785 }
786
787 String validationMessageBadInputForNumberText()
788 {
789     notImplemented();
790     return validationMessageTypeMismatchText();
791 }
792
793 #if ENABLE(VIDEO_TRACK)
794 String textTrackClosedCaptionsText()
795 {
796     return String::fromUTF8(C_("Closed Captions", "Menu section heading for closed captions"));
797 }
798
799 String textTrackSubtitlesText()
800 {
801     return String::fromUTF8(C_("Menu section heading for subtitles", "Subtitles"));
802 }
803
804 String textTrackOffMenuItemText()
805 {
806     return String::fromUTF8(C_("Menu item label for the track that represents disabling closed captions", "Off"));
807 }
808
809 String textTrackAutomaticMenuItemText()
810 {
811     return String::fromUTF8(C_("Menu item label for the automatically choosen track", "Auto"));
812 }
813
814 String textTrackNoLabelText()
815 {
816     return String::fromUTF8(C_("Menu item label for a closed captions track that has no other name", "No label"));
817 }
818
819 String audioTrackNoLabelText()
820 {
821     return String::fromUTF8(C_("Menu item label for an audio track that has no other name", "No label"));
822 }
823 #endif
824
825 String snapshottedPlugInLabelTitle()
826 {
827     return String::fromUTF8(C_("Snapshotted Plug-In", "Title of the label to show on a snapshotted plug-in"));
828 }
829
830 String snapshottedPlugInLabelSubtitle()
831 {
832     return String::fromUTF8(C_("Click to restart", "Subtitle of the label to show on a snapshotted plug-in"));
833 }
834
835 }