PageSourceSearch

https://gdekomfort.ru/resource/js/corelang.js

js gdekomfort.ru collected 2026-10-05 02:25:43 UTC 5,179 bytes, 139 lines download raw bytes

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.