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: "Succès", 19 203: "Début de données", 20 204: "Pas de données ou la fin des données", 21 206: "Match trouvé", 22 207: "Valeur a été approchée", 23 210: "Commande reconnu mais l'action est en suspens", 24 300: "Détail", 25 301: "Réglages proxy invalide", 26 303: "Playlist non valide", 27 304: "Article pas trouvé", 28 400: "Bad commande", 29 401: "Non autorisé pour action demandée", 30 402: "Action a échoué", 31 403: "Existe déjà", 32 404: "Article demandé est introuvable", 33 405: "Action est pas applicable à l'état actuel", 34 406: "Login ou mot de passe invalide", 35 407: "Paramètre non valide", 36 408: "Playlist personnalisation échoué", 37 409: "Conflits rencontré", 38 410: "Panne temporaire, l'achèvement avenir inconnu", 39 411: "Le quota est dépassé", 40 412: "Devez être connecté", 41 413: "Non pris en charge", 42 414: "Ressources insuffisantes", 43 415: "Limite a été atteint", 44 416: "Opération uniquement valable sur les playlists primaires", 45 417: "Mauvais type d'action", 46 418: "Expression persistante ou valeur requise", 47 460: "Action pas pris en charge par la source", 48 461: "Valeur est pas pris en charge par la source", 49 462: "Action pas possible sur gestionnaire de médias", 50 498: "Il ya un bogue dans pianod", 51 499: "Non implémenté", 52 500: "Erreur de serveur interne", 53 501: "Rien à jouer", 54 502: "Échec Réseau", 55 503: "Service arrêt", 56 504: "L'échec de l'authentification", 57 505: "Ressources insufficent", 58 507: "Erreur de communication avec Pandora", 59 508: "Exécution de la commande incomplète", 60 509: "La permission a refusé", 61 510: "Exception", 62 511: "Temporisation Réseau", 63 512: "Impossible d'ouvrir la sortie audio", 64 'Bogus': 'Bogosity' 65 }; 66 67 68 69 var MESSAGES = { 70 "ERROR_LOGIN_FAILED": "Procédure de connexion échouée", 71 "ERROR_CONNECTION_FAILED": "Connexion échouée.", 72 "ERROR_LOGIN_BAD_CREDENTIALS": "Mauvaises qualifications d'utilisateur.", 73 "CHECK_PORT_NUMBER": "Vérifiez le numéro de port.", 74 "LOGIN_SESSION_STARTING": "Connexion d'ouverture à %1$s.", 75 "LOGIN_SESSION_ENDED": "Session terminée.", 76 "STATUS_AUTHENTICATION_OK": "Authentication successful.", 77 78 79 "HEADING_ALBUM": "Album", 80 81 "HEADING_ARTIST": "artiste", 82 83 "HEADING_SONG": "Titre", 84 85 "HEADING_GENRE": "Genre", 86 87 "HEADING_TYPE": "Type", 88 89 "HEADING_SEEDTYPE": "Type de graine", 90 91 "HEADING_PLAYLIST": "Liste de reproduction", 92 93 "HEADING_YEAR": "Année", 94 95 "HEADING_DURATION": "Durée", 96 97 "HEADING_ACTION": "Actions", 98 99 100 "Cap_song": "Chanson", 101 "Cap_artist": "Artiste", 102 "Cap_album": "Album", 103 "Cap_playlist": "Playlist", 104 105 106 "lower_song": "chanson", 107 "lower_artist": "artiste", 108 "lower_album": "album", 109 "lower_playlist": "playlist", 110 111 112 113 114 "PROMPT_CONFIRM_DELETE": "Êtes-vous sûr vous voulez-vous effacer %1$s ?", 115 "CONFIRM_DELETE": "%1$s effacé.", 116 "CONFIRM_ADD": "%1$s ajouté.", 117 "CONFIRM_ADDED_TO": "%1$s ajouté à %2$s.", 118 "CONFIRM_CREATE": "%1$s créé.", 119 "CONFIRM_RENAME": "%1$s renamed to %2$s.", 120 121 122 123 "ACTION_TABLE_QUE": "+Liste", 124 "ACTION_TABLE_DEQUE": "✖Deque", 125 "ACTION_TABLE_SKIP": "Saut", 126 "ACTION_TABLE_SEED": "+Graine", 127 "ACTION_TABLE_UNSEED": "✖Retirez la graine", 128 129 130 131 132 "CONFIRM_CLEAR_REQUESTS": "File d'attente de demandes effacée.", 133 "SELECT_PLAYLISTS_NONE": "Aucunes listes de reproduction", 134 "ERROR_NO_USABLE_SOURCES": "Aucunes sources utilisables.", 135 "CONFIRM_RATE_OVERPLAYED": "Estimation de chanson temporairement déclassifiée.", 136 "CONFIRM_ADD_SEED_TYPE_TO": "Graine ajoutée de %1$s à %2$s.", 137 "CONFIRM_DEQUEUED": "Musique demandée annulée.", 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": "Quelques résultats ont été omis :", 146 "ERROR_CHOOSE_PLAYLIST": "Veuillez choisir une liste de reproduction de cible.", 147 "ERROR_NEED_PLAYLIST_NAME": "Veuillez fournir un nom de liste de reproduction.", 148 "CONFIRM_QUEUED": "Demandes alignées.", 149 "ERROR_NEED_SEARCH_QUERY": "Veuillez écrire une requête de recherche.", 150 "MESSAGE_CREATE_WITH_ALL_RESULTS": "tous recherchent des résultats", 151 "MESSAGE_CREATE_APPLIES_TARGET": "s'applique à la source de cible", 152 153 154 155 156 "ERROR_NO_SOURCES": "Veuillez fournir quelques sources.", 157 "ERROR_NEED_SOURCE_SELECTION": "Please choose a source.", 158 "ERROR_NEED_SOURCE_TYPE": "Please choose a source type.", 159 "CONFIRM_SOURCE_ADDED": "La source ajoutée, peut prendre un moment pour être prête.", 160 "CONFIRM_SOURCE_REMOVED": "Source removed.", 161 "CONFIRM_SOURCE_SELECTED": "Source choisie.", 162 163 164 "ADDSOURCE_NULL_PATH": "Veuillez spécifier le chemin/dossier pour la musique.", 165 166 167 168 169 "ACTION_SKIP": "Chanson de saut", 170 171 "TOOLTIP_SKIP": "Sautez la chanson actuelle", 172 173 "ACTION_DEQUEUE": "Dequeue", 174 175 "TOOLTIP_DEQUEUE": "Cancel an upcoming song.", 176 177 "ACTION_RECUE": "Chanson de demande", 178 179 "TOOLTIP_RECUE": "Demandez cette chanson de nouveau.", 180 181 182 "PROMPT_CREATE_PLAYLIST_FROM": "Créez la liste de reproduction de %1$s", 183 "PROMPT_ADD_SEED_FROM": "Ajoutez la graine de %1$s", 184 185 186 187 188 "PROMPT_CONFIRM_DELETE_SEED": "Êtes-vous sûr vous voulez-vous retirer la graine pour %1$s ?", 189 "ERROR_SELECT_PLAYLIST": "Veuillez choisir une liste de reproduction.", 190 191 192 193 194 "HEADING_LISTENERS_ONLINE": "Auditeurs en ligne:", 195 "ERROR_ACTIVITY_DISABLED": "Les messages d'activité sont handicapés.", 196 "ERROR_YELL_NO_MESSAGE": "Aucun message à hurler.", 197 198 199 200 201 "PROMPT_OLD_PASSWORD": "Ancien mot de passe", 202 "PROMPT_NEW_PASSWORD": "Nouveau mot de passe", 203 "PROMPT_PIANOD_PASSWORD": "mot de passe de pianod", 204 "PROMPT_SYSTEM_PASSWORD": "Mot de passe de système", 205 206 207 "PROMPT_CONFIRM_NO_PASSWORD": "Ceci effacera le mot de passe de %1$s ainsi ils peuvent ouvrir une session sans mot de passe. C'est peu sûr. Êtes-vous sûr?", 208 "CONFIRM_USER_UPDATED": "Utilisateur %1$s actualisées.", 209 "CONFIRM_PASSWORD_CHANGE": "Le mot de passe a été mis à jour.", 210 "ERROR_CANNOT_GET_USER_LIST": "Ne peut pas rechercher la liste utilisateurs.", 211 "ERROR_PASSWORDS_UNMATCHED": "Les nouveaux mots de passe ne s'assortissent pas.", 212 "ERROR_SELECT_USER": "Veuillez choisir un utilisateur.", 213 "LABEL_KICK_VISITORS": "Tous les visiteurs", 214 "CONFIRM_KICK": "L'utilisateur %1$s a expulsé.", 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