1/** 2* ФÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¸Ð½ÑеÑнаÑионализаÑией ÑÑÑок ReadyScript в JavaScript 3* 4* @author ReadyScript lab. 5*/ 6var lang = 7{ 8 baseLang: (global.baseLang) ? global.baseLang : null, //ЯзÑк по ÑмолÑÐ°Ð½Ð¸Ñ 9 lang: (global.lang) ? global.lang : null, //ТекÑÑий ÑзÑк 10 messages: {}, //СпиÑок ÑÑаз 11 plugins: {}, 12 /** 13 * ÐозвÑаÑÐ°ÐµÑ Ð¿ÐµÑевод ÑÑÐ°Ð·Ñ Ð½Ð° ÑекÑÑем ÑзÑке 14 * 15 * @param string phrase - ÑÑаза Ð´Ð»Ñ Ð¿ÐµÑевода 16 * @param object params - обÑÐµÐºÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÑÑановки знаÑений 17 * @param alias - коÑоÑкий иденÑиÑикаÑÐ¾Ñ ÑÑÐ°Ð·Ñ 18 * @example 19 * lang.t('У Ð²Ð°Ñ %msg ÑообÑений', {msg: 35}) 20 * lang.t('У Ð²Ð°Ñ %msg ÑообÑений. Ðалее болÑÑой ÑекÑÑ', {msg: 35}, 'коÑоÑкий_иденÑиÑикаÑоÑ_ÑÑазÑ') 21 */ 22 t: function(phrase, params, alias) { 23 var self = this; 24 var to_translate = (typeof(alias) == 'undefined') ? phrase : alias; 25 var translated = this.messages[to_translate]; 26 if (translated) { 27 phrase = translated; 28 } 29 30 phrase = phrase.replace(/\[(.*?):%(.*?):(.*?)\]/g, function(whole, plugin, param_name, plugin_param) { 31 if (self.plugins[plugin]) { 32 var param_value = (params[param_name]) ? params[param_name] : null; 33 var phrase_lang = (translated) ? self.lang : self.baseLang; 34 return self.plugins[plugin].call(self, param_value, plugin_param, params, phrase_lang); 35 } 36 return ''; 37 }) 38 39 for(var key in params) { 40 phrase = this.str_replace('%'+key, params[key], phrase); 41 } 42 43 phrase = phrase.split('^')[0]; 44 return phrase; 45 }, 46 /** 47 * Replaces all occurrences of search in haystack with replace 48 * version: 1109.2015 49 * discuss at: http://phpjs.org/functions/str_replace 50 * 51 * @param search 52 * @param replace 53 * @param subject 54 * @param count 55 */ 56 str_replace: function(search, replace, subject, count) { 57 let 58 j = 0, 59 temp = '', 60 repl = '', 61 sl = 0, 62 fl = 0, 63 f = [].concat(search), 64 r = [].concat(replace), 65 s = subject, 66 ra = Object.prototype.toString.call(r) === '[object Array]', 67 sa = Object.prototype.toString.call(s) === '[object Array]'; 68 s = [].concat(s); 69 if (count) { 70 this.window[count] = 0; 71 } 72 for (let i = 0, sl = s.length; i < sl; i++) { 73 if (s[i] === '') { 74 continue; 75 } for (j = 0, fl = f.length; j < fl; j++) { 76 temp = s[i] + ''; 77 repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0]; 78 s[i] = (temp).split(f[j]).join(repl); 79 if (count && s[i] !== temp) { 80 this.window[count] += (temp.length - s[i].length) / f[j].length; 81 } 82 } 83 } 84 return sa ? s : s[0]; 85 } 86}; 87 88/** 89* Ðлагин plural - подÑÑавлÑÐµÑ Ñлово во множеÑÑвенном ÑиÑле Ñ ÑÑеÑом ÑловоÑоÑмÑ. 90* ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑплÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ ÑÑазе: 91* lang.t("У Ð²Ð°Ñ %msg [plural:%msg:ÑообÑение|ÑообÑениÑ|ÑообÑений]", {msg: 1}); 92* lang.t("У Ð²Ð°Ñ %msg [plural:%msg:ÑообÑение|ÑообÑениÑ|ÑообÑений]", {msg: 2}); 93* lang.t("У Ð²Ð°Ñ %msg [plural:%msg:ÑообÑение|ÑообÑениÑ|ÑообÑений]", {msg: 5}); 94* lang.t("You have %msg [plural:%msg:message|messages]", {msg: 1}); //ÐÑли ÑекÑÑий ÑзÑк английÑкий 95* lang.t("You have %msg [plural:%msg:message|messages]", {msg: 2}); //ÐÑли ÑекÑÑий ÑзÑк английÑкий 96* 97* вÑвод: 98* У ÐÐ°Ñ 1 ÑообÑение 99* У ÐÐ°Ñ 2 ÑообÑÐµÐ½Ð¸Ñ 100* У ÐÐ°Ñ 5 ÑообÑений 101* You have 1 message 102* You have 2 messages 103* 104* @type Object 105*/ 106lang.plugins.plural = function(param_value, plugin_param, params, phrase_lang) { 107 var values = plugin_param.split('|'); 108 if (phrase_lang == 'ru') { 109 var result; 110 var first = values[0]; 111 var second = values[1]; 112 var five = values[2]; 113 114 var prepare = Math.abs( parseInt( param_value ) ); 115 if( prepare != 0 ) 116 { 117 if( ( prepare - prepare % 10 ) / 10 == 1 ) { 118 result = five; 119 } else { 120 prepare = prepare % 10; 121 if( prepare == 1 ) { 122 result = first; 123 } else if( prepare > 1 && prepare < 5 ) { 124 result = second; 125 } else { 126 result = five; 127 } 128 } 129 } 130 else { 131 result = five; 132 } 133 } else if (lang == 'en') { 134 result = (param_value == 1) ? $values[0] : $values[1]; 135 } else { 136 result = values[0]; 137 } 138 return result; 139};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.