UNPKG

4.19 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _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
7exports.str = str;
8exports.html = html;
9exports.group = group;
10exports.initI18n = initI18n;
11
12var _react = require('react');
13
14var _react2 = _interopRequireDefault(_react);
15
16var _immutable = require('immutable');
17
18var _immutable2 = _interopRequireDefault(_immutable);
19
20var _util = require('util');
21
22var _sync = require('./sync');
23
24var _sync2 = _interopRequireDefault(_sync);
25
26var _index = require('./core/index');
27
28var l = _interopRequireWildcard(_index);
29
30var _data_utils = require('./utils/data_utils');
31
32var _en = require('./i18n/en');
33
34var _en2 = _interopRequireDefault(_en);
35
36var _cdn_utils = require('./utils/cdn_utils');
37
38function _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
40function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
41
42var _dataFns = (0, _data_utils.dataFns)(['i18n']),
43 get = _dataFns.get,
44 set = _dataFns.set;
45
46function 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
54function 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
64function group(m, keyPath) {
65 return get(m, ['strings'].concat(keyPath), (0, _immutable.Map)()).toJS();
66}
67
68function 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
100function 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// sync
115
116function syncLang(m, language, _cb) {
117 (0, _cdn_utils.load)({
118 method: 'registerLanguageDictionary',
119 url: l.languageBaseUrl(m) + '/js/lock/' + '11.4.0' + '/' + 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
129var languageDictionaries = [];
130
131function registerLanguageDictionary(language, dictionary) {
132 languageDictionaries[language] = _immutable2.default.fromJS(dictionary);
133}
134
135registerLanguageDictionary('en', _en2.default);
136
137(0, _cdn_utils.preload)({
138 method: 'registerLanguageDictionary',
139 cb: registerLanguageDictionary
140});