Rubber-stamped by Oliver Hunt.
[WebKit-https.git] / 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  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
25  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #include "config.h"
31
32 #include "LocalizedStrings.h"
33 #include "CString.h"
34 #include "GOwnPtr.h"
35 #include "IntSize.h"
36 #include "NotImplemented.h"
37 #include "PlatformString.h"
38
39 #include <glib/gi18n-lib.h>
40 #include <gtk/gtk.h>
41
42 namespace WebCore {
43
44 static const char* gtkStockLabel(const char* stockID)
45 {
46     GtkStockItem item;
47     if (!gtk_stock_lookup(stockID, &item))
48         return stockID;
49     return item.label;
50 }
51
52 String submitButtonDefaultLabel()
53 {
54     return String::fromUTF8(_("Submit"));
55 }
56
57 String inputElementAltText()
58 {
59     return String::fromUTF8(_("Submit"));
60 }
61
62 String resetButtonDefaultLabel()
63 {
64     return String::fromUTF8(_("Reset"));
65 }
66
67 String searchableIndexIntroduction()
68 {
69     return String::fromUTF8(_("_Searchable Index"));
70 }
71
72 String fileButtonChooseFileLabel()
73 {
74     return String::fromUTF8(_("Choose File"));
75 }
76
77 String fileButtonNoFileSelectedLabel()
78 {
79     return String::fromUTF8(_("(None)"));
80 }
81
82 String contextMenuItemTagOpenLinkInNewWindow()
83 {
84     return String::fromUTF8(_("Open Link in New _Window"));
85 }
86
87 String contextMenuItemTagDownloadLinkToDisk()
88 {
89     return String::fromUTF8(_("_Download Linked File"));
90 }
91
92 String contextMenuItemTagCopyLinkToClipboard()
93 {
94     return String::fromUTF8(_("Copy Link Loc_ation"));
95 }
96
97 String contextMenuItemTagOpenImageInNewWindow()
98 {
99     return String::fromUTF8(_("Open _Image in New Window"));
100 }
101
102 String contextMenuItemTagDownloadImageToDisk()
103 {
104     return String::fromUTF8(_("Sa_ve Image As"));
105 }
106
107 String contextMenuItemTagCopyImageToClipboard()
108 {
109     return String::fromUTF8(_("Cop_y Image"));
110 }
111
112 String contextMenuItemTagOpenFrameInNewWindow()
113 {
114     return String::fromUTF8(_("Open _Frame in New Window"));
115 }
116
117 String contextMenuItemTagCopy()
118 {
119     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_COPY));
120     return stockLabel;
121 }
122
123 String contextMenuItemTagDelete()
124 {
125     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_DELETE));
126     return stockLabel;
127 }
128
129 String contextMenuItemTagSelectAll()
130 {
131     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_SELECT_ALL));
132     return stockLabel;
133 }
134
135 String contextMenuItemTagUnicode()
136 {
137     return String::fromUTF8(_("_Insert Unicode Control Character"));
138 }
139
140 String contextMenuItemTagInputMethods()
141 {
142     return String::fromUTF8(_("Input _Methods"));
143 }
144
145 String contextMenuItemTagGoBack()
146 {
147     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_GO_BACK));
148     return stockLabel;
149 }
150
151 String contextMenuItemTagGoForward()
152 {
153     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_GO_FORWARD));
154     return stockLabel;
155 }
156
157 String contextMenuItemTagStop()
158 {
159     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_STOP));
160     return stockLabel;
161 }
162
163 String contextMenuItemTagReload()
164 {
165     return String::fromUTF8(_("_Reload"));
166 }
167
168 String contextMenuItemTagCut()
169 {
170     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_CUT));
171     return stockLabel;
172 }
173
174 String contextMenuItemTagPaste()
175 {
176     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_PASTE));
177     return stockLabel;
178 }
179
180 String contextMenuItemTagNoGuessesFound()
181 {
182     return String::fromUTF8(_("No Guesses Found"));
183 }
184
185 String contextMenuItemTagIgnoreSpelling()
186 {
187     return String::fromUTF8(_("_Ignore Spelling"));
188 }
189
190 String contextMenuItemTagLearnSpelling()
191 {
192     return String::fromUTF8(_("_Learn Spelling"));
193 }
194
195 String contextMenuItemTagSearchWeb()
196 {
197     return String::fromUTF8(_("_Search the Web"));
198 }
199
200 String contextMenuItemTagLookUpInDictionary()
201 {
202     return String::fromUTF8(_("_Look Up in Dictionary"));
203 }
204
205 String contextMenuItemTagOpenLink()
206 {
207     return String::fromUTF8(_("_Open Link"));
208 }
209
210 String contextMenuItemTagIgnoreGrammar()
211 {
212     return String::fromUTF8(_("Ignore _Grammar"));
213 }
214
215 String contextMenuItemTagSpellingMenu()
216 {
217     return String::fromUTF8(_("Spelling and _Grammar"));
218 }
219
220 String contextMenuItemTagShowSpellingPanel(bool show)
221 {
222     return String::fromUTF8(show ? _("_Show Spelling and Grammar") : _("_Hide Spelling and Grammar"));
223 }
224
225 String contextMenuItemTagCheckSpelling()
226 {
227     return String::fromUTF8(_("_Check Document Now"));
228 }
229
230 String contextMenuItemTagCheckSpellingWhileTyping()
231 {
232     return String::fromUTF8(_("Check Spelling While _Typing"));
233 }
234
235 String contextMenuItemTagCheckGrammarWithSpelling()
236 {
237     return String::fromUTF8(_("Check _Grammar With Spelling"));
238 }
239
240 String contextMenuItemTagFontMenu()
241 {
242     return String::fromUTF8(_("_Font"));
243 }
244
245 String contextMenuItemTagBold()
246 {
247     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_BOLD));
248     return stockLabel;
249 }
250
251 String contextMenuItemTagItalic()
252 {
253     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_ITALIC));
254     return stockLabel;
255 }
256
257 String contextMenuItemTagUnderline()
258 {
259     static String stockLabel = String::fromUTF8(gtkStockLabel(GTK_STOCK_UNDERLINE));
260     return stockLabel;
261 }
262
263 String contextMenuItemTagOutline()
264 {
265     return String::fromUTF8(_("_Outline"));
266 }
267
268 String contextMenuItemTagInspectElement()
269 {
270     return String::fromUTF8(_("Inspect _Element"));
271 }
272
273 String searchMenuNoRecentSearchesText()
274 {
275     return String::fromUTF8(_("No recent searches"));
276 }
277
278 String searchMenuRecentSearchesText()
279 {
280     return String::fromUTF8(_("Recent searches"));
281 }
282
283 String searchMenuClearRecentSearchesText()
284 {
285     return String::fromUTF8(_("_Clear recent searches"));
286 }
287
288 String AXDefinitionListTermText()
289 {
290     return String::fromUTF8(_("term"));
291 }
292
293 String AXDefinitionListDefinitionText()
294 {
295     return String::fromUTF8(_("definition"));
296 }
297
298 String AXButtonActionVerb()
299 {
300     return String::fromUTF8(_("press"));
301 }
302
303 String AXRadioButtonActionVerb()
304 {
305     return String::fromUTF8(_("select"));
306 }
307
308 String AXTextFieldActionVerb()
309 {
310     return String::fromUTF8(_("activate"));
311 }
312
313 String AXCheckedCheckBoxActionVerb()
314 {
315     return String::fromUTF8(_("uncheck"));
316 }
317
318 String AXUncheckedCheckBoxActionVerb()
319 {
320     return String::fromUTF8(_("check"));
321 }
322
323 String AXLinkActionVerb()
324 {
325     return String::fromUTF8(_("jump"));
326 }
327
328 String multipleFileUploadText(unsigned numberOfFiles)
329 {
330     // FIXME: If this file gets localized, this should really be localized as one string with a wildcard for the number.
331     return String::number(numberOfFiles) + String::fromUTF8(_(" files"));
332 }
333
334 String unknownFileSizeText()
335 {
336     return String::fromUTF8(_("Unknown"));
337 }
338
339 String imageTitle(const String& filename, const IntSize& size)
340 {
341     GOwnPtr<gchar> string(g_strdup_printf(C_("Title string for images", "%s  (%dx%d pixels)"),
342                                           filename.utf8().data(),
343                                           size.width(), size.height()));
344
345     return String::fromUTF8(string.get());
346 }
347
348
349 #if ENABLE(VIDEO)
350
351 String mediaElementLoadingStateText()
352 {
353     return String::fromUTF8(_("Loading..."));
354 }
355
356 String mediaElementLiveBroadcastStateText()
357 {
358     return String::fromUTF8(_("Live Broadcast"));
359 }
360
361 String localizedMediaControlElementString(const String& name)
362 {
363     if (name == "AudioElement")
364         return String::fromUTF8(_("audio element controller"));
365     if (name == "VideoElement")
366         return String::fromUTF8(_("video element controller"));
367     if (name == "MuteButton")
368         return String::fromUTF8(_("mute"));
369     if (name == "UnMuteButton")
370         return String::fromUTF8(_("unmute"));
371     if (name == "PlayButton")
372         return String::fromUTF8(_("play"));
373     if (name == "PauseButton")
374         return String::fromUTF8(_("pause"));
375     if (name == "Slider")
376         return String::fromUTF8(_("movie time"));
377     if (name == "SliderThumb")
378         return String::fromUTF8(_("timeline slider thumb"));
379     if (name == "RewindButton")
380         return String::fromUTF8(_("back 30 seconds"));
381     if (name == "ReturnToRealtimeButton")
382         return String::fromUTF8(_("return to realtime"));
383     if (name == "CurrentTimeDisplay")
384         return String::fromUTF8(_("elapsed time"));
385     if (name == "TimeRemainingDisplay")
386         return String::fromUTF8(_("remaining time"));
387     if (name == "StatusDisplay")
388         return String::fromUTF8(_("status"));
389     if (name == "FullscreenButton")
390         return String::fromUTF8(_("fullscreen"));
391     if (name == "SeekForwardButton")
392         return String::fromUTF8(_("fast forward"));
393     if (name == "SeekBackButton")
394         return String::fromUTF8(_("fast reverse"));
395     if (name == "ShowClosedCaptionsButton")
396         return String::fromUTF8(_("show closed captions"));
397     if (name == "HideClosedCaptionsButton")
398         return String::fromUTF8(_("hide closed captions"));
399
400     ASSERT_NOT_REACHED();
401     return String();
402 }
403
404 String localizedMediaControlElementHelpText(const String& name)
405 {
406     if (name == "AudioElement")
407         return String::fromUTF8(_("audio element playback controls and status display"));
408     if (name == "VideoElement")
409         return String::fromUTF8(_("video element playback controls and status display"));
410     if (name == "MuteButton")
411         return String::fromUTF8(_("mute audio tracks"));
412     if (name == "UnMuteButton")
413         return String::fromUTF8(_("unmute audio tracks"));
414     if (name == "PlayButton")
415         return String::fromUTF8(_("begin playback"));
416     if (name == "PauseButton")
417         return String::fromUTF8(_("pause playback"));
418     if (name == "Slider")
419         return String::fromUTF8(_("movie time scrubber"));
420     if (name == "SliderThumb")
421         return String::fromUTF8(_("movie time scrubber thumb"));
422     if (name == "RewindButton")
423         return String::fromUTF8(_("seek movie back 30 seconds"));
424     if (name == "ReturnToRealtimeButton")
425         return String::fromUTF8(_("return streaming movie to real time"));
426     if (name == "CurrentTimeDisplay")
427         return String::fromUTF8(_("current movie time in seconds"));
428     if (name == "TimeRemainingDisplay")
429         return String::fromUTF8(_("number of seconds of movie remaining"));
430     if (name == "StatusDisplay")
431         return String::fromUTF8(_("current movie status"));
432     if (name == "SeekBackButton")
433         return String::fromUTF8(_("seek quickly back"));
434     if (name == "SeekForwardButton")
435         return String::fromUTF8(_("seek quickly forward"));
436     if (name == "FullscreenButton")
437         return String::fromUTF8(_("Play movie in fullscreen mode"));
438     if (name == "ShowClosedCaptionsButton")
439         return String::fromUTF8(_("start displaying closed captions"));
440     if (name == "HideClosedCaptionsButton")
441         return String::fromUTF8(_("stop displaying closed captions"));
442
443     ASSERT_NOT_REACHED();
444     return String();
445 }
446
447 String localizedMediaTimeDescription(float time)
448 {
449     if (!isfinite(time))
450         return String::fromUTF8(_("indefinite time"));
451
452     int seconds = (int)fabsf(time);
453     int days = seconds / (60 * 60 * 24);
454     int hours = seconds / (60 * 60);
455     int minutes = (seconds / 60) % 60;
456     seconds %= 60;
457
458     if (days) {
459         GOwnPtr<gchar> string(g_strdup_printf("%d days %d hours %d minutes %d seconds", days, hours, minutes, seconds));
460         return String::fromUTF8(string.get());
461     }
462
463     if (hours) {
464         GOwnPtr<gchar> string(g_strdup_printf("%d hours %d minutes %d seconds", hours, minutes, seconds));
465         return String::fromUTF8(string.get());
466     }
467
468     if (minutes) {
469         GOwnPtr<gchar> string(g_strdup_printf("%d minutes %d seconds", minutes, seconds));
470         return String::fromUTF8(string.get());
471     }
472
473     GOwnPtr<gchar> string(g_strdup_printf("%d seconds", seconds));
474     return String::fromUTF8(string.get());
475 }
476 #endif  // ENABLE(VIDEO)
477
478 String validationMessageValueMissingText()
479 {
480     return String::fromUTF8(_("value missing"));
481 }
482
483 String validationMessageTypeMismatchText()
484 {
485     notImplemented();
486     return String::fromUTF8(_("type mismatch"));
487 }
488
489 String validationMessagePatternMismatchText()
490 {
491     return String::fromUTF8(_("pattern mismatch"));
492 }
493
494 String validationMessageTooLongText()
495 {
496     return String::fromUTF8(_("too long"));
497 }
498
499 String validationMessageRangeUnderflowText()
500 {
501     return String::fromUTF8(_("range underflow"));
502 }
503
504 String validationMessageRangeOverflowText()
505 {
506     return String::fromUTF8(_("range overflow"));
507 }
508
509 String validationMessageStepMismatchText()
510 {
511     return String::fromUTF8(_("step mismatch"));
512 }
513
514 }