mirror of
https://github.com/YunoHost-Apps/rocketchat_ynh.git
synced 2024-09-03 20:16:25 +02:00
3142 lines
375 KiB
JavaScript
3142 lines
375 KiB
JavaScript
(function () {
|
|
|
|
/* Imports */
|
|
var _ = Package.underscore._;
|
|
var Meteor = Package.meteor.Meteor;
|
|
var EventEmitter = Package['raix:eventemitter'].EventEmitter;
|
|
var Util = Package['meteorspark:util'].Util;
|
|
var Tracker = Package.tracker.Tracker;
|
|
var Deps = Package.tracker.Deps;
|
|
var HTTP = Package['cfs:http-methods'].HTTP;
|
|
|
|
/* Package-scope variables */
|
|
var globals, TAPi18next, __coffeescriptShare, TAPi18n;
|
|
|
|
(function(){
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// packages/tap_i18n/lib/globals.js //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// The globals object will be accessible to the build plugin, the server and // 1
|
|
// the client // 2
|
|
// 3
|
|
globals = { // 4
|
|
fallback_language: "en", // 5
|
|
langauges_tags_regex: "([a-z]{2})(-[A-Z]{2})?", // 6
|
|
project_translations_domain: "project", // 7
|
|
browser_path: "/tap-i18n", // 8
|
|
debug: false // 9
|
|
}; // 10
|
|
// 11
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}).call(this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(function(){
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// packages/tap_i18n/lib/tap_i18next/tap_i18next-1.7.3.js //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// tap_i18next is a copy of i18next that expose i18next to the global namespace // 1
|
|
// under the name name TAPi18next instead of i18n to (1) avoid interfering with other // 2
|
|
// Meteor packages that might use i18n with different configurations than we do // 3
|
|
// or worse - (2) using a different version of i18next // 4
|
|
// // 5
|
|
// setJqueryExt is disabled by default in TAPi18next // 6
|
|
// sprintf is a default postProcess in TAPi18next // 7
|
|
// // 8
|
|
// TAPi18next is set outside of the singleton builder to make it available in the // 9
|
|
// package level // 10
|
|
// 11
|
|
// i18next, v1.7.3 // 12
|
|
// Copyright (c)2014 Jan Mühlemann (jamuhl). // 13
|
|
// Distributed under MIT license // 14
|
|
// http://i18next.com // 15
|
|
// 16
|
|
// set TAPi18next outseid of the singleton builder to make it available in the package level // 17
|
|
TAPi18next = {}; // 18
|
|
(function() { // 19
|
|
// 20
|
|
// add indexOf to non ECMA-262 standard compliant browsers // 21
|
|
if (!Array.prototype.indexOf) { // 22
|
|
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { // 23
|
|
"use strict"; // 24
|
|
if (this == null) { // 25
|
|
throw new TypeError(); // 26
|
|
} // 27
|
|
var t = Object(this); // 28
|
|
var len = t.length >>> 0; // 29
|
|
if (len === 0) { // 30
|
|
return -1; // 31
|
|
} // 32
|
|
var n = 0; // 33
|
|
if (arguments.length > 0) { // 34
|
|
n = Number(arguments[1]); // 35
|
|
if (n != n) { // shortcut for verifying if it's NaN // 36
|
|
n = 0; // 37
|
|
} else if (n != 0 && n != Infinity && n != -Infinity) { // 38
|
|
n = (n > 0 || -1) * Math.floor(Math.abs(n)); // 39
|
|
} // 40
|
|
} // 41
|
|
if (n >= len) { // 42
|
|
return -1; // 43
|
|
} // 44
|
|
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); // 45
|
|
for (; k < len; k++) { // 46
|
|
if (k in t && t[k] === searchElement) { // 47
|
|
return k; // 48
|
|
} // 49
|
|
} // 50
|
|
return -1; // 51
|
|
} // 52
|
|
} // 53
|
|
// 54
|
|
// add lastIndexOf to non ECMA-262 standard compliant browsers // 55
|
|
if (!Array.prototype.lastIndexOf) { // 56
|
|
Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) { // 57
|
|
"use strict"; // 58
|
|
if (this == null) { // 59
|
|
throw new TypeError(); // 60
|
|
} // 61
|
|
var t = Object(this); // 62
|
|
var len = t.length >>> 0; // 63
|
|
if (len === 0) { // 64
|
|
return -1; // 65
|
|
} // 66
|
|
var n = len; // 67
|
|
if (arguments.length > 1) { // 68
|
|
n = Number(arguments[1]); // 69
|
|
if (n != n) { // 70
|
|
n = 0; // 71
|
|
} else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) { // 72
|
|
n = (n > 0 || -1) * Math.floor(Math.abs(n)); // 73
|
|
} // 74
|
|
} // 75
|
|
var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); // 76
|
|
for (; k >= 0; k--) { // 77
|
|
if (k in t && t[k] === searchElement) { // 78
|
|
return k; // 79
|
|
} // 80
|
|
} // 81
|
|
return -1; // 82
|
|
}; // 83
|
|
} // 84
|
|
// 85
|
|
// Add string trim for IE8. // 86
|
|
if (typeof String.prototype.trim !== 'function') { // 87
|
|
String.prototype.trim = function() { // 88
|
|
return this.replace(/^\s+|\s+$/g, ''); // 89
|
|
} // 90
|
|
} // 91
|
|
// 92
|
|
var root = this // 93
|
|
, $ = root.jQuery || root.Zepto // 94
|
|
, resStore = {} // 95
|
|
, currentLng // 96
|
|
, replacementCounter = 0 // 97
|
|
, languages = [] // 98
|
|
, initialized = false; // 99
|
|
// 100
|
|
// 101
|
|
// Export the i18next object for **CommonJS**. // 102
|
|
// If we're not in CommonJS, add `i18n` to the // 103
|
|
// global object or to jquery. // 104
|
|
if (typeof module !== 'undefined' && module.exports) { // 105
|
|
module.exports = TAPi18next; // 106
|
|
} else { // 107
|
|
if ($) { // 108
|
|
$.TAPi18next = $.TAPi18next || TAPi18next; // 109
|
|
} // 110
|
|
// 111
|
|
root.TAPi18next = root.TAPi18next || TAPi18next; // 112
|
|
} // 113
|
|
// defaults // 114
|
|
var o = { // 115
|
|
lng: undefined, // 116
|
|
load: 'all', // 117
|
|
preload: [], // 118
|
|
lowerCaseLng: false, // 119
|
|
returnObjectTrees: false, // 120
|
|
fallbackLng: ['dev'], // 121
|
|
fallbackNS: [], // 122
|
|
detectLngQS: 'setLng', // 123
|
|
ns: 'translation', // 124
|
|
fallbackOnNull: true, // 125
|
|
fallbackOnEmpty: false, // 126
|
|
fallbackToDefaultNS: false, // 127
|
|
nsseparator: ':', // 128
|
|
keyseparator: '.', // 129
|
|
selectorAttr: 'data-i18n', // 130
|
|
debug: false, // 131
|
|
// 132
|
|
resGetPath: 'locales/__lng__/__ns__.json', // 133
|
|
resPostPath: 'locales/add/__lng__/__ns__', // 134
|
|
// 135
|
|
getAsync: true, // 136
|
|
postAsync: true, // 137
|
|
// 138
|
|
resStore: undefined, // 139
|
|
useLocalStorage: false, // 140
|
|
localStorageExpirationTime: 7*24*60*60*1000, // 141
|
|
// 142
|
|
dynamicLoad: false, // 143
|
|
sendMissing: false, // 144
|
|
sendMissingTo: 'fallback', // current | all // 145
|
|
sendType: 'POST', // 146
|
|
// 147
|
|
interpolationPrefix: '__', // 148
|
|
interpolationSuffix: '__', // 149
|
|
reusePrefix: '$t(', // 150
|
|
reuseSuffix: ')', // 151
|
|
pluralSuffix: '_plural', // 152
|
|
pluralNotFound: ['plural_not_found', Math.random()].join(''), // 153
|
|
contextNotFound: ['context_not_found', Math.random()].join(''), // 154
|
|
escapeInterpolation: false, // 155
|
|
// 156
|
|
setJqueryExt: false, // 157
|
|
defaultValueFromContent: true, // 158
|
|
useDataAttrOptions: false, // 159
|
|
cookieExpirationTime: undefined, // 160
|
|
useCookie: true, // 161
|
|
cookieName: 'TAPi18next', // 162
|
|
cookieDomain: undefined, // 163
|
|
// 164
|
|
objectTreeKeyHandler: undefined, // 165
|
|
postProcess: ["sprintf"], // 166
|
|
parseMissingKey: undefined, // 167
|
|
// 168
|
|
shortcutFunction: 'sprintf' // or: defaultValue // 169
|
|
}; // 170
|
|
function _extend(target, source) { // 171
|
|
if (!source || typeof source === 'function') { // 172
|
|
return target; // 173
|
|
} // 174
|
|
// 175
|
|
for (var attr in source) { target[attr] = source[attr]; } // 176
|
|
return target; // 177
|
|
} // 178
|
|
// 179
|
|
function _each(object, callback, args) { // 180
|
|
var name, i = 0, // 181
|
|
length = object.length, // 182
|
|
isObj = length === undefined || Object.prototype.toString.apply(object) !== '[object Array]' || typeof object === "function";
|
|
// 184
|
|
if (args) { // 185
|
|
if (isObj) { // 186
|
|
for (name in object) { // 187
|
|
if (callback.apply(object[name], args) === false) { // 188
|
|
break; // 189
|
|
} // 190
|
|
} // 191
|
|
} else { // 192
|
|
for ( ; i < length; ) { // 193
|
|
if (callback.apply(object[i++], args) === false) { // 194
|
|
break; // 195
|
|
} // 196
|
|
} // 197
|
|
} // 198
|
|
// 199
|
|
// A special, fast, case for the most common use of each // 200
|
|
} else { // 201
|
|
if (isObj) { // 202
|
|
for (name in object) { // 203
|
|
if (callback.call(object[name], name, object[name]) === false) { // 204
|
|
break; // 205
|
|
} // 206
|
|
} // 207
|
|
} else { // 208
|
|
for ( ; i < length; ) { // 209
|
|
if (callback.call(object[i], i, object[i++]) === false) { // 210
|
|
break; // 211
|
|
} // 212
|
|
} // 213
|
|
} // 214
|
|
} // 215
|
|
// 216
|
|
return object; // 217
|
|
} // 218
|
|
// 219
|
|
var _entityMap = { // 220
|
|
"&": "&", // 221
|
|
"<": "<", // 222
|
|
">": ">", // 223
|
|
'"': '"', // 224
|
|
"'": ''', // 225
|
|
"/": '/' // 226
|
|
}; // 227
|
|
// 228
|
|
function _escape(data) { // 229
|
|
if (typeof data === 'string') { // 230
|
|
return data.replace(/[&<>"'\/]/g, function (s) { // 231
|
|
return _entityMap[s]; // 232
|
|
}); // 233
|
|
}else{ // 234
|
|
return data; // 235
|
|
} // 236
|
|
} // 237
|
|
// 238
|
|
function _ajax(options) { // 239
|
|
// 240
|
|
// v0.5.0 of https://github.com/goloroden/http.js // 241
|
|
var getXhr = function (callback) { // 242
|
|
// Use the native XHR object if the browser supports it. // 243
|
|
if (window.XMLHttpRequest) { // 244
|
|
return callback(null, new XMLHttpRequest()); // 245
|
|
} else if (window.ActiveXObject) { // 246
|
|
// In Internet Explorer check for ActiveX versions of the XHR object. // 247
|
|
try { // 248
|
|
return callback(null, new ActiveXObject("Msxml2.XMLHTTP")); // 249
|
|
} catch (e) { // 250
|
|
return callback(null, new ActiveXObject("Microsoft.XMLHTTP")); // 251
|
|
} // 252
|
|
} // 253
|
|
// 254
|
|
// If no XHR support was found, throw an error. // 255
|
|
return callback(new Error()); // 256
|
|
}; // 257
|
|
// 258
|
|
var encodeUsingUrlEncoding = function (data) { // 259
|
|
if(typeof data === 'string') { // 260
|
|
return data; // 261
|
|
} // 262
|
|
// 263
|
|
var result = []; // 264
|
|
for(var dataItem in data) { // 265
|
|
if(data.hasOwnProperty(dataItem)) { // 266
|
|
result.push(encodeURIComponent(dataItem) + '=' + encodeURIComponent(data[dataItem])); // 267
|
|
} // 268
|
|
} // 269
|
|
// 270
|
|
return result.join('&'); // 271
|
|
}; // 272
|
|
// 273
|
|
var utf8 = function (text) { // 274
|
|
text = text.replace(/\r\n/g, '\n'); // 275
|
|
var result = ''; // 276
|
|
// 277
|
|
for(var i = 0; i < text.length; i++) { // 278
|
|
var c = text.charCodeAt(i); // 279
|
|
// 280
|
|
if(c < 128) { // 281
|
|
result += String.fromCharCode(c); // 282
|
|
} else if((c > 127) && (c < 2048)) { // 283
|
|
result += String.fromCharCode((c >> 6) | 192); // 284
|
|
result += String.fromCharCode((c & 63) | 128); // 285
|
|
} else { // 286
|
|
result += String.fromCharCode((c >> 12) | 224); // 287
|
|
result += String.fromCharCode(((c >> 6) & 63) | 128); // 288
|
|
result += String.fromCharCode((c & 63) | 128); // 289
|
|
} // 290
|
|
} // 291
|
|
// 292
|
|
return result; // 293
|
|
}; // 294
|
|
// 295
|
|
var base64 = function (text) { // 296
|
|
var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; // 297
|
|
// 298
|
|
text = utf8(text); // 299
|
|
var result = '', // 300
|
|
chr1, chr2, chr3, // 301
|
|
enc1, enc2, enc3, enc4, // 302
|
|
i = 0; // 303
|
|
// 304
|
|
do { // 305
|
|
chr1 = text.charCodeAt(i++); // 306
|
|
chr2 = text.charCodeAt(i++); // 307
|
|
chr3 = text.charCodeAt(i++); // 308
|
|
// 309
|
|
enc1 = chr1 >> 2; // 310
|
|
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); // 311
|
|
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); // 312
|
|
enc4 = chr3 & 63; // 313
|
|
// 314
|
|
if(isNaN(chr2)) { // 315
|
|
enc3 = enc4 = 64; // 316
|
|
} else if(isNaN(chr3)) { // 317
|
|
enc4 = 64; // 318
|
|
} // 319
|
|
// 320
|
|
result += // 321
|
|
keyStr.charAt(enc1) + // 322
|
|
keyStr.charAt(enc2) + // 323
|
|
keyStr.charAt(enc3) + // 324
|
|
keyStr.charAt(enc4); // 325
|
|
chr1 = chr2 = chr3 = ''; // 326
|
|
enc1 = enc2 = enc3 = enc4 = ''; // 327
|
|
} while(i < text.length); // 328
|
|
// 329
|
|
return result; // 330
|
|
}; // 331
|
|
// 332
|
|
var mergeHeaders = function () { // 333
|
|
// Use the first header object as base. // 334
|
|
var result = arguments[0]; // 335
|
|
// 336
|
|
// Iterate through the remaining header objects and add them. // 337
|
|
for(var i = 1; i < arguments.length; i++) { // 338
|
|
var currentHeaders = arguments[i]; // 339
|
|
for(var header in currentHeaders) { // 340
|
|
if(currentHeaders.hasOwnProperty(header)) { // 341
|
|
result[header] = currentHeaders[header]; // 342
|
|
} // 343
|
|
} // 344
|
|
} // 345
|
|
// 346
|
|
// Return the merged headers. // 347
|
|
return result; // 348
|
|
}; // 349
|
|
// 350
|
|
var ajax = function (method, url, options, callback) { // 351
|
|
// Adjust parameters. // 352
|
|
if(typeof options === 'function') { // 353
|
|
callback = options; // 354
|
|
options = {}; // 355
|
|
} // 356
|
|
// 357
|
|
// Set default parameter values. // 358
|
|
options.cache = options.cache || false; // 359
|
|
options.data = options.data || {}; // 360
|
|
options.headers = options.headers || {}; // 361
|
|
options.jsonp = options.jsonp || false; // 362
|
|
options.async = options.async === undefined ? true : options.async; // 363
|
|
// 364
|
|
// Merge the various header objects. // 365
|
|
var headers = mergeHeaders({ // 366
|
|
'accept': '*/*', // 367
|
|
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8' // 368
|
|
}, ajax.headers, options.headers); // 369
|
|
// 370
|
|
// Encode the data according to the content-type. // 371
|
|
var payload; // 372
|
|
if (headers['content-type'] === 'application/json') { // 373
|
|
payload = JSON.stringify(options.data); // 374
|
|
} else { // 375
|
|
payload = encodeUsingUrlEncoding(options.data); // 376
|
|
} // 377
|
|
// 378
|
|
// Specially prepare GET requests: Setup the query string, handle caching and make a JSONP call // 379
|
|
// if neccessary. // 380
|
|
if(method === 'GET') { // 381
|
|
// Setup the query string. // 382
|
|
var queryString = []; // 383
|
|
if(payload) { // 384
|
|
queryString.push(payload); // 385
|
|
payload = null; // 386
|
|
} // 387
|
|
// 388
|
|
// Handle caching. // 389
|
|
if(!options.cache) { // 390
|
|
queryString.push('_=' + (new Date()).getTime()); // 391
|
|
} // 392
|
|
// 393
|
|
// If neccessary prepare the query string for a JSONP call. // 394
|
|
if(options.jsonp) { // 395
|
|
queryString.push('callback=' + options.jsonp); // 396
|
|
queryString.push('jsonp=' + options.jsonp); // 397
|
|
} // 398
|
|
// 399
|
|
// Merge the query string and attach it to the url. // 400
|
|
queryString = queryString.join('&'); // 401
|
|
if (queryString.length > 1) { // 402
|
|
if (url.indexOf('?') > -1) { // 403
|
|
url += '&' + queryString; // 404
|
|
} else { // 405
|
|
url += '?' + queryString; // 406
|
|
} // 407
|
|
} // 408
|
|
// 409
|
|
// Make a JSONP call if neccessary. // 410
|
|
if(options.jsonp) { // 411
|
|
var head = document.getElementsByTagName('head')[0]; // 412
|
|
var script = document.createElement('script'); // 413
|
|
script.type = 'text/javascript'; // 414
|
|
script.src = url; // 415
|
|
head.appendChild(script); // 416
|
|
return; // 417
|
|
} // 418
|
|
} // 419
|
|
// 420
|
|
// Since we got here, it is no JSONP request, so make a normal XHR request. // 421
|
|
getXhr(function (err, xhr) { // 422
|
|
if(err) return callback(err); // 423
|
|
// 424
|
|
// Open the request. // 425
|
|
xhr.open(method, url, options.async); // 426
|
|
// 427
|
|
// Set the request headers. // 428
|
|
for(var header in headers) { // 429
|
|
if(headers.hasOwnProperty(header)) { // 430
|
|
xhr.setRequestHeader(header, headers[header]); // 431
|
|
} // 432
|
|
} // 433
|
|
// 434
|
|
// Handle the request events. // 435
|
|
xhr.onreadystatechange = function () { // 436
|
|
if(xhr.readyState === 4) { // 437
|
|
var data = xhr.responseText || ''; // 438
|
|
// 439
|
|
// If no callback is given, return. // 440
|
|
if(!callback) { // 441
|
|
return; // 442
|
|
} // 443
|
|
// 444
|
|
// Return an object that provides access to the data as text and JSON. // 445
|
|
callback(xhr.status, { // 446
|
|
text: function () { // 447
|
|
return data; // 448
|
|
}, // 449
|
|
// 450
|
|
json: function () { // 451
|
|
return JSON.parse(data); // 452
|
|
} // 453
|
|
}); // 454
|
|
} // 455
|
|
}; // 456
|
|
// 457
|
|
// Actually send the XHR request. // 458
|
|
xhr.send(payload); // 459
|
|
}); // 460
|
|
}; // 461
|
|
// 462
|
|
// Define the external interface. // 463
|
|
var http = { // 464
|
|
authBasic: function (username, password) { // 465
|
|
ajax.headers['Authorization'] = 'Basic ' + base64(username + ':' + password); // 466
|
|
}, // 467
|
|
// 468
|
|
connect: function (url, options, callback) { // 469
|
|
return ajax('CONNECT', url, options, callback); // 470
|
|
}, // 471
|
|
// 472
|
|
del: function (url, options, callback) { // 473
|
|
return ajax('DELETE', url, options, callback); // 474
|
|
}, // 475
|
|
// 476
|
|
get: function (url, options, callback) { // 477
|
|
return ajax('GET', url, options, callback); // 478
|
|
}, // 479
|
|
// 480
|
|
head: function (url, options, callback) { // 481
|
|
return ajax('HEAD', url, options, callback); // 482
|
|
}, // 483
|
|
// 484
|
|
headers: function (headers) { // 485
|
|
ajax.headers = headers || {}; // 486
|
|
}, // 487
|
|
// 488
|
|
isAllowed: function (url, verb, callback) { // 489
|
|
this.options(url, function (status, data) { // 490
|
|
callback(data.text().indexOf(verb) !== -1); // 491
|
|
}); // 492
|
|
}, // 493
|
|
// 494
|
|
options: function (url, options, callback) { // 495
|
|
return ajax('OPTIONS', url, options, callback); // 496
|
|
}, // 497
|
|
// 498
|
|
patch: function (url, options, callback) { // 499
|
|
return ajax('PATCH', url, options, callback); // 500
|
|
}, // 501
|
|
// 502
|
|
post: function (url, options, callback) { // 503
|
|
return ajax('POST', url, options, callback); // 504
|
|
}, // 505
|
|
// 506
|
|
put: function (url, options, callback) { // 507
|
|
return ajax('PUT', url, options, callback); // 508
|
|
}, // 509
|
|
// 510
|
|
trace: function (url, options, callback) { // 511
|
|
return ajax('TRACE', url, options, callback); // 512
|
|
} // 513
|
|
}; // 514
|
|
// 515
|
|
// 516
|
|
var methode = options.type ? options.type.toLowerCase() : 'get'; // 517
|
|
// 518
|
|
http[methode](options.url, options, function (status, data) { // 519
|
|
if (status === 200) { // 520
|
|
options.success(data.json(), status, null); // 521
|
|
} else { // 522
|
|
options.error(data.text(), status, null); // 523
|
|
} // 524
|
|
}); // 525
|
|
} // 526
|
|
// 527
|
|
var _cookie = { // 528
|
|
create: function(name,value,minutes,domain) { // 529
|
|
var expires; // 530
|
|
if (minutes) { // 531
|
|
var date = new Date(); // 532
|
|
date.setTime(date.getTime()+(minutes*60*1000)); // 533
|
|
expires = "; expires="+date.toGMTString(); // 534
|
|
} // 535
|
|
else expires = ""; // 536
|
|
domain = (domain)? "domain="+domain+";" : ""; // 537
|
|
document.cookie = name+"="+value+expires+";"+domain+"path=/"; // 538
|
|
}, // 539
|
|
// 540
|
|
read: function(name) { // 541
|
|
var nameEQ = name + "="; // 542
|
|
var ca = document.cookie.split(';'); // 543
|
|
for(var i=0;i < ca.length;i++) { // 544
|
|
var c = ca[i]; // 545
|
|
while (c.charAt(0)==' ') c = c.substring(1,c.length); // 546
|
|
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length); // 547
|
|
} // 548
|
|
return null; // 549
|
|
}, // 550
|
|
// 551
|
|
remove: function(name) { // 552
|
|
this.create(name,"",-1); // 553
|
|
} // 554
|
|
}; // 555
|
|
// 556
|
|
var cookie_noop = { // 557
|
|
create: function(name,value,minutes,domain) {}, // 558
|
|
read: function(name) { return null; }, // 559
|
|
remove: function(name) {} // 560
|
|
}; // 561
|
|
// 562
|
|
// 563
|
|
// 564
|
|
// move dependent functions to a container so that // 565
|
|
// they can be overriden easier in no jquery environment (node.js) // 566
|
|
var f = { // 567
|
|
extend: $ ? $.extend : _extend, // 568
|
|
each: $ ? $.each : _each, // 569
|
|
ajax: $ ? $.ajax : (typeof document !== 'undefined' ? _ajax : function() {}), // 570
|
|
cookie: typeof document !== 'undefined' ? _cookie : cookie_noop, // 571
|
|
detectLanguage: detectLanguage, // 572
|
|
escape: _escape, // 573
|
|
log: function(str) { // 574
|
|
if (o.debug && typeof console !== "undefined") console.log(str); // 575
|
|
}, // 576
|
|
toLanguages: function(lng) { // 577
|
|
var languages = []; // 578
|
|
if (typeof lng === 'string' && lng.indexOf('-') > -1) { // 579
|
|
var parts = lng.split('-'); // 580
|
|
// 581
|
|
lng = o.lowerCaseLng ? // 582
|
|
parts[0].toLowerCase() + '-' + parts[1].toLowerCase() : // 583
|
|
parts[0].toLowerCase() + '-' + parts[1].toUpperCase(); // 584
|
|
// 585
|
|
if (o.load !== 'unspecific') languages.push(lng); // 586
|
|
if (o.load !== 'current') languages.push(parts[0]); // 587
|
|
} else { // 588
|
|
languages.push(lng); // 589
|
|
} // 590
|
|
// 591
|
|
for (var i = 0; i < o.fallbackLng.length; i++) { // 592
|
|
if (languages.indexOf(o.fallbackLng[i]) === -1 && o.fallbackLng[i]) languages.push(o.fallbackLng[i]);
|
|
} // 594
|
|
// 595
|
|
return languages; // 596
|
|
}, // 597
|
|
regexEscape: function(str) { // 598
|
|
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); // 599
|
|
} // 600
|
|
}; // 601
|
|
function init(options, cb) { // 602
|
|
// 603
|
|
if (typeof options === 'function') { // 604
|
|
cb = options; // 605
|
|
options = {}; // 606
|
|
} // 607
|
|
options = options || {}; // 608
|
|
// 609
|
|
// override defaults with passed in options // 610
|
|
f.extend(o, options); // 611
|
|
delete o.fixLng; /* passed in each time */ // 612
|
|
// 613
|
|
// create namespace object if namespace is passed in as string // 614
|
|
if (typeof o.ns == 'string') { // 615
|
|
o.ns = { namespaces: [o.ns], defaultNs: o.ns}; // 616
|
|
} // 617
|
|
// 618
|
|
// fallback namespaces // 619
|
|
if (typeof o.fallbackNS == 'string') { // 620
|
|
o.fallbackNS = [o.fallbackNS]; // 621
|
|
} // 622
|
|
// 623
|
|
// fallback languages // 624
|
|
if (typeof o.fallbackLng == 'string' || typeof o.fallbackLng == 'boolean') { // 625
|
|
o.fallbackLng = [o.fallbackLng]; // 626
|
|
} // 627
|
|
// 628
|
|
// escape prefix/suffix // 629
|
|
o.interpolationPrefixEscaped = f.regexEscape(o.interpolationPrefix); // 630
|
|
o.interpolationSuffixEscaped = f.regexEscape(o.interpolationSuffix); // 631
|
|
// 632
|
|
if (!o.lng) o.lng = f.detectLanguage(); // 633
|
|
if (o.lng) { // 634
|
|
// set cookie with lng set (as detectLanguage will set cookie on need) // 635
|
|
if (o.useCookie) f.cookie.create(o.cookieName, o.lng, o.cookieExpirationTime, o.cookieDomain); // 636
|
|
} else { // 637
|
|
o.lng = o.fallbackLng[0]; // 638
|
|
if (o.useCookie) f.cookie.remove(o.cookieName); // 639
|
|
} // 640
|
|
// 641
|
|
languages = f.toLanguages(o.lng); // 642
|
|
currentLng = languages[0]; // 643
|
|
f.log('currentLng set to: ' + currentLng); // 644
|
|
// 645
|
|
var lngTranslate = translate; // 646
|
|
if (options.fixLng) { // 647
|
|
lngTranslate = function(key, options) { // 648
|
|
options = options || {}; // 649
|
|
options.lng = options.lng || lngTranslate.lng; // 650
|
|
return translate(key, options); // 651
|
|
}; // 652
|
|
lngTranslate.lng = currentLng; // 653
|
|
} // 654
|
|
// 655
|
|
pluralExtensions.setCurrentLng(currentLng); // 656
|
|
// 657
|
|
// add JQuery extensions // 658
|
|
if ($ && o.setJqueryExt) addJqueryFunct(); // 659
|
|
// 660
|
|
// jQuery deferred // 661
|
|
var deferred; // 662
|
|
if ($ && $.Deferred) { // 663
|
|
deferred = $.Deferred(); // 664
|
|
} // 665
|
|
// 666
|
|
// return immidiatly if res are passed in // 667
|
|
if (o.resStore) { // 668
|
|
resStore = o.resStore; // 669
|
|
initialized = true; // 670
|
|
if (cb) cb(lngTranslate); // 671
|
|
if (deferred) deferred.resolve(lngTranslate); // 672
|
|
if (deferred) return deferred.promise(); // 673
|
|
return; // 674
|
|
} // 675
|
|
// 676
|
|
// languages to load // 677
|
|
var lngsToLoad = f.toLanguages(o.lng); // 678
|
|
if (typeof o.preload === 'string') o.preload = [o.preload]; // 679
|
|
for (var i = 0, l = o.preload.length; i < l; i++) { // 680
|
|
var pres = f.toLanguages(o.preload[i]); // 681
|
|
for (var y = 0, len = pres.length; y < len; y++) { // 682
|
|
if (lngsToLoad.indexOf(pres[y]) < 0) { // 683
|
|
lngsToLoad.push(pres[y]); // 684
|
|
} // 685
|
|
} // 686
|
|
} // 687
|
|
// 688
|
|
// else load them // 689
|
|
TAPi18next.sync.load(lngsToLoad, o, function(err, store) { // 690
|
|
resStore = store; // 691
|
|
initialized = true; // 692
|
|
// 693
|
|
if (cb) cb(lngTranslate); // 694
|
|
if (deferred) deferred.resolve(lngTranslate); // 695
|
|
}); // 696
|
|
// 697
|
|
if (deferred) return deferred.promise(); // 698
|
|
} // 699
|
|
function preload(lngs, cb) { // 700
|
|
if (typeof lngs === 'string') lngs = [lngs]; // 701
|
|
for (var i = 0, l = lngs.length; i < l; i++) { // 702
|
|
if (o.preload.indexOf(lngs[i]) < 0) { // 703
|
|
o.preload.push(lngs[i]); // 704
|
|
} // 705
|
|
} // 706
|
|
return init(cb); // 707
|
|
} // 708
|
|
// 709
|
|
function addResourceBundle(lng, ns, resources) { // 710
|
|
if (typeof ns !== 'string') { // 711
|
|
resources = ns; // 712
|
|
ns = o.ns.defaultNs; // 713
|
|
} else if (o.ns.namespaces.indexOf(ns) < 0) { // 714
|
|
o.ns.namespaces.push(ns); // 715
|
|
} // 716
|
|
// 717
|
|
resStore[lng] = resStore[lng] || {}; // 718
|
|
resStore[lng][ns] = resStore[lng][ns] || {}; // 719
|
|
// 720
|
|
f.extend(resStore[lng][ns], resources); // 721
|
|
} // 722
|
|
// 723
|
|
function removeResourceBundle(lng, ns) { // 724
|
|
if (typeof ns !== 'string') { // 725
|
|
ns = o.ns.defaultNs; // 726
|
|
} // 727
|
|
// 728
|
|
resStore[lng] = resStore[lng] || {}; // 729
|
|
resStore[lng][ns] = {}; // 730
|
|
} // 731
|
|
// 732
|
|
function setDefaultNamespace(ns) { // 733
|
|
o.ns.defaultNs = ns; // 734
|
|
} // 735
|
|
// 736
|
|
function loadNamespace(namespace, cb) { // 737
|
|
loadNamespaces([namespace], cb); // 738
|
|
} // 739
|
|
// 740
|
|
function loadNamespaces(namespaces, cb) { // 741
|
|
var opts = { // 742
|
|
dynamicLoad: o.dynamicLoad, // 743
|
|
resGetPath: o.resGetPath, // 744
|
|
getAsync: o.getAsync, // 745
|
|
customLoad: o.customLoad, // 746
|
|
ns: { namespaces: namespaces, defaultNs: ''} /* new namespaces to load */ // 747
|
|
}; // 748
|
|
// 749
|
|
// languages to load // 750
|
|
var lngsToLoad = f.toLanguages(o.lng); // 751
|
|
if (typeof o.preload === 'string') o.preload = [o.preload]; // 752
|
|
for (var i = 0, l = o.preload.length; i < l; i++) { // 753
|
|
var pres = f.toLanguages(o.preload[i]); // 754
|
|
for (var y = 0, len = pres.length; y < len; y++) { // 755
|
|
if (lngsToLoad.indexOf(pres[y]) < 0) { // 756
|
|
lngsToLoad.push(pres[y]); // 757
|
|
} // 758
|
|
} // 759
|
|
} // 760
|
|
// 761
|
|
// check if we have to load // 762
|
|
var lngNeedLoad = []; // 763
|
|
for (var a = 0, lenA = lngsToLoad.length; a < lenA; a++) { // 764
|
|
var needLoad = false; // 765
|
|
var resSet = resStore[lngsToLoad[a]]; // 766
|
|
if (resSet) { // 767
|
|
for (var b = 0, lenB = namespaces.length; b < lenB; b++) { // 768
|
|
if (!resSet[namespaces[b]]) needLoad = true; // 769
|
|
} // 770
|
|
} else { // 771
|
|
needLoad = true; // 772
|
|
} // 773
|
|
// 774
|
|
if (needLoad) lngNeedLoad.push(lngsToLoad[a]); // 775
|
|
} // 776
|
|
// 777
|
|
if (lngNeedLoad.length) { // 778
|
|
TAPi18next.sync._fetch(lngNeedLoad, opts, function(err, store) { // 779
|
|
var todo = namespaces.length * lngNeedLoad.length; // 780
|
|
// 781
|
|
// load each file individual // 782
|
|
f.each(namespaces, function(nsIndex, nsValue) { // 783
|
|
// 784
|
|
// append namespace to namespace array // 785
|
|
if (o.ns.namespaces.indexOf(nsValue) < 0) { // 786
|
|
o.ns.namespaces.push(nsValue); // 787
|
|
} // 788
|
|
// 789
|
|
f.each(lngNeedLoad, function(lngIndex, lngValue) { // 790
|
|
resStore[lngValue] = resStore[lngValue] || {}; // 791
|
|
resStore[lngValue][nsValue] = store[lngValue][nsValue]; // 792
|
|
// 793
|
|
todo--; // wait for all done befor callback // 794
|
|
if (todo === 0 && cb) { // 795
|
|
if (o.useLocalStorage) TAPi18next.sync._storeLocal(resStore); // 796
|
|
cb(); // 797
|
|
} // 798
|
|
}); // 799
|
|
}); // 800
|
|
}); // 801
|
|
} else { // 802
|
|
if (cb) cb(); // 803
|
|
} // 804
|
|
} // 805
|
|
// 806
|
|
function setLng(lng, options, cb) { // 807
|
|
if (typeof options === 'function') { // 808
|
|
cb = options; // 809
|
|
options = {}; // 810
|
|
} else if (!options) { // 811
|
|
options = {}; // 812
|
|
} // 813
|
|
// 814
|
|
options.lng = lng; // 815
|
|
return init(options, cb); // 816
|
|
} // 817
|
|
// 818
|
|
function lng() { // 819
|
|
return currentLng; // 820
|
|
} // 821
|
|
function addJqueryFunct() { // 822
|
|
// $.t shortcut // 823
|
|
$.t = $.t || translate; // 824
|
|
// 825
|
|
function parse(ele, key, options) { // 826
|
|
if (key.length === 0) return; // 827
|
|
// 828
|
|
var attr = 'text'; // 829
|
|
// 830
|
|
if (key.indexOf('[') === 0) { // 831
|
|
var parts = key.split(']'); // 832
|
|
key = parts[1]; // 833
|
|
attr = parts[0].substr(1, parts[0].length-1); // 834
|
|
} // 835
|
|
// 836
|
|
if (key.indexOf(';') === key.length-1) { // 837
|
|
key = key.substr(0, key.length-2); // 838
|
|
} // 839
|
|
// 840
|
|
var optionsToUse; // 841
|
|
if (attr === 'html') { // 842
|
|
optionsToUse = o.defaultValueFromContent ? $.extend({ defaultValue: ele.html() }, options) : options;
|
|
ele.html($.t(key, optionsToUse)); // 844
|
|
} else if (attr === 'text') { // 845
|
|
optionsToUse = o.defaultValueFromContent ? $.extend({ defaultValue: ele.text() }, options) : options;
|
|
ele.text($.t(key, optionsToUse)); // 847
|
|
} else if (attr === 'prepend') { // 848
|
|
optionsToUse = o.defaultValueFromContent ? $.extend({ defaultValue: ele.html() }, options) : options;
|
|
ele.prepend($.t(key, optionsToUse)); // 850
|
|
} else if (attr === 'append') { // 851
|
|
optionsToUse = o.defaultValueFromContent ? $.extend({ defaultValue: ele.html() }, options) : options;
|
|
ele.append($.t(key, optionsToUse)); // 853
|
|
} else if (attr.indexOf("data-") === 0) { // 854
|
|
var dataAttr = attr.substr(("data-").length); // 855
|
|
optionsToUse = o.defaultValueFromContent ? $.extend({ defaultValue: ele.data(dataAttr) }, options) : options;
|
|
var translated = $.t(key, optionsToUse); // 857
|
|
//we change into the data cache // 858
|
|
ele.data(dataAttr, translated); // 859
|
|
//we change into the dom // 860
|
|
ele.attr(attr, translated); // 861
|
|
} else { // 862
|
|
optionsToUse = o.defaultValueFromContent ? $.extend({ defaultValue: ele.attr(attr) }, options) : options;
|
|
ele.attr(attr, $.t(key, optionsToUse)); // 864
|
|
} // 865
|
|
} // 866
|
|
// 867
|
|
function localize(ele, options) { // 868
|
|
var key = ele.attr(o.selectorAttr); // 869
|
|
if (!key && typeof key !== 'undefined' && key !== false) key = ele.text() || ele.val(); // 870
|
|
if (!key) return; // 871
|
|
// 872
|
|
var target = ele // 873
|
|
, targetSelector = ele.data("i18n-target"); // 874
|
|
if (targetSelector) { // 875
|
|
target = ele.find(targetSelector) || ele; // 876
|
|
} // 877
|
|
// 878
|
|
if (!options && o.useDataAttrOptions === true) { // 879
|
|
options = ele.data("i18n-options"); // 880
|
|
} // 881
|
|
options = options || {}; // 882
|
|
// 883
|
|
if (key.indexOf(';') >= 0) { // 884
|
|
var keys = key.split(';'); // 885
|
|
// 886
|
|
$.each(keys, function(m, k) { // 887
|
|
if (k !== '') parse(target, k, options); // 888
|
|
}); // 889
|
|
// 890
|
|
} else { // 891
|
|
parse(target, key, options); // 892
|
|
} // 893
|
|
// 894
|
|
if (o.useDataAttrOptions === true) ele.data("i18n-options", options); // 895
|
|
} // 896
|
|
// 897
|
|
// fn // 898
|
|
$.fn.TAPi18next = function (options) { // 899
|
|
return this.each(function() { // 900
|
|
// localize element itself // 901
|
|
localize($(this), options); // 902
|
|
// 903
|
|
// localize childs // 904
|
|
var elements = $(this).find('[' + o.selectorAttr + ']'); // 905
|
|
elements.each(function() { // 906
|
|
localize($(this), options); // 907
|
|
}); // 908
|
|
}); // 909
|
|
}; // 910
|
|
} // 911
|
|
function applyReplacement(str, replacementHash, nestedKey, options) { // 912
|
|
if (!str) return str; // 913
|
|
// 914
|
|
options = options || replacementHash; // first call uses replacement hash combined with options // 915
|
|
if (str.indexOf(options.interpolationPrefix || o.interpolationPrefix) < 0) return str; // 916
|
|
// 917
|
|
var prefix = options.interpolationPrefix ? f.regexEscape(options.interpolationPrefix) : o.interpolationPrefixEscaped
|
|
, suffix = options.interpolationSuffix ? f.regexEscape(options.interpolationSuffix) : o.interpolationSuffixEscaped
|
|
, unEscapingSuffix = 'HTML'+suffix; // 920
|
|
// 921
|
|
f.each(replacementHash, function(key, value) { // 922
|
|
var nextKey = nestedKey ? nestedKey + o.keyseparator + key : key; // 923
|
|
if (typeof value === 'object' && value !== null) { // 924
|
|
str = applyReplacement(str, value, nextKey, options); // 925
|
|
} else { // 926
|
|
if (options.escapeInterpolation || o.escapeInterpolation) { // 927
|
|
str = str.replace(new RegExp([prefix, nextKey, unEscapingSuffix].join(''), 'g'), value); // 928
|
|
str = str.replace(new RegExp([prefix, nextKey, suffix].join(''), 'g'), f.escape(value)); // 929
|
|
} else { // 930
|
|
str = str.replace(new RegExp([prefix, nextKey, suffix].join(''), 'g'), value); // 931
|
|
} // 932
|
|
// str = options.escapeInterpolation; // 933
|
|
} // 934
|
|
}); // 935
|
|
return str; // 936
|
|
} // 937
|
|
// 938
|
|
// append it to functions // 939
|
|
f.applyReplacement = applyReplacement; // 940
|
|
// 941
|
|
function applyReuse(translated, options) { // 942
|
|
var comma = ','; // 943
|
|
var options_open = '{'; // 944
|
|
var options_close = '}'; // 945
|
|
// 946
|
|
var opts = f.extend({}, options); // 947
|
|
delete opts.postProcess; // 948
|
|
// 949
|
|
while (translated.indexOf(o.reusePrefix) != -1) { // 950
|
|
replacementCounter++; // 951
|
|
if (replacementCounter > o.maxRecursion) { break; } // safety net for too much recursion // 952
|
|
var index_of_opening = translated.lastIndexOf(o.reusePrefix); // 953
|
|
var index_of_end_of_closing = translated.indexOf(o.reuseSuffix, index_of_opening) + o.reuseSuffix.length;
|
|
var token = translated.substring(index_of_opening, index_of_end_of_closing); // 955
|
|
var token_without_symbols = token.replace(o.reusePrefix, '').replace(o.reuseSuffix, ''); // 956
|
|
// 957
|
|
// 958
|
|
if (token_without_symbols.indexOf(comma) != -1) { // 959
|
|
var index_of_token_end_of_closing = token_without_symbols.indexOf(comma); // 960
|
|
if (token_without_symbols.indexOf(options_open, index_of_token_end_of_closing) != -1 && token_without_symbols.indexOf(options_close, index_of_token_end_of_closing) != -1) {
|
|
var index_of_opts_opening = token_without_symbols.indexOf(options_open, index_of_token_end_of_closing);
|
|
var index_of_opts_end_of_closing = token_without_symbols.indexOf(options_close, index_of_opts_opening) + options_close.length;
|
|
try { // 964
|
|
opts = f.extend(opts, JSON.parse(token_without_symbols.substring(index_of_opts_opening, index_of_opts_end_of_closing)));
|
|
token_without_symbols = token_without_symbols.substring(0, index_of_token_end_of_closing); // 966
|
|
} catch (e) { // 967
|
|
} // 968
|
|
} // 969
|
|
} // 970
|
|
// 971
|
|
var translated_token = _translate(token_without_symbols, opts); // 972
|
|
translated = translated.replace(token, translated_token); // 973
|
|
} // 974
|
|
return translated; // 975
|
|
} // 976
|
|
// 977
|
|
function hasContext(options) { // 978
|
|
return (options.context && (typeof options.context == 'string' || typeof options.context == 'number')); // 979
|
|
} // 980
|
|
// 981
|
|
function needsPlural(options) { // 982
|
|
return (options.count !== undefined && typeof options.count != 'string' && options.count !== 1); // 983
|
|
} // 984
|
|
// 985
|
|
function exists(key, options) { // 986
|
|
options = options || {}; // 987
|
|
// 988
|
|
var notFound = _getDefaultValue(key, options) // 989
|
|
, found = _find(key, options); // 990
|
|
// 991
|
|
return found !== undefined || found === notFound; // 992
|
|
} // 993
|
|
// 994
|
|
function translate(key, options) { // 995
|
|
if (typeof options === 'undefined') { // 996
|
|
options = {}; // 997
|
|
} // 998
|
|
// 999
|
|
if (!initialized) { // 1000
|
|
f.log('i18next not finished initialization. you might have called t function before loading resources finished.')
|
|
return options.defaultValue || ''; // 1002
|
|
}; // 1003
|
|
replacementCounter = 0; // 1004
|
|
return _translate.apply(null, arguments); // 1005
|
|
} // 1006
|
|
// 1007
|
|
function _getDefaultValue(key, options) { // 1008
|
|
return (options.defaultValue !== undefined) ? options.defaultValue : key; // 1009
|
|
} // 1010
|
|
// 1011
|
|
function _injectSprintfProcessor() { // 1012
|
|
// 1013
|
|
var values = []; // 1014
|
|
// 1015
|
|
// mh: build array from second argument onwards // 1016
|
|
for (var i = 1; i < arguments.length; i++) { // 1017
|
|
values.push(arguments[i]); // 1018
|
|
} // 1019
|
|
// 1020
|
|
return { // 1021
|
|
postProcess: 'sprintf', // 1022
|
|
sprintf: values // 1023
|
|
}; // 1024
|
|
} // 1025
|
|
// 1026
|
|
function _translate(potentialKeys, options) { // 1027
|
|
if (typeof options !== "undefined" && options !== null && typeof options !== 'object') { // 1028
|
|
if (o.shortcutFunction === 'sprintf') { // 1029
|
|
// mh: gettext like sprintf syntax found, automatically create sprintf processor // 1030
|
|
options = _injectSprintfProcessor.apply(null, arguments); // 1031
|
|
} else if (o.shortcutFunction === 'defaultValue') { // 1032
|
|
options = { // 1033
|
|
defaultValue: options // 1034
|
|
} // 1035
|
|
} // 1036
|
|
} else { // 1037
|
|
options = options || {}; // 1038
|
|
} // 1039
|
|
// 1040
|
|
if (potentialKeys === undefined || potentialKeys === null) return ''; // 1041
|
|
// 1042
|
|
if (typeof potentialKeys == 'string') { // 1043
|
|
potentialKeys = [potentialKeys]; // 1044
|
|
} // 1045
|
|
// 1046
|
|
var key = potentialKeys[0]; // 1047
|
|
// 1048
|
|
if (potentialKeys.length > 1) { // 1049
|
|
for (var i = 0; i < potentialKeys.length; i++) { // 1050
|
|
key = potentialKeys[i]; // 1051
|
|
if (exists(key, options)) { // 1052
|
|
break; // 1053
|
|
} // 1054
|
|
} // 1055
|
|
} // 1056
|
|
// 1057
|
|
var notFound = _getDefaultValue(key, options) // 1058
|
|
, found = _find(key, options) // 1059
|
|
, lngs = options.lng ? f.toLanguages(options.lng) : languages // 1060
|
|
, ns = options.ns || o.ns.defaultNs // 1061
|
|
, parts; // 1062
|
|
// 1063
|
|
// split ns and key // 1064
|
|
if (key.indexOf(o.nsseparator) > -1) { // 1065
|
|
parts = key.split(o.nsseparator); // 1066
|
|
ns = parts[0]; // 1067
|
|
key = parts[1]; // 1068
|
|
} // 1069
|
|
// 1070
|
|
if (found === undefined && o.sendMissing) { // 1071
|
|
if (options.lng) { // 1072
|
|
sync.postMissing(lngs[0], ns, key, notFound, lngs); // 1073
|
|
} else { // 1074
|
|
sync.postMissing(o.lng, ns, key, notFound, lngs); // 1075
|
|
} // 1076
|
|
} // 1077
|
|
// 1078
|
|
var postProcessor = options.postProcess || o.postProcess; // 1079
|
|
if (found !== undefined && postProcessor) { // 1080
|
|
if (postProcessors[postProcessor]) { // 1081
|
|
found = postProcessors[postProcessor](found, key, options); // 1082
|
|
} // 1083
|
|
} // 1084
|
|
// 1085
|
|
// process notFound if function exists // 1086
|
|
var splitNotFound = notFound; // 1087
|
|
if (notFound.indexOf(o.nsseparator) > -1) { // 1088
|
|
parts = notFound.split(o.nsseparator); // 1089
|
|
splitNotFound = parts[1]; // 1090
|
|
} // 1091
|
|
if (splitNotFound === key && o.parseMissingKey) { // 1092
|
|
notFound = o.parseMissingKey(notFound); // 1093
|
|
} // 1094
|
|
// 1095
|
|
if (found === undefined) { // 1096
|
|
notFound = applyReplacement(notFound, options); // 1097
|
|
notFound = applyReuse(notFound, options); // 1098
|
|
// 1099
|
|
if (postProcessor && postProcessors[postProcessor]) { // 1100
|
|
var val = _getDefaultValue(key, options); // 1101
|
|
found = postProcessors[postProcessor](val, key, options); // 1102
|
|
} // 1103
|
|
} // 1104
|
|
// 1105
|
|
return (found !== undefined) ? found : notFound; // 1106
|
|
} // 1107
|
|
// 1108
|
|
function _find(key, options) { // 1109
|
|
options = options || {}; // 1110
|
|
// 1111
|
|
var optionWithoutCount, translated // 1112
|
|
, notFound = _getDefaultValue(key, options) // 1113
|
|
, lngs = languages; // 1114
|
|
// 1115
|
|
if (!resStore) { return notFound; } // no resStore to translate from // 1116
|
|
// 1117
|
|
// CI mode // 1118
|
|
if (lngs[0].toLowerCase() === 'cimode') return notFound; // 1119
|
|
// 1120
|
|
// passed in lng // 1121
|
|
if (options.lng) { // 1122
|
|
lngs = f.toLanguages(options.lng); // 1123
|
|
// 1124
|
|
if (!resStore[lngs[0]]) { // 1125
|
|
var oldAsync = o.getAsync; // 1126
|
|
o.getAsync = false; // 1127
|
|
// 1128
|
|
TAPi18next.sync.load(lngs, o, function(err, store) { // 1129
|
|
f.extend(resStore, store); // 1130
|
|
o.getAsync = oldAsync; // 1131
|
|
}); // 1132
|
|
} // 1133
|
|
} // 1134
|
|
// 1135
|
|
var ns = options.ns || o.ns.defaultNs; // 1136
|
|
if (key.indexOf(o.nsseparator) > -1) { // 1137
|
|
var parts = key.split(o.nsseparator); // 1138
|
|
ns = parts[0]; // 1139
|
|
key = parts[1]; // 1140
|
|
} // 1141
|
|
// 1142
|
|
if (hasContext(options)) { // 1143
|
|
optionWithoutCount = f.extend({}, options); // 1144
|
|
delete optionWithoutCount.context; // 1145
|
|
optionWithoutCount.defaultValue = o.contextNotFound; // 1146
|
|
// 1147
|
|
var contextKey = ns + o.nsseparator + key + '_' + options.context; // 1148
|
|
// 1149
|
|
translated = translate(contextKey, optionWithoutCount); // 1150
|
|
if (translated != o.contextNotFound) { // 1151
|
|
return applyReplacement(translated, { context: options.context }); // apply replacement for context only
|
|
} // else continue translation with original/nonContext key // 1153
|
|
} // 1154
|
|
// 1155
|
|
if (needsPlural(options)) { // 1156
|
|
optionWithoutCount = f.extend({}, options); // 1157
|
|
delete optionWithoutCount.count; // 1158
|
|
optionWithoutCount.defaultValue = o.pluralNotFound; // 1159
|
|
// 1160
|
|
var pluralKey = ns + o.nsseparator + key + o.pluralSuffix; // 1161
|
|
var pluralExtension = pluralExtensions.get(lngs[0], options.count); // 1162
|
|
if (pluralExtension >= 0) { // 1163
|
|
pluralKey = pluralKey + '_' + pluralExtension; // 1164
|
|
} else if (pluralExtension === 1) { // 1165
|
|
pluralKey = ns + o.nsseparator + key; // singular // 1166
|
|
} // 1167
|
|
// 1168
|
|
translated = translate(pluralKey, optionWithoutCount); // 1169
|
|
if (translated != o.pluralNotFound) { // 1170
|
|
return applyReplacement(translated, { // 1171
|
|
count: options.count, // 1172
|
|
interpolationPrefix: options.interpolationPrefix, // 1173
|
|
interpolationSuffix: options.interpolationSuffix // 1174
|
|
}); // apply replacement for count only // 1175
|
|
} // else continue translation with original/singular key // 1176
|
|
} // 1177
|
|
// 1178
|
|
var found; // 1179
|
|
var keys = key.split(o.keyseparator); // 1180
|
|
for (var i = 0, len = lngs.length; i < len; i++ ) { // 1181
|
|
if (found !== undefined) break; // 1182
|
|
// 1183
|
|
var l = lngs[i]; // 1184
|
|
// 1185
|
|
var x = 0; // 1186
|
|
var value = resStore[l] && resStore[l][ns]; // 1187
|
|
while (keys[x]) { // 1188
|
|
value = value && value[keys[x]]; // 1189
|
|
x++; // 1190
|
|
} // 1191
|
|
if (value !== undefined) { // 1192
|
|
var valueType = Object.prototype.toString.apply(value); // 1193
|
|
if (typeof value === 'string') { // 1194
|
|
value = applyReplacement(value, options); // 1195
|
|
value = applyReuse(value, options); // 1196
|
|
} else if (valueType === '[object Array]' && !o.returnObjectTrees && !options.returnObjectTrees) { // 1197
|
|
value = value.join('\n'); // 1198
|
|
value = applyReplacement(value, options); // 1199
|
|
value = applyReuse(value, options); // 1200
|
|
} else if (value === null && o.fallbackOnNull === true) { // 1201
|
|
value = undefined; // 1202
|
|
} else if (value !== null) { // 1203
|
|
if (!o.returnObjectTrees && !options.returnObjectTrees) { // 1204
|
|
if (o.objectTreeKeyHandler && typeof o.objectTreeKeyHandler == 'function') { // 1205
|
|
value = o.objectTreeKeyHandler(key, value, l, ns, options); // 1206
|
|
} else { // 1207
|
|
value = 'key \'' + ns + ':' + key + ' (' + l + ')\' ' + // 1208
|
|
'returned an object instead of string.'; // 1209
|
|
f.log(value); // 1210
|
|
} // 1211
|
|
} else if (valueType !== '[object Number]' && valueType !== '[object Function]' && valueType !== '[object RegExp]') {
|
|
var copy = (valueType === '[object Array]') ? [] : {}; // apply child translation on a copy // 1213
|
|
f.each(value, function(m) { // 1214
|
|
copy[m] = _translate(ns + o.nsseparator + key + o.keyseparator + m, options); // 1215
|
|
}); // 1216
|
|
value = copy; // 1217
|
|
} // 1218
|
|
} // 1219
|
|
// 1220
|
|
if (typeof value === 'string' && value.trim() === '' && o.fallbackOnEmpty === true) // 1221
|
|
value = undefined; // 1222
|
|
// 1223
|
|
found = value; // 1224
|
|
} // 1225
|
|
} // 1226
|
|
// 1227
|
|
if (found === undefined && !options.isFallbackLookup && (o.fallbackToDefaultNS === true || (o.fallbackNS && o.fallbackNS.length > 0))) {
|
|
// set flag for fallback lookup - avoid recursion // 1229
|
|
options.isFallbackLookup = true; // 1230
|
|
// 1231
|
|
if (o.fallbackNS.length) { // 1232
|
|
// 1233
|
|
for (var y = 0, lenY = o.fallbackNS.length; y < lenY; y++) { // 1234
|
|
found = _find(o.fallbackNS[y] + o.nsseparator + key, options); // 1235
|
|
// 1236
|
|
if (found) { // 1237
|
|
/* compare value without namespace */ // 1238
|
|
var foundValue = found.indexOf(o.nsseparator) > -1 ? found.split(o.nsseparator)[1] : found // 1239
|
|
, notFoundValue = notFound.indexOf(o.nsseparator) > -1 ? notFound.split(o.nsseparator)[1] : notFound;
|
|
// 1241
|
|
if (foundValue !== notFoundValue) break; // 1242
|
|
} // 1243
|
|
} // 1244
|
|
} else { // 1245
|
|
found = _find(key, options); // fallback to default NS // 1246
|
|
} // 1247
|
|
} // 1248
|
|
// 1249
|
|
return found; // 1250
|
|
} // 1251
|
|
function detectLanguage() { // 1252
|
|
var detectedLng; // 1253
|
|
// 1254
|
|
// get from qs // 1255
|
|
var qsParm = []; // 1256
|
|
if (typeof window !== 'undefined') { // 1257
|
|
(function() { // 1258
|
|
var query = window.location.search.substring(1); // 1259
|
|
var parms = query.split('&'); // 1260
|
|
for (var i=0; i<parms.length; i++) { // 1261
|
|
var pos = parms[i].indexOf('='); // 1262
|
|
if (pos > 0) { // 1263
|
|
var key = parms[i].substring(0,pos); // 1264
|
|
var val = parms[i].substring(pos+1); // 1265
|
|
qsParm[key] = val; // 1266
|
|
} // 1267
|
|
} // 1268
|
|
})(); // 1269
|
|
if (qsParm[o.detectLngQS]) { // 1270
|
|
detectedLng = qsParm[o.detectLngQS]; // 1271
|
|
} // 1272
|
|
} // 1273
|
|
// 1274
|
|
// get from cookie // 1275
|
|
if (!detectedLng && typeof document !== 'undefined' && o.useCookie ) { // 1276
|
|
var c = f.cookie.read(o.cookieName); // 1277
|
|
if (c) detectedLng = c; // 1278
|
|
} // 1279
|
|
// 1280
|
|
// get from navigator // 1281
|
|
if (!detectedLng && typeof navigator !== 'undefined') { // 1282
|
|
detectedLng = (navigator.language) ? navigator.language : navigator.userLanguage; // 1283
|
|
} // 1284
|
|
// 1285
|
|
return detectedLng; // 1286
|
|
} // 1287
|
|
var sync = { // 1288
|
|
// 1289
|
|
load: function(lngs, options, cb) { // 1290
|
|
if (options.useLocalStorage) { // 1291
|
|
sync._loadLocal(lngs, options, function(err, store) { // 1292
|
|
var missingLngs = []; // 1293
|
|
for (var i = 0, len = lngs.length; i < len; i++) { // 1294
|
|
if (!store[lngs[i]]) missingLngs.push(lngs[i]); // 1295
|
|
} // 1296
|
|
// 1297
|
|
if (missingLngs.length > 0) { // 1298
|
|
sync._fetch(missingLngs, options, function(err, fetched) { // 1299
|
|
f.extend(store, fetched); // 1300
|
|
sync._storeLocal(fetched); // 1301
|
|
// 1302
|
|
cb(null, store); // 1303
|
|
}); // 1304
|
|
} else { // 1305
|
|
cb(null, store); // 1306
|
|
} // 1307
|
|
}); // 1308
|
|
} else { // 1309
|
|
sync._fetch(lngs, options, function(err, store){ // 1310
|
|
cb(null, store); // 1311
|
|
}); // 1312
|
|
} // 1313
|
|
}, // 1314
|
|
// 1315
|
|
_loadLocal: function(lngs, options, cb) { // 1316
|
|
var store = {} // 1317
|
|
, nowMS = new Date().getTime(); // 1318
|
|
// 1319
|
|
if(window.localStorage) { // 1320
|
|
// 1321
|
|
var todo = lngs.length; // 1322
|
|
// 1323
|
|
f.each(lngs, function(key, lng) { // 1324
|
|
var local = window.localStorage.getItem('res_' + lng); // 1325
|
|
// 1326
|
|
if (local) { // 1327
|
|
local = JSON.parse(local); // 1328
|
|
// 1329
|
|
if (local.i18nStamp && local.i18nStamp + options.localStorageExpirationTime > nowMS) { // 1330
|
|
store[lng] = local; // 1331
|
|
} // 1332
|
|
} // 1333
|
|
// 1334
|
|
todo--; // wait for all done befor callback // 1335
|
|
if (todo === 0) cb(null, store); // 1336
|
|
}); // 1337
|
|
} // 1338
|
|
}, // 1339
|
|
// 1340
|
|
_storeLocal: function(store) { // 1341
|
|
if(window.localStorage) { // 1342
|
|
for (var m in store) { // 1343
|
|
store[m].i18nStamp = new Date().getTime(); // 1344
|
|
window.localStorage.setItem('res_' + m, JSON.stringify(store[m])); // 1345
|
|
} // 1346
|
|
} // 1347
|
|
return; // 1348
|
|
}, // 1349
|
|
// 1350
|
|
_fetch: function(lngs, options, cb) { // 1351
|
|
var ns = options.ns // 1352
|
|
, store = {}; // 1353
|
|
// 1354
|
|
if (!options.dynamicLoad) { // 1355
|
|
var todo = ns.namespaces.length * lngs.length // 1356
|
|
, errors; // 1357
|
|
// 1358
|
|
// load each file individual // 1359
|
|
f.each(ns.namespaces, function(nsIndex, nsValue) { // 1360
|
|
f.each(lngs, function(lngIndex, lngValue) { // 1361
|
|
// 1362
|
|
// Call this once our translation has returned. // 1363
|
|
var loadComplete = function(err, data) { // 1364
|
|
if (err) { // 1365
|
|
errors = errors || []; // 1366
|
|
errors.push(err); // 1367
|
|
} // 1368
|
|
store[lngValue] = store[lngValue] || {}; // 1369
|
|
store[lngValue][nsValue] = data; // 1370
|
|
// 1371
|
|
todo--; // wait for all done befor callback // 1372
|
|
if (todo === 0) cb(errors, store); // 1373
|
|
}; // 1374
|
|
// 1375
|
|
if(typeof options.customLoad == 'function'){ // 1376
|
|
// Use the specified custom callback. // 1377
|
|
options.customLoad(lngValue, nsValue, options, loadComplete); // 1378
|
|
} else { // 1379
|
|
//~ // Use our inbuilt sync. // 1380
|
|
sync._fetchOne(lngValue, nsValue, options, loadComplete); // 1381
|
|
} // 1382
|
|
}); // 1383
|
|
}); // 1384
|
|
} else { // 1385
|
|
// Call this once our translation has returned. // 1386
|
|
var loadComplete = function(err, data) { // 1387
|
|
cb(null, data); // 1388
|
|
}; // 1389
|
|
// 1390
|
|
if(typeof options.customLoad == 'function'){ // 1391
|
|
// Use the specified custom callback. // 1392
|
|
options.customLoad(lngs, ns.namespaces, options, loadComplete); // 1393
|
|
} else { // 1394
|
|
var url = applyReplacement(options.resGetPath, { lng: lngs.join('+'), ns: ns.namespaces.join('+') });
|
|
// load all needed stuff once // 1396
|
|
f.ajax({ // 1397
|
|
url: url, // 1398
|
|
success: function(data, status, xhr) { // 1399
|
|
f.log('loaded: ' + url); // 1400
|
|
loadComplete(null, data); // 1401
|
|
}, // 1402
|
|
error : function(xhr, status, error) { // 1403
|
|
f.log('failed loading: ' + url); // 1404
|
|
loadComplete('failed loading resource.json error: ' + error); // 1405
|
|
}, // 1406
|
|
dataType: "json", // 1407
|
|
async : options.getAsync // 1408
|
|
}); // 1409
|
|
} // 1410
|
|
} // 1411
|
|
}, // 1412
|
|
// 1413
|
|
_fetchOne: function(lng, ns, options, done) { // 1414
|
|
var url = applyReplacement(options.resGetPath, { lng: lng, ns: ns }); // 1415
|
|
f.ajax({ // 1416
|
|
url: url, // 1417
|
|
success: function(data, status, xhr) { // 1418
|
|
f.log('loaded: ' + url); // 1419
|
|
done(null, data); // 1420
|
|
}, // 1421
|
|
error : function(xhr, status, error) { // 1422
|
|
if ((status && status == 200) || (xhr && xhr.status && xhr.status == 200)) { // 1423
|
|
// file loaded but invalid json, stop waste time ! // 1424
|
|
f.log('There is a typo in: ' + url); // 1425
|
|
} else if ((status && status == 404) || (xhr && xhr.status && xhr.status == 404)) { // 1426
|
|
f.log('Does not exist: ' + url); // 1427
|
|
} else { // 1428
|
|
var theStatus = status ? status : ((xhr && xhr.status) ? xhr.status : null); // 1429
|
|
f.log(theStatus + ' when loading ' + url); // 1430
|
|
} // 1431
|
|
// 1432
|
|
done(error, {}); // 1433
|
|
}, // 1434
|
|
dataType: "json", // 1435
|
|
async : options.getAsync // 1436
|
|
}); // 1437
|
|
}, // 1438
|
|
// 1439
|
|
postMissing: function(lng, ns, key, defaultValue, lngs) { // 1440
|
|
var payload = {}; // 1441
|
|
payload[key] = defaultValue; // 1442
|
|
// 1443
|
|
var urls = []; // 1444
|
|
// 1445
|
|
if (o.sendMissingTo === 'fallback' && o.fallbackLng[0] !== false) { // 1446
|
|
for (var i = 0; i < o.fallbackLng.length; i++) { // 1447
|
|
urls.push({lng: o.fallbackLng[i], url: applyReplacement(o.resPostPath, { lng: o.fallbackLng[i], ns: ns })});
|
|
} // 1449
|
|
} else if (o.sendMissingTo === 'current' || (o.sendMissingTo === 'fallback' && o.fallbackLng[0] === false) ) {
|
|
urls.push({lng: lng, url: applyReplacement(o.resPostPath, { lng: lng, ns: ns })}); // 1451
|
|
} else if (o.sendMissingTo === 'all') { // 1452
|
|
for (var i = 0, l = lngs.length; i < l; i++) { // 1453
|
|
urls.push({lng: lngs[i], url: applyReplacement(o.resPostPath, { lng: lngs[i], ns: ns })}); // 1454
|
|
} // 1455
|
|
} // 1456
|
|
// 1457
|
|
for (var y = 0, len = urls.length; y < len; y++) { // 1458
|
|
var item = urls[y]; // 1459
|
|
f.ajax({ // 1460
|
|
url: item.url, // 1461
|
|
type: o.sendType, // 1462
|
|
data: payload, // 1463
|
|
success: function(data, status, xhr) { // 1464
|
|
f.log('posted missing key \'' + key + '\' to: ' + item.url); // 1465
|
|
// 1466
|
|
// add key to resStore // 1467
|
|
var keys = key.split('.'); // 1468
|
|
var x = 0; // 1469
|
|
var value = resStore[item.lng][ns]; // 1470
|
|
while (keys[x]) { // 1471
|
|
if (x === keys.length - 1) { // 1472
|
|
value = value[keys[x]] = defaultValue; // 1473
|
|
} else { // 1474
|
|
value = value[keys[x]] = value[keys[x]] || {}; // 1475
|
|
} // 1476
|
|
x++; // 1477
|
|
} // 1478
|
|
}, // 1479
|
|
error : function(xhr, status, error) { // 1480
|
|
f.log('failed posting missing key \'' + key + '\' to: ' + item.url); // 1481
|
|
}, // 1482
|
|
dataType: "json", // 1483
|
|
async : o.postAsync // 1484
|
|
}); // 1485
|
|
} // 1486
|
|
} // 1487
|
|
}; // 1488
|
|
// definition http://translate.sourceforge.net/wiki/l10n/pluralforms // 1489
|
|
var pluralExtensions = { // 1490
|
|
// 1491
|
|
rules: { // 1492
|
|
"ach": { // 1493
|
|
"name": "Acholi", // 1494
|
|
"numbers": [ // 1495
|
|
1, // 1496
|
|
2 // 1497
|
|
], // 1498
|
|
"plurals": function(n) { return Number(n > 1); } // 1499
|
|
}, // 1500
|
|
"af": { // 1501
|
|
"name": "Afrikaans", // 1502
|
|
"numbers": [ // 1503
|
|
1, // 1504
|
|
2 // 1505
|
|
], // 1506
|
|
"plurals": function(n) { return Number(n != 1); } // 1507
|
|
}, // 1508
|
|
"ak": { // 1509
|
|
"name": "Akan", // 1510
|
|
"numbers": [ // 1511
|
|
1, // 1512
|
|
2 // 1513
|
|
], // 1514
|
|
"plurals": function(n) { return Number(n > 1); } // 1515
|
|
}, // 1516
|
|
"am": { // 1517
|
|
"name": "Amharic", // 1518
|
|
"numbers": [ // 1519
|
|
1, // 1520
|
|
2 // 1521
|
|
], // 1522
|
|
"plurals": function(n) { return Number(n > 1); } // 1523
|
|
}, // 1524
|
|
"an": { // 1525
|
|
"name": "Aragonese", // 1526
|
|
"numbers": [ // 1527
|
|
1, // 1528
|
|
2 // 1529
|
|
], // 1530
|
|
"plurals": function(n) { return Number(n != 1); } // 1531
|
|
}, // 1532
|
|
"ar": { // 1533
|
|
"name": "Arabic", // 1534
|
|
"numbers": [ // 1535
|
|
0, // 1536
|
|
1, // 1537
|
|
2, // 1538
|
|
3, // 1539
|
|
11, // 1540
|
|
100 // 1541
|
|
], // 1542
|
|
"plurals": function(n) { return Number(n===0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5); }
|
|
}, // 1544
|
|
"arn": { // 1545
|
|
"name": "Mapudungun", // 1546
|
|
"numbers": [ // 1547
|
|
1, // 1548
|
|
2 // 1549
|
|
], // 1550
|
|
"plurals": function(n) { return Number(n > 1); } // 1551
|
|
}, // 1552
|
|
"ast": { // 1553
|
|
"name": "Asturian", // 1554
|
|
"numbers": [ // 1555
|
|
1, // 1556
|
|
2 // 1557
|
|
], // 1558
|
|
"plurals": function(n) { return Number(n != 1); } // 1559
|
|
}, // 1560
|
|
"ay": { // 1561
|
|
"name": "Aymar\u00e1", // 1562
|
|
"numbers": [ // 1563
|
|
1 // 1564
|
|
], // 1565
|
|
"plurals": function(n) { return 0; } // 1566
|
|
}, // 1567
|
|
"az": { // 1568
|
|
"name": "Azerbaijani", // 1569
|
|
"numbers": [ // 1570
|
|
1, // 1571
|
|
2 // 1572
|
|
], // 1573
|
|
"plurals": function(n) { return Number(n != 1); } // 1574
|
|
}, // 1575
|
|
"be": { // 1576
|
|
"name": "Belarusian", // 1577
|
|
"numbers": [ // 1578
|
|
1, // 1579
|
|
2, // 1580
|
|
5 // 1581
|
|
], // 1582
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 1584
|
|
"bg": { // 1585
|
|
"name": "Bulgarian", // 1586
|
|
"numbers": [ // 1587
|
|
1, // 1588
|
|
2 // 1589
|
|
], // 1590
|
|
"plurals": function(n) { return Number(n != 1); } // 1591
|
|
}, // 1592
|
|
"bn": { // 1593
|
|
"name": "Bengali", // 1594
|
|
"numbers": [ // 1595
|
|
1, // 1596
|
|
2 // 1597
|
|
], // 1598
|
|
"plurals": function(n) { return Number(n != 1); } // 1599
|
|
}, // 1600
|
|
"bo": { // 1601
|
|
"name": "Tibetan", // 1602
|
|
"numbers": [ // 1603
|
|
1 // 1604
|
|
], // 1605
|
|
"plurals": function(n) { return 0; } // 1606
|
|
}, // 1607
|
|
"br": { // 1608
|
|
"name": "Breton", // 1609
|
|
"numbers": [ // 1610
|
|
1, // 1611
|
|
2 // 1612
|
|
], // 1613
|
|
"plurals": function(n) { return Number(n > 1); } // 1614
|
|
}, // 1615
|
|
"bs": { // 1616
|
|
"name": "Bosnian", // 1617
|
|
"numbers": [ // 1618
|
|
1, // 1619
|
|
2, // 1620
|
|
5 // 1621
|
|
], // 1622
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 1624
|
|
"ca": { // 1625
|
|
"name": "Catalan", // 1626
|
|
"numbers": [ // 1627
|
|
1, // 1628
|
|
2 // 1629
|
|
], // 1630
|
|
"plurals": function(n) { return Number(n != 1); } // 1631
|
|
}, // 1632
|
|
"cgg": { // 1633
|
|
"name": "Chiga", // 1634
|
|
"numbers": [ // 1635
|
|
1 // 1636
|
|
], // 1637
|
|
"plurals": function(n) { return 0; } // 1638
|
|
}, // 1639
|
|
"cs": { // 1640
|
|
"name": "Czech", // 1641
|
|
"numbers": [ // 1642
|
|
1, // 1643
|
|
2, // 1644
|
|
5 // 1645
|
|
], // 1646
|
|
"plurals": function(n) { return Number((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2); } // 1647
|
|
}, // 1648
|
|
"csb": { // 1649
|
|
"name": "Kashubian", // 1650
|
|
"numbers": [ // 1651
|
|
1, // 1652
|
|
2, // 1653
|
|
5 // 1654
|
|
], // 1655
|
|
"plurals": function(n) { return Number(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 1657
|
|
"cy": { // 1658
|
|
"name": "Welsh", // 1659
|
|
"numbers": [ // 1660
|
|
1, // 1661
|
|
2, // 1662
|
|
3, // 1663
|
|
8 // 1664
|
|
], // 1665
|
|
"plurals": function(n) { return Number((n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3); } // 1666
|
|
}, // 1667
|
|
"da": { // 1668
|
|
"name": "Danish", // 1669
|
|
"numbers": [ // 1670
|
|
1, // 1671
|
|
2 // 1672
|
|
], // 1673
|
|
"plurals": function(n) { return Number(n != 1); } // 1674
|
|
}, // 1675
|
|
"de": { // 1676
|
|
"name": "German", // 1677
|
|
"numbers": [ // 1678
|
|
1, // 1679
|
|
2 // 1680
|
|
], // 1681
|
|
"plurals": function(n) { return Number(n != 1); } // 1682
|
|
}, // 1683
|
|
"dz": { // 1684
|
|
"name": "Dzongkha", // 1685
|
|
"numbers": [ // 1686
|
|
1 // 1687
|
|
], // 1688
|
|
"plurals": function(n) { return 0; } // 1689
|
|
}, // 1690
|
|
"el": { // 1691
|
|
"name": "Greek", // 1692
|
|
"numbers": [ // 1693
|
|
1, // 1694
|
|
2 // 1695
|
|
], // 1696
|
|
"plurals": function(n) { return Number(n != 1); } // 1697
|
|
}, // 1698
|
|
"en": { // 1699
|
|
"name": "English", // 1700
|
|
"numbers": [ // 1701
|
|
1, // 1702
|
|
2 // 1703
|
|
], // 1704
|
|
"plurals": function(n) { return Number(n != 1); } // 1705
|
|
}, // 1706
|
|
"eo": { // 1707
|
|
"name": "Esperanto", // 1708
|
|
"numbers": [ // 1709
|
|
1, // 1710
|
|
2 // 1711
|
|
], // 1712
|
|
"plurals": function(n) { return Number(n != 1); } // 1713
|
|
}, // 1714
|
|
"es": { // 1715
|
|
"name": "Spanish", // 1716
|
|
"numbers": [ // 1717
|
|
1, // 1718
|
|
2 // 1719
|
|
], // 1720
|
|
"plurals": function(n) { return Number(n != 1); } // 1721
|
|
}, // 1722
|
|
"es_ar": { // 1723
|
|
"name": "Argentinean Spanish", // 1724
|
|
"numbers": [ // 1725
|
|
1, // 1726
|
|
2 // 1727
|
|
], // 1728
|
|
"plurals": function(n) { return Number(n != 1); } // 1729
|
|
}, // 1730
|
|
"et": { // 1731
|
|
"name": "Estonian", // 1732
|
|
"numbers": [ // 1733
|
|
1, // 1734
|
|
2 // 1735
|
|
], // 1736
|
|
"plurals": function(n) { return Number(n != 1); } // 1737
|
|
}, // 1738
|
|
"eu": { // 1739
|
|
"name": "Basque", // 1740
|
|
"numbers": [ // 1741
|
|
1, // 1742
|
|
2 // 1743
|
|
], // 1744
|
|
"plurals": function(n) { return Number(n != 1); } // 1745
|
|
}, // 1746
|
|
"fa": { // 1747
|
|
"name": "Persian", // 1748
|
|
"numbers": [ // 1749
|
|
1 // 1750
|
|
], // 1751
|
|
"plurals": function(n) { return 0; } // 1752
|
|
}, // 1753
|
|
"fi": { // 1754
|
|
"name": "Finnish", // 1755
|
|
"numbers": [ // 1756
|
|
1, // 1757
|
|
2 // 1758
|
|
], // 1759
|
|
"plurals": function(n) { return Number(n != 1); } // 1760
|
|
}, // 1761
|
|
"fil": { // 1762
|
|
"name": "Filipino", // 1763
|
|
"numbers": [ // 1764
|
|
1, // 1765
|
|
2 // 1766
|
|
], // 1767
|
|
"plurals": function(n) { return Number(n > 1); } // 1768
|
|
}, // 1769
|
|
"fo": { // 1770
|
|
"name": "Faroese", // 1771
|
|
"numbers": [ // 1772
|
|
1, // 1773
|
|
2 // 1774
|
|
], // 1775
|
|
"plurals": function(n) { return Number(n != 1); } // 1776
|
|
}, // 1777
|
|
"fr": { // 1778
|
|
"name": "French", // 1779
|
|
"numbers": [ // 1780
|
|
1, // 1781
|
|
2 // 1782
|
|
], // 1783
|
|
"plurals": function(n) { return Number(n > 1); } // 1784
|
|
}, // 1785
|
|
"fur": { // 1786
|
|
"name": "Friulian", // 1787
|
|
"numbers": [ // 1788
|
|
1, // 1789
|
|
2 // 1790
|
|
], // 1791
|
|
"plurals": function(n) { return Number(n != 1); } // 1792
|
|
}, // 1793
|
|
"fy": { // 1794
|
|
"name": "Frisian", // 1795
|
|
"numbers": [ // 1796
|
|
1, // 1797
|
|
2 // 1798
|
|
], // 1799
|
|
"plurals": function(n) { return Number(n != 1); } // 1800
|
|
}, // 1801
|
|
"ga": { // 1802
|
|
"name": "Irish", // 1803
|
|
"numbers": [ // 1804
|
|
1, // 1805
|
|
2, // 1806
|
|
3, // 1807
|
|
7, // 1808
|
|
11 // 1809
|
|
], // 1810
|
|
"plurals": function(n) { return Number(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4) ;} // 1811
|
|
}, // 1812
|
|
"gd": { // 1813
|
|
"name": "Scottish Gaelic", // 1814
|
|
"numbers": [ // 1815
|
|
1, // 1816
|
|
2, // 1817
|
|
3, // 1818
|
|
20 // 1819
|
|
], // 1820
|
|
"plurals": function(n) { return Number((n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3); }
|
|
}, // 1822
|
|
"gl": { // 1823
|
|
"name": "Galician", // 1824
|
|
"numbers": [ // 1825
|
|
1, // 1826
|
|
2 // 1827
|
|
], // 1828
|
|
"plurals": function(n) { return Number(n != 1); } // 1829
|
|
}, // 1830
|
|
"gu": { // 1831
|
|
"name": "Gujarati", // 1832
|
|
"numbers": [ // 1833
|
|
1, // 1834
|
|
2 // 1835
|
|
], // 1836
|
|
"plurals": function(n) { return Number(n != 1); } // 1837
|
|
}, // 1838
|
|
"gun": { // 1839
|
|
"name": "Gun", // 1840
|
|
"numbers": [ // 1841
|
|
1, // 1842
|
|
2 // 1843
|
|
], // 1844
|
|
"plurals": function(n) { return Number(n > 1); } // 1845
|
|
}, // 1846
|
|
"ha": { // 1847
|
|
"name": "Hausa", // 1848
|
|
"numbers": [ // 1849
|
|
1, // 1850
|
|
2 // 1851
|
|
], // 1852
|
|
"plurals": function(n) { return Number(n != 1); } // 1853
|
|
}, // 1854
|
|
"he": { // 1855
|
|
"name": "Hebrew", // 1856
|
|
"numbers": [ // 1857
|
|
1, // 1858
|
|
2 // 1859
|
|
], // 1860
|
|
"plurals": function(n) { return Number(n != 1); } // 1861
|
|
}, // 1862
|
|
"hi": { // 1863
|
|
"name": "Hindi", // 1864
|
|
"numbers": [ // 1865
|
|
1, // 1866
|
|
2 // 1867
|
|
], // 1868
|
|
"plurals": function(n) { return Number(n != 1); } // 1869
|
|
}, // 1870
|
|
"hr": { // 1871
|
|
"name": "Croatian", // 1872
|
|
"numbers": [ // 1873
|
|
1, // 1874
|
|
2, // 1875
|
|
5 // 1876
|
|
], // 1877
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 1879
|
|
"hu": { // 1880
|
|
"name": "Hungarian", // 1881
|
|
"numbers": [ // 1882
|
|
1, // 1883
|
|
2 // 1884
|
|
], // 1885
|
|
"plurals": function(n) { return Number(n != 1); } // 1886
|
|
}, // 1887
|
|
"hy": { // 1888
|
|
"name": "Armenian", // 1889
|
|
"numbers": [ // 1890
|
|
1, // 1891
|
|
2 // 1892
|
|
], // 1893
|
|
"plurals": function(n) { return Number(n != 1); } // 1894
|
|
}, // 1895
|
|
"ia": { // 1896
|
|
"name": "Interlingua", // 1897
|
|
"numbers": [ // 1898
|
|
1, // 1899
|
|
2 // 1900
|
|
], // 1901
|
|
"plurals": function(n) { return Number(n != 1); } // 1902
|
|
}, // 1903
|
|
"id": { // 1904
|
|
"name": "Indonesian", // 1905
|
|
"numbers": [ // 1906
|
|
1 // 1907
|
|
], // 1908
|
|
"plurals": function(n) { return 0; } // 1909
|
|
}, // 1910
|
|
"is": { // 1911
|
|
"name": "Icelandic", // 1912
|
|
"numbers": [ // 1913
|
|
1, // 1914
|
|
2 // 1915
|
|
], // 1916
|
|
"plurals": function(n) { return Number(n%10!=1 || n%100==11); } // 1917
|
|
}, // 1918
|
|
"it": { // 1919
|
|
"name": "Italian", // 1920
|
|
"numbers": [ // 1921
|
|
1, // 1922
|
|
2 // 1923
|
|
], // 1924
|
|
"plurals": function(n) { return Number(n != 1); } // 1925
|
|
}, // 1926
|
|
"ja": { // 1927
|
|
"name": "Japanese", // 1928
|
|
"numbers": [ // 1929
|
|
1 // 1930
|
|
], // 1931
|
|
"plurals": function(n) { return 0; } // 1932
|
|
}, // 1933
|
|
"jbo": { // 1934
|
|
"name": "Lojban", // 1935
|
|
"numbers": [ // 1936
|
|
1 // 1937
|
|
], // 1938
|
|
"plurals": function(n) { return 0; } // 1939
|
|
}, // 1940
|
|
"jv": { // 1941
|
|
"name": "Javanese", // 1942
|
|
"numbers": [ // 1943
|
|
0, // 1944
|
|
1 // 1945
|
|
], // 1946
|
|
"plurals": function(n) { return Number(n !== 0); } // 1947
|
|
}, // 1948
|
|
"ka": { // 1949
|
|
"name": "Georgian", // 1950
|
|
"numbers": [ // 1951
|
|
1 // 1952
|
|
], // 1953
|
|
"plurals": function(n) { return 0; } // 1954
|
|
}, // 1955
|
|
"kk": { // 1956
|
|
"name": "Kazakh", // 1957
|
|
"numbers": [ // 1958
|
|
1 // 1959
|
|
], // 1960
|
|
"plurals": function(n) { return 0; } // 1961
|
|
}, // 1962
|
|
"km": { // 1963
|
|
"name": "Khmer", // 1964
|
|
"numbers": [ // 1965
|
|
1 // 1966
|
|
], // 1967
|
|
"plurals": function(n) { return 0; } // 1968
|
|
}, // 1969
|
|
"kn": { // 1970
|
|
"name": "Kannada", // 1971
|
|
"numbers": [ // 1972
|
|
1, // 1973
|
|
2 // 1974
|
|
], // 1975
|
|
"plurals": function(n) { return Number(n != 1); } // 1976
|
|
}, // 1977
|
|
"ko": { // 1978
|
|
"name": "Korean", // 1979
|
|
"numbers": [ // 1980
|
|
1 // 1981
|
|
], // 1982
|
|
"plurals": function(n) { return 0; } // 1983
|
|
}, // 1984
|
|
"ku": { // 1985
|
|
"name": "Kurdish", // 1986
|
|
"numbers": [ // 1987
|
|
1, // 1988
|
|
2 // 1989
|
|
], // 1990
|
|
"plurals": function(n) { return Number(n != 1); } // 1991
|
|
}, // 1992
|
|
"kw": { // 1993
|
|
"name": "Cornish", // 1994
|
|
"numbers": [ // 1995
|
|
1, // 1996
|
|
2, // 1997
|
|
3, // 1998
|
|
4 // 1999
|
|
], // 2000
|
|
"plurals": function(n) { return Number((n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3); } // 2001
|
|
}, // 2002
|
|
"ky": { // 2003
|
|
"name": "Kyrgyz", // 2004
|
|
"numbers": [ // 2005
|
|
1 // 2006
|
|
], // 2007
|
|
"plurals": function(n) { return 0; } // 2008
|
|
}, // 2009
|
|
"lb": { // 2010
|
|
"name": "Letzeburgesch", // 2011
|
|
"numbers": [ // 2012
|
|
1, // 2013
|
|
2 // 2014
|
|
], // 2015
|
|
"plurals": function(n) { return Number(n != 1); } // 2016
|
|
}, // 2017
|
|
"ln": { // 2018
|
|
"name": "Lingala", // 2019
|
|
"numbers": [ // 2020
|
|
1, // 2021
|
|
2 // 2022
|
|
], // 2023
|
|
"plurals": function(n) { return Number(n > 1); } // 2024
|
|
}, // 2025
|
|
"lo": { // 2026
|
|
"name": "Lao", // 2027
|
|
"numbers": [ // 2028
|
|
1 // 2029
|
|
], // 2030
|
|
"plurals": function(n) { return 0; } // 2031
|
|
}, // 2032
|
|
"lt": { // 2033
|
|
"name": "Lithuanian", // 2034
|
|
"numbers": [ // 2035
|
|
1, // 2036
|
|
2, // 2037
|
|
10 // 2038
|
|
], // 2039
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 2041
|
|
"lv": { // 2042
|
|
"name": "Latvian", // 2043
|
|
"numbers": [ // 2044
|
|
1, // 2045
|
|
2, // 2046
|
|
0 // 2047
|
|
], // 2048
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n !== 0 ? 1 : 2); } // 2049
|
|
}, // 2050
|
|
"mai": { // 2051
|
|
"name": "Maithili", // 2052
|
|
"numbers": [ // 2053
|
|
1, // 2054
|
|
2 // 2055
|
|
], // 2056
|
|
"plurals": function(n) { return Number(n != 1); } // 2057
|
|
}, // 2058
|
|
"mfe": { // 2059
|
|
"name": "Mauritian Creole", // 2060
|
|
"numbers": [ // 2061
|
|
1, // 2062
|
|
2 // 2063
|
|
], // 2064
|
|
"plurals": function(n) { return Number(n > 1); } // 2065
|
|
}, // 2066
|
|
"mg": { // 2067
|
|
"name": "Malagasy", // 2068
|
|
"numbers": [ // 2069
|
|
1, // 2070
|
|
2 // 2071
|
|
], // 2072
|
|
"plurals": function(n) { return Number(n > 1); } // 2073
|
|
}, // 2074
|
|
"mi": { // 2075
|
|
"name": "Maori", // 2076
|
|
"numbers": [ // 2077
|
|
1, // 2078
|
|
2 // 2079
|
|
], // 2080
|
|
"plurals": function(n) { return Number(n > 1); } // 2081
|
|
}, // 2082
|
|
"mk": { // 2083
|
|
"name": "Macedonian", // 2084
|
|
"numbers": [ // 2085
|
|
1, // 2086
|
|
2 // 2087
|
|
], // 2088
|
|
"plurals": function(n) { return Number(n==1 || n%10==1 ? 0 : 1); } // 2089
|
|
}, // 2090
|
|
"ml": { // 2091
|
|
"name": "Malayalam", // 2092
|
|
"numbers": [ // 2093
|
|
1, // 2094
|
|
2 // 2095
|
|
], // 2096
|
|
"plurals": function(n) { return Number(n != 1); } // 2097
|
|
}, // 2098
|
|
"mn": { // 2099
|
|
"name": "Mongolian", // 2100
|
|
"numbers": [ // 2101
|
|
1, // 2102
|
|
2 // 2103
|
|
], // 2104
|
|
"plurals": function(n) { return Number(n != 1); } // 2105
|
|
}, // 2106
|
|
"mnk": { // 2107
|
|
"name": "Mandinka", // 2108
|
|
"numbers": [ // 2109
|
|
0, // 2110
|
|
1, // 2111
|
|
2 // 2112
|
|
], // 2113
|
|
"plurals": function(n) { return Number(n == 0 ? 0 : n==1 ? 1 : 2); } // 2114
|
|
}, // 2115
|
|
"mr": { // 2116
|
|
"name": "Marathi", // 2117
|
|
"numbers": [ // 2118
|
|
1, // 2119
|
|
2 // 2120
|
|
], // 2121
|
|
"plurals": function(n) { return Number(n != 1); } // 2122
|
|
}, // 2123
|
|
"ms": { // 2124
|
|
"name": "Malay", // 2125
|
|
"numbers": [ // 2126
|
|
1 // 2127
|
|
], // 2128
|
|
"plurals": function(n) { return 0; } // 2129
|
|
}, // 2130
|
|
"mt": { // 2131
|
|
"name": "Maltese", // 2132
|
|
"numbers": [ // 2133
|
|
1, // 2134
|
|
2, // 2135
|
|
11, // 2136
|
|
20 // 2137
|
|
], // 2138
|
|
"plurals": function(n) { return Number(n==1 ? 0 : n===0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3); }
|
|
}, // 2140
|
|
"nah": { // 2141
|
|
"name": "Nahuatl", // 2142
|
|
"numbers": [ // 2143
|
|
1, // 2144
|
|
2 // 2145
|
|
], // 2146
|
|
"plurals": function(n) { return Number(n != 1); } // 2147
|
|
}, // 2148
|
|
"nap": { // 2149
|
|
"name": "Neapolitan", // 2150
|
|
"numbers": [ // 2151
|
|
1, // 2152
|
|
2 // 2153
|
|
], // 2154
|
|
"plurals": function(n) { return Number(n != 1); } // 2155
|
|
}, // 2156
|
|
"nb": { // 2157
|
|
"name": "Norwegian Bokmal", // 2158
|
|
"numbers": [ // 2159
|
|
1, // 2160
|
|
2 // 2161
|
|
], // 2162
|
|
"plurals": function(n) { return Number(n != 1); } // 2163
|
|
}, // 2164
|
|
"ne": { // 2165
|
|
"name": "Nepali", // 2166
|
|
"numbers": [ // 2167
|
|
1, // 2168
|
|
2 // 2169
|
|
], // 2170
|
|
"plurals": function(n) { return Number(n != 1); } // 2171
|
|
}, // 2172
|
|
"nl": { // 2173
|
|
"name": "Dutch", // 2174
|
|
"numbers": [ // 2175
|
|
1, // 2176
|
|
2 // 2177
|
|
], // 2178
|
|
"plurals": function(n) { return Number(n != 1); } // 2179
|
|
}, // 2180
|
|
"nn": { // 2181
|
|
"name": "Norwegian Nynorsk", // 2182
|
|
"numbers": [ // 2183
|
|
1, // 2184
|
|
2 // 2185
|
|
], // 2186
|
|
"plurals": function(n) { return Number(n != 1); } // 2187
|
|
}, // 2188
|
|
"no": { // 2189
|
|
"name": "Norwegian", // 2190
|
|
"numbers": [ // 2191
|
|
1, // 2192
|
|
2 // 2193
|
|
], // 2194
|
|
"plurals": function(n) { return Number(n != 1); } // 2195
|
|
}, // 2196
|
|
"nso": { // 2197
|
|
"name": "Northern Sotho", // 2198
|
|
"numbers": [ // 2199
|
|
1, // 2200
|
|
2 // 2201
|
|
], // 2202
|
|
"plurals": function(n) { return Number(n != 1); } // 2203
|
|
}, // 2204
|
|
"oc": { // 2205
|
|
"name": "Occitan", // 2206
|
|
"numbers": [ // 2207
|
|
1, // 2208
|
|
2 // 2209
|
|
], // 2210
|
|
"plurals": function(n) { return Number(n > 1); } // 2211
|
|
}, // 2212
|
|
"or": { // 2213
|
|
"name": "Oriya", // 2214
|
|
"numbers": [ // 2215
|
|
2, // 2216
|
|
1 // 2217
|
|
], // 2218
|
|
"plurals": function(n) { return Number(n != 1); } // 2219
|
|
}, // 2220
|
|
"pa": { // 2221
|
|
"name": "Punjabi", // 2222
|
|
"numbers": [ // 2223
|
|
1, // 2224
|
|
2 // 2225
|
|
], // 2226
|
|
"plurals": function(n) { return Number(n != 1); } // 2227
|
|
}, // 2228
|
|
"pap": { // 2229
|
|
"name": "Papiamento", // 2230
|
|
"numbers": [ // 2231
|
|
1, // 2232
|
|
2 // 2233
|
|
], // 2234
|
|
"plurals": function(n) { return Number(n != 1); } // 2235
|
|
}, // 2236
|
|
"pl": { // 2237
|
|
"name": "Polish", // 2238
|
|
"numbers": [ // 2239
|
|
1, // 2240
|
|
2, // 2241
|
|
5 // 2242
|
|
], // 2243
|
|
"plurals": function(n) { return Number(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 2245
|
|
"pms": { // 2246
|
|
"name": "Piemontese", // 2247
|
|
"numbers": [ // 2248
|
|
1, // 2249
|
|
2 // 2250
|
|
], // 2251
|
|
"plurals": function(n) { return Number(n != 1); } // 2252
|
|
}, // 2253
|
|
"ps": { // 2254
|
|
"name": "Pashto", // 2255
|
|
"numbers": [ // 2256
|
|
1, // 2257
|
|
2 // 2258
|
|
], // 2259
|
|
"plurals": function(n) { return Number(n != 1); } // 2260
|
|
}, // 2261
|
|
"pt": { // 2262
|
|
"name": "Portuguese", // 2263
|
|
"numbers": [ // 2264
|
|
1, // 2265
|
|
2 // 2266
|
|
], // 2267
|
|
"plurals": function(n) { return Number(n != 1); } // 2268
|
|
}, // 2269
|
|
"pt_br": { // 2270
|
|
"name": "Brazilian Portuguese", // 2271
|
|
"numbers": [ // 2272
|
|
1, // 2273
|
|
2 // 2274
|
|
], // 2275
|
|
"plurals": function(n) { return Number(n != 1); } // 2276
|
|
}, // 2277
|
|
"rm": { // 2278
|
|
"name": "Romansh", // 2279
|
|
"numbers": [ // 2280
|
|
1, // 2281
|
|
2 // 2282
|
|
], // 2283
|
|
"plurals": function(n) { return Number(n != 1); } // 2284
|
|
}, // 2285
|
|
"ro": { // 2286
|
|
"name": "Romanian", // 2287
|
|
"numbers": [ // 2288
|
|
1, // 2289
|
|
2, // 2290
|
|
20 // 2291
|
|
], // 2292
|
|
"plurals": function(n) { return Number(n==1 ? 0 : (n===0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2); } // 2293
|
|
}, // 2294
|
|
"ru": { // 2295
|
|
"name": "Russian", // 2296
|
|
"numbers": [ // 2297
|
|
1, // 2298
|
|
2, // 2299
|
|
5 // 2300
|
|
], // 2301
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 2303
|
|
"sah": { // 2304
|
|
"name": "Yakut", // 2305
|
|
"numbers": [ // 2306
|
|
1 // 2307
|
|
], // 2308
|
|
"plurals": function(n) { return 0; } // 2309
|
|
}, // 2310
|
|
"sco": { // 2311
|
|
"name": "Scots", // 2312
|
|
"numbers": [ // 2313
|
|
1, // 2314
|
|
2 // 2315
|
|
], // 2316
|
|
"plurals": function(n) { return Number(n != 1); } // 2317
|
|
}, // 2318
|
|
"se": { // 2319
|
|
"name": "Northern Sami", // 2320
|
|
"numbers": [ // 2321
|
|
1, // 2322
|
|
2 // 2323
|
|
], // 2324
|
|
"plurals": function(n) { return Number(n != 1); } // 2325
|
|
}, // 2326
|
|
"si": { // 2327
|
|
"name": "Sinhala", // 2328
|
|
"numbers": [ // 2329
|
|
1, // 2330
|
|
2 // 2331
|
|
], // 2332
|
|
"plurals": function(n) { return Number(n != 1); } // 2333
|
|
}, // 2334
|
|
"sk": { // 2335
|
|
"name": "Slovak", // 2336
|
|
"numbers": [ // 2337
|
|
1, // 2338
|
|
2, // 2339
|
|
5 // 2340
|
|
], // 2341
|
|
"plurals": function(n) { return Number((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2); } // 2342
|
|
}, // 2343
|
|
"sl": { // 2344
|
|
"name": "Slovenian", // 2345
|
|
"numbers": [ // 2346
|
|
5, // 2347
|
|
1, // 2348
|
|
2, // 2349
|
|
3 // 2350
|
|
], // 2351
|
|
"plurals": function(n) { return Number(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0); }
|
|
}, // 2353
|
|
"so": { // 2354
|
|
"name": "Somali", // 2355
|
|
"numbers": [ // 2356
|
|
1, // 2357
|
|
2 // 2358
|
|
], // 2359
|
|
"plurals": function(n) { return Number(n != 1); } // 2360
|
|
}, // 2361
|
|
"son": { // 2362
|
|
"name": "Songhay", // 2363
|
|
"numbers": [ // 2364
|
|
1, // 2365
|
|
2 // 2366
|
|
], // 2367
|
|
"plurals": function(n) { return Number(n != 1); } // 2368
|
|
}, // 2369
|
|
"sq": { // 2370
|
|
"name": "Albanian", // 2371
|
|
"numbers": [ // 2372
|
|
1, // 2373
|
|
2 // 2374
|
|
], // 2375
|
|
"plurals": function(n) { return Number(n != 1); } // 2376
|
|
}, // 2377
|
|
"sr": { // 2378
|
|
"name": "Serbian", // 2379
|
|
"numbers": [ // 2380
|
|
1, // 2381
|
|
2, // 2382
|
|
5 // 2383
|
|
], // 2384
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 2386
|
|
"su": { // 2387
|
|
"name": "Sundanese", // 2388
|
|
"numbers": [ // 2389
|
|
1 // 2390
|
|
], // 2391
|
|
"plurals": function(n) { return 0; } // 2392
|
|
}, // 2393
|
|
"sv": { // 2394
|
|
"name": "Swedish", // 2395
|
|
"numbers": [ // 2396
|
|
1, // 2397
|
|
2 // 2398
|
|
], // 2399
|
|
"plurals": function(n) { return Number(n != 1); } // 2400
|
|
}, // 2401
|
|
"sw": { // 2402
|
|
"name": "Swahili", // 2403
|
|
"numbers": [ // 2404
|
|
1, // 2405
|
|
2 // 2406
|
|
], // 2407
|
|
"plurals": function(n) { return Number(n != 1); } // 2408
|
|
}, // 2409
|
|
"ta": { // 2410
|
|
"name": "Tamil", // 2411
|
|
"numbers": [ // 2412
|
|
1, // 2413
|
|
2 // 2414
|
|
], // 2415
|
|
"plurals": function(n) { return Number(n != 1); } // 2416
|
|
}, // 2417
|
|
"te": { // 2418
|
|
"name": "Telugu", // 2419
|
|
"numbers": [ // 2420
|
|
1, // 2421
|
|
2 // 2422
|
|
], // 2423
|
|
"plurals": function(n) { return Number(n != 1); } // 2424
|
|
}, // 2425
|
|
"tg": { // 2426
|
|
"name": "Tajik", // 2427
|
|
"numbers": [ // 2428
|
|
1, // 2429
|
|
2 // 2430
|
|
], // 2431
|
|
"plurals": function(n) { return Number(n > 1); } // 2432
|
|
}, // 2433
|
|
"th": { // 2434
|
|
"name": "Thai", // 2435
|
|
"numbers": [ // 2436
|
|
1 // 2437
|
|
], // 2438
|
|
"plurals": function(n) { return 0; } // 2439
|
|
}, // 2440
|
|
"ti": { // 2441
|
|
"name": "Tigrinya", // 2442
|
|
"numbers": [ // 2443
|
|
1, // 2444
|
|
2 // 2445
|
|
], // 2446
|
|
"plurals": function(n) { return Number(n > 1); } // 2447
|
|
}, // 2448
|
|
"tk": { // 2449
|
|
"name": "Turkmen", // 2450
|
|
"numbers": [ // 2451
|
|
1, // 2452
|
|
2 // 2453
|
|
], // 2454
|
|
"plurals": function(n) { return Number(n != 1); } // 2455
|
|
}, // 2456
|
|
"tr": { // 2457
|
|
"name": "Turkish", // 2458
|
|
"numbers": [ // 2459
|
|
1, // 2460
|
|
2 // 2461
|
|
], // 2462
|
|
"plurals": function(n) { return Number(n > 1); } // 2463
|
|
}, // 2464
|
|
"tt": { // 2465
|
|
"name": "Tatar", // 2466
|
|
"numbers": [ // 2467
|
|
1 // 2468
|
|
], // 2469
|
|
"plurals": function(n) { return 0; } // 2470
|
|
}, // 2471
|
|
"ug": { // 2472
|
|
"name": "Uyghur", // 2473
|
|
"numbers": [ // 2474
|
|
1 // 2475
|
|
], // 2476
|
|
"plurals": function(n) { return 0; } // 2477
|
|
}, // 2478
|
|
"uk": { // 2479
|
|
"name": "Ukrainian", // 2480
|
|
"numbers": [ // 2481
|
|
1, // 2482
|
|
2, // 2483
|
|
5 // 2484
|
|
], // 2485
|
|
"plurals": function(n) { return Number(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); }
|
|
}, // 2487
|
|
"ur": { // 2488
|
|
"name": "Urdu", // 2489
|
|
"numbers": [ // 2490
|
|
1, // 2491
|
|
2 // 2492
|
|
], // 2493
|
|
"plurals": function(n) { return Number(n != 1); } // 2494
|
|
}, // 2495
|
|
"uz": { // 2496
|
|
"name": "Uzbek", // 2497
|
|
"numbers": [ // 2498
|
|
1, // 2499
|
|
2 // 2500
|
|
], // 2501
|
|
"plurals": function(n) { return Number(n > 1); } // 2502
|
|
}, // 2503
|
|
"vi": { // 2504
|
|
"name": "Vietnamese", // 2505
|
|
"numbers": [ // 2506
|
|
1 // 2507
|
|
], // 2508
|
|
"plurals": function(n) { return 0; } // 2509
|
|
}, // 2510
|
|
"wa": { // 2511
|
|
"name": "Walloon", // 2512
|
|
"numbers": [ // 2513
|
|
1, // 2514
|
|
2 // 2515
|
|
], // 2516
|
|
"plurals": function(n) { return Number(n > 1); } // 2517
|
|
}, // 2518
|
|
"wo": { // 2519
|
|
"name": "Wolof", // 2520
|
|
"numbers": [ // 2521
|
|
1 // 2522
|
|
], // 2523
|
|
"plurals": function(n) { return 0; } // 2524
|
|
}, // 2525
|
|
"yo": { // 2526
|
|
"name": "Yoruba", // 2527
|
|
"numbers": [ // 2528
|
|
1, // 2529
|
|
2 // 2530
|
|
], // 2531
|
|
"plurals": function(n) { return Number(n != 1); } // 2532
|
|
}, // 2533
|
|
"zh": { // 2534
|
|
"name": "Chinese", // 2535
|
|
"numbers": [ // 2536
|
|
1 // 2537
|
|
], // 2538
|
|
"plurals": function(n) { return 0; } // 2539
|
|
} // 2540
|
|
}, // 2541
|
|
// 2542
|
|
// for demonstration only sl and ar is added but you can add your own pluralExtensions // 2543
|
|
addRule: function(lng, obj) { // 2544
|
|
pluralExtensions.rules[lng] = obj; // 2545
|
|
}, // 2546
|
|
// 2547
|
|
setCurrentLng: function(lng) { // 2548
|
|
if (!pluralExtensions.currentRule || pluralExtensions.currentRule.lng !== lng) { // 2549
|
|
var parts = lng.split('-'); // 2550
|
|
// 2551
|
|
pluralExtensions.currentRule = { // 2552
|
|
lng: lng, // 2553
|
|
rule: pluralExtensions.rules[parts[0]] // 2554
|
|
}; // 2555
|
|
} // 2556
|
|
}, // 2557
|
|
// 2558
|
|
get: function(lng, count) { // 2559
|
|
var parts = lng.split('-'); // 2560
|
|
// 2561
|
|
function getResult(l, c) { // 2562
|
|
var ext; // 2563
|
|
if (pluralExtensions.currentRule && pluralExtensions.currentRule.lng === lng) { // 2564
|
|
ext = pluralExtensions.currentRule.rule; // 2565
|
|
} else { // 2566
|
|
ext = pluralExtensions.rules[l]; // 2567
|
|
} // 2568
|
|
if (ext) { // 2569
|
|
var i = ext.plurals(c); // 2570
|
|
var number = ext.numbers[i]; // 2571
|
|
if (ext.numbers.length === 2 && ext.numbers[0] === 1) { // 2572
|
|
if (number === 2) { // 2573
|
|
number = -1; // regular plural // 2574
|
|
} else if (number === 1) { // 2575
|
|
number = 1; // singular // 2576
|
|
} // 2577
|
|
}//console.log(count + '-' + number); // 2578
|
|
return number; // 2579
|
|
} else { // 2580
|
|
return c === 1 ? '1' : '-1'; // 2581
|
|
} // 2582
|
|
} // 2583
|
|
// 2584
|
|
return getResult(parts[0], count); // 2585
|
|
} // 2586
|
|
// 2587
|
|
}; // 2588
|
|
var postProcessors = {}; // 2589
|
|
var addPostProcessor = function(name, fc) { // 2590
|
|
postProcessors[name] = fc; // 2591
|
|
}; // 2592
|
|
// sprintf support // 2593
|
|
var sprintf = (function() { // 2594
|
|
function get_type(variable) { // 2595
|
|
return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase(); // 2596
|
|
} // 2597
|
|
function str_repeat(input, multiplier) { // 2598
|
|
for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */} // 2599
|
|
return output.join(''); // 2600
|
|
} // 2601
|
|
// 2602
|
|
var str_format = function() { // 2603
|
|
if (!str_format.cache.hasOwnProperty(arguments[0])) { // 2604
|
|
str_format.cache[arguments[0]] = str_format.parse(arguments[0]); // 2605
|
|
} // 2606
|
|
return str_format.format.call(null, str_format.cache[arguments[0]], arguments); // 2607
|
|
}; // 2608
|
|
// 2609
|
|
str_format.format = function(parse_tree, argv) { // 2610
|
|
var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
|
|
for (i = 0; i < tree_length; i++) { // 2612
|
|
node_type = get_type(parse_tree[i]); // 2613
|
|
if (node_type === 'string') { // 2614
|
|
output.push(parse_tree[i]); // 2615
|
|
} // 2616
|
|
else if (node_type === 'array') { // 2617
|
|
match = parse_tree[i]; // convenience purposes only // 2618
|
|
if (match[2]) { // keyword argument // 2619
|
|
arg = argv[cursor]; // 2620
|
|
for (k = 0; k < match[2].length; k++) { // 2621
|
|
if (!arg.hasOwnProperty(match[2][k])) { // 2622
|
|
throw(sprintf('[sprintf] property "%s" does not exist', match[2][k])); // 2623
|
|
} // 2624
|
|
arg = arg[match[2][k]]; // 2625
|
|
} // 2626
|
|
} // 2627
|
|
else if (match[1]) { // positional argument (explicit) // 2628
|
|
arg = argv[match[1]]; // 2629
|
|
} // 2630
|
|
else { // positional argument (implicit) // 2631
|
|
arg = argv[cursor++]; // 2632
|
|
} // 2633
|
|
// 2634
|
|
if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) { // 2635
|
|
throw(sprintf('[sprintf] expecting number but found %s', get_type(arg))); // 2636
|
|
} // 2637
|
|
switch (match[8]) { // 2638
|
|
case 'b': arg = arg.toString(2); break; // 2639
|
|
case 'c': arg = String.fromCharCode(arg); break; // 2640
|
|
case 'd': arg = parseInt(arg, 10); break; // 2641
|
|
case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break; // 2642
|
|
case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break; // 2643
|
|
case 'o': arg = arg.toString(8); break; // 2644
|
|
case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break; // 2645
|
|
case 'u': arg = Math.abs(arg); break; // 2646
|
|
case 'x': arg = arg.toString(16); break; // 2647
|
|
case 'X': arg = arg.toString(16).toUpperCase(); break; // 2648
|
|
} // 2649
|
|
arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg); // 2650
|
|
pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' '; // 2651
|
|
pad_length = match[6] - String(arg).length; // 2652
|
|
pad = match[6] ? str_repeat(pad_character, pad_length) : ''; // 2653
|
|
output.push(match[5] ? arg + pad : pad + arg); // 2654
|
|
} // 2655
|
|
} // 2656
|
|
return output.join(''); // 2657
|
|
}; // 2658
|
|
// 2659
|
|
str_format.cache = {}; // 2660
|
|
// 2661
|
|
str_format.parse = function(fmt) { // 2662
|
|
var _fmt = fmt, match = [], parse_tree = [], arg_names = 0; // 2663
|
|
while (_fmt) { // 2664
|
|
if ((match = /^[^\x25]+/.exec(_fmt)) !== null) { // 2665
|
|
parse_tree.push(match[0]); // 2666
|
|
} // 2667
|
|
else if ((match = /^\x25{2}/.exec(_fmt)) !== null) { // 2668
|
|
parse_tree.push('%'); // 2669
|
|
} // 2670
|
|
else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
|
|
if (match[2]) { // 2672
|
|
arg_names |= 1; // 2673
|
|
var field_list = [], replacement_field = match[2], field_match = []; // 2674
|
|
if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { // 2675
|
|
field_list.push(field_match[1]); // 2676
|
|
while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
|
|
if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) { // 2678
|
|
field_list.push(field_match[1]); // 2679
|
|
} // 2680
|
|
else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) { // 2681
|
|
field_list.push(field_match[1]); // 2682
|
|
} // 2683
|
|
else { // 2684
|
|
throw('[sprintf] huh?'); // 2685
|
|
} // 2686
|
|
} // 2687
|
|
} // 2688
|
|
else { // 2689
|
|
throw('[sprintf] huh?'); // 2690
|
|
} // 2691
|
|
match[2] = field_list; // 2692
|
|
} // 2693
|
|
else { // 2694
|
|
arg_names |= 2; // 2695
|
|
} // 2696
|
|
if (arg_names === 3) { // 2697
|
|
throw('[sprintf] mixing positional and named placeholders is not (yet) supported'); // 2698
|
|
} // 2699
|
|
parse_tree.push(match); // 2700
|
|
} // 2701
|
|
else { // 2702
|
|
throw('[sprintf] huh?'); // 2703
|
|
} // 2704
|
|
_fmt = _fmt.substring(match[0].length); // 2705
|
|
} // 2706
|
|
return parse_tree; // 2707
|
|
}; // 2708
|
|
// 2709
|
|
return str_format; // 2710
|
|
})(); // 2711
|
|
// 2712
|
|
var vsprintf = function(fmt, argv) { // 2713
|
|
argv.unshift(fmt); // 2714
|
|
return sprintf.apply(null, argv); // 2715
|
|
}; // 2716
|
|
// 2717
|
|
addPostProcessor("sprintf", function(val, key, opts) { // 2718
|
|
if (!opts.sprintf) return val; // 2719
|
|
// 2720
|
|
if (Object.prototype.toString.apply(opts.sprintf) === '[object Array]') { // 2721
|
|
return vsprintf(val, opts.sprintf); // 2722
|
|
} else if (typeof opts.sprintf === 'object') { // 2723
|
|
return sprintf(val, opts.sprintf); // 2724
|
|
} // 2725
|
|
// 2726
|
|
return val; // 2727
|
|
}); // 2728
|
|
// public api interface // 2729
|
|
TAPi18next.init = init; // 2730
|
|
TAPi18next.setLng = setLng; // 2731
|
|
TAPi18next.preload = preload; // 2732
|
|
TAPi18next.addResourceBundle = addResourceBundle; // 2733
|
|
TAPi18next.removeResourceBundle = removeResourceBundle; // 2734
|
|
TAPi18next.loadNamespace = loadNamespace; // 2735
|
|
TAPi18next.loadNamespaces = loadNamespaces; // 2736
|
|
TAPi18next.setDefaultNamespace = setDefaultNamespace; // 2737
|
|
TAPi18next.t = translate; // 2738
|
|
TAPi18next.translate = translate; // 2739
|
|
TAPi18next.exists = exists; // 2740
|
|
TAPi18next.detectLanguage = f.detectLanguage; // 2741
|
|
TAPi18next.pluralExtensions = pluralExtensions; // 2742
|
|
TAPi18next.sync = sync; // 2743
|
|
TAPi18next.functions = f; // 2744
|
|
TAPi18next.lng = lng; // 2745
|
|
TAPi18next.addPostProcessor = addPostProcessor; // 2746
|
|
TAPi18next.options = o; // 2747
|
|
})(); // 2748
|
|
// 2749
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}).call(this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(function(){
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// packages/tap_i18n/lib/tap_i18next/tap_i18next_init.js //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
TAPi18next.init({resStore: {}, fallbackLng: globals.fallback_language, useCookie: false}); // 1
|
|
// 2
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}).call(this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(function(){
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// packages/tap_i18n/lib/tap_i18n/tap_i18n-helpers.coffee.js //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
__coffeescriptShare = typeof __coffeescriptShare === 'object' ? __coffeescriptShare : {}; var share = __coffeescriptShare;
|
|
share.helpers = {}; // 1
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}).call(this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(function(){
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// packages/tap_i18n/lib/tap_i18n/tap_i18n-common.coffee.js //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
__coffeescriptShare = typeof __coffeescriptShare === 'object' ? __coffeescriptShare : {}; var share = __coffeescriptShare;
|
|
var fallback_language; // 1
|
|
//
|
|
fallback_language = globals.fallback_language; // 1
|
|
//
|
|
TAPi18n = function() { // 1
|
|
EventEmitter.call(this); // 4
|
|
this._fallback_language = fallback_language; // 4
|
|
this._language_changed_tracker = new Tracker.Dependency; // 4
|
|
this._loaded_languages = [fallback_language]; // 4
|
|
this.conf = null; // 4
|
|
this.packages = {}; // 4
|
|
this.languages_names = {}; // 4
|
|
this.translations = {}; // 4
|
|
if (Meteor.isClient) { // 27
|
|
Session.set(this._loaded_lang_session_key, null); // 28
|
|
this._languageSpecificTranslators = {}; // 28
|
|
this._languageSpecificTranslatorsTrackers = {}; // 28
|
|
} //
|
|
if (Meteor.isServer) { // 33
|
|
this.server_translators = {}; // 34
|
|
Meteor.startup((function(_this) { // 34
|
|
return function() { //
|
|
if (_this._enabled()) { // 38
|
|
return _this._registerHTTPMethod(); //
|
|
} //
|
|
}; //
|
|
})(this)); //
|
|
} //
|
|
this.__ = this._getPackageI18nextProxy(globals.project_translations_domain); // 4
|
|
TAPi18next.setLng(fallback_language); // 4
|
|
return this; // 45
|
|
}; // 3
|
|
//
|
|
Util.inherits(TAPi18n, EventEmitter); // 1
|
|
//
|
|
_.extend(TAPi18n.prototype, { // 1
|
|
_loaded_lang_session_key: "TAPi18n::loaded_lang", // 50
|
|
_enable: function(conf) { // 50
|
|
this.conf = conf; // 57
|
|
return this._onceEnabled(); //
|
|
}, //
|
|
_onceEnabled: function() {}, // 50
|
|
_enabled: function() { // 50
|
|
return this.conf != null; //
|
|
}, //
|
|
_getPackageDomain: function(package_name) { // 50
|
|
return package_name.replace(/:/g, "-"); //
|
|
}, //
|
|
addResourceBundle: function(lang_tag, package_name, translations) { // 50
|
|
return TAPi18next.addResourceBundle(lang_tag, this._getPackageDomain(package_name), translations); //
|
|
}, //
|
|
_getSpecificLangTranslator: function(lang) { // 50
|
|
var current_lang, translator; // 77
|
|
current_lang = TAPi18next.lng(); // 77
|
|
translator = null; // 77
|
|
TAPi18next.setLng(lang, { // 77
|
|
fixLng: true // 80
|
|
}, (function(_this) { //
|
|
return function(lang_translator) { //
|
|
return translator = lang_translator; //
|
|
}; //
|
|
})(this)); //
|
|
TAPi18next.setLng(current_lang); // 77
|
|
return translator; // 87
|
|
}, //
|
|
_getProjectLanguages: function() { // 50
|
|
if (this._enabled()) { // 91
|
|
if (_.isArray(this.conf.supported_languages)) { // 92
|
|
return _.union([this._fallback_language], this.conf.supported_languages); // 93
|
|
} else { //
|
|
return _.keys(this.languages_names); // 103
|
|
} //
|
|
} else { //
|
|
return [this._fallback_language]; // 105
|
|
} //
|
|
}, //
|
|
getLanguages: function() { // 50
|
|
var i, lang_tag, languages, len, ref; // 108
|
|
if (!this._enabled()) { // 108
|
|
return null; // 109
|
|
} //
|
|
languages = {}; // 108
|
|
ref = this._getProjectLanguages(); // 112
|
|
for (i = 0, len = ref.length; i < len; i++) { // 112
|
|
lang_tag = ref[i]; //
|
|
languages[lang_tag] = { // 113
|
|
name: this.languages_names[lang_tag][1], // 114
|
|
en: this.languages_names[lang_tag][0] // 114
|
|
}; //
|
|
} // 112
|
|
return languages; //
|
|
}, //
|
|
_loadLangFileObject: function(language_tag, data) { // 50
|
|
var package_keys, package_name, ref, results; // 120
|
|
results = []; // 120
|
|
for (package_name in data) { //
|
|
package_keys = data[package_name]; //
|
|
package_keys = _.extend({}, package_keys, ((ref = this._loadTranslations_cache[language_tag]) != null ? ref[package_name] : void 0) || {});
|
|
results.push(this.addResourceBundle(language_tag, package_name, package_keys)); // 122
|
|
} // 120
|
|
return results; //
|
|
}, //
|
|
_loadTranslations_cache: {}, // 50
|
|
loadTranslations: function(translations, namespace) { // 50
|
|
var language_tag, project_languages, results, translation_keys; // 128
|
|
project_languages = this._getProjectLanguages(); // 128
|
|
results = []; // 130
|
|
for (language_tag in translations) { //
|
|
translation_keys = translations[language_tag]; //
|
|
if (this._loadTranslations_cache[language_tag] == null) { // 131
|
|
this._loadTranslations_cache[language_tag] = {}; // 132
|
|
} //
|
|
if (this._loadTranslations_cache[language_tag][namespace] == null) { // 134
|
|
this._loadTranslations_cache[language_tag][namespace] = {}; // 135
|
|
} //
|
|
_.extend(this._loadTranslations_cache[language_tag][namespace], translation_keys); // 131
|
|
this.addResourceBundle(language_tag, namespace, translation_keys); // 131
|
|
if (Meteor.isClient && this.getLanguage() === language_tag) { // 141
|
|
results.push(this._language_changed_tracker.changed()); //
|
|
} else { //
|
|
results.push(void 0); //
|
|
} //
|
|
} // 130
|
|
return results; //
|
|
} //
|
|
}); //
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}).call(this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(function(){
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// packages/tap_i18n/lib/tap_i18n/tap_i18n-server.coffee.js //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
__coffeescriptShare = typeof __coffeescriptShare === 'object' ? __coffeescriptShare : {}; var share = __coffeescriptShare;
|
|
var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
|
//
|
|
_.extend(TAPi18n.prototype, { // 1
|
|
server_translators: null, // 2
|
|
_registerServerTranslator: function(lang_tag, package_name) { // 2
|
|
if (this._enabled()) { // 5
|
|
if (!(lang_tag in this.server_translators)) { // 6
|
|
this.server_translators[lang_tag] = this._getSpecificLangTranslator(lang_tag); // 7
|
|
} //
|
|
if (lang_tag !== this._fallback_language) { // 10
|
|
this.addResourceBundle(lang_tag, package_name, this.translations[lang_tag][package_name]); // 11
|
|
} //
|
|
} //
|
|
if (!(this._fallback_language in this.server_translators)) { // 13
|
|
return this.server_translators[this._fallback_language] = this._getSpecificLangTranslator(this._fallback_language);
|
|
} //
|
|
}, //
|
|
_registerAllServerTranslators: function() { // 2
|
|
var i, lang_tag, len, package_name, ref, results; // 17
|
|
ref = this._getProjectLanguages(); // 17
|
|
results = []; // 17
|
|
for (i = 0, len = ref.length; i < len; i++) { //
|
|
lang_tag = ref[i]; //
|
|
results.push((function() { // 18
|
|
var results1; //
|
|
results1 = []; // 18
|
|
for (package_name in this.translations[lang_tag]) { //
|
|
results1.push(this._registerServerTranslator(lang_tag, package_name)); // 19
|
|
} // 18
|
|
return results1; //
|
|
}).call(this)); //
|
|
} // 17
|
|
return results; //
|
|
}, //
|
|
_getPackageI18nextProxy: function(package_name) { // 2
|
|
return (function(_this) { //
|
|
return function(key, options, lang_tag) { //
|
|
if (lang_tag == null) { //
|
|
lang_tag = null; //
|
|
} //
|
|
if (lang_tag == null) { // 24
|
|
return _this.server_translators[_this._fallback_language]((_this._getPackageDomain(package_name)) + ":" + key, options);
|
|
} else if (!(lang_tag in _this.server_translators)) { //
|
|
console.log("Warning: language " + lang_tag + " is not supported in this project, fallback language (" + _this._fallback_language + ")");
|
|
return _this.server_translators[_this._fallback_language]((_this._getPackageDomain(package_name)) + ":" + key, options);
|
|
} else { //
|
|
return _this.server_translators[lang_tag]((_this._getPackageDomain(package_name)) + ":" + key, options); // 31
|
|
} //
|
|
}; //
|
|
})(this); //
|
|
}, //
|
|
_registerHTTPMethod: function() { // 2
|
|
var methods, self; // 34
|
|
self = this; // 34
|
|
methods = {}; // 34
|
|
if (!self._enabled()) { // 38
|
|
throw new Meteor.Error(500, "tap-i18n has to be enabled in order to register the HTTP method"); // 39
|
|
} //
|
|
methods[(self.conf.i18n_files_route.replace(/\/$/, "")) + "/multi/:langs"] = { // 34
|
|
get: function() { // 42
|
|
var i, lang_tag, langs, language_translations, len, output; // 43
|
|
if (!RegExp("^((" + globals.langauges_tags_regex + ",)*" + globals.langauges_tags_regex + "|all).json$").test(this.params.langs)) {
|
|
return this.setStatusCode(401); // 44
|
|
} //
|
|
langs = this.params.langs.replace(".json", ""); // 43
|
|
if (langs === "all") { // 48
|
|
output = self.translations; // 49
|
|
} else { //
|
|
output = {}; // 51
|
|
langs = langs.split(","); // 51
|
|
for (i = 0, len = langs.length; i < len; i++) { // 54
|
|
lang_tag = langs[i]; //
|
|
if (indexOf.call(self._getProjectLanguages(), lang_tag) >= 0 && lang_tag !== self._fallback_language) { // 55
|
|
language_translations = self.translations[lang_tag]; // 57
|
|
if (language_translations != null) { // 59
|
|
output[lang_tag] = language_translations; // 60
|
|
} //
|
|
} //
|
|
} // 54
|
|
} //
|
|
return JSON.stringify(output); // 62
|
|
} //
|
|
}; //
|
|
methods[(self.conf.i18n_files_route.replace(/\/$/, "")) + "/:lang"] = { // 34
|
|
get: function() { // 65
|
|
var lang_tag, language_translations; // 66
|
|
if (!RegExp("^" + globals.langauges_tags_regex + ".json$").test(this.params.lang)) { // 66
|
|
return this.setStatusCode(401); // 67
|
|
} //
|
|
lang_tag = this.params.lang.replace(".json", ""); // 66
|
|
if (indexOf.call(self._getProjectLanguages(), lang_tag) < 0 || lang_tag === self._fallback_language) { // 71
|
|
return this.setStatusCode(404); // 73
|
|
} //
|
|
language_translations = self.translations[lang_tag]; // 66
|
|
return JSON.stringify(language_translations != null ? language_translations : {}); // 80
|
|
} //
|
|
}; //
|
|
return HTTP.methods(methods); //
|
|
}, //
|
|
_onceEnabled: function() { // 2
|
|
return this._registerAllServerTranslators(); //
|
|
} //
|
|
}); //
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}).call(this);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(function(){
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// packages/tap_i18n/lib/tap_i18n/tap_i18n-init.coffee.js //
|
|
// //
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
__coffeescriptShare = typeof __coffeescriptShare === 'object' ? __coffeescriptShare : {}; var share = __coffeescriptShare;
|
|
// 1
|
|
//
|
|
TAPi18n = new TAPi18n(); // 1
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
}).call(this);
|
|
|
|
|
|
/* Exports */
|
|
if (typeof Package === 'undefined') Package = {};
|
|
Package['tap:i18n'] = {
|
|
TAPi18next: TAPi18next,
|
|
TAPi18n: TAPi18n
|
|
};
|
|
|
|
})();
|
|
|
|
//# sourceMappingURL=tap_i18n.js.map
|