aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js
blob: 9765ded86a2b8f3f93eb2e372adc02a08f4e7524 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
 * Copyright 2010-2013 Ben Birch
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this software except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
(function() {
	/**
	 * provides text formatting and i18n key storage features<br>
	 * implements most of the Sun Java MessageFormat functionality.
	 * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html" target="sun">Sun's Documentation</a>
	 */

	var keys = {};

	var format = function(message, args) {
		var substitute = function() {
			var format = arguments[1].split(',');
			var substr = escape(args[format.shift()]);
			if(format.length === 0) {
				return substr; // simple substitution eg {0}
			}
			switch(format.shift()) {
				case "number" : return (new Number(substr)).toLocaleString();
				case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch
				case "time" : return (new Date(+substr)).toLocaleTimeString(); //  eg i18n.text("Key", +(new Date())); for current time
			}
			var styles = format.join("").split("|").map(function(style) {
				return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/);
			});
			var match = styles[0][3];
			for(var i=0; i<styles.length; i++) {
				if((styles[i][2] === "#" && (+styles[i][1]) === (+substr)) ||
						(styles[i][2] === "<" && ((+styles[i][1]) < (+substr)))) {
					match = styles[i][3];
				}
			}
			return match;
		};

		return message && message.replace(/'(')|'([^']+)'|([^{']+)|([^']+)/g, function(x, sq, qs, ss, sub) {
			do {} while(sub && (sub !== (sub = (sub.replace(/\{([^{}]+)\}/, substitute)))));
			return sq || qs || ss || unescape(sub);
		});
	};

	this.i18n = {

		setKeys: function(strings) {
			for(var key in strings) {
				keys[key] = strings[key];
			}
		},

		text: function() {
			var args = Array.prototype.slice.call(arguments),
				key = keys[args.shift()];
			if(args.length === 0) {
				return key;
			}
			return format(key, args);
		},

		complex: function() {
			var args = Array.prototype.slice.call(arguments),
				key = keys[args.shift()],
				ret = [],
				replacer = function(x, pt, sub) { ret.push(pt || args[+sub]); return ""; };
			do {} while(key && key !== (key = key.replace(/([^{]+)|\{(\d+)\}/, replacer )));
			return ret;
		}

	};

})();

(function() {
	var nav = window.navigator;
	var userLang = ( nav.languages && nav.languages[0] ) || nav.language || nav.userLanguage;
	var scripts = document.getElementsByTagName('script');
	var data = scripts[ scripts.length - 1].dataset;
	if( ! data["langs"] ) {
		return;
	}
	var langs = data["langs"].split(/\s*,\s*/);
	var script0 = scripts[0];
	function install( lang ) {
		var s = document.createElement("script");
		s.src = data["basedir"] + "/" + lang + '_strings.js';
		s.async = false;
		script0.parentNode.appendChild(s);
		script0 = s;
	}

	install( langs.shift() ); // always install primary language
	userLang && langs
		.filter( function( lang ) { return userLang.indexOf( lang ) === 0; } )
		.forEach( install );
}());