@wordpress/i18n 6.5.0 → 6.5.1-next.47f435fc9.0
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.
- package/build/create-i18n.js +150 -167
- package/build/create-i18n.js.map +7 -1
- package/build/default-i18n.js +59 -156
- package/build/default-i18n.js.map +7 -1
- package/build/index.js +60 -103
- package/build/index.js.map +7 -1
- package/build/sprintf.js +38 -28
- package/build/sprintf.js.map +7 -1
- package/build/types.js +16 -5
- package/build/types.js.map +7 -1
- package/build-module/create-i18n.js +118 -161
- package/build-module/create-i18n.js.map +7 -1
- package/build-module/default-i18n.js +28 -153
- package/build-module/default-i18n.js.map +7 -1
- package/build-module/index.js +30 -4
- package/build-module/index.js.map +7 -1
- package/build-module/sprintf.js +6 -23
- package/build-module/sprintf.js.map +7 -1
- package/build-module/types.js +1 -2
- package/build-module/types.js.map +7 -1
- package/package.json +11 -4
package/build/create-i18n.js
CHANGED
|
@@ -1,232 +1,215 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
Object.
|
|
5
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var create_i18n_exports = {};
|
|
30
|
+
__export(create_i18n_exports, {
|
|
31
|
+
createI18n: () => createI18n
|
|
6
32
|
});
|
|
7
|
-
exports
|
|
8
|
-
var
|
|
9
|
-
/**
|
|
10
|
-
* External dependencies
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Internal dependencies
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* WordPress dependencies
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Default locale data to use for Tannin domain when not otherwise provided.
|
|
23
|
-
* Assumes an English plural forms expression.
|
|
24
|
-
*/
|
|
33
|
+
module.exports = __toCommonJS(create_i18n_exports);
|
|
34
|
+
var import_tannin = __toESM(require("tannin"));
|
|
25
35
|
const DEFAULT_LOCALE_DATA = {
|
|
26
|
-
|
|
36
|
+
"": {
|
|
27
37
|
plural_forms(n) {
|
|
28
38
|
return n === 1 ? 0 : 1;
|
|
29
39
|
}
|
|
30
40
|
}
|
|
31
41
|
};
|
|
32
|
-
|
|
33
|
-
/*
|
|
34
|
-
* Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,
|
|
35
|
-
* `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.
|
|
36
|
-
*/
|
|
37
42
|
const I18N_HOOK_REGEXP = /^i18n\.(n?gettext|has_translation)(_|$)/;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Create an i18n instance
|
|
41
|
-
*
|
|
42
|
-
* @param [initialData] Locale data configuration.
|
|
43
|
-
* @param [initialDomain] Domain for which configuration applies.
|
|
44
|
-
* @param [hooks] Hooks implementation.
|
|
45
|
-
*
|
|
46
|
-
* @return I18n instance.
|
|
47
|
-
*/
|
|
48
43
|
const createI18n = (initialData, initialDomain, hooks) => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
*/
|
|
52
|
-
const tannin = new _tannin.default({});
|
|
53
|
-
const listeners = new Set();
|
|
44
|
+
const tannin = new import_tannin.default({});
|
|
45
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
54
46
|
const notifyListeners = () => {
|
|
55
|
-
listeners.forEach(listener => listener());
|
|
47
|
+
listeners.forEach((listener) => listener());
|
|
56
48
|
};
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Subscribe to changes of locale data.
|
|
60
|
-
*
|
|
61
|
-
* @param callback Subscription callback.
|
|
62
|
-
* @return Unsubscribe callback.
|
|
63
|
-
*/
|
|
64
|
-
const subscribe = callback => {
|
|
49
|
+
const subscribe = (callback) => {
|
|
65
50
|
listeners.add(callback);
|
|
66
51
|
return () => listeners.delete(callback);
|
|
67
52
|
};
|
|
68
|
-
const getLocaleData = (domain =
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* @param [data]
|
|
72
|
-
* @param [domain]
|
|
73
|
-
*/
|
|
74
|
-
const doSetLocaleData = (data, domain = 'default') => {
|
|
53
|
+
const getLocaleData = (domain = "default") => tannin.data[domain];
|
|
54
|
+
const doSetLocaleData = (data, domain = "default") => {
|
|
75
55
|
tannin.data[domain] = {
|
|
76
56
|
...tannin.data[domain],
|
|
77
57
|
...data
|
|
78
58
|
};
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
tannin.data[domain][''] = {
|
|
83
|
-
...DEFAULT_LOCALE_DATA[''],
|
|
84
|
-
...tannin.data[domain]?.['']
|
|
59
|
+
tannin.data[domain][""] = {
|
|
60
|
+
...DEFAULT_LOCALE_DATA[""],
|
|
61
|
+
...tannin.data[domain]?.[""]
|
|
85
62
|
};
|
|
86
|
-
|
|
87
|
-
// Clean up cached plural forms functions cache as it might be updated.
|
|
88
63
|
delete tannin.pluralForms[domain];
|
|
89
64
|
};
|
|
90
65
|
const setLocaleData = (data, domain) => {
|
|
91
66
|
doSetLocaleData(data, domain);
|
|
92
67
|
notifyListeners();
|
|
93
68
|
};
|
|
94
|
-
const addLocaleData = (data, domain =
|
|
69
|
+
const addLocaleData = (data, domain = "default") => {
|
|
95
70
|
tannin.data[domain] = {
|
|
96
71
|
...tannin.data[domain],
|
|
97
72
|
...data,
|
|
98
73
|
// Populate default domain configuration (supported locale date which omits
|
|
99
74
|
// a plural forms expression).
|
|
100
|
-
|
|
101
|
-
...DEFAULT_LOCALE_DATA[
|
|
102
|
-
...tannin.data[domain]?.[
|
|
103
|
-
...data?.[
|
|
75
|
+
"": {
|
|
76
|
+
...DEFAULT_LOCALE_DATA[""],
|
|
77
|
+
...tannin.data[domain]?.[""],
|
|
78
|
+
...data?.[""]
|
|
104
79
|
}
|
|
105
80
|
};
|
|
106
|
-
|
|
107
|
-
// Clean up cached plural forms functions cache as it might be updated.
|
|
108
81
|
delete tannin.pluralForms[domain];
|
|
109
82
|
notifyListeners();
|
|
110
83
|
};
|
|
111
84
|
const resetLocaleData = (data, domain) => {
|
|
112
|
-
// Reset all current Tannin locale data.
|
|
113
85
|
tannin.data = {};
|
|
114
|
-
|
|
115
|
-
// Reset cached plural forms functions cache.
|
|
116
86
|
tannin.pluralForms = {};
|
|
117
87
|
setLocaleData(data, domain);
|
|
118
88
|
};
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not
|
|
122
|
-
* otherwise previously assigned.
|
|
123
|
-
*
|
|
124
|
-
* @param domain Domain to retrieve the translated text.
|
|
125
|
-
* @param context Context information for the translators.
|
|
126
|
-
* @param single Text to translate if non-plural. Used as
|
|
127
|
-
* fallback return value on a caught error.
|
|
128
|
-
* @param [plural] The text to be used if the number is
|
|
129
|
-
* plural.
|
|
130
|
-
* @param [number] The number to compare against to use
|
|
131
|
-
* either the singular or plural form.
|
|
132
|
-
*
|
|
133
|
-
* @return The translated string.
|
|
134
|
-
*/
|
|
135
|
-
const dcnpgettext = (domain = 'default', context, single, plural, number) => {
|
|
89
|
+
const dcnpgettext = (domain = "default", context, single, plural, number) => {
|
|
136
90
|
if (!tannin.data[domain]) {
|
|
137
|
-
|
|
138
|
-
doSetLocaleData(undefined, domain);
|
|
91
|
+
doSetLocaleData(void 0, domain);
|
|
139
92
|
}
|
|
140
93
|
return tannin.dcnpgettext(domain, context, single, plural, number);
|
|
141
94
|
};
|
|
142
|
-
const getFilterDomain = domain => domain ||
|
|
95
|
+
const getFilterDomain = (domain) => domain || "default";
|
|
143
96
|
const __ = (text, domain) => {
|
|
144
|
-
let translation = dcnpgettext(domain,
|
|
97
|
+
let translation = dcnpgettext(domain, void 0, text);
|
|
145
98
|
if (!hooks) {
|
|
146
99
|
return translation;
|
|
147
100
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
101
|
+
translation = hooks.applyFilters(
|
|
102
|
+
"i18n.gettext",
|
|
103
|
+
translation,
|
|
104
|
+
text,
|
|
105
|
+
domain
|
|
106
|
+
);
|
|
107
|
+
return hooks.applyFilters(
|
|
108
|
+
"i18n.gettext_" + getFilterDomain(domain),
|
|
109
|
+
translation,
|
|
110
|
+
text,
|
|
111
|
+
domain
|
|
112
|
+
);
|
|
158
113
|
};
|
|
159
114
|
const _x = (text, context, domain) => {
|
|
160
115
|
let translation = dcnpgettext(domain, context, text);
|
|
161
116
|
if (!hooks) {
|
|
162
117
|
return translation;
|
|
163
118
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
119
|
+
translation = hooks.applyFilters(
|
|
120
|
+
"i18n.gettext_with_context",
|
|
121
|
+
translation,
|
|
122
|
+
text,
|
|
123
|
+
context,
|
|
124
|
+
domain
|
|
125
|
+
);
|
|
126
|
+
return hooks.applyFilters(
|
|
127
|
+
"i18n.gettext_with_context_" + getFilterDomain(domain),
|
|
128
|
+
translation,
|
|
129
|
+
text,
|
|
130
|
+
context,
|
|
131
|
+
domain
|
|
132
|
+
);
|
|
175
133
|
};
|
|
176
134
|
const _n = (single, plural, number, domain) => {
|
|
177
|
-
let translation = dcnpgettext(
|
|
135
|
+
let translation = dcnpgettext(
|
|
136
|
+
domain,
|
|
137
|
+
void 0,
|
|
138
|
+
single,
|
|
139
|
+
plural,
|
|
140
|
+
number
|
|
141
|
+
);
|
|
178
142
|
if (!hooks) {
|
|
179
143
|
return translation;
|
|
180
144
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
145
|
+
translation = hooks.applyFilters(
|
|
146
|
+
"i18n.ngettext",
|
|
147
|
+
translation,
|
|
148
|
+
single,
|
|
149
|
+
plural,
|
|
150
|
+
number,
|
|
151
|
+
domain
|
|
152
|
+
);
|
|
153
|
+
return hooks.applyFilters(
|
|
154
|
+
"i18n.ngettext_" + getFilterDomain(domain),
|
|
155
|
+
translation,
|
|
156
|
+
single,
|
|
157
|
+
plural,
|
|
158
|
+
number,
|
|
159
|
+
domain
|
|
160
|
+
);
|
|
193
161
|
};
|
|
194
162
|
const _nx = (single, plural, number, context, domain) => {
|
|
195
|
-
let translation = dcnpgettext(
|
|
163
|
+
let translation = dcnpgettext(
|
|
164
|
+
domain,
|
|
165
|
+
context,
|
|
166
|
+
single,
|
|
167
|
+
plural,
|
|
168
|
+
number
|
|
169
|
+
);
|
|
196
170
|
if (!hooks) {
|
|
197
171
|
return translation;
|
|
198
172
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
173
|
+
translation = hooks.applyFilters(
|
|
174
|
+
"i18n.ngettext_with_context",
|
|
175
|
+
translation,
|
|
176
|
+
single,
|
|
177
|
+
plural,
|
|
178
|
+
number,
|
|
179
|
+
context,
|
|
180
|
+
domain
|
|
181
|
+
);
|
|
182
|
+
return hooks.applyFilters(
|
|
183
|
+
"i18n.ngettext_with_context_" + getFilterDomain(domain),
|
|
184
|
+
translation,
|
|
185
|
+
single,
|
|
186
|
+
plural,
|
|
187
|
+
number,
|
|
188
|
+
context,
|
|
189
|
+
domain
|
|
190
|
+
);
|
|
212
191
|
};
|
|
213
192
|
const isRTL = () => {
|
|
214
|
-
return
|
|
193
|
+
return "rtl" === _x("ltr", "text direction");
|
|
215
194
|
};
|
|
216
195
|
const hasTranslation = (single, context, domain) => {
|
|
217
|
-
const key = context ? context +
|
|
218
|
-
let result = !!tannin.data?.[domain
|
|
196
|
+
const key = context ? context + "" + single : single;
|
|
197
|
+
let result = !!tannin.data?.[domain ?? "default"]?.[key];
|
|
219
198
|
if (hooks) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
199
|
+
result = hooks.applyFilters(
|
|
200
|
+
"i18n.has_translation",
|
|
201
|
+
result,
|
|
202
|
+
single,
|
|
203
|
+
context,
|
|
204
|
+
domain
|
|
205
|
+
);
|
|
206
|
+
result = hooks.applyFilters(
|
|
207
|
+
"i18n.has_translation_" + getFilterDomain(domain),
|
|
208
|
+
result,
|
|
209
|
+
single,
|
|
210
|
+
context,
|
|
211
|
+
domain
|
|
212
|
+
);
|
|
230
213
|
}
|
|
231
214
|
return result;
|
|
232
215
|
};
|
|
@@ -234,16 +217,13 @@ const createI18n = (initialData, initialDomain, hooks) => {
|
|
|
234
217
|
setLocaleData(initialData, initialDomain);
|
|
235
218
|
}
|
|
236
219
|
if (hooks) {
|
|
237
|
-
|
|
238
|
-
* @param hookName
|
|
239
|
-
*/
|
|
240
|
-
const onHookAddedOrRemoved = hookName => {
|
|
220
|
+
const onHookAddedOrRemoved = (hookName) => {
|
|
241
221
|
if (I18N_HOOK_REGEXP.test(hookName)) {
|
|
242
222
|
notifyListeners();
|
|
243
223
|
}
|
|
244
224
|
};
|
|
245
|
-
hooks.addAction(
|
|
246
|
-
hooks.addAction(
|
|
225
|
+
hooks.addAction("hookAdded", "core/i18n", onHookAddedOrRemoved);
|
|
226
|
+
hooks.addAction("hookRemoved", "core/i18n", onHookAddedOrRemoved);
|
|
247
227
|
}
|
|
248
228
|
return {
|
|
249
229
|
getLocaleData,
|
|
@@ -259,5 +239,8 @@ const createI18n = (initialData, initialDomain, hooks) => {
|
|
|
259
239
|
hasTranslation
|
|
260
240
|
};
|
|
261
241
|
};
|
|
262
|
-
|
|
263
|
-
|
|
242
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
243
|
+
0 && (module.exports = {
|
|
244
|
+
createI18n
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=create-i18n.js.map
|
package/build/create-i18n.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"names":["_tannin","_interopRequireDefault","require","DEFAULT_LOCALE_DATA","plural_forms","n","I18N_HOOK_REGEXP","createI18n","initialData","initialDomain","hooks","tannin","Tannin","listeners","Set","notifyListeners","forEach","listener","subscribe","callback","add","delete","getLocaleData","domain","data","doSetLocaleData","pluralForms","setLocaleData","addLocaleData","resetLocaleData","dcnpgettext","context","single","plural","number","undefined","getFilterDomain","__","text","translation","applyFilters","_x","_n","_nx","isRTL","hasTranslation","key","result","onHookAddedOrRemoved","hookName","test","addAction","exports"],"sources":["@wordpress/i18n/src/create-i18n.ts"],"sourcesContent":["/**\n * External dependencies\n */\nimport type { TanninLocaleDomain } from 'tannin';\nimport Tannin from 'tannin';\n/**\n * Internal dependencies\n */\nimport type {\n\tgetFilterDomain,\n\tI18n,\n\tLocaleData,\n\tSubscribeCallback,\n\tTranslatableText,\n\tUnsubscribeCallback,\n} from './types';\n/**\n * WordPress dependencies\n */\nimport type { Hooks } from '@wordpress/hooks';\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n */\nconst DEFAULT_LOCALE_DATA: LocaleData = {\n\t'': {\n\t\tplural_forms( n: number ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * Create an i18n instance\n *\n * @param [initialData] Locale data configuration.\n * @param [initialDomain] Domain for which configuration applies.\n * @param [hooks] Hooks implementation.\n *\n * @return I18n instance.\n */\nexport const createI18n = < TextDomain extends string >(\n\tinitialData?: LocaleData< TextDomain >,\n\tinitialDomain?: TextDomain,\n\thooks?: Hooks\n): I18n< TextDomain > => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set< () => void >();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param callback Subscription callback.\n\t * @return Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback: SubscribeCallback ): UnsubscribeCallback => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\tconst getLocaleData: I18n< TextDomain >[ 'getLocaleData' ] = (\n\t\tdomain = 'default' as TextDomain\n\t) => tannin.data[ domain ] as LocaleData< TextDomain >;\n\n\t/**\n\t * @param [data]\n\t * @param [domain]\n\t */\n\tconst doSetLocaleData = (\n\t\tdata?: LocaleData,\n\t\tdomain: TextDomain = 'default' as TextDomain\n\t) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t} as TanninLocaleDomain;\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\tconst setLocaleData: I18n< TextDomain >[ 'setLocaleData' ] = (\n\t\tdata,\n\t\tdomain\n\t) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\tconst addLocaleData: I18n< TextDomain >[ 'addLocaleData' ] = (\n\t\tdata,\n\t\tdomain = 'default' as TextDomain\n\t) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t} as TanninLocaleDomain;\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\tconst resetLocaleData: I18n< TextDomain >[ 'resetLocaleData' ] = (\n\t\tdata,\n\t\tdomain\n\t) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param domain Domain to retrieve the translated text.\n\t * @param context Context information for the translators.\n\t * @param single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param [plural] The text to be used if the number is\n\t * plural.\n\t * @param [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default' as TextDomain,\n\t\tcontext: string | void,\n\t\tsingle: string,\n\t\tplural?: string,\n\t\tnumber?: number\n\t): string => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\tconst getFilterDomain: getFilterDomain = ( domain ) => domain || 'default';\n\n\tconst __: I18n< TextDomain >[ '__' ] = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText< typeof text >;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param text Text to translate.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.gettext',\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\t};\n\n\tconst _x: I18n< TextDomain >[ '_x' ] = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText< typeof text >;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param text Text to translate.\n\t\t * @param context Context information for the translators.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.gettext_with_context',\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\t};\n\n\tconst _n: I18n< TextDomain >[ '_n' ] = (\n\t\tsingle,\n\t\tplural,\n\t\tnumber,\n\t\tdomain\n\t) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText<\n\t\t\t\ttypeof single | typeof plural\n\t\t\t>;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param single The text to be used if the number is singular.\n\t\t * @param plural The text to be used if the number is plural.\n\t\t * @param number The number to compare against to use either the singular or plural form.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.ngettext',\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\t};\n\n\tconst _nx: I18n< TextDomain >[ '_nx' ] = (\n\t\tsingle,\n\t\tplural,\n\t\tnumber,\n\t\tcontext,\n\t\tdomain\n\t) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText<\n\t\t\t\ttypeof single | typeof plural\n\t\t\t>;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param single The text to be used if the number is singular.\n\t\t * @param plural The text to be used if the number is plural.\n\t\t * @param number The number to compare against to use either the singular or plural form.\n\t\t * @param context Context information for the translators.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.ngettext_with_context',\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\t};\n\n\tconst isRTL: I18n< TextDomain >[ 'isRTL' ] = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\tconst hasTranslation: I18n< TextDomain >[ 'hasTranslation' ] = (\n\t\tsingle,\n\t\tcontext,\n\t\tdomain\n\t) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param hasTranslation Whether the translation is present or not..\n\t\t\t * @param single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param context Context information for the translators.\n\t\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = hooks.applyFilters(\n\t\t\t\t'i18n.has_translation',\n\t\t\t\tresult,\n\t\t\t\tsingle,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t) as boolean;\n\n\t\t\tresult = hooks.applyFilters(\n\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\tresult,\n\t\t\t\tsingle,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t) as boolean;\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName: string ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n"],"mappings":";;;;;;;AAIA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAJA;AACA;AACA;;AAGA;AACA;AACA;;AASA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAMC,mBAA+B,GAAG;EACvC,EAAE,EAAE;IACHC,YAAYA,CAAEC,CAAS,EAAG;MACzB,OAAOA,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACvB;EACD;AACD,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG,yCAAyC;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAGA,CACzBC,WAAsC,EACtCC,aAA0B,EAC1BC,KAAa,KACW;EACxB;AACD;AACA;EACC,MAAMC,MAAM,GAAG,IAAIC,eAAM,CAAE,CAAC,CAAE,CAAC;EAE/B,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAe,CAAC;EAEzC,MAAMC,eAAe,GAAGA,CAAA,KAAM;IAC7BF,SAAS,CAACG,OAAO,CAAIC,QAAQ,IAAMA,QAAQ,CAAC,CAAE,CAAC;EAChD,CAAC;;EAED;AACD;AACA;AACA;AACA;AACA;EACC,MAAMC,SAAS,GAAKC,QAA2B,IAA2B;IACzEN,SAAS,CAACO,GAAG,CAAED,QAAS,CAAC;IACzB,OAAO,MAAMN,SAAS,CAACQ,MAAM,CAAEF,QAAS,CAAC;EAC1C,CAAC;EAED,MAAMG,aAAoD,GAAGA,CAC5DC,MAAM,GAAG,SAAuB,KAC5BZ,MAAM,CAACa,IAAI,CAAED,MAAM,CAA8B;;EAEtD;AACD;AACA;AACA;EACC,MAAME,eAAe,GAAGA,CACvBD,IAAiB,EACjBD,MAAkB,GAAG,SAAuB,KACxC;IACJZ,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE,GAAG;MACvB,GAAGZ,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE;MACxB,GAAGC;IACJ,CAAuB;;IAEvB;IACA;IACAb,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE,CAAE,EAAE,CAAE,GAAG;MAC7B,GAAGpB,mBAAmB,CAAE,EAAE,CAAE;MAC5B,GAAGQ,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE,GAAI,EAAE;IAC/B,CAAC;;IAED;IACA,OAAOZ,MAAM,CAACe,WAAW,CAAEH,MAAM,CAAE;EACpC,CAAC;EAED,MAAMI,aAAoD,GAAGA,CAC5DH,IAAI,EACJD,MAAM,KACF;IACJE,eAAe,CAAED,IAAI,EAAED,MAAO,CAAC;IAC/BR,eAAe,CAAC,CAAC;EAClB,CAAC;EAED,MAAMa,aAAoD,GAAGA,CAC5DJ,IAAI,EACJD,MAAM,GAAG,SAAuB,KAC5B;IACJZ,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE,GAAG;MACvB,GAAGZ,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE;MACxB,GAAGC,IAAI;MACP;MACA;MACA,EAAE,EAAE;QACH,GAAGrB,mBAAmB,CAAE,EAAE,CAAE;QAC5B,GAAGQ,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE,GAAI,EAAE,CAAE;QAChC,GAAGC,IAAI,GAAI,EAAE;MACd;IACD,CAAuB;;IAEvB;IACA,OAAOb,MAAM,CAACe,WAAW,CAAEH,MAAM,CAAE;IAEnCR,eAAe,CAAC,CAAC;EAClB,CAAC;EAED,MAAMc,eAAwD,GAAGA,CAChEL,IAAI,EACJD,MAAM,KACF;IACJ;IACAZ,MAAM,CAACa,IAAI,GAAG,CAAC,CAAC;;IAEhB;IACAb,MAAM,CAACe,WAAW,GAAG,CAAC,CAAC;IAEvBC,aAAa,CAAEH,IAAI,EAAED,MAAO,CAAC;EAC9B,CAAC;;EAED;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACC,MAAMO,WAAW,GAAGA,CACnBP,MAAM,GAAG,SAAuB,EAChCQ,OAAsB,EACtBC,MAAc,EACdC,MAAe,EACfC,MAAe,KACH;IACZ,IAAK,CAAEvB,MAAM,CAACa,IAAI,CAAED,MAAM,CAAE,EAAG;MAC9B;MACAE,eAAe,CAAEU,SAAS,EAAEZ,MAAO,CAAC;IACrC;IAEA,OAAOZ,MAAM,CAACmB,WAAW,CAAEP,MAAM,EAAEQ,OAAO,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAO,CAAC;EACrE,CAAC;EAED,MAAME,eAAgC,GAAKb,MAAM,IAAMA,MAAM,IAAI,SAAS;EAE1E,MAAMc,EAA8B,GAAGA,CAAEC,IAAI,EAAEf,MAAM,KAAM;IAC1D,IAAIgB,WAAW,GAAGT,WAAW,CAAEP,MAAM,EAAEY,SAAS,EAAEG,IAAK,CAAC;IACxD,IAAK,CAAE5B,KAAK,EAAG;MACd,OAAO6B,WAAW;IACnB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;IACEA,WAAW,GAAG7B,KAAK,CAAC8B,YAAY,CAC/B,cAAc,EACdD,WAAW,EACXD,IAAI,EACJf,MACD,CAAoC;IAEpC,OAAOb,KAAK,CAAC8B,YAAY,CACxB,eAAe,GAAGJ,eAAe,CAAEb,MAAO,CAAC,EAC3CgB,WAAW,EACXD,IAAI,EACJf,MACD,CAAC;EACF,CAAC;EAED,MAAMkB,EAA8B,GAAGA,CAAEH,IAAI,EAAEP,OAAO,EAAER,MAAM,KAAM;IACnE,IAAIgB,WAAW,GAAGT,WAAW,CAAEP,MAAM,EAAEQ,OAAO,EAAEO,IAAK,CAAC;IACtD,IAAK,CAAE5B,KAAK,EAAG;MACd,OAAO6B,WAAW;IACnB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACEA,WAAW,GAAG7B,KAAK,CAAC8B,YAAY,CAC/B,2BAA2B,EAC3BD,WAAW,EACXD,IAAI,EACJP,OAAO,EACPR,MACD,CAAoC;IAEpC,OAAOb,KAAK,CAAC8B,YAAY,CACxB,4BAA4B,GAAGJ,eAAe,CAAEb,MAAO,CAAC,EACxDgB,WAAW,EACXD,IAAI,EACJP,OAAO,EACPR,MACD,CAAC;EACF,CAAC;EAED,MAAMmB,EAA8B,GAAGA,CACtCV,MAAM,EACNC,MAAM,EACNC,MAAM,EACNX,MAAM,KACF;IACJ,IAAIgB,WAAW,GAAGT,WAAW,CAC5BP,MAAM,EACNY,SAAS,EACTH,MAAM,EACNC,MAAM,EACNC,MACD,CAAC;IACD,IAAK,CAAExB,KAAK,EAAG;MACd,OAAO6B,WAAW;IAGnB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACEA,WAAW,GAAG7B,KAAK,CAAC8B,YAAY,CAC/B,eAAe,EACfD,WAAW,EACXP,MAAM,EACNC,MAAM,EACNC,MAAM,EACNX,MACD,CAAsD;IAEtD,OAAOb,KAAK,CAAC8B,YAAY,CACxB,gBAAgB,GAAGJ,eAAe,CAAEb,MAAO,CAAC,EAC5CgB,WAAW,EACXP,MAAM,EACNC,MAAM,EACNC,MAAM,EACNX,MACD,CAAC;EACF,CAAC;EAED,MAAMoB,GAAgC,GAAGA,CACxCX,MAAM,EACNC,MAAM,EACNC,MAAM,EACNH,OAAO,EACPR,MAAM,KACF;IACJ,IAAIgB,WAAW,GAAGT,WAAW,CAC5BP,MAAM,EACNQ,OAAO,EACPC,MAAM,EACNC,MAAM,EACNC,MACD,CAAC;IACD,IAAK,CAAExB,KAAK,EAAG;MACd,OAAO6B,WAAW;IAGnB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACEA,WAAW,GAAG7B,KAAK,CAAC8B,YAAY,CAC/B,4BAA4B,EAC5BD,WAAW,EACXP,MAAM,EACNC,MAAM,EACNC,MAAM,EACNH,OAAO,EACPR,MACD,CAAsD;IAEtD,OAAOb,KAAK,CAAC8B,YAAY,CACxB,6BAA6B,GAAGJ,eAAe,CAAEb,MAAO,CAAC,EACzDgB,WAAW,EACXP,MAAM,EACNC,MAAM,EACNC,MAAM,EACNH,OAAO,EACPR,MACD,CAAC;EACF,CAAC;EAED,MAAMqB,KAAoC,GAAGA,CAAA,KAAM;IAClD,OAAO,KAAK,KAAKH,EAAE,CAAE,KAAK,EAAE,gBAAiB,CAAC;EAC/C,CAAC;EAED,MAAMI,cAAsD,GAAGA,CAC9Db,MAAM,EACND,OAAO,EACPR,MAAM,KACF;IACJ,MAAMuB,GAAG,GAAGf,OAAO,GAAGA,OAAO,GAAG,QAAQ,GAAGC,MAAM,GAAGA,MAAM;IAC1D,IAAIe,MAAM,GAAG,CAAC,CAAEpC,MAAM,CAACa,IAAI,GAAID,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,SAAS,CAAE,GAAIuB,GAAG,CAAE;IAC7D,IAAKpC,KAAK,EAAG;MACZ;AACH;AACA;AACA;AACA;AACA;AACA;AACA;MACGqC,MAAM,GAAGrC,KAAK,CAAC8B,YAAY,CAC1B,sBAAsB,EACtBO,MAAM,EACNf,MAAM,EACND,OAAO,EACPR,MACD,CAAY;MAEZwB,MAAM,GAAGrC,KAAK,CAAC8B,YAAY,CAC1B,uBAAuB,GAAGJ,eAAe,CAAEb,MAAO,CAAC,EACnDwB,MAAM,EACNf,MAAM,EACND,OAAO,EACPR,MACD,CAAY;IACb;IACA,OAAOwB,MAAM;EACd,CAAC;EAED,IAAKvC,WAAW,EAAG;IAClBmB,aAAa,CAAEnB,WAAW,EAAEC,aAAc,CAAC;EAC5C;EAEA,IAAKC,KAAK,EAAG;IACZ;AACF;AACA;IACE,MAAMsC,oBAAoB,GAAKC,QAAgB,IAAM;MACpD,IAAK3C,gBAAgB,CAAC4C,IAAI,CAAED,QAAS,CAAC,EAAG;QACxClC,eAAe,CAAC,CAAC;MAClB;IACD,CAAC;IAEDL,KAAK,CAACyC,SAAS,CAAE,WAAW,EAAE,WAAW,EAAEH,oBAAqB,CAAC;IACjEtC,KAAK,CAACyC,SAAS,CAAE,aAAa,EAAE,WAAW,EAAEH,oBAAqB,CAAC;EACpE;EAEA,OAAO;IACN1B,aAAa;IACbK,aAAa;IACbC,aAAa;IACbC,eAAe;IACfX,SAAS;IACTmB,EAAE;IACFI,EAAE;IACFC,EAAE;IACFC,GAAG;IACHC,KAAK;IACLC;EACD,CAAC;AACF,CAAC;AAACO,OAAA,CAAA7C,UAAA,GAAAA,UAAA","ignoreList":[]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/create-i18n.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport type { TanninLocaleDomain } from 'tannin';\nimport Tannin from 'tannin';\n/**\n * Internal dependencies\n */\nimport type {\n\tgetFilterDomain,\n\tI18n,\n\tLocaleData,\n\tSubscribeCallback,\n\tTranslatableText,\n\tUnsubscribeCallback,\n} from './types';\n/**\n * WordPress dependencies\n */\nimport type { Hooks } from '@wordpress/hooks';\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n */\nconst DEFAULT_LOCALE_DATA: LocaleData = {\n\t'': {\n\t\tplural_forms( n: number ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * Create an i18n instance\n *\n * @param [initialData] Locale data configuration.\n * @param [initialDomain] Domain for which configuration applies.\n * @param [hooks] Hooks implementation.\n *\n * @return I18n instance.\n */\nexport const createI18n = < TextDomain extends string >(\n\tinitialData?: LocaleData< TextDomain >,\n\tinitialDomain?: TextDomain,\n\thooks?: Hooks\n): I18n< TextDomain > => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set< () => void >();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param callback Subscription callback.\n\t * @return Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback: SubscribeCallback ): UnsubscribeCallback => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\tconst getLocaleData: I18n< TextDomain >[ 'getLocaleData' ] = (\n\t\tdomain = 'default' as TextDomain\n\t) => tannin.data[ domain ] as LocaleData< TextDomain >;\n\n\t/**\n\t * @param [data]\n\t * @param [domain]\n\t */\n\tconst doSetLocaleData = (\n\t\tdata?: LocaleData,\n\t\tdomain: TextDomain = 'default' as TextDomain\n\t) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t} as TanninLocaleDomain;\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\tconst setLocaleData: I18n< TextDomain >[ 'setLocaleData' ] = (\n\t\tdata,\n\t\tdomain\n\t) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\tconst addLocaleData: I18n< TextDomain >[ 'addLocaleData' ] = (\n\t\tdata,\n\t\tdomain = 'default' as TextDomain\n\t) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t} as TanninLocaleDomain;\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\tconst resetLocaleData: I18n< TextDomain >[ 'resetLocaleData' ] = (\n\t\tdata,\n\t\tdomain\n\t) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param domain Domain to retrieve the translated text.\n\t * @param context Context information for the translators.\n\t * @param single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param [plural] The text to be used if the number is\n\t * plural.\n\t * @param [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default' as TextDomain,\n\t\tcontext: string | void,\n\t\tsingle: string,\n\t\tplural?: string,\n\t\tnumber?: number\n\t): string => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\tconst getFilterDomain: getFilterDomain = ( domain ) => domain || 'default';\n\n\tconst __: I18n< TextDomain >[ '__' ] = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText< typeof text >;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param text Text to translate.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.gettext',\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\t};\n\n\tconst _x: I18n< TextDomain >[ '_x' ] = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText< typeof text >;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param text Text to translate.\n\t\t * @param context Context information for the translators.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.gettext_with_context',\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\ttext,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof text >;\n\t};\n\n\tconst _n: I18n< TextDomain >[ '_n' ] = (\n\t\tsingle,\n\t\tplural,\n\t\tnumber,\n\t\tdomain\n\t) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText<\n\t\t\t\ttypeof single | typeof plural\n\t\t\t>;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param single The text to be used if the number is singular.\n\t\t * @param plural The text to be used if the number is plural.\n\t\t * @param number The number to compare against to use either the singular or plural form.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.ngettext',\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\t};\n\n\tconst _nx: I18n< TextDomain >[ '_nx' ] = (\n\t\tsingle,\n\t\tplural,\n\t\tnumber,\n\t\tcontext,\n\t\tdomain\n\t) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation as TranslatableText<\n\t\t\t\ttypeof single | typeof plural\n\t\t\t>;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param translation Translated text.\n\t\t * @param single The text to be used if the number is singular.\n\t\t * @param plural The text to be used if the number is plural.\n\t\t * @param number The number to compare against to use either the singular or plural form.\n\t\t * @param context Context information for the translators.\n\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = hooks.applyFilters(\n\t\t\t'i18n.ngettext_with_context',\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\n\t\treturn hooks.applyFilters(\n\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\ttranslation,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber,\n\t\t\tcontext,\n\t\t\tdomain\n\t\t) as TranslatableText< typeof single | typeof plural >;\n\t};\n\n\tconst isRTL: I18n< TextDomain >[ 'isRTL' ] = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\tconst hasTranslation: I18n< TextDomain >[ 'hasTranslation' ] = (\n\t\tsingle,\n\t\tcontext,\n\t\tdomain\n\t) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param hasTranslation Whether the translation is present or not..\n\t\t\t * @param single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param context Context information for the translators.\n\t\t\t * @param domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = hooks.applyFilters(\n\t\t\t\t'i18n.has_translation',\n\t\t\t\tresult,\n\t\t\t\tsingle,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t) as boolean;\n\n\t\t\tresult = hooks.applyFilters(\n\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\tresult,\n\t\t\t\tsingle,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t) as boolean;\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName: string ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Tannin"]
|
|
7
|
+
}
|