gt-next 1.3.15 → 2.0.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.
- package/.prettierrc +14 -0
- package/dist/config/I18NConfiguration.d.ts +28 -18
- package/dist/config/I18NConfiguration.d.ts.map +1 -1
- package/dist/config/I18NConfiguration.js +109 -41
- package/dist/config/I18NConfiguration.js.map +1 -1
- package/dist/config/RemoteTranslationsManager.d.ts +2 -8
- package/dist/config/RemoteTranslationsManager.d.ts.map +1 -1
- package/dist/config/RemoteTranslationsManager.js +10 -18
- package/dist/config/RemoteTranslationsManager.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -5
- package/dist/config.js.map +1 -1
- package/dist/index.server.d.ts +2 -2
- package/dist/index.server.d.ts.map +1 -1
- package/dist/index.server.js +4 -3
- package/dist/index.server.js.map +1 -1
- package/dist/middleware/createNextMiddleware.d.ts +3 -2
- package/dist/middleware/createNextMiddleware.d.ts.map +1 -1
- package/dist/middleware/createNextMiddleware.js +41 -55
- package/dist/middleware/createNextMiddleware.js.map +1 -1
- package/dist/next/getNextLocale.d.ts.map +1 -1
- package/dist/next/getNextLocale.js +30 -17
- package/dist/next/getNextLocale.js.map +1 -1
- package/dist/primitives/defaultInitGTProps.js +4 -4
- package/dist/primitives/defaultInitGTProps.js.map +1 -1
- package/dist/provider/ClientProvider.d.ts +4 -3
- package/dist/provider/ClientProvider.d.ts.map +1 -1
- package/dist/provider/ClientProvider.js +39 -27
- package/dist/provider/ClientProvider.js.map +1 -1
- package/dist/provider/GTProvider.d.ts +3 -3
- package/dist/provider/GTProvider.d.ts.map +1 -1
- package/dist/provider/GTProvider.js +89 -80
- package/dist/provider/GTProvider.js.map +1 -1
- package/dist/provider/types.d.ts +18 -0
- package/dist/provider/types.d.ts.map +1 -0
- package/dist/provider/types.js +3 -0
- package/dist/provider/types.js.map +1 -0
- package/dist/request/getLocale.d.ts +1 -1
- package/dist/request/getLocale.d.ts.map +1 -1
- package/dist/request/getLocale.js +2 -4
- package/dist/request/getLocale.js.map +1 -1
- package/dist/server/createServerTFunction.js +4 -2
- package/dist/server/createServerTFunction.js.map +1 -1
- package/dist/server/getGT.d.ts +16 -1
- package/dist/server/getGT.d.ts.map +1 -1
- package/dist/server/getGT.js +99 -6
- package/dist/server/getGT.js.map +1 -1
- package/dist/server/inline/T.d.ts +4 -4
- package/dist/server/inline/T.d.ts.map +1 -1
- package/dist/server/inline/T.js +48 -39
- package/dist/server/inline/T.js.map +1 -1
- package/dist/server/rendering/renderDefaultChildren.d.ts +0 -7
- package/dist/server/rendering/renderDefaultChildren.d.ts.map +1 -1
- package/dist/server/rendering/renderDefaultChildren.js +88 -72
- package/dist/server/rendering/renderDefaultChildren.js.map +1 -1
- package/dist/server/rendering/renderTranslatedChildren.d.ts +0 -9
- package/dist/server/rendering/renderTranslatedChildren.d.ts.map +1 -1
- package/dist/server/rendering/renderTranslatedChildren.js +224 -160
- package/dist/server/rendering/renderTranslatedChildren.js.map +1 -1
- package/dist/server/strings/tx.d.ts +10 -8
- package/dist/server/strings/tx.d.ts.map +1 -1
- package/dist/server/strings/tx.js +37 -33
- package/dist/server/strings/tx.js.map +1 -1
- package/dist/variables/Currency.js +1 -1
- package/dist/variables/Currency.js.map +1 -1
- package/dist/variables/DateTime.js +1 -1
- package/dist/variables/DateTime.js.map +1 -1
- package/dist/variables/Num.js +1 -1
- package/dist/variables/Num.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,169 +1,233 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
/*import React, { ReactElement, ReactNode } from 'react';
|
|
3
|
+
import {
|
|
4
|
+
TranslatedChildren,
|
|
5
|
+
TranslatedElement,
|
|
6
|
+
VariableObject,
|
|
7
|
+
} from 'gt-react/dist/primitives/types';
|
|
8
|
+
import {
|
|
9
|
+
isVariableObject,
|
|
10
|
+
getVariableProps,
|
|
11
|
+
getPluralBranch,
|
|
12
|
+
} from 'gt-react/internal';
|
|
13
|
+
import { libraryDefaultLocale } from 'generaltranslation/internal';
|
|
14
|
+
import getGTProp from '../../utils/getGTProp';
|
|
15
|
+
import renderVariable from './renderVariable';
|
|
16
|
+
|
|
17
|
+
function renderTranslatedElement({
|
|
18
|
+
sourceElement,
|
|
19
|
+
targetElement,
|
|
20
|
+
variables = {},
|
|
21
|
+
variablesOptions = {},
|
|
22
|
+
locales = [libraryDefaultLocale],
|
|
23
|
+
}: {
|
|
24
|
+
sourceElement: ReactElement;
|
|
25
|
+
targetElement: TranslatedElement;
|
|
26
|
+
variables?: Record<string, any>;
|
|
27
|
+
variablesOptions?: Record<string, any>;
|
|
28
|
+
locales: string[];
|
|
29
|
+
}) {
|
|
30
|
+
const {
|
|
31
|
+
props: { 'data-_gt': generaltranslation, ...props },
|
|
32
|
+
} = sourceElement;
|
|
33
|
+
|
|
34
|
+
const transformation = generaltranslation?.['transformation'];
|
|
35
|
+
|
|
36
|
+
if (transformation === 'plural') {
|
|
37
|
+
const n =
|
|
38
|
+
typeof variables.n === 'number'
|
|
39
|
+
? variables.n
|
|
40
|
+
: typeof sourceElement.props.n === 'number'
|
|
41
|
+
? sourceElement.props.n
|
|
42
|
+
: sourceElement.props['data-_gt-n'];
|
|
43
|
+
const sourceBranches = generaltranslation.branches || {};
|
|
44
|
+
const sourceBranch =
|
|
45
|
+
getPluralBranch(n, locales, sourceBranches) ||
|
|
46
|
+
sourceElement.props.children;
|
|
47
|
+
const targetBranches = targetElement.props['data-_gt'].branches || {};
|
|
48
|
+
const targetBranch =
|
|
49
|
+
getPluralBranch(n, locales, targetBranches) ||
|
|
50
|
+
targetElement.props.children;
|
|
51
|
+
return renderTranslatedChildren({
|
|
52
|
+
source: sourceBranch,
|
|
53
|
+
target: targetBranch,
|
|
54
|
+
variables,
|
|
55
|
+
variablesOptions,
|
|
56
|
+
locales,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (transformation === 'branch') {
|
|
61
|
+
let { name, branch, children } = props;
|
|
62
|
+
name = name || sourceElement.props['data-_gt-name'] || 'branch';
|
|
63
|
+
branch =
|
|
64
|
+
variables[name] || branch || sourceElement.props['data-_gt-branch-name'];
|
|
65
|
+
const sourceBranch =
|
|
66
|
+
(generaltranslation.branches || {})[branch] || children;
|
|
67
|
+
const targetBranch =
|
|
68
|
+
(targetElement.props['data-_gt'].branches || {})[branch] ||
|
|
69
|
+
targetElement.props.children;
|
|
70
|
+
return renderTranslatedChildren({
|
|
71
|
+
source: sourceBranch,
|
|
72
|
+
target: targetBranch,
|
|
73
|
+
variables,
|
|
74
|
+
variablesOptions,
|
|
75
|
+
locales,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// If there are children, clone the source element with new children that represent the translation
|
|
80
|
+
if (props?.children && targetElement.props?.children) {
|
|
81
|
+
return React.cloneElement(sourceElement, {
|
|
82
|
+
...props,
|
|
83
|
+
'data-_gt': undefined,
|
|
84
|
+
children: renderTranslatedChildren({
|
|
85
|
+
source: props.children,
|
|
86
|
+
target: targetElement.props.children,
|
|
87
|
+
variables,
|
|
88
|
+
variablesOptions,
|
|
89
|
+
locales,
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return sourceElement;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export default function renderTranslatedChildren({
|
|
98
|
+
source,
|
|
99
|
+
target,
|
|
100
|
+
variables = {},
|
|
101
|
+
variablesOptions = {},
|
|
102
|
+
locales = [libraryDefaultLocale],
|
|
103
|
+
}: {
|
|
104
|
+
source: ReactNode;
|
|
105
|
+
target: TranslatedChildren;
|
|
106
|
+
variables?: Record<string, any>;
|
|
107
|
+
variablesOptions?: Record<string, any>;
|
|
108
|
+
locales: string[];
|
|
109
|
+
}): ReactNode {
|
|
110
|
+
// Most straightforward case, return a valid React node
|
|
111
|
+
// If there is an error in the translation or similar, return the default
|
|
112
|
+
if ((target === null || typeof target === 'undefined') && source)
|
|
113
|
+
return source;
|
|
114
|
+
if (typeof target === 'string') return target;
|
|
115
|
+
|
|
116
|
+
// Source & target are both arrays, but may be in different orders
|
|
117
|
+
// Go through the source array & filters the source elements for actual react elements & variables
|
|
118
|
+
if (Array.isArray(source) && Array.isArray(target)) {
|
|
119
|
+
const sourceElements: ReactElement[] = source.filter((sourceChild) => {
|
|
120
|
+
if (React.isValidElement(sourceChild)) {
|
|
121
|
+
const generaltranslation = getGTProp(sourceChild);
|
|
122
|
+
if (generaltranslation?.transformation === 'variable') {
|
|
123
|
+
let { variableName, variableValue, variableOptions } =
|
|
124
|
+
getVariableProps(sourceChild.props as any);
|
|
125
|
+
if (typeof variables[variableName] === 'undefined') {
|
|
126
|
+
variables[variableName] = variableValue;
|
|
127
|
+
}
|
|
128
|
+
variablesOptions[variableName] = {
|
|
129
|
+
...variablesOptions[variableName],
|
|
130
|
+
...variableOptions,
|
|
131
|
+
};
|
|
132
|
+
} else {
|
|
133
|
+
return true;
|
|
8
134
|
}
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Take a target element & find the matching source element with the same id
|
|
139
|
+
const findMatchingSourceElement = (
|
|
140
|
+
targetElement: TranslatedElement
|
|
141
|
+
): ReactElement | undefined => {
|
|
142
|
+
return sourceElements.find((sourceChild) => {
|
|
143
|
+
const generaltranslation = getGTProp(sourceChild);
|
|
144
|
+
if (typeof generaltranslation?.id !== 'undefined') {
|
|
145
|
+
const sourceID = generaltranslation.id;
|
|
146
|
+
const targetID = targetElement?.props?.['data-_gt']?.id;
|
|
147
|
+
return sourceID === targetID;
|
|
21
148
|
}
|
|
22
|
-
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
variables: variables,
|
|
74
|
-
variablesOptions: variablesOptions,
|
|
75
|
-
locales: locales
|
|
76
|
-
}) }));
|
|
77
|
-
}
|
|
78
|
-
return sourceElement;
|
|
79
|
-
}
|
|
80
|
-
function renderTranslatedChildren(_a) {
|
|
81
|
-
var source = _a.source, target = _a.target, _b = _a.variables, variables = _b === void 0 ? {} : _b, _c = _a.variablesOptions, variablesOptions = _c === void 0 ? {} : _c, _d = _a.locales, locales = _d === void 0 ? [internal_1.primitives.libraryDefaultLocale] : _d;
|
|
82
|
-
// Most straightforward case, return a valid React node
|
|
83
|
-
if ((target === null || typeof target === 'undefined') && source)
|
|
84
|
-
return source;
|
|
85
|
-
if (typeof target === 'string')
|
|
86
|
-
return target;
|
|
87
|
-
if (Array.isArray(source) && Array.isArray(target)) {
|
|
88
|
-
var sourceElements_1 = source.filter(function (sourceChild) {
|
|
89
|
-
if (react_1.default.isValidElement(sourceChild)) {
|
|
90
|
-
var generaltranslation = (0, getGTProp_1.default)(sourceChild);
|
|
91
|
-
if ((generaltranslation === null || generaltranslation === void 0 ? void 0 : generaltranslation.transformation) === "variable") {
|
|
92
|
-
var _a = (0, internal_1.getVariableProps)(sourceChild.props), variableName = _a.variableName, variableValue = _a.variableValue, variableOptions = _a.variableOptions;
|
|
93
|
-
if (typeof variables[variableName] === 'undefined') {
|
|
94
|
-
variables[variableName] = variableValue;
|
|
95
|
-
}
|
|
96
|
-
variablesOptions[variableName] = __assign(__assign({}, variablesOptions[variableName]), variableOptions);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
149
|
+
return false;
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// Iterate through the target array & recursively render the translated children
|
|
154
|
+
return target.map((targetChild, index) => {
|
|
155
|
+
if (typeof targetChild === 'string')
|
|
156
|
+
return (
|
|
157
|
+
<React.Fragment key={`string_${index}`}>{targetChild}</React.Fragment>
|
|
158
|
+
);
|
|
159
|
+
if (isVariableObject(targetChild)) {
|
|
160
|
+
return (
|
|
161
|
+
<React.Fragment key={`var_${index}`}>
|
|
162
|
+
{renderVariable({
|
|
163
|
+
variableType: targetChild.variable || 'variable',
|
|
164
|
+
variableName: targetChild.key,
|
|
165
|
+
variableValue: variables[targetChild.key],
|
|
166
|
+
variableOptions: variablesOptions[targetChild.key],
|
|
167
|
+
})}
|
|
168
|
+
</React.Fragment>
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
const matchingSourceElement = findMatchingSourceElement(targetChild);
|
|
172
|
+
if (matchingSourceElement)
|
|
173
|
+
return (
|
|
174
|
+
<React.Fragment key={`element_${index}`}>
|
|
175
|
+
{renderTranslatedElement({
|
|
176
|
+
sourceElement: matchingSourceElement,
|
|
177
|
+
targetElement: targetChild,
|
|
178
|
+
variables,
|
|
179
|
+
variablesOptions,
|
|
180
|
+
locales,
|
|
181
|
+
})}
|
|
182
|
+
</React.Fragment>
|
|
183
|
+
);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (target && typeof target === 'object' && !Array.isArray(target)) {
|
|
188
|
+
const targetType: 'variable' | 'element' = isVariableObject(target)
|
|
189
|
+
? 'variable'
|
|
190
|
+
: 'element';
|
|
191
|
+
|
|
192
|
+
if (React.isValidElement(source)) {
|
|
193
|
+
if (targetType === 'element') {
|
|
194
|
+
return renderTranslatedElement({
|
|
195
|
+
sourceElement: source,
|
|
196
|
+
targetElement: target as TranslatedElement,
|
|
197
|
+
variables,
|
|
198
|
+
variablesOptions,
|
|
199
|
+
locales,
|
|
102
200
|
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const generaltranslation = getGTProp(source);
|
|
204
|
+
if (generaltranslation?.transformation === 'variable') {
|
|
205
|
+
let { variableName, variableValue, variableOptions } = getVariableProps(
|
|
206
|
+
source.props
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
if (typeof variables[variableName] === 'undefined') {
|
|
210
|
+
variables[variableName] = variableValue;
|
|
211
|
+
}
|
|
212
|
+
variablesOptions[variableName] = {
|
|
213
|
+
...variablesOptions[variableName],
|
|
214
|
+
...variableOptions,
|
|
114
215
|
};
|
|
115
|
-
|
|
116
|
-
if (typeof targetChild === 'string')
|
|
117
|
-
return (0, jsx_runtime_1.jsx)(react_1.default.Fragment, { children: targetChild }, "string_".concat(index));
|
|
118
|
-
if ((0, internal_1.isVariableObject)(targetChild)) {
|
|
119
|
-
return ((0, jsx_runtime_1.jsx)(react_1.default.Fragment, { children: (0, renderVariable_1.default)({
|
|
120
|
-
variableType: targetChild.variable || "variable",
|
|
121
|
-
variableName: targetChild.key,
|
|
122
|
-
variableValue: variables[targetChild.key],
|
|
123
|
-
variableOptions: variablesOptions[targetChild.key]
|
|
124
|
-
}) }, "var_".concat(index)));
|
|
125
|
-
}
|
|
126
|
-
var matchingSourceElement = findMatchingSourceElement_1(targetChild);
|
|
127
|
-
if (matchingSourceElement)
|
|
128
|
-
return (0, jsx_runtime_1.jsx)(react_1.default.Fragment, { children: renderTranslatedElement({
|
|
129
|
-
sourceElement: matchingSourceElement,
|
|
130
|
-
targetElement: targetChild,
|
|
131
|
-
variables: variables,
|
|
132
|
-
variablesOptions: variablesOptions,
|
|
133
|
-
locales: locales
|
|
134
|
-
}) }, "element_".concat(index));
|
|
135
|
-
});
|
|
216
|
+
}
|
|
136
217
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
var generaltranslation = (0, getGTProp_1.default)(source);
|
|
149
|
-
if ((generaltranslation === null || generaltranslation === void 0 ? void 0 : generaltranslation.transformation) === "variable") {
|
|
150
|
-
var _e = (0, internal_1.getVariableProps)(source.props), variableName = _e.variableName, variableValue = _e.variableValue, variableOptions = _e.variableOptions;
|
|
151
|
-
if (typeof variables[variableName] === 'undefined') {
|
|
152
|
-
variables[variableName] = variableValue;
|
|
153
|
-
}
|
|
154
|
-
variablesOptions[variableName] = __assign(__assign({}, variablesOptions[variableName]), variableOptions);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (targetType === "variable") {
|
|
158
|
-
var targetVariable = target;
|
|
159
|
-
return (0, renderVariable_1.default)({
|
|
160
|
-
variableType: targetVariable.variable || "variable",
|
|
161
|
-
variableName: targetVariable.key,
|
|
162
|
-
variableValue: variables[targetVariable.key],
|
|
163
|
-
variableOptions: variablesOptions[targetVariable.key]
|
|
164
|
-
});
|
|
165
|
-
}
|
|
218
|
+
|
|
219
|
+
if (targetType === 'variable') {
|
|
220
|
+
const targetVariable = target as VariableObject;
|
|
221
|
+
return renderVariable({
|
|
222
|
+
variableType: targetVariable.variable || 'variable',
|
|
223
|
+
variableName: targetVariable.key,
|
|
224
|
+
variableValue: variables[targetVariable.key],
|
|
225
|
+
variableOptions: variablesOptions[targetVariable.key],
|
|
226
|
+
});
|
|
166
227
|
}
|
|
167
|
-
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return source;
|
|
168
231
|
}
|
|
232
|
+
*/
|
|
169
233
|
//# sourceMappingURL=renderTranslatedChildren.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTranslatedChildren.js","sourceRoot":"","sources":["../../../src/server/rendering/renderTranslatedChildren.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderTranslatedChildren.js","sourceRoot":"","sources":["../../../src/server/rendering/renderTranslatedChildren.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsOE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Translates the provided content string based on the specified
|
|
2
|
+
* Translates the provided content string based on the specified locale and options.
|
|
3
3
|
* If no translation is required, it renders the content as is. Otherwise, it fetches the
|
|
4
4
|
* required translations or falls back to on-demand translation if enabled.
|
|
5
5
|
*
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
* @param {string} content - The content string that needs to be translated.
|
|
12
12
|
* @param {Object} [options] - Translation options.
|
|
13
13
|
* @param {string} [options.id] - A unique identifier for the content, used for caching and fetching translations.
|
|
14
|
-
* @param {string} [options.
|
|
14
|
+
* @param {string} [options.locale] - The target locale for translation. Defaults to the current locale if not provided.
|
|
15
15
|
* @param {string} [options.context] - Additional context for the translation process, which may influence the translation's outcome.
|
|
16
|
-
* @param {Object} [variables] - An optional map of variables to be injected into the translated content.
|
|
17
|
-
* @param {Object} [variableOptions] - Options for formatting numbers and dates using `Intl.NumberFormat` or `Intl.DateTimeFormat`.
|
|
16
|
+
* @param {Object} [options.variables] - An optional map of variables to be injected into the translated content.
|
|
17
|
+
* @param {Object} [options.variableOptions] - Options for formatting numbers and dates using `Intl.NumberFormat` or `Intl.DateTimeFormat`.
|
|
18
18
|
*
|
|
19
19
|
* @returns {Promise<string>} - A promise that resolves to the translated content string, or the original content if no translation is needed.
|
|
20
20
|
*
|
|
@@ -26,16 +26,18 @@
|
|
|
26
26
|
*
|
|
27
27
|
* @example
|
|
28
28
|
* // Providing specific translation options
|
|
29
|
-
* const translation = await tx("Hello, world!", {
|
|
29
|
+
* const translation = await tx("Hello, world!", { locale: 'es', context: 'Translate informally' });
|
|
30
30
|
*
|
|
31
31
|
* @example
|
|
32
32
|
* // Using variables in the content string
|
|
33
|
-
* const translation = await tx("The price is {price}", {
|
|
33
|
+
* const translation = await tx("The price is {price}", { locale: 'es-MX', variables: { price: 29.99 } });
|
|
34
34
|
*/
|
|
35
35
|
export default function tx(content: string, options?: {
|
|
36
36
|
id?: string;
|
|
37
|
-
|
|
37
|
+
locale?: string;
|
|
38
38
|
context?: string;
|
|
39
|
+
variables?: Record<string, any>;
|
|
40
|
+
variableOptions?: Record<string, Intl.NumberFormatOptions | Intl.DateTimeFormatOptions>;
|
|
39
41
|
[key: string]: any;
|
|
40
|
-
}
|
|
42
|
+
}): Promise<string>;
|
|
41
43
|
//# sourceMappingURL=tx.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../src/server/strings/tx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../src/server/strings/tx.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAA8B,EAAE,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CACtB,MAAM,EACN,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CACtD,CAAA;IACD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACf,GACL,OAAO,CAAC,MAAM,CAAC,CAqEjB"}
|
|
@@ -64,11 +64,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
64
64
|
exports.default = tx;
|
|
65
65
|
var generaltranslation_1 = require("generaltranslation");
|
|
66
66
|
var getI18NConfig_1 = __importDefault(require("../../utils/getI18NConfig"));
|
|
67
|
-
var internal_1 = require("gt-react/internal");
|
|
68
67
|
var getLocale_1 = __importDefault(require("../../request/getLocale"));
|
|
69
68
|
var getMetadata_1 = __importDefault(require("../../request/getMetadata"));
|
|
70
69
|
/**
|
|
71
|
-
* Translates the provided content string based on the specified
|
|
70
|
+
* Translates the provided content string based on the specified locale and options.
|
|
72
71
|
* If no translation is required, it renders the content as is. Otherwise, it fetches the
|
|
73
72
|
* required translations or falls back to on-demand translation if enabled.
|
|
74
73
|
*
|
|
@@ -80,10 +79,10 @@ var getMetadata_1 = __importDefault(require("../../request/getMetadata"));
|
|
|
80
79
|
* @param {string} content - The content string that needs to be translated.
|
|
81
80
|
* @param {Object} [options] - Translation options.
|
|
82
81
|
* @param {string} [options.id] - A unique identifier for the content, used for caching and fetching translations.
|
|
83
|
-
* @param {string} [options.
|
|
82
|
+
* @param {string} [options.locale] - The target locale for translation. Defaults to the current locale if not provided.
|
|
84
83
|
* @param {string} [options.context] - Additional context for the translation process, which may influence the translation's outcome.
|
|
85
|
-
* @param {Object} [variables] - An optional map of variables to be injected into the translated content.
|
|
86
|
-
* @param {Object} [variableOptions] - Options for formatting numbers and dates using `Intl.NumberFormat` or `Intl.DateTimeFormat`.
|
|
84
|
+
* @param {Object} [options.variables] - An optional map of variables to be injected into the translated content.
|
|
85
|
+
* @param {Object} [options.variableOptions] - Options for formatting numbers and dates using `Intl.NumberFormat` or `Intl.DateTimeFormat`.
|
|
87
86
|
*
|
|
88
87
|
* @returns {Promise<string>} - A promise that resolves to the translated content string, or the original content if no translation is needed.
|
|
89
88
|
*
|
|
@@ -95,67 +94,72 @@ var getMetadata_1 = __importDefault(require("../../request/getMetadata"));
|
|
|
95
94
|
*
|
|
96
95
|
* @example
|
|
97
96
|
* // Providing specific translation options
|
|
98
|
-
* const translation = await tx("Hello, world!", {
|
|
97
|
+
* const translation = await tx("Hello, world!", { locale: 'es', context: 'Translate informally' });
|
|
99
98
|
*
|
|
100
99
|
* @example
|
|
101
100
|
* // Using variables in the content string
|
|
102
|
-
* const translation = await tx("The price is {price}", {
|
|
101
|
+
* const translation = await tx("The price is {price}", { locale: 'es-MX', variables: { price: 29.99 } });
|
|
103
102
|
*/
|
|
104
103
|
function tx(content_1) {
|
|
105
|
-
return __awaiter(this, arguments, void 0, function (content, options
|
|
106
|
-
var I18NConfig, contentAsArray, _a, _b, key, translations,
|
|
107
|
-
var
|
|
104
|
+
return __awaiter(this, arguments, void 0, function (content, options) {
|
|
105
|
+
var I18NConfig, contentAsArray, _a, _b, _c, _, key, translations, locale, others, translationPromise, _d, _e, _f, renderSettings, translation;
|
|
106
|
+
var _g;
|
|
108
107
|
if (options === void 0) { options = {}; }
|
|
109
|
-
return __generator(this, function (
|
|
110
|
-
switch (
|
|
108
|
+
return __generator(this, function (_h) {
|
|
109
|
+
switch (_h.label) {
|
|
111
110
|
case 0:
|
|
112
111
|
if (!content)
|
|
113
112
|
return [2 /*return*/, ''];
|
|
114
113
|
I18NConfig = (0, getI18NConfig_1.default)();
|
|
115
114
|
contentAsArray = (0, generaltranslation_1.splitStringToContent)(content);
|
|
116
115
|
_a = options;
|
|
117
|
-
_b = options.
|
|
116
|
+
_b = options.locale;
|
|
118
117
|
if (_b) return [3 /*break*/, 2];
|
|
119
118
|
return [4 /*yield*/, (0, getLocale_1.default)()];
|
|
120
119
|
case 1:
|
|
121
|
-
_b = (
|
|
122
|
-
|
|
120
|
+
_b = (_h.sent());
|
|
121
|
+
_h.label = 2;
|
|
123
122
|
case 2:
|
|
124
|
-
_a.
|
|
125
|
-
if (!I18NConfig.requiresTranslation(options.
|
|
126
|
-
return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(contentAsArray, [options.
|
|
123
|
+
_a.locale = _b;
|
|
124
|
+
if (!I18NConfig.requiresTranslation(options.locale))
|
|
125
|
+
return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(contentAsArray, [options.locale, I18NConfig.getDefaultLocale()], options.variables, options.variablesOptions)];
|
|
126
|
+
_c = I18NConfig.serializeAndHash(content, options.context, undefined // id is not provided here, to catch erroneous situations where the same id is being used for different <T> components
|
|
127
|
+
), _ = _c[0], key = _c[1];
|
|
127
128
|
if (!options.id) return [3 /*break*/, 4];
|
|
128
|
-
|
|
129
|
-
return [4 /*yield*/, I18NConfig.getTranslations(options.language)];
|
|
129
|
+
return [4 /*yield*/, I18NConfig.getTranslations(options.locale)];
|
|
130
130
|
case 3:
|
|
131
|
-
translations =
|
|
131
|
+
translations = _h.sent();
|
|
132
132
|
if ((translations === null || translations === void 0 ? void 0 : translations[options.id]) && translations[options.id].k === key)
|
|
133
|
-
return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(translations[options.id].t, [options.
|
|
134
|
-
|
|
133
|
+
return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(translations[options.id].t, [options.locale, I18NConfig.getDefaultLocale()], options.variables, options.variablesOptions)];
|
|
134
|
+
_h.label = 4;
|
|
135
135
|
case 4:
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
locale = options.locale, others = __rest(options, ["locale"]);
|
|
137
|
+
_e = (_d = I18NConfig).translate;
|
|
138
|
+
_g = {
|
|
139
|
+
content: content,
|
|
140
|
+
targetLocale: locale
|
|
141
|
+
};
|
|
142
|
+
_f = [__assign({}, others)];
|
|
140
143
|
return [4 /*yield*/, (0, getMetadata_1.default)()];
|
|
141
144
|
case 5:
|
|
142
|
-
translationPromise =
|
|
145
|
+
translationPromise = _e.apply(_d, [(_g.options = __assign.apply(void 0, [__assign.apply(void 0, _f.concat([(_h.sent())])), { hash: key }]),
|
|
146
|
+
_g)]);
|
|
143
147
|
renderSettings = I18NConfig.getRenderSettings();
|
|
144
|
-
if (!(renderSettings.method !==
|
|
148
|
+
if (!(renderSettings.method !== 'subtle' ||
|
|
145
149
|
!options.id) // because it is only saved if an id is present
|
|
146
150
|
) return [3 /*break*/, 7]; // because it is only saved if an id is present
|
|
147
151
|
return [4 /*yield*/, translationPromise];
|
|
148
152
|
case 6:
|
|
149
|
-
translation =
|
|
153
|
+
translation = _h.sent();
|
|
150
154
|
try {
|
|
151
|
-
return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(translation, [options.
|
|
155
|
+
return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(translation, [options.targetLocale, I18NConfig.getDefaultLocale()], options.variables, options.variableOptions)];
|
|
152
156
|
}
|
|
153
157
|
catch (error) {
|
|
154
158
|
console.error("gt-next string translation error. tx(\"".concat(content, "\")").concat(options.id ? " with id \"".concat(options.id, "\"") : '', " failed."), error);
|
|
155
159
|
return [2 /*return*/, ''];
|
|
156
160
|
}
|
|
157
|
-
|
|
158
|
-
case 7: return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(contentAsArray, [options.
|
|
161
|
+
_h.label = 7;
|
|
162
|
+
case 7: return [2 /*return*/, (0, generaltranslation_1.renderContentToString)(contentAsArray, [options.targetLocale, I18NConfig.getDefaultLocale()], options.variables, options.variableOptions)];
|
|
159
163
|
}
|
|
160
164
|
});
|
|
161
165
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../../src/server/strings/tx.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../../src/server/strings/tx.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,7 +100,7 @@ function Currency(_a) {
|
|
|
100
100
|
renderedValue = (typeof children !== 'undefined' && typeof value === 'undefined') ? children : value;
|
|
101
101
|
renderedValue = (typeof renderedValue === 'string') ? parseFloat(renderedValue) : renderedValue;
|
|
102
102
|
formattedValue = (typeof renderedValue === 'number')
|
|
103
|
-
? (0, generaltranslation_1.formatCurrency)({ value: renderedValue, currency: currency,
|
|
103
|
+
? (0, generaltranslation_1.formatCurrency)({ value: renderedValue, currency: currency, locales: locales, options: options })
|
|
104
104
|
: renderedValue;
|
|
105
105
|
return [2 /*return*/, ((0, jsx_runtime_1.jsx)("span", { "data-_gt": generaltranslation, "data-_gt-variable-name": name, "data-_gt-variable-type": "currency", "data-_gt-variable-options": JSON.stringify(__assign({ style: 'currency', currency: currency }, options)), "data-_gt-unformatted-value": (typeof renderedValue === 'number' && !isNaN(renderedValue)) ? renderedValue : undefined, style: { display: 'contents' }, children: typeof formattedValue === 'string' ? formattedValue : undefined }))];
|
|
106
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Currency.js","sourceRoot":"","sources":["../../src/variables/Currency.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAoD;AACpD,yEAAmD;AACnD,mEAA6C;AAE7C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAe,QAAQ,CAAC,EASvB;;;QARG,IAAA,QAAQ,cAAA,EAAE,YAAa,EAAb,IAAI,mBAAG,MAAM,KAAA,EAAE,KAAK,WAAA,EAAE,gBAAgB,EAAhB,QAAQ,mBAAG,KAAK,KAAA,EAAE,eAAY,EAAZ,OAAO,mBAAG,EAAE,KAAA,EAAK,KAAK,cADpD,oDAEvB,CAD2E;;;;oBAUlE,UAAU,GAAG,IAAA,uBAAa,GAAE,CAAC;oBAClB,qBAAM,IAAA,mBAAS,GAAE,EAAA;;oBAA5B,OAAO,IAAI,SAAiB,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAE;oBAE/C,kBAAkB,GAAK,KAAK,YAAV,CAAW;oBAG7C,aAAa,GAAG,CAAC,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;oBACzG,aAAa,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;oBAG1F,cAAc,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,CAAC;wBACtD,CAAC,CAAC,IAAA,mCAAc,EAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,UAAA,EAAE,
|
|
1
|
+
{"version":3,"file":"Currency.js","sourceRoot":"","sources":["../../src/variables/Currency.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAoD;AACpD,yEAAmD;AACnD,mEAA6C;AAE7C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAe,QAAQ,CAAC,EASvB;;;QARG,IAAA,QAAQ,cAAA,EAAE,YAAa,EAAb,IAAI,mBAAG,MAAM,KAAA,EAAE,KAAK,WAAA,EAAE,gBAAgB,EAAhB,QAAQ,mBAAG,KAAK,KAAA,EAAE,eAAY,EAAZ,OAAO,mBAAG,EAAE,KAAA,EAAK,KAAK,cADpD,oDAEvB,CAD2E;;;;oBAUlE,UAAU,GAAG,IAAA,uBAAa,GAAE,CAAC;oBAClB,qBAAM,IAAA,mBAAS,GAAE,EAAA;;oBAA5B,OAAO,IAAI,SAAiB,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAE;oBAE/C,kBAAkB,GAAK,KAAK,YAAV,CAAW;oBAG7C,aAAa,GAAG,CAAC,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;oBACzG,aAAa,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;oBAG1F,cAAc,GAAG,CAAC,OAAO,aAAa,KAAK,QAAQ,CAAC;wBACtD,CAAC,CAAC,IAAA,mCAAc,EAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAE,OAAO,SAAA,EAAE,CAAC;wBACtE,CAAC,CAAC,aAAa,CAAC;oBAEpB,sBAAO,CACH,6CACc,kBAAkB,4BACJ,IAAI,4BACJ,UAAU,+BACP,IAAI,CAAC,SAAS,YAAG,KAAK,EAAE,UAAU,EAAE,QAAQ,UAAA,IAAK,OAAO,EAAG,gCAC1D,CAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EACpH,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,YAE7B,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,GAC7D,CACV,EAAC;;;;CACL;AAAA,CAAC;AAEF,QAAQ,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;AAEhD,kBAAe,QAAQ,CAAC"}
|