1/* pianod web client - internationalization/translation support
2   Copr. 2015-2017 Perette Barella/Devious Fish
3   All rights reserved.
4*/
5
6
7
8
9var Translate = function () {
10	function Translate () {
11		/* Nothing */
12	};
13
14	/* Constants */
15	var ERRORS = {
16
17
18		200: "Success",
19		203: "Start der Daten",
20		204: "Keine Daten oder Datenende",
21		206: "Spiel gefunden",
22		207: "Wert wurde angenähert",
23		210: "Befehl erkannt hat, aber Maßnahmen anhängig",
24		300: "Details",
25		301: "Proxy-Einstellungen ungültig",
26		303: "Ungültige Playlist",
27		304: "Artikel nicht gefunden",
28		400: "Bad Befehls",
29		401: "Nicht für angeforderte Aktion genehmigt",
30		402: "Vorgang fehlgeschlagen",
31		403: "Bereits existiert",
32		404: "Gewünschten Artikel nicht gefunden",
33		405: "Aktion gilt nicht für aktuellen Stand",
34		406: "Ungültige Login oder Passwort",
35		407: "Parameter ungültig",
36		408: "Play Personalisierung gescheitert",
37		409: "Konflikt aufgetreten",
38		410: "Temporary Versagen, zukünftigen Fertigstellung unbekannt",
39		411: "Quote überschritten",
40		412: "Müssen angemeldet sein,",
41		413: "Nicht unterstützt",
42		414: "Unzureichende Ressourcen",
43		415: "Grenze erreicht",
44		416: "Betrieb nur auf primären Wiedergabelisten gültig",
45		417: "Falsche Art Handlungs",
46		418: "Persistent Ausdruck oder Wert erforderlich",
47		460: "Aktion nicht durch Quelle unterstützt",
48		461: "Wert nicht durch Quelle unterstützt",
49		462: "Aktion nicht auf Medien-Manager möglich",
50		498: "Es ist ein Fehler in pianod",
51		499: "Nicht implementiert",
52		500: "Interner Serverfehler",
53		501: "Nichts zu spielen",
54		502: "Netzfehler",
55		503: "Dienst heruntergefahren",
56		504: "Authentifizierungsfehler",
57		505: "Insufficent Ressourcen",
58		507: "Fehler, der Pandora verbunden ist",
59		508: "Befehlsausführung unvollständig",
60		509: "Erlaubnis verweigert",
61		510: "Ausnahme",
62		511: "Netzwerk Timeout",
63		512: "Kann Audio-Ausgang nicht öffnen",
64		'Bogus': 'Bogosity'
65	};
66
67
68
69	var MESSAGES = {
70			"ERROR_LOGIN_FAILED": "LOGON verlassen",
71	"ERROR_CONNECTION_FAILED": "Anschluss verlassen.",
72	"ERROR_LOGIN_BAD_CREDENTIALS": "Falsche Bescheinigungen.",
73	"CHECK_PORT_NUMBER": "Portnummer überprüfen.",
74	"LOGIN_SESSION_STARTING": "Öffnungsanschluß zu %1$s.",
75	"LOGIN_SESSION_ENDED": "Sitzung beendet.",
76	"STATUS_AUTHENTICATION_OK": "Authentication successful.",
77
78
79		"HEADING_ALBUM": "Album",
80
81		"HEADING_ARTIST": "künstler",
82
83		"HEADING_SONG": "Lied",
84
85		"HEADING_GENRE": "Genre",
86
87		"HEADING_TYPE": "Typen",
88
89		"HEADING_SEEDTYPE": "Kamen Typen",
90
91		"HEADING_PLAYLIST": "Titelliste",
92
93		"HEADING_YEAR": "Jahr",
94
95		"HEADING_DURATION": "Dauer",
96
97		"HEADING_ACTION": "Tätigkeiten",
98
99
100				"Cap_song": "Lied",
101	"Cap_artist": "künstler",
102	"Cap_album": "Album",
103	"Cap_playlist": "Titelliste",
104
105
106		"lower_song": "lied",
107	"lower_artist": "künstler",
108	"lower_album": "album",
109	"lower_playlist": "titelliste",
110
111
112
113
114				"PROMPT_CONFIRM_DELETE": "Sind Sie Sie möchten %1$s löschen sicher?",
115	"CONFIRM_DELETE": "%1$s gelöscht.",
116	"CONFIRM_ADD": "%1$s hinzugefügt.",
117	"CONFIRM_ADDED_TO": "Zusätzliches %1$s zu %2$s.",
118	"CONFIRM_CREATE": "%1$s erstellt.",
119	"CONFIRM_RENAME": "%1$s renamed to %2$s.",
120
121
122
123				"ACTION_TABLE_QUE": "+Que",
124	"ACTION_TABLE_DEQUE": "✖Deque",
125	"ACTION_TABLE_SKIP": "Zeilensprung",
126	"ACTION_TABLE_SEED": "+Samen",
127	"ACTION_TABLE_UNSEED": "✖Remove Samen",
128
129
130
131
132				"CONFIRM_CLEAR_REQUESTS": "Request queue cleared.",
133	"SELECT_PLAYLISTS_NONE": "Keine Titellisten",
134	"ERROR_NO_USABLE_SOURCES": "Keine verwendbaren Quellen.",
135	"CONFIRM_RATE_OVERPLAYED": "Liedbewertung vorübergehend degradiert.",
136	"CONFIRM_ADD_SEED_TYPE_TO": "Zusätzlicher %1$s Startwert für Zufallsgenerator zu %2$s.",
137	"CONFIRM_DEQUEUED": "Geforderte Musik beendet.",
138	"INDICATOR_AUTOTUNING": "∫",
139	"STATUS_NOTHING_PLAYING": "There is nothing playing right now.",
140	"ERROR_QUEUEHISTORY_RANGE": "No further items.",
141
142
143
144
145				"INFO_SEARCH_RESULTS_OMITTED": "Einige Resultate wurden ausgelassen: ",
146	"ERROR_CHOOSE_PLAYLIST": "Wählen Sie bitte eine Ziel-Titelliste.",
147	"ERROR_NEED_PLAYLIST_NAME": "Geben Sie bitte einen Titellistenamen an.",
148	"CONFIRM_QUEUED": "Anträge eingereiht.",
149	"ERROR_NEED_SEARCH_QUERY": "Tragen Sie bitte eine Rechercheabfrage ein.",
150	"MESSAGE_CREATE_WITH_ALL_RESULTS": "alle suchen Resultate",
151	"MESSAGE_CREATE_APPLIES_TARGET": "trifft auf Zielquelle zu",
152
153
154
155
156				"ERROR_NO_SOURCES": "Stellen Sie bitte einige Quellen zur Verfügung.",
157	"ERROR_NEED_SOURCE_SELECTION": "Please choose a source.",
158	"ERROR_NEED_SOURCE_TYPE": "Please choose a source type.",
159	"CONFIRM_SOURCE_ADDED": "Die Quelle, die hinzugefügt wird, kann einen Moment nehmen, um betriebsbereit zu sein.",
160	"CONFIRM_SOURCE_REMOVED": "Quelle gelöscht.",
161	"CONFIRM_SOURCE_SELECTED": "Quelle ausgewählt.",
162
163
164		"ADDSOURCE_NULL_PATH": "Spezifizieren Sie bitte Pfad/Faltblatt für Musik.",
165
166
167
168
169				"ACTION_SKIP": "Zeilensprunglied",
170
171		"TOOLTIP_SKIP": "Den aktuellen Titel überspringen",
172
173		"ACTION_DEQUEUE": "Beenden Sie Lied.",
174
175		"TOOLTIP_DEQUEUE": "Beenden Sie ein bevorstehendes Lied.",
176
177		"ACTION_RECUE": "Request song",
178
179		"TOOLTIP_RECUE": "Request this song again.",
180
181
182		"PROMPT_CREATE_PLAYLIST_FROM": "Stellen Sie Titelliste von %1$s her",
183	"PROMPT_ADD_SEED_FROM": "Fügen Sie Startwert für Zufallsgenerator von %1$s hinzu",
184
185
186
187
188				"PROMPT_CONFIRM_DELETE_SEED": "Sind Sie Sie möchten den Startwert für Zufallsgenerator für %1$s löschen sicher?",
189	"ERROR_SELECT_PLAYLIST": "Wählen Sie bitte eine Titelliste aus.",
190
191
192
193
194				"HEADING_LISTENERS_ONLINE": "Zuhörer online:",
195	"ERROR_ACTIVITY_DISABLED": "Aktivitätsmeldungen sind untauglich.",
196	"ERROR_YELL_NO_MESSAGE": "Keine Meldung zum zu kreischen.",
197
198
199
200
201				"PROMPT_OLD_PASSWORD": "Altes Kennwort",
202	"PROMPT_NEW_PASSWORD": "Neues Passwort",
203	"PROMPT_PIANOD_PASSWORD": "pianod Kennwort",
204	"PROMPT_SYSTEM_PASSWORD": "Systemskennwort",
205
206
207		"PROMPT_CONFIRM_NO_PASSWORD": "Dieses löscht %1$s Kennwort, also können sie ohne ein Kennwort anmelden. Dieses ist unsicher.  Sind Sie sicher?",
208	"CONFIRM_USER_UPDATED": "Benutzer %1$s aktualisiert.",
209	"CONFIRM_PASSWORD_CHANGE": "Kennwort ist geändert worden.",
210	"ERROR_CANNOT_GET_USER_LIST": "Kann Benutzerliste nicht zurückholen.",
211	"ERROR_PASSWORDS_UNMATCHED": "Neue Kennwörter gleichen nicht ab.",
212	"ERROR_SELECT_USER": "Wählen Sie bitte einen Benutzer aus.",
213	"LABEL_KICK_VISITORS": "All visitors",
214	"CONFIRM_KICK": "Benutzer %1$s abgemeldet.",
215
216
217		'Bogus': 'Bogosity'
218	};
219
220	/* Private variables */
221
222	/* Private functions */
223	if (typeof (assert) == 'undefined') {
224		var assert = function () { };
225	}
226
227	/* Return a function object, which will see all of
228	   the above via the closure. */
229	Translate.prototype.translate = function (value) {
230		if (typeof (value) == 'string') {
231			// Translate a string
232			var message = value in MESSAGES ? MESSAGES [value] : value;
233			// Perform printf-style positional string substitutions.
234			for (var i = 1; i < arguments.length; i++) {
235				message = message.replace (RegExp ("%" + i + "\\$s", "g"), arguments [i]);
236			}
237			return message;
238		}
239		// Translate a Football comm response.
240		assert (arguments.length == 1);
241		assert (typeof (value) == 'object');
242		assert ('code' in value);
243		if (typeof (value) != 'object' || !('code' in value)) {
244			return 'Bad translation request';
245		}
246		if (!(value.code in ERRORS)) {
247			return value.text;
248		}
249		// Replace value up to first colon.
250		var pieces = value.text.split (':');
251		pieces [0] = ERRORS [value.code];
252		return pieces.join (':')
253	};
254	return Translate;
255}();
256
257