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