1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 |
|
5 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
6 |
|
7 | exports.str = str;
|
8 | exports.html = html;
|
9 | exports.group = group;
|
10 | exports.initI18n = initI18n;
|
11 |
|
12 | var _react = require('react');
|
13 |
|
14 | var _react2 = _interopRequireDefault(_react);
|
15 |
|
16 | var _immutable = require('immutable');
|
17 |
|
18 | var _immutable2 = _interopRequireDefault(_immutable);
|
19 |
|
20 | var _util = require('util');
|
21 |
|
22 | var _sync = require('./sync');
|
23 |
|
24 | var _sync2 = _interopRequireDefault(_sync);
|
25 |
|
26 | var _index = require('./core/index');
|
27 |
|
28 | var l = _interopRequireWildcard(_index);
|
29 |
|
30 | var _data_utils = require('./utils/data_utils');
|
31 |
|
32 | var _en = require('./i18n/en');
|
33 |
|
34 | var _en2 = _interopRequireDefault(_en);
|
35 |
|
36 | var _cdn_utils = require('./utils/cdn_utils');
|
37 |
|
38 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
39 |
|
40 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
41 |
|
42 | var _dataFns = (0, _data_utils.dataFns)(['i18n']),
|
43 | get = _dataFns.get,
|
44 | set = _dataFns.set;
|
45 |
|
46 | function str(m, keyPath) {
|
47 | for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
48 | args[_key - 2] = arguments[_key];
|
49 | }
|
50 |
|
51 | return _util.format.apply(undefined, [get(m, ['strings'].concat(keyPath), '')].concat(args));
|
52 | }
|
53 |
|
54 | function html(m, keyPath) {
|
55 | for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
|
56 | args[_key2 - 2] = arguments[_key2];
|
57 | }
|
58 |
|
59 | var html = str.apply(undefined, [m, keyPath].concat(args));
|
60 |
|
61 | return html ? _react2.default.createElement('span', { dangerouslySetInnerHTML: { __html: html } }) : null;
|
62 | }
|
63 |
|
64 | function group(m, keyPath) {
|
65 | return get(m, ['strings'].concat(keyPath), (0, _immutable.Map)()).toJS();
|
66 | }
|
67 |
|
68 | function initI18n(m) {
|
69 | var language = l.ui.language(m);
|
70 | var overrides = l.ui.dict(m);
|
71 | var defaultDictionary = _immutable2.default.fromJS(_en2.default);
|
72 |
|
73 | var base = languageDictionaries[language] || (0, _immutable.Map)({});
|
74 |
|
75 | if (base.isEmpty()) {
|
76 | base = overrides;
|
77 | m = (0, _sync2.default)(m, 'i18n', {
|
78 | syncFn: function syncFn(_, cb) {
|
79 | return syncLang(m, language, cb);
|
80 | },
|
81 | successFn: function successFn(m, result) {
|
82 | registerLanguageDictionary(language, result);
|
83 |
|
84 | var overrided = _immutable2.default.fromJS(result).mergeDeep(overrides);
|
85 |
|
86 | assertLanguage(m, overrided.toJS(), _en2.default);
|
87 |
|
88 | return set(m, 'strings', defaultDictionary.mergeDeep(overrided));
|
89 | }
|
90 | });
|
91 | } else {
|
92 | assertLanguage(m, base.toJS(), _en2.default);
|
93 | }
|
94 |
|
95 | base = defaultDictionary.mergeDeep(base).mergeDeep(overrides);
|
96 |
|
97 | return set(m, 'strings', base);
|
98 | }
|
99 |
|
100 | function assertLanguage(m, language, base) {
|
101 | var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
102 |
|
103 | Object.keys(base).forEach(function (key) {
|
104 | if (!language.hasOwnProperty(key)) {
|
105 | l.warn(m, 'language does not have property ' + path + key);
|
106 | } else {
|
107 | if (_typeof(base[key]) === 'object') {
|
108 | assertLanguage(m, language[key], base[key], '' + path + key + '.');
|
109 | }
|
110 | }
|
111 | });
|
112 | }
|
113 |
|
114 |
|
115 |
|
116 | function syncLang(m, language, _cb) {
|
117 | (0, _cdn_utils.load)({
|
118 | method: 'registerLanguageDictionary',
|
119 | url: l.languageBaseUrl(m) + '/js/lock/' + '11.5.1' + '/' + language + '.js',
|
120 | check: function check(str) {
|
121 | return str && str === language;
|
122 | },
|
123 | cb: function cb(err, _, dictionary) {
|
124 | _cb(err, dictionary);
|
125 | }
|
126 | });
|
127 | }
|
128 |
|
129 | var languageDictionaries = [];
|
130 |
|
131 | function registerLanguageDictionary(language, dictionary) {
|
132 | languageDictionaries[language] = _immutable2.default.fromJS(dictionary);
|
133 | }
|
134 |
|
135 | registerLanguageDictionary('en', _en2.default);
|
136 |
|
137 | (0, _cdn_utils.preload)({
|
138 | method: 'registerLanguageDictionary',
|
139 | cb: registerLanguageDictionary
|
140 | });
|