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