b28-cli 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/.babelrc +13 -13
  2. package/README.MD +470 -465
  3. package/TestFile/output/lang/BRPT.json +24 -0
  4. package/TestFile/output/lang/CN.json +24 -0
  5. package/TestFile/output/lang/CS.json +24 -0
  6. package/TestFile/output/lang/DE.json +24 -0
  7. package/TestFile/output/lang/EN.json +24 -0
  8. package/TestFile/output/lang/ES.json +24 -0
  9. package/TestFile/output/lang/FR.json +24 -0
  10. package/TestFile/output/lang/HU.json +24 -0
  11. package/TestFile/output/lang/IT.json +24 -0
  12. package/TestFile/output/lang/KO.json +24 -0
  13. package/TestFile/output/lang/LAES.json +24 -0
  14. package/TestFile/output/lang/NL.json +24 -0
  15. package/TestFile/output/lang/PL.json +24 -0
  16. package/TestFile/output/lang/PT.json +24 -0
  17. package/TestFile/output/lang/RO.json +24 -0
  18. package/TestFile/output/lang/RU.json +24 -0
  19. package/TestFile/output/lang/TR.json +24 -0
  20. package/TestFile/output/lang/UK.json +24 -0
  21. package/TestFile/output/lang/ZH.json +24 -0
  22. package/TestFile/output/lang/brpt/translate.json +23 -0
  23. package/TestFile/output/lang/cn/translate.json +23 -0
  24. package/TestFile/output/lang/cs/translate.json +23 -0
  25. package/TestFile/output/lang/de/translate.json +23 -0
  26. package/TestFile/output/lang/es/translate.json +23 -0
  27. package/TestFile/output/lang/fr/translate.json +23 -0
  28. package/TestFile/output/lang/hu/translate.json +23 -0
  29. package/TestFile/output/lang/it/translate.json +23 -0
  30. package/TestFile/output/lang/ko/translate.json +23 -0
  31. package/TestFile/output/lang/laes/translate.json +23 -0
  32. package/TestFile/output/lang/nl/translate.json +23 -0
  33. package/TestFile/output/lang/pl/translate.json +23 -0
  34. package/TestFile/output/lang/pt/translate.json +23 -0
  35. package/TestFile/output/lang/ro/translate.json +23 -0
  36. package/TestFile/output/lang/ru/translate.json +23 -0
  37. package/TestFile/output/lang/tr/translate.json +23 -0
  38. package/TestFile/output/lang/uk/translate.json +23 -0
  39. package/TestFile/output/lang/zh/translate.json +23 -0
  40. package/TestFile/output/lang.json +25 -0
  41. package/b28n.js +739 -739
  42. package/b28nPigeonhole/11ac_ecos_b28n.js +677 -677
  43. package/b28nPigeonhole/11ac_linux_b28n_async.js +709 -709
  44. package/b28nPigeonhole/4G03_b28n_async.js +708 -708
  45. package/b28nPigeonhole/G5310P_b28n.js +650 -650
  46. package/b28nPigeonhole/es5b28n.js +711 -711
  47. package/b28nPigeonhole/es6b28n.js +857 -857
  48. package/b28nPigeonhole/readMe.md +20 -20
  49. package/b28nPigeonhole//345/276/256/344/274/201/350/267/257/347/224/261b28n.js +916 -916
  50. package/dist/ExtractLangExcel.js +138 -45
  51. package/dist/cmd.js +14 -9
  52. package/dist/debug/test.js +2 -2
  53. package/dist/excel2json.js +215 -54
  54. package/dist/extract/extract-html.js +4 -2
  55. package/dist/extract/extract-js.js +2 -2
  56. package/dist/extract/extract-regexp.js +2 -2
  57. package/dist/extract/extract-vue.js +9 -9
  58. package/dist/extract/extract.js +4 -4
  59. package/dist/extract/extractRegexp/index.js +6 -6
  60. package/dist/extract/vue/html-parser.js +16 -16
  61. package/dist/extract/vue/util.js +2 -2
  62. package/dist/extract/vue/vue-compiler.js +2 -2
  63. package/dist/extractOrigin/extract.js +2 -2
  64. package/dist/extractOrigin/extract_html_ori.js +2 -2
  65. package/dist/extractOrigin/extract_js_ori.js +2 -2
  66. package/dist/handle.js +59 -3
  67. package/dist/index.js +36 -7
  68. package/dist/mergeExcel.js +407 -0
  69. package/dist/mergeJson.js +423 -2
  70. package/dist/util/config.js +90 -32
  71. package/dist/util/index.js +48 -41
  72. package/index.js +5 -5
  73. package/package.json +63 -62
  74. package/result.txt +53 -53
  75. package/test.js +182 -182
@@ -1,651 +1,651 @@
1
- // "New Butterfat internationalization" (b28new.js)
2
- // Released under the MIT License
3
- // versions 3.0.0
4
- // $Id: b28new.js 2014-12-23 ETw $
5
- /***********************************************************************************************
6
- ************************************************************************************************/
7
-
8
- (function (window, document) {
9
-
10
- //定义保存翻译的字典和配置
11
- var MSG = {},
12
- b28Cfg = {};
13
-
14
- MSG.extend = function (obj) {
15
- var name;
16
-
17
- for (name in obj) {
18
- if (obj.hasOwnProperty(name)) {
19
- MSG[name] = obj[name];
20
- }
21
- }
22
- };
23
-
24
- /*********翻译配置***********/
25
- //配置翻译支持的所有语言,如果不支持某种语言,则以默认语言显示
26
- //使用前请添加所有已支持的语言到此数组中
27
-
28
- //嵌入配置资源,通过配置去加载对应的语言信息
29
-
30
- //__inline('../../langSet.js');
31
- b28Cfg.supportLang = CONFIG_PRODUCT_LANGUAGE;
32
- b28Cfg.defaultLang = 'en';
33
-
34
- //配置语言包文件类型 within ["xml", "json"]
35
- b28Cfg.fileType = "json";
36
-
37
- //用默认语言做id(即用节点上的显示文字来匹配语言包),此种情况要求语言和翻译之间关系是一对一,
38
- //否则有翻译错误。如果无法满足一一映射,可在语言包中添加额外字段映射到不同的翻译上,
39
- //并在要翻译的冲突节点上加上data-lang属性,然后把data-lang赋值为新添加的字段名称
40
- b28Cfg.idDefaultLang = true;
41
-
42
- //是否对要翻译文字进行trim
43
- b28Cfg.trimText = true;
44
-
45
- //默认替换节点中的文字,将其设为true可插入html
46
- b28Cfg.insertHTML = true;
47
-
48
- //是否初始化下拉框
49
- b28Cfg.initSelect = true;
50
-
51
- // if (b28Cfg.idDefaultLang && (',' + b28Cfg.supportLang.join(',') + ',').indexOf(b28Cfg.defaultLang) === -1) {
52
- // b28Cfg.supportLang.push(b28Cfg.defaultLang);
53
- // }
54
-
55
- var win = window,
56
- doc = document,
57
- core_version = "3.0.0",
58
- core_trim = core_version.trim,
59
-
60
- //获取语言文件相对路径
61
- js = document.scripts,
62
- langPath = "/lang/",
63
-
64
- // JSON RegExp
65
- rvalidchars = /^[\],:{}\s]*$/,
66
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
67
- rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
68
- rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
69
-
70
- // 语言包文件是否加载完成标志
71
- b28Loaded = false,
72
-
73
- // Define until function
74
- domReady, loadScript, ajaxLoadScript, loadJSON, loadXML, innerText, trim, _trim, parseJSON, createXHR,
75
-
76
- // Define a local copy of Butterlate
77
- Butterlate;
78
-
79
-
80
- trim = core_trim && !core_trim.call("\uFEFF\xA0") ?
81
- function (text) {
82
- return text === null ?
83
- "" :
84
- core_trim.call(text);
85
- } :
86
- // Otherwise use our own trimming function
87
- function (text) {
88
- if (text === null) {
89
- return "";
90
- }
91
-
92
- text += "";
93
- return text.replace(/^\s+|\s+$/g, "");
94
- };
95
-
96
- _trim = function (str) {
97
- if (b28Cfg.trimText) {
98
- return trim(str);
99
- }
100
- return str;
101
-
102
- };
103
- parseJSON = function (data) {
104
- if (window.JSON && window.JSON.parse) {
105
- return window.JSON.parse(data);
106
- }
107
- if (data === null) {
108
- return data;
109
- }
110
-
111
- if (typeof data === "string") {
112
-
113
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
114
- data = trim(data);
115
-
116
- if (data) {
117
- // Make sure the incoming data is actual JSON
118
- // Logic borrowed from http://json.org/json2.js
119
- if (rvalidchars.test(data.replace(rvalidescape, "@")
120
- .replace(rvalidtokens, "]")
121
- .replace(rvalidbraces, ""))) {
122
-
123
- return (new Function("return " + data))();
124
- }
125
- }
126
- }
127
- };
128
-
129
- createXHR = (function () {
130
- try {
131
- return function () {
132
- return new XMLHttpRequest();
133
- };
134
- } catch (e1) {
135
- try {
136
- return function () {
137
- return new ActiveXObject("Msxml2.XMLHTTP");
138
- };
139
- } catch (e2) {
140
- try {
141
- return function () {
142
- return new ActiveXObject("Microsoft.XMLHTTP");
143
- };
144
- } catch (e3) {
145
- return;
146
- }
147
- }
148
- }
149
- })();
150
- innerText = (function () {
151
- if (b28Cfg.insertHTML) {
152
- return function (elem, str) {
153
- if (str) {
154
- elem.innerHTML = str;
155
- return elem;
156
- }
157
- };
158
- }
159
-
160
- var element = doc.createElement('p');
161
- element.innerHTML = core_version;
162
- return element.textContent ? function (elem, str) {
163
- if (str) {
164
- elem.textContent = str;
165
- return elem;
166
- }
167
- return elem.textContent;
168
-
169
- } : function (elem, str) {
170
- if (str) {
171
- elem.innerText = str;
172
- return elem;
173
- }
174
- return elem.innerText;
175
- };
176
- }());
177
-
178
- function assertElement(elem) {
179
- //支持HTMLElement
180
- if (typeof HTMLElement === 'object' && elem instanceof HTMLElement) {
181
- return true;
182
- }
183
- //ie等
184
- if (typeof elem === 'object' && (elem.nodeType === 1 || elem.nodeType === 9) &&
185
- typeof elem.nodeName === 'string') {
186
- return true;
187
- }
188
- return false;
189
- }
190
-
191
- function transTitle() {
192
- doc.title = Butterlate.gettext(_trim(doc.title));
193
- }
194
-
195
- function replaceTextNodeValue(element) {
196
- if (!element) {
197
- return;
198
- }
199
- var firstChild = element.firstChild,
200
- nextSibling = element.nextSibling,
201
- nodeType = element.nodeType,
202
- btnStr = "submit,reset,button",
203
- curValue, isInputButton;
204
-
205
-
206
-
207
- //handle element node
208
- if (nodeType === 1) {
209
-
210
- if (element.getAttribute("data-translated")) {
211
- //translate siblings
212
- if (nextSibling) {
213
- replaceTextNodeValue(nextSibling);
214
- }
215
- return;
216
- }
217
-
218
- // Hander elements common attribute need to replace
219
- curValue = element.getAttribute("alt");
220
- if (curValue && /\S/.test(curValue)) {
221
- curValue = _trim(curValue);
222
- element.setAttribute("alt", Butterlate.gettext(curValue));
223
- }
224
- curValue = element.getAttribute("placeholder");
225
- if (curValue && /\S/.test(curValue)) {
226
- curValue = _trim(curValue);
227
- element.setAttribute("placeholder", Butterlate.gettext(curValue));
228
- }
229
- curValue = element.getAttribute("title");
230
- if (curValue && /\S/.test(curValue)) {
231
- curValue = _trim(curValue);
232
- element.setAttribute("title", Butterlate.gettext(curValue));
233
- }
234
-
235
- isInputButton = element.nodeName.toLowerCase() == "input" &&
236
- (btnStr.indexOf(element.getAttribute("type")) !== -1);
237
- if (isInputButton) {
238
-
239
- //data-lang属性具有较高优先级
240
- curValue = element.getAttribute("data-lang") || element.value;
241
- } else {
242
- curValue = element.getAttribute("data-lang");
243
- }
244
-
245
- if (curValue && /\S/.test(curValue)) {
246
- curValue = _trim(curValue);
247
- if (curValue) {
248
- if (isInputButton) {
249
- element.setAttribute("value", Butterlate.gettext(curValue));
250
- } else {
251
- innerText(element, Butterlate.gettext(curValue));
252
- }
253
- }
254
- }
255
-
256
- //handle textNode
257
- } else if (nodeType === 3 && /\S/.test(element.nodeValue)) {
258
- curValue = _trim(element.nodeValue);
259
- element.nodeValue = Butterlate.gettext(curValue);
260
- }
261
- //translate siblings
262
- if (nextSibling) {
263
- replaceTextNodeValue(nextSibling);
264
- }
265
-
266
- //translate firstChild
267
- //stop handle elem.child if elem has attr data-lang
268
- if (firstChild && !element.getAttribute("data-lang")) {
269
- replaceTextNodeValue(firstChild);
270
- }
271
- }
272
-
273
- domReady = (function () {
274
- var funcs = [],
275
- already = false,
276
- len,
277
- i;
278
-
279
- function handler(e) {
280
- e = e || win.event;
281
- if (already) {
282
- return;
283
- }
284
-
285
- if (e.type === 'readystatechange' && doc.readyState !== 'complete') {
286
- return;
287
- }
288
-
289
- for (i = 0, len = funcs.length; i < len; i++) {
290
- funcs[i].call(doc);
291
- }
292
-
293
- already = true;
294
- funcs = null;
295
- }
296
-
297
- if (doc.addEventListener) {
298
- doc.addEventListener("DOMContentLoaded", handler, false);
299
- doc.addEventListener("onreadystatechange", handler, false);
300
- win.addEventListener("load", handler, false);
301
- } else if (doc.attachEvent) {
302
- doc.attachEvent('onreadystatechange', handler);
303
- win.attachEvent('onload', handler);
304
- }
305
-
306
- // return ready() function
307
- return function ready(f) {
308
- if (already) {
309
- f.call(doc);
310
- } else {
311
- funcs.push(f);
312
- }
313
- };
314
- }());
315
-
316
- loadScript = (function () {
317
- var scripts = doc.createElement("script"),
318
- hasReadyState = scripts.readyState;
319
-
320
- return hasReadyState ? function (url, callBack) {
321
- var scripts = doc.createElement("script");
322
-
323
- scripts.onreadystatechange = function () {
324
- if (scripts.readyState === 'loaded' ||
325
- scripts.readyState === 'complete') {
326
- scripts.onreadystatechange = null;
327
-
328
- if (typeof callBack === "function") {
329
- callBack();
330
- callBack = null;
331
- }
332
- }
333
- };
334
- scripts.src = url;
335
- doc.getElementsByTagName("head")[0].appendChild(scripts);
336
-
337
- } : function (url, callBack) {
338
- var scripts = doc.createElement("script");
339
-
340
- scripts.onload = function () {
341
- if (typeof callBack === "function") {
342
- callBack();
343
- callBack = null;
344
- }
345
- };
346
- scripts.src = url;
347
- doc.getElementsByTagName("head")[0].appendChild(scripts);
348
- };
349
- })();
350
-
351
- loadJSON = function (url, callBack) {
352
- var request = createXHR();
353
- request.open("GET", url + "?" + Math.random(), false);
354
- //request.setRequestHeader("If-Modified-Since", "1");
355
- //request.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
356
- request.send(null);
357
- if (request.status >= 200 && request.status < 300 || request.status === 304) {
358
- MSG = parseJSON(request.responseText);
359
-
360
- if (typeof callBack === "function") {
361
- callBack();
362
- callBack = null;
363
- }
364
- }
365
- };
366
-
367
- function Butterlation() {
368
- this.curDomain = 0;
369
- this.domainArr = [];
370
- this.options = {
371
- "defaultLang": b28Cfg.defaultLang,
372
- "support": b28Cfg.supportLang,
373
- "fileType": b28Cfg.fileType
374
- };
375
- this.isSupport = function (lang) {
376
- var support = this.options.support,
377
- len = support.length,
378
- i;
379
-
380
- // if(support && support.indexOf(lang) < 0){
381
- // return support[0];
382
- // }
383
- for (i = 0; i < len; i++) {
384
- if (lang === support[i]) {
385
- return support[i];
386
- }
387
- }
388
- };
389
- this.setLang = function (lang) {
390
- //修改html的class
391
- var reg,
392
- htmlElem = doc.documentElement,
393
- htmlClass = htmlElem.className;
394
- if (lang !== undefined) {
395
-
396
- reg = new RegExp("lang-" + this.lang, 'g');
397
- if (!this.isSupport(lang)) {
398
- lang = this.options.defaultLang;
399
- }
400
-
401
- htmlClass = htmlClass.replace(reg, '');
402
- htmlClass ? htmlClass += " " : '';
403
- htmlElem.className = htmlClass + "lang-" + lang;
404
-
405
- this.lang = lang;
406
- doc.cookie = "bLanguage=" + lang + ";";
407
- }
408
- return lang;
409
- };
410
- this.getLang = function () {
411
- var special = {
412
- "zh": "cn",
413
- "zh-chs": "cn",
414
- "zh-cn": "cn",
415
- "zh-cht": "cn",
416
- "zh-hk": "zh",
417
- "zh-mo": "zh",
418
- "zh-tw": "zh",
419
- "zh-sg": "zh"
420
- },
421
- defLang = this.options.defaultLang,
422
- local, ret, start, end;
423
-
424
- if ((doc.cookie.indexOf("bLanguage=")) === -1) {
425
- local = (win.navigator.language || win.navigator.userLanguage ||
426
- win.navigator.browserLanguage || win.navigator.systemLanguage || defLang).toLowerCase();
427
-
428
- ret = special[local] || special[local.split("-")[0].toString()] || local.split("-")[0].toString();
429
- } else {
430
- if (doc.cookie.indexOf("bLanguage=") === 0) {
431
- start = 10;
432
-
433
- //incase there has cookie like: **bLanguage=cn
434
- } else if (doc.cookie.indexOf("; bLanguage=") !== -1) {
435
- start = doc.cookie.indexOf("; bLanguage=") + 12;
436
- }
437
-
438
- if (start !== undefined) {
439
- end = (doc.cookie.indexOf(';', start) !== -1) ?
440
- doc.cookie.indexOf(';', start) : doc.cookie.length;
441
- ret = doc.cookie.substring(start, end);
442
- }
443
- }
444
- // return this.isSupport(ret) || this.options.defaultLang;
445
- //
446
- var lang = this.isSupport(ret);
447
- if (!lang) {
448
- if (this.options.support && this.options.support.indexOf(this.options.defaultLang) < 0) {
449
-
450
- lang = this.options.support[0];
451
- } else {
452
- lang = this.options.defaultLang;
453
- }
454
- }
455
- return lang;
456
- };
457
- this.getURL = function (domain) {
458
- return langPath + this.lang + "/" + domain + "." + this.options.fileType;
459
- };
460
- this.setTextDomain = function (domain, lang, callBack) {
461
- var htmlElem = doc.documentElement;
462
-
463
- //Hander lang is undefined
464
- this.lang = lang || this.getLang();
465
- this.setLang(this.lang);
466
- this.curDomain = 0;
467
- if (typeof callBack === "function") {
468
- this.success = callBack;
469
- }
470
-
471
- htmlElem.style.display = "none";
472
-
473
- if (typeof domain === "string") {
474
- this.domainArr.push(domain);
475
- this.po = this.getURL(domain);
476
- this.loadDomain(this.po);
477
- }
478
- };
479
-
480
- this.loadDomain = function (url) {
481
- if (b28Cfg.idDefaultLang && this.lang === b28Cfg.defaultLang) {
482
- b28Loaded = true;
483
- b28Cfg.initSelect && domReady(Butterlate.initSelectElem);
484
- doc.documentElement.style.display = '';
485
- if (typeof Butterlate.success === "function") {
486
- Butterlate.success();
487
- }
488
- } else {
489
- if (this.options.fileType === "json") {
490
- loadJSON(url, this.loadedDict);
491
- }
492
- }
493
- };
494
- this.loadedDict = function () {
495
- var len = Butterlate.domainArr.length;
496
- if (Butterlate.curDomain + 1 === len) {
497
- b28Loaded = true;
498
- domReady(Butterlate.translatePage);
499
- } else {
500
- Butterlate.curDomain += 1;
501
- }
502
- };
503
- this.isLoaded = function () {
504
- return b28Loaded;
505
- };
506
- this.gettext = function (key) {
507
- var tagReg = /^[a-zA-Z]\#[a-zA-Z][a-zA-Z][a-zA-Z]\#/g;
508
-
509
- if (key === undefined) return;
510
- if (this.options.defaultLang === this.lang) {
511
- //处理一对多的翻译时对翻译加上了唯一标识的前缀,故需要把这些前缀去掉
512
- return key.replace(tagReg, "");
513
- }
514
-
515
- return MSG[key] !== undefined ? MSG[key] : key.replace(tagReg, "");
516
- };
517
- this.getFormatText = function (key, replacements) {
518
- var nkey = this.gettext(key),
519
- index,
520
- count = 0;
521
- if (!replacements) {
522
- return nkey;
523
- }
524
- if (replacements instanceof Array && replacements.length !== 0) {
525
- while ((index = nkey.indexOf('%s')) !== -1) {
526
- nkey = nkey.slice(0, index) + replacements[count] +
527
- nkey.slice(index + 2);
528
- count = ((count + 1) === replacements.length) ? count : (count + 1);
529
- }
530
- } else if (typeof replacements === "string") {
531
- index = nkey.indexOf('%s');
532
- nkey = nkey.slice(0, index) + replacements + nkey.slice(index + 2);
533
- }
534
- return nkey;
535
- };
536
- this.initSelectElem = function () {
537
- var selectElem = doc.getElementById('select-lang'),
538
- len = b28Cfg.supportLang.length,
539
- newOption, lang, i;
540
-
541
- if (selectElem && selectElem.nodeName.toLowerCase() == "select") {
542
- for (i = 0; i < len; i++) {
543
- lang = b28Cfg.supportLang[i];
544
- newOption = new Option(Butterlate.langArr[lang], lang);
545
- selectElem.add(newOption, undefined);
546
- }
547
- selectElem.value = Butterlate.lang;
548
-
549
- if (doc.addEventListener) {
550
- selectElem.addEventListener("change", function () {
551
- Butterlate.setLang(doc.getElementById('select-lang').value);
552
- setTimeout(function () {
553
- window.location.reload();
554
- }, 24);
555
- }, false);
556
-
557
- } else if (doc.attachEvent) {
558
- selectElem.attachEvent('onchange', function () {
559
- Butterlate.setLang(doc.getElementById('select-lang').value);
560
- setTimeout(function () {
561
- window.location.reload();
562
- }, 24);
563
- });
564
- }
565
-
566
- }
567
- };
568
- this.translate = function (translateTarget) {
569
- var translateElem;
570
-
571
- if (assertElement(translateTarget)) {
572
- translateElem = translateTarget;
573
- } else if (translateTarget && typeof translateTarget === 'string') {
574
- translateElem = doc.getElementById(translateTarget);
575
- }
576
- translateElem = translateElem || doc.documentElement;
577
-
578
- //hidepage before translate
579
- doc.documentElement.style.display = 'none';
580
-
581
- replaceTextNodeValue(translateElem);
582
-
583
- //show page when translate complete
584
- doc.documentElement.style.display = '';
585
-
586
- if (typeof Butterlate.success === "function") {
587
- Butterlate.success();
588
- }
589
- };
590
-
591
- this.translatePage = function () {
592
-
593
- var bodyElem = doc.body || doc.documentElement;
594
-
595
- // 翻译HTML页面内容
596
- transTitle();
597
-
598
- // 初始语言选择下拉框
599
- b28Cfg.initSelect && Butterlate.initSelectElem();
600
-
601
- Butterlate.translate(bodyElem);
602
-
603
- };
604
-
605
- this.getLangJSON = function (callback) {
606
- var url = this.getURL(this.domainArr[0]);
607
-
608
- if (this.lang === b28Cfg.defaultLang) {
609
- MSG = {};
610
- this.translatePage();
611
- return;
612
- }
613
- loadJSON(url, callback);
614
- };
615
- }
616
-
617
- Butterlate = new Butterlation();
618
- Butterlate.langArr = {
619
- "cn": "简体中文",
620
- "zh": "繁體中文",
621
- "de": "Deutsch", //德语
622
- "en": "English", //英语
623
- "es": "Español", //西班牙
624
- "fr": "Français", //法国
625
- "hu": "Magyar", //匈牙利
626
- "it": "Italiano", //意大利
627
- "pl": "Polski", //波兰
628
- "ro": "Română", //罗马尼亚
629
- "ar": "العربية", //阿拉伯
630
- "tr": "Türkçe", //土耳其
631
- "ru": "Русский", //Russian 俄语
632
- "pt": "Português", //Portugal 葡萄牙语
633
- "ko": "한국"
634
- };
635
-
636
- //for debug use
637
- Butterlate.getMsg = function () {
638
- return MSG;
639
- };
640
- //Export to window
641
- win.Butterlate = Butterlate;
642
- win.B = win.B || win.Butterlate;
643
- win._ = function (key, replacements) {
644
- return Butterlate.getFormatText(key, replacements);
645
- };
646
- win.Butterlate.loadScript = loadScript;
647
-
648
- B.setTextDomain("translate");
649
-
650
-
1
+ // "New Butterfat internationalization" (b28new.js)
2
+ // Released under the MIT License
3
+ // versions 3.0.0
4
+ // $Id: b28new.js 2014-12-23 ETw $
5
+ /***********************************************************************************************
6
+ ************************************************************************************************/
7
+
8
+ (function (window, document) {
9
+
10
+ //定义保存翻译的字典和配置
11
+ var MSG = {},
12
+ b28Cfg = {};
13
+
14
+ MSG.extend = function (obj) {
15
+ var name;
16
+
17
+ for (name in obj) {
18
+ if (obj.hasOwnProperty(name)) {
19
+ MSG[name] = obj[name];
20
+ }
21
+ }
22
+ };
23
+
24
+ /*********翻译配置***********/
25
+ //配置翻译支持的所有语言,如果不支持某种语言,则以默认语言显示
26
+ //使用前请添加所有已支持的语言到此数组中
27
+
28
+ //嵌入配置资源,通过配置去加载对应的语言信息
29
+
30
+ //__inline('../../langSet.js');
31
+ b28Cfg.supportLang = CONFIG_PRODUCT_LANGUAGE;
32
+ b28Cfg.defaultLang = 'en';
33
+
34
+ //配置语言包文件类型 within ["xml", "json"]
35
+ b28Cfg.fileType = "json";
36
+
37
+ //用默认语言做id(即用节点上的显示文字来匹配语言包),此种情况要求语言和翻译之间关系是一对一,
38
+ //否则有翻译错误。如果无法满足一一映射,可在语言包中添加额外字段映射到不同的翻译上,
39
+ //并在要翻译的冲突节点上加上data-lang属性,然后把data-lang赋值为新添加的字段名称
40
+ b28Cfg.idDefaultLang = true;
41
+
42
+ //是否对要翻译文字进行trim
43
+ b28Cfg.trimText = true;
44
+
45
+ //默认替换节点中的文字,将其设为true可插入html
46
+ b28Cfg.insertHTML = true;
47
+
48
+ //是否初始化下拉框
49
+ b28Cfg.initSelect = true;
50
+
51
+ // if (b28Cfg.idDefaultLang && (',' + b28Cfg.supportLang.join(',') + ',').indexOf(b28Cfg.defaultLang) === -1) {
52
+ // b28Cfg.supportLang.push(b28Cfg.defaultLang);
53
+ // }
54
+
55
+ var win = window,
56
+ doc = document,
57
+ core_version = "3.0.0",
58
+ core_trim = core_version.trim,
59
+
60
+ //获取语言文件相对路径
61
+ js = document.scripts,
62
+ langPath = "/lang/",
63
+
64
+ // JSON RegExp
65
+ rvalidchars = /^[\],:{}\s]*$/,
66
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
67
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
68
+ rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
69
+
70
+ // 语言包文件是否加载完成标志
71
+ b28Loaded = false,
72
+
73
+ // Define until function
74
+ domReady, loadScript, ajaxLoadScript, loadJSON, loadXML, innerText, trim, _trim, parseJSON, createXHR,
75
+
76
+ // Define a local copy of Butterlate
77
+ Butterlate;
78
+
79
+
80
+ trim = core_trim && !core_trim.call("\uFEFF\xA0") ?
81
+ function (text) {
82
+ return text === null ?
83
+ "" :
84
+ core_trim.call(text);
85
+ } :
86
+ // Otherwise use our own trimming function
87
+ function (text) {
88
+ if (text === null) {
89
+ return "";
90
+ }
91
+
92
+ text += "";
93
+ return text.replace(/^\s+|\s+$/g, "");
94
+ };
95
+
96
+ _trim = function (str) {
97
+ if (b28Cfg.trimText) {
98
+ return trim(str);
99
+ }
100
+ return str;
101
+
102
+ };
103
+ parseJSON = function (data) {
104
+ if (window.JSON && window.JSON.parse) {
105
+ return window.JSON.parse(data);
106
+ }
107
+ if (data === null) {
108
+ return data;
109
+ }
110
+
111
+ if (typeof data === "string") {
112
+
113
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
114
+ data = trim(data);
115
+
116
+ if (data) {
117
+ // Make sure the incoming data is actual JSON
118
+ // Logic borrowed from http://json.org/json2.js
119
+ if (rvalidchars.test(data.replace(rvalidescape, "@")
120
+ .replace(rvalidtokens, "]")
121
+ .replace(rvalidbraces, ""))) {
122
+
123
+ return (new Function("return " + data))();
124
+ }
125
+ }
126
+ }
127
+ };
128
+
129
+ createXHR = (function () {
130
+ try {
131
+ return function () {
132
+ return new XMLHttpRequest();
133
+ };
134
+ } catch (e1) {
135
+ try {
136
+ return function () {
137
+ return new ActiveXObject("Msxml2.XMLHTTP");
138
+ };
139
+ } catch (e2) {
140
+ try {
141
+ return function () {
142
+ return new ActiveXObject("Microsoft.XMLHTTP");
143
+ };
144
+ } catch (e3) {
145
+ return;
146
+ }
147
+ }
148
+ }
149
+ })();
150
+ innerText = (function () {
151
+ if (b28Cfg.insertHTML) {
152
+ return function (elem, str) {
153
+ if (str) {
154
+ elem.innerHTML = str;
155
+ return elem;
156
+ }
157
+ };
158
+ }
159
+
160
+ var element = doc.createElement('p');
161
+ element.innerHTML = core_version;
162
+ return element.textContent ? function (elem, str) {
163
+ if (str) {
164
+ elem.textContent = str;
165
+ return elem;
166
+ }
167
+ return elem.textContent;
168
+
169
+ } : function (elem, str) {
170
+ if (str) {
171
+ elem.innerText = str;
172
+ return elem;
173
+ }
174
+ return elem.innerText;
175
+ };
176
+ }());
177
+
178
+ function assertElement(elem) {
179
+ //支持HTMLElement
180
+ if (typeof HTMLElement === 'object' && elem instanceof HTMLElement) {
181
+ return true;
182
+ }
183
+ //ie等
184
+ if (typeof elem === 'object' && (elem.nodeType === 1 || elem.nodeType === 9) &&
185
+ typeof elem.nodeName === 'string') {
186
+ return true;
187
+ }
188
+ return false;
189
+ }
190
+
191
+ function transTitle() {
192
+ doc.title = Butterlate.gettext(_trim(doc.title));
193
+ }
194
+
195
+ function replaceTextNodeValue(element) {
196
+ if (!element) {
197
+ return;
198
+ }
199
+ var firstChild = element.firstChild,
200
+ nextSibling = element.nextSibling,
201
+ nodeType = element.nodeType,
202
+ btnStr = "submit,reset,button",
203
+ curValue, isInputButton;
204
+
205
+
206
+
207
+ //handle element node
208
+ if (nodeType === 1) {
209
+
210
+ if (element.getAttribute("data-translated")) {
211
+ //translate siblings
212
+ if (nextSibling) {
213
+ replaceTextNodeValue(nextSibling);
214
+ }
215
+ return;
216
+ }
217
+
218
+ // Hander elements common attribute need to replace
219
+ curValue = element.getAttribute("alt");
220
+ if (curValue && /\S/.test(curValue)) {
221
+ curValue = _trim(curValue);
222
+ element.setAttribute("alt", Butterlate.gettext(curValue));
223
+ }
224
+ curValue = element.getAttribute("placeholder");
225
+ if (curValue && /\S/.test(curValue)) {
226
+ curValue = _trim(curValue);
227
+ element.setAttribute("placeholder", Butterlate.gettext(curValue));
228
+ }
229
+ curValue = element.getAttribute("title");
230
+ if (curValue && /\S/.test(curValue)) {
231
+ curValue = _trim(curValue);
232
+ element.setAttribute("title", Butterlate.gettext(curValue));
233
+ }
234
+
235
+ isInputButton = element.nodeName.toLowerCase() == "input" &&
236
+ (btnStr.indexOf(element.getAttribute("type")) !== -1);
237
+ if (isInputButton) {
238
+
239
+ //data-lang属性具有较高优先级
240
+ curValue = element.getAttribute("data-lang") || element.value;
241
+ } else {
242
+ curValue = element.getAttribute("data-lang");
243
+ }
244
+
245
+ if (curValue && /\S/.test(curValue)) {
246
+ curValue = _trim(curValue);
247
+ if (curValue) {
248
+ if (isInputButton) {
249
+ element.setAttribute("value", Butterlate.gettext(curValue));
250
+ } else {
251
+ innerText(element, Butterlate.gettext(curValue));
252
+ }
253
+ }
254
+ }
255
+
256
+ //handle textNode
257
+ } else if (nodeType === 3 && /\S/.test(element.nodeValue)) {
258
+ curValue = _trim(element.nodeValue);
259
+ element.nodeValue = Butterlate.gettext(curValue);
260
+ }
261
+ //translate siblings
262
+ if (nextSibling) {
263
+ replaceTextNodeValue(nextSibling);
264
+ }
265
+
266
+ //translate firstChild
267
+ //stop handle elem.child if elem has attr data-lang
268
+ if (firstChild && !element.getAttribute("data-lang")) {
269
+ replaceTextNodeValue(firstChild);
270
+ }
271
+ }
272
+
273
+ domReady = (function () {
274
+ var funcs = [],
275
+ already = false,
276
+ len,
277
+ i;
278
+
279
+ function handler(e) {
280
+ e = e || win.event;
281
+ if (already) {
282
+ return;
283
+ }
284
+
285
+ if (e.type === 'readystatechange' && doc.readyState !== 'complete') {
286
+ return;
287
+ }
288
+
289
+ for (i = 0, len = funcs.length; i < len; i++) {
290
+ funcs[i].call(doc);
291
+ }
292
+
293
+ already = true;
294
+ funcs = null;
295
+ }
296
+
297
+ if (doc.addEventListener) {
298
+ doc.addEventListener("DOMContentLoaded", handler, false);
299
+ doc.addEventListener("onreadystatechange", handler, false);
300
+ win.addEventListener("load", handler, false);
301
+ } else if (doc.attachEvent) {
302
+ doc.attachEvent('onreadystatechange', handler);
303
+ win.attachEvent('onload', handler);
304
+ }
305
+
306
+ // return ready() function
307
+ return function ready(f) {
308
+ if (already) {
309
+ f.call(doc);
310
+ } else {
311
+ funcs.push(f);
312
+ }
313
+ };
314
+ }());
315
+
316
+ loadScript = (function () {
317
+ var scripts = doc.createElement("script"),
318
+ hasReadyState = scripts.readyState;
319
+
320
+ return hasReadyState ? function (url, callBack) {
321
+ var scripts = doc.createElement("script");
322
+
323
+ scripts.onreadystatechange = function () {
324
+ if (scripts.readyState === 'loaded' ||
325
+ scripts.readyState === 'complete') {
326
+ scripts.onreadystatechange = null;
327
+
328
+ if (typeof callBack === "function") {
329
+ callBack();
330
+ callBack = null;
331
+ }
332
+ }
333
+ };
334
+ scripts.src = url;
335
+ doc.getElementsByTagName("head")[0].appendChild(scripts);
336
+
337
+ } : function (url, callBack) {
338
+ var scripts = doc.createElement("script");
339
+
340
+ scripts.onload = function () {
341
+ if (typeof callBack === "function") {
342
+ callBack();
343
+ callBack = null;
344
+ }
345
+ };
346
+ scripts.src = url;
347
+ doc.getElementsByTagName("head")[0].appendChild(scripts);
348
+ };
349
+ })();
350
+
351
+ loadJSON = function (url, callBack) {
352
+ var request = createXHR();
353
+ request.open("GET", url + "?" + Math.random(), false);
354
+ //request.setRequestHeader("If-Modified-Since", "1");
355
+ //request.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
356
+ request.send(null);
357
+ if (request.status >= 200 && request.status < 300 || request.status === 304) {
358
+ MSG = parseJSON(request.responseText);
359
+
360
+ if (typeof callBack === "function") {
361
+ callBack();
362
+ callBack = null;
363
+ }
364
+ }
365
+ };
366
+
367
+ function Butterlation() {
368
+ this.curDomain = 0;
369
+ this.domainArr = [];
370
+ this.options = {
371
+ "defaultLang": b28Cfg.defaultLang,
372
+ "support": b28Cfg.supportLang,
373
+ "fileType": b28Cfg.fileType
374
+ };
375
+ this.isSupport = function (lang) {
376
+ var support = this.options.support,
377
+ len = support.length,
378
+ i;
379
+
380
+ // if(support && support.indexOf(lang) < 0){
381
+ // return support[0];
382
+ // }
383
+ for (i = 0; i < len; i++) {
384
+ if (lang === support[i]) {
385
+ return support[i];
386
+ }
387
+ }
388
+ };
389
+ this.setLang = function (lang) {
390
+ //修改html的class
391
+ var reg,
392
+ htmlElem = doc.documentElement,
393
+ htmlClass = htmlElem.className;
394
+ if (lang !== undefined) {
395
+
396
+ reg = new RegExp("lang-" + this.lang, 'g');
397
+ if (!this.isSupport(lang)) {
398
+ lang = this.options.defaultLang;
399
+ }
400
+
401
+ htmlClass = htmlClass.replace(reg, '');
402
+ htmlClass ? htmlClass += " " : '';
403
+ htmlElem.className = htmlClass + "lang-" + lang;
404
+
405
+ this.lang = lang;
406
+ doc.cookie = "bLanguage=" + lang + ";";
407
+ }
408
+ return lang;
409
+ };
410
+ this.getLang = function () {
411
+ var special = {
412
+ "zh": "cn",
413
+ "zh-chs": "cn",
414
+ "zh-cn": "cn",
415
+ "zh-cht": "cn",
416
+ "zh-hk": "zh",
417
+ "zh-mo": "zh",
418
+ "zh-tw": "zh",
419
+ "zh-sg": "zh"
420
+ },
421
+ defLang = this.options.defaultLang,
422
+ local, ret, start, end;
423
+
424
+ if ((doc.cookie.indexOf("bLanguage=")) === -1) {
425
+ local = (win.navigator.language || win.navigator.userLanguage ||
426
+ win.navigator.browserLanguage || win.navigator.systemLanguage || defLang).toLowerCase();
427
+
428
+ ret = special[local] || special[local.split("-")[0].toString()] || local.split("-")[0].toString();
429
+ } else {
430
+ if (doc.cookie.indexOf("bLanguage=") === 0) {
431
+ start = 10;
432
+
433
+ //incase there has cookie like: **bLanguage=cn
434
+ } else if (doc.cookie.indexOf("; bLanguage=") !== -1) {
435
+ start = doc.cookie.indexOf("; bLanguage=") + 12;
436
+ }
437
+
438
+ if (start !== undefined) {
439
+ end = (doc.cookie.indexOf(';', start) !== -1) ?
440
+ doc.cookie.indexOf(';', start) : doc.cookie.length;
441
+ ret = doc.cookie.substring(start, end);
442
+ }
443
+ }
444
+ // return this.isSupport(ret) || this.options.defaultLang;
445
+ //
446
+ var lang = this.isSupport(ret);
447
+ if (!lang) {
448
+ if (this.options.support && this.options.support.indexOf(this.options.defaultLang) < 0) {
449
+
450
+ lang = this.options.support[0];
451
+ } else {
452
+ lang = this.options.defaultLang;
453
+ }
454
+ }
455
+ return lang;
456
+ };
457
+ this.getURL = function (domain) {
458
+ return langPath + this.lang + "/" + domain + "." + this.options.fileType;
459
+ };
460
+ this.setTextDomain = function (domain, lang, callBack) {
461
+ var htmlElem = doc.documentElement;
462
+
463
+ //Hander lang is undefined
464
+ this.lang = lang || this.getLang();
465
+ this.setLang(this.lang);
466
+ this.curDomain = 0;
467
+ if (typeof callBack === "function") {
468
+ this.success = callBack;
469
+ }
470
+
471
+ htmlElem.style.display = "none";
472
+
473
+ if (typeof domain === "string") {
474
+ this.domainArr.push(domain);
475
+ this.po = this.getURL(domain);
476
+ this.loadDomain(this.po);
477
+ }
478
+ };
479
+
480
+ this.loadDomain = function (url) {
481
+ if (b28Cfg.idDefaultLang && this.lang === b28Cfg.defaultLang) {
482
+ b28Loaded = true;
483
+ b28Cfg.initSelect && domReady(Butterlate.initSelectElem);
484
+ doc.documentElement.style.display = '';
485
+ if (typeof Butterlate.success === "function") {
486
+ Butterlate.success();
487
+ }
488
+ } else {
489
+ if (this.options.fileType === "json") {
490
+ loadJSON(url, this.loadedDict);
491
+ }
492
+ }
493
+ };
494
+ this.loadedDict = function () {
495
+ var len = Butterlate.domainArr.length;
496
+ if (Butterlate.curDomain + 1 === len) {
497
+ b28Loaded = true;
498
+ domReady(Butterlate.translatePage);
499
+ } else {
500
+ Butterlate.curDomain += 1;
501
+ }
502
+ };
503
+ this.isLoaded = function () {
504
+ return b28Loaded;
505
+ };
506
+ this.gettext = function (key) {
507
+ var tagReg = /^[a-zA-Z]\#[a-zA-Z][a-zA-Z][a-zA-Z]\#/g;
508
+
509
+ if (key === undefined) return;
510
+ if (this.options.defaultLang === this.lang) {
511
+ //处理一对多的翻译时对翻译加上了唯一标识的前缀,故需要把这些前缀去掉
512
+ return key.replace(tagReg, "");
513
+ }
514
+
515
+ return MSG[key] !== undefined ? MSG[key] : key.replace(tagReg, "");
516
+ };
517
+ this.getFormatText = function (key, replacements) {
518
+ var nkey = this.gettext(key),
519
+ index,
520
+ count = 0;
521
+ if (!replacements) {
522
+ return nkey;
523
+ }
524
+ if (replacements instanceof Array && replacements.length !== 0) {
525
+ while ((index = nkey.indexOf('%s')) !== -1) {
526
+ nkey = nkey.slice(0, index) + replacements[count] +
527
+ nkey.slice(index + 2);
528
+ count = ((count + 1) === replacements.length) ? count : (count + 1);
529
+ }
530
+ } else if (typeof replacements === "string") {
531
+ index = nkey.indexOf('%s');
532
+ nkey = nkey.slice(0, index) + replacements + nkey.slice(index + 2);
533
+ }
534
+ return nkey;
535
+ };
536
+ this.initSelectElem = function () {
537
+ var selectElem = doc.getElementById('select-lang'),
538
+ len = b28Cfg.supportLang.length,
539
+ newOption, lang, i;
540
+
541
+ if (selectElem && selectElem.nodeName.toLowerCase() == "select") {
542
+ for (i = 0; i < len; i++) {
543
+ lang = b28Cfg.supportLang[i];
544
+ newOption = new Option(Butterlate.langArr[lang], lang);
545
+ selectElem.add(newOption, undefined);
546
+ }
547
+ selectElem.value = Butterlate.lang;
548
+
549
+ if (doc.addEventListener) {
550
+ selectElem.addEventListener("change", function () {
551
+ Butterlate.setLang(doc.getElementById('select-lang').value);
552
+ setTimeout(function () {
553
+ window.location.reload();
554
+ }, 24);
555
+ }, false);
556
+
557
+ } else if (doc.attachEvent) {
558
+ selectElem.attachEvent('onchange', function () {
559
+ Butterlate.setLang(doc.getElementById('select-lang').value);
560
+ setTimeout(function () {
561
+ window.location.reload();
562
+ }, 24);
563
+ });
564
+ }
565
+
566
+ }
567
+ };
568
+ this.translate = function (translateTarget) {
569
+ var translateElem;
570
+
571
+ if (assertElement(translateTarget)) {
572
+ translateElem = translateTarget;
573
+ } else if (translateTarget && typeof translateTarget === 'string') {
574
+ translateElem = doc.getElementById(translateTarget);
575
+ }
576
+ translateElem = translateElem || doc.documentElement;
577
+
578
+ //hidepage before translate
579
+ doc.documentElement.style.display = 'none';
580
+
581
+ replaceTextNodeValue(translateElem);
582
+
583
+ //show page when translate complete
584
+ doc.documentElement.style.display = '';
585
+
586
+ if (typeof Butterlate.success === "function") {
587
+ Butterlate.success();
588
+ }
589
+ };
590
+
591
+ this.translatePage = function () {
592
+
593
+ var bodyElem = doc.body || doc.documentElement;
594
+
595
+ // 翻译HTML页面内容
596
+ transTitle();
597
+
598
+ // 初始语言选择下拉框
599
+ b28Cfg.initSelect && Butterlate.initSelectElem();
600
+
601
+ Butterlate.translate(bodyElem);
602
+
603
+ };
604
+
605
+ this.getLangJSON = function (callback) {
606
+ var url = this.getURL(this.domainArr[0]);
607
+
608
+ if (this.lang === b28Cfg.defaultLang) {
609
+ MSG = {};
610
+ this.translatePage();
611
+ return;
612
+ }
613
+ loadJSON(url, callback);
614
+ };
615
+ }
616
+
617
+ Butterlate = new Butterlation();
618
+ Butterlate.langArr = {
619
+ "cn": "简体中文",
620
+ "zh": "繁體中文",
621
+ "de": "Deutsch", //德语
622
+ "en": "English", //英语
623
+ "es": "Español", //西班牙
624
+ "fr": "Français", //法国
625
+ "hu": "Magyar", //匈牙利
626
+ "it": "Italiano", //意大利
627
+ "pl": "Polski", //波兰
628
+ "ro": "Română", //罗马尼亚
629
+ "ar": "العربية", //阿拉伯
630
+ "tr": "Türkçe", //土耳其
631
+ "ru": "Русский", //Russian 俄语
632
+ "pt": "Português", //Portugal 葡萄牙语
633
+ "ko": "한국"
634
+ };
635
+
636
+ //for debug use
637
+ Butterlate.getMsg = function () {
638
+ return MSG;
639
+ };
640
+ //Export to window
641
+ win.Butterlate = Butterlate;
642
+ win.B = win.B || win.Butterlate;
643
+ win._ = function (key, replacements) {
644
+ return Butterlate.getFormatText(key, replacements);
645
+ };
646
+ win.Butterlate.loadScript = loadScript;
647
+
648
+ B.setTextDomain("translate");
649
+
650
+
651
651
  }(window, document));