1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/rocketchat_ynh.git synced 2024-09-03 20:16:25 +02:00
rocketchat_ynh/sources/programs/server/packages/tap_i18n.js
2016-04-29 16:32:48 +02:00

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
"&": "&amp;", // 221
"<": "&lt;", // 222
">": "&gt;", // 223
'"': '&quot;', // 224
"'": '&#39;', // 225
"/": '&#x2F;' // 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