Add sdnr wt devicemanager
[ccsdk/features.git] / sdnr / wt / devicemanager / provider / src / main / resources / elasticsearch / plugins / head / src / vendor / i18n / i18n.js
1 (function() {
2         /**
3          * provides text formatting and i18n key storage features<br>
4          * implements most of the Sun Java MessageFormat functionality.
5          * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html" target="sun">Sun's Documentation</a>
6          */
7
8         var keys = {};
9
10         var format = function(message, args) {
11                 var substitute = function() {
12                         var format = arguments[1].split(',');
13                         var substr = escape(args[format.shift()]);
14                         if(format.length === 0) {
15                                 return substr; // simple substitution eg {0}
16                         }
17                         switch(format.shift()) {
18                                 case "number" : return (new Number(substr)).toLocaleString();
19                                 case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch
20                                 case "time" : return (new Date(+substr)).toLocaleTimeString(); //  eg i18n.text("Key", +(new Date())); for current time
21                         }
22                         var styles = format.join("").split("|").map(function(style) {
23                                 return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/);
24                         });
25                         var match = styles[0][3];
26                         for(var i=0; i<styles.length; i++) {
27                                 if((styles[i][2] === "#" && (+styles[i][1]) === (+substr)) ||
28                                                 (styles[i][2] === "<" && ((+styles[i][1]) < (+substr)))) {
29                                         match = styles[i][3];
30                                 }
31                         }
32                         return match;
33                 };
34
35                 return message && message.replace(/'(')|'([^']+)'|([^{']+)|([^']+)/g, function(x, sq, qs, ss, sub) {
36                         do {} while(sub && (sub !== (sub = (sub.replace(/\{([^{}]+)\}/, substitute)))));
37                         return sq || qs || ss || unescape(sub);
38                 });
39         };
40
41         this.i18n = {
42
43                 setKeys: function(strings) {
44                         for(var key in strings) {
45                                 keys[key] = strings[key];
46                         }
47                 },
48
49                 text: function() {
50                         var args = Array.prototype.slice.call(arguments),
51                                 key = keys[args.shift()];
52                         if(args.length === 0) {
53                                 return key;
54                         }
55                         return format(key, args);
56                 },
57
58                 complex: function() {
59                         var args = Array.prototype.slice.call(arguments),
60                                 key = keys[args.shift()],
61                                 ret = [],
62                                 replacer = function(x, pt, sub) { ret.push(pt || args[+sub]); return ""; };
63                         do {} while(key && key !== (key = key.replace(/([^{]+)|\{(\d+)\}/, replacer )));
64                         return ret;
65                 }
66
67         };
68
69 })();
70
71 (function() {
72         var nav = window.navigator;
73         var userLang = ( nav.languages && nav.languages[0] ) || nav.language || nav.userLanguage;
74         var scripts = document.getElementsByTagName('script');
75         var data = scripts[ scripts.length - 1].dataset;
76         if( ! data["langs"] ) {
77                 return;
78         }
79         var langs = data["langs"].split(/\s*,\s*/);
80         var script0 = scripts[0];
81         function install( lang ) {
82                 var s = document.createElement("script");
83                 s.src = data["basedir"] + "/" + lang + '_strings.js';
84                 s.async = false;
85                 script0.parentNode.appendChild(s);
86                 script0 = s;
87         }
88
89         install( langs.shift() ); // always install primary language
90         userLang && langs
91                 .filter( function( lang ) { return userLang.indexOf( lang ) === 0; } )
92                 .forEach( install );
93 }());