@magic-translate/react 1.17.3 → 1.19.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/README.md +41 -0
- package/dist/components/Translate.d.ts +3 -3
- package/dist/components/Translate.d.ts.map +1 -1
- package/dist/components/Translate.js +34 -8
- package/dist/components/Translate.js.map +1 -1
- package/dist/components/Translate.test.js +153 -0
- package/dist/components/Translate.test.js.map +1 -1
- package/dist/components/Variable.d.ts +30 -0
- package/dist/components/Variable.d.ts.map +1 -0
- package/dist/components/Variable.js +68 -0
- package/dist/components/Variable.js.map +1 -0
- package/dist/hooks/use-translate.d.ts +14 -1
- package/dist/hooks/use-translate.d.ts.map +1 -1
- package/dist/hooks/use-translate.js +10 -1
- package/dist/hooks/use-translate.js.map +1 -1
- package/dist/hooks/use-translate.test.js +46 -0
- package/dist/hooks/use-translate.test.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +2 -2
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -110,6 +110,36 @@ export const Search = () => {
|
|
|
110
110
|
`t` returns the original text until the translation has loaded, and the
|
|
111
111
|
component re-renders once it has.
|
|
112
112
|
|
|
113
|
+
### Variables
|
|
114
|
+
|
|
115
|
+
Wrap values that change, such as names or counts, in `v()`. The text around
|
|
116
|
+
them is translated once as a template, `You have {0} unread messages`, and
|
|
117
|
+
cached, however many different values it is shown with. The values themselves
|
|
118
|
+
are never sent to the API.
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
import { T, v } from '@magic-translate/react';
|
|
122
|
+
|
|
123
|
+
<T>
|
|
124
|
+
Hello {v(user.name)}, you have {v(count)} unread messages
|
|
125
|
+
</T>;
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
The placeholders are numbered in order, and a translation can move them to
|
|
129
|
+
wherever the language needs them. `v()` can also hold a React component, such
|
|
130
|
+
as a link.
|
|
131
|
+
|
|
132
|
+
With `t`, use a tagged template. Every `${}` value is treated the same way:
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
const t = useTranslate();
|
|
136
|
+
|
|
137
|
+
t`You have ${count} unread messages`;
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Without `v()`, a value is translated as part of the text, so every different
|
|
141
|
+
value is a new translation.
|
|
142
|
+
|
|
113
143
|
### Options per translation
|
|
114
144
|
|
|
115
145
|
Both the component and `t` can override the target language and the formality:
|
|
@@ -120,6 +150,17 @@ Both the component and `t` can override the target language and the formality:
|
|
|
120
150
|
<input placeholder={t('Your name', { lang: 'fr', formality: 'formal' })} />
|
|
121
151
|
```
|
|
122
152
|
|
|
153
|
+
An `id` lets you edit one use of a text on its own in the webapp, e.g. to
|
|
154
|
+
translate the same "Save" differently on two buttons. Its edited translation
|
|
155
|
+
stays when the text changes. Ids are unique within your account and at most 128
|
|
156
|
+
characters.
|
|
157
|
+
|
|
158
|
+
```tsx
|
|
159
|
+
<T id="checkout-save">Save</T>
|
|
160
|
+
|
|
161
|
+
<button title={t('Save', { id: 'checkout-save' })} />
|
|
162
|
+
```
|
|
163
|
+
|
|
123
164
|
### Switching languages
|
|
124
165
|
|
|
125
166
|
`useLanguageSwitcher` reads and changes the current language. Every `<T>`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { PropsWithChildren } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export type TranslateProps =
|
|
2
|
+
import { TextOptions } from '@magic-translate/core';
|
|
3
|
+
export type TranslateProps = TextOptions;
|
|
4
4
|
export declare const Translate: React.FunctionComponent<PropsWithChildren<TranslateProps>>;
|
|
5
|
-
export declare const T: React.FunctionComponent<React.PropsWithChildren<
|
|
5
|
+
export declare const T: React.FunctionComponent<React.PropsWithChildren<TextOptions>>;
|
|
6
6
|
//# sourceMappingURL=Translate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Translate.d.ts","sourceRoot":"","sources":["../../src/components/Translate.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Translate.d.ts","sourceRoot":"","sources":["../../src/components/Translate.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAEZ,iBAAiB,EAMlB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAe,MAAM,uBAAuB,CAAC;AAIjE,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC;AA6CzC,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAC7C,iBAAiB,CAAC,cAAc,CAAC,CAoGlC,CAAC;AAEF,eAAO,MAAM,CAAC,+DAAY,CAAC"}
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
import parse from 'html-react-parser';
|
|
2
|
-
import React, { useCallback, useEffect, useState, useRef, } from 'react';
|
|
2
|
+
import React, { Fragment, useCallback, useEffect, useState, useRef, } from 'react';
|
|
3
3
|
import { renderToString } from 'react-dom/server';
|
|
4
4
|
import { libraryName } from '@magic-translate/core';
|
|
5
5
|
import { useMagicTranslate } from '../hooks/use-magic-translate';
|
|
6
|
+
import { extractVariables, fillPlaceholders, Variable } from './Variable';
|
|
7
|
+
// Values are put back as React nodes, never parsed as HTML, so a value cannot
|
|
8
|
+
// inject markup.
|
|
9
|
+
const renderTranslation = (translation, values) => values.length === 0
|
|
10
|
+
? parse(translation)
|
|
11
|
+
: parse(translation, {
|
|
12
|
+
replace: (node) => {
|
|
13
|
+
if (node.type !== 'text' || !/\{\d+\}/.test(node.data))
|
|
14
|
+
return;
|
|
15
|
+
return (React.createElement(React.Fragment, null, fillPlaceholders(node.data, values).map((part, i) => (React.createElement(Fragment, { key: i }, part)))));
|
|
16
|
+
},
|
|
17
|
+
});
|
|
6
18
|
const assertChildIsNotAReactComponent = (child) => {
|
|
7
|
-
if ('type' in child &&
|
|
19
|
+
if ('type' in child &&
|
|
20
|
+
typeof child.type === 'function' &&
|
|
21
|
+
child.type !== Variable) {
|
|
8
22
|
let errorMsg = 'React components are not allowed inside `<T>...</T>` components.';
|
|
9
23
|
if ('displayName' in child.type) {
|
|
10
24
|
errorMsg += ` The component found inside the T component is ${child.type.displayName}.`;
|
|
@@ -12,24 +26,36 @@ const assertChildIsNotAReactComponent = (child) => {
|
|
|
12
26
|
throw new Error(errorMsg);
|
|
13
27
|
}
|
|
14
28
|
};
|
|
15
|
-
export const Translate = ({ children, lang, formality }) => {
|
|
29
|
+
export const Translate = ({ children, lang, formality, id }) => {
|
|
16
30
|
const { dataLoader, language } = useMagicTranslate();
|
|
17
31
|
const [translation, setTranslation] = useState(null);
|
|
18
32
|
const lastRequestId = useRef(0);
|
|
19
|
-
|
|
33
|
+
const { template, values } = extractVariables(children);
|
|
34
|
+
// `lang`, `formality` and `id` are destructured rather than kept as a rest object
|
|
20
35
|
// so that they can be depended on by value: a rest object is a fresh
|
|
21
36
|
// reference on every render and would rebuild `translate` each time.
|
|
22
37
|
const translate = useCallback((toTranslate) => {
|
|
23
38
|
// make sure that we only ever use the response of the most resent request.
|
|
24
39
|
const requestId = Math.random();
|
|
25
40
|
lastRequestId.current = requestId;
|
|
26
|
-
dataLoader.load({ text: toTranslate, lang, formality }).then((t) => {
|
|
41
|
+
dataLoader.load({ text: toTranslate, lang, formality, id }).then((t) => {
|
|
27
42
|
if (lastRequestId.current === requestId) {
|
|
28
43
|
setTranslation(t);
|
|
29
44
|
}
|
|
30
45
|
});
|
|
31
|
-
}, [dataLoader, lang, formality]);
|
|
46
|
+
}, [dataLoader, lang, formality, id]);
|
|
32
47
|
useEffect(() => {
|
|
48
|
+
// The values change without the template changing, so they never cause a
|
|
49
|
+
// new translation.
|
|
50
|
+
if (values.length > 0) {
|
|
51
|
+
React.Children.forEach(children, (child) => {
|
|
52
|
+
if (child && typeof child === 'object') {
|
|
53
|
+
assertChildIsNotAReactComponent(child);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
translate(renderToString(React.createElement(React.Fragment, null, template)));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
33
59
|
// single child
|
|
34
60
|
if (React.Children.count(children) === 0) {
|
|
35
61
|
return;
|
|
@@ -73,8 +99,8 @@ export const Translate = ({ children, lang, formality }) => {
|
|
|
73
99
|
}
|
|
74
100
|
// `language` is not read here, but a language switch has to re-translate
|
|
75
101
|
// the children, so it stays an explicit trigger.
|
|
76
|
-
}, [children, language, translate]);
|
|
77
|
-
return React.createElement(React.Fragment, null, translation ?
|
|
102
|
+
}, [children, template, values.length, language, translate]);
|
|
103
|
+
return React.createElement(React.Fragment, null, translation ? renderTranslation(translation, values) : children);
|
|
78
104
|
};
|
|
79
105
|
export const T = Translate;
|
|
80
106
|
//# sourceMappingURL=Translate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Translate.js","sourceRoot":"","sources":["../../src/components/Translate.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Translate.js","sourceRoot":"","sources":["../../src/components/Translate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { act, render, waitFor } from '@testing-library/react';
|
|
|
2
2
|
import { MagicTranslateProvider } from '../context/MagicTranslateContext';
|
|
3
3
|
import React, { useState } from 'react';
|
|
4
4
|
import { T } from './Translate';
|
|
5
|
+
import { v } from './Variable';
|
|
5
6
|
import { Language } from '@magic-translate/core';
|
|
6
7
|
const tick = () => new Promise((resolve) => setTimeout(resolve));
|
|
7
8
|
const ExampleComponent = () => React.createElement(React.Fragment, null, "Some component");
|
|
@@ -40,6 +41,20 @@ describe('Translate', () => {
|
|
|
40
41
|
// then
|
|
41
42
|
expect(mockFn).toHaveBeenCalledWith([{ text: 'test', lang: Language.ZH }]);
|
|
42
43
|
});
|
|
44
|
+
it('should load the same text under different ids separately', async () => {
|
|
45
|
+
// given
|
|
46
|
+
render(React.createElement(Wrapper, null,
|
|
47
|
+
React.createElement(T, null, "Save"),
|
|
48
|
+
React.createElement(T, { id: "checkout" }, "Save")));
|
|
49
|
+
await act(async () => {
|
|
50
|
+
await tick();
|
|
51
|
+
});
|
|
52
|
+
// then
|
|
53
|
+
expect(mockFn).toHaveBeenCalledWith([
|
|
54
|
+
{ text: 'Save' },
|
|
55
|
+
{ text: 'Save', id: 'checkout' },
|
|
56
|
+
]);
|
|
57
|
+
});
|
|
43
58
|
it('should call the loader with multiple contents', async () => {
|
|
44
59
|
// given
|
|
45
60
|
render(React.createElement(Wrapper, null,
|
|
@@ -190,5 +205,143 @@ describe('Translate', () => {
|
|
|
190
205
|
expect(mockFn).toHaveBeenCalledTimes(2);
|
|
191
206
|
});
|
|
192
207
|
});
|
|
208
|
+
describe('variables', () => {
|
|
209
|
+
it('should send a template with numbered placeholders', async () => {
|
|
210
|
+
// given
|
|
211
|
+
render(React.createElement(Wrapper, null,
|
|
212
|
+
React.createElement(T, null,
|
|
213
|
+
"You have ",
|
|
214
|
+
v(3),
|
|
215
|
+
" unread messages")));
|
|
216
|
+
await act(async () => {
|
|
217
|
+
await tick();
|
|
218
|
+
});
|
|
219
|
+
// then
|
|
220
|
+
expect(mockFn).toHaveBeenCalledWith([
|
|
221
|
+
{ text: 'You have {0} unread messages' },
|
|
222
|
+
]);
|
|
223
|
+
});
|
|
224
|
+
it('should number the placeholders in order, including inside HTML', async () => {
|
|
225
|
+
// given
|
|
226
|
+
render(React.createElement(Wrapper, null,
|
|
227
|
+
React.createElement(T, null,
|
|
228
|
+
"Hello ",
|
|
229
|
+
React.createElement("b", null, v('Ann')),
|
|
230
|
+
", you have ",
|
|
231
|
+
v(2),
|
|
232
|
+
" messages")));
|
|
233
|
+
await act(async () => {
|
|
234
|
+
await tick();
|
|
235
|
+
});
|
|
236
|
+
// then
|
|
237
|
+
expect(mockFn).toHaveBeenCalledWith([
|
|
238
|
+
{ text: 'Hello <b>{0}</b>, you have {1} messages' },
|
|
239
|
+
]);
|
|
240
|
+
});
|
|
241
|
+
it('should put the values into the translation', async () => {
|
|
242
|
+
// given
|
|
243
|
+
const { getByTestId } = render(React.createElement(Wrapper, null,
|
|
244
|
+
React.createElement("div", { "data-testid": "wrapper" },
|
|
245
|
+
React.createElement(T, null,
|
|
246
|
+
"Hello ",
|
|
247
|
+
React.createElement("b", null, v('Ann')),
|
|
248
|
+
", you have ",
|
|
249
|
+
v(2),
|
|
250
|
+
" messages"))));
|
|
251
|
+
await act(async () => {
|
|
252
|
+
await tick();
|
|
253
|
+
});
|
|
254
|
+
// then
|
|
255
|
+
await waitFor(() => expect(getByTestId('wrapper').innerHTML).toBe('Translated: Hello <b>Ann</b>, you have 2 messages'));
|
|
256
|
+
});
|
|
257
|
+
it('should put the values where the translation moved them', async () => {
|
|
258
|
+
// given
|
|
259
|
+
const reorderingLoader = () => (content) => Promise.resolve(content.map(() => '{1} Nachrichten für {0}'));
|
|
260
|
+
const { getByTestId } = render(React.createElement(MagicTranslateProvider, { _loaderFactory: reorderingLoader, language: lang, apiKey: "test-api-key" },
|
|
261
|
+
React.createElement("div", { "data-testid": "wrapper" },
|
|
262
|
+
React.createElement(T, null,
|
|
263
|
+
"Hello ",
|
|
264
|
+
v('Ann'),
|
|
265
|
+
", you have ",
|
|
266
|
+
v(2),
|
|
267
|
+
" messages"))));
|
|
268
|
+
await act(async () => {
|
|
269
|
+
await tick();
|
|
270
|
+
});
|
|
271
|
+
// then
|
|
272
|
+
await waitFor(() => expect(getByTestId('wrapper').textContent).toBe('2 Nachrichten für Ann'));
|
|
273
|
+
});
|
|
274
|
+
it('should show the values before the translation has loaded', () => {
|
|
275
|
+
// given
|
|
276
|
+
const { getByTestId } = render(React.createElement(Wrapper, null,
|
|
277
|
+
React.createElement("div", { "data-testid": "wrapper" },
|
|
278
|
+
React.createElement(T, null,
|
|
279
|
+
"You have ",
|
|
280
|
+
v(3),
|
|
281
|
+
" unread messages"))));
|
|
282
|
+
// then
|
|
283
|
+
expect(getByTestId('wrapper').textContent).toBe('You have 3 unread messages');
|
|
284
|
+
});
|
|
285
|
+
it('should insert a value as text, not as HTML', async () => {
|
|
286
|
+
// given
|
|
287
|
+
const { getByTestId } = render(React.createElement(Wrapper, null,
|
|
288
|
+
React.createElement("div", { "data-testid": "wrapper" },
|
|
289
|
+
React.createElement(T, null,
|
|
290
|
+
"Hello ",
|
|
291
|
+
v('<img src=x onerror=alert(1)>')))));
|
|
292
|
+
await act(async () => {
|
|
293
|
+
await tick();
|
|
294
|
+
});
|
|
295
|
+
// then
|
|
296
|
+
await waitFor(() => expect(getByTestId('wrapper').textContent).toBe('Translated: Hello <img src=x onerror=alert(1)>'));
|
|
297
|
+
expect(getByTestId('wrapper').querySelector('img')).toBeNull();
|
|
298
|
+
});
|
|
299
|
+
it('should allow a react component as a value', async () => {
|
|
300
|
+
// given
|
|
301
|
+
const { getByTestId } = render(React.createElement(Wrapper, null,
|
|
302
|
+
React.createElement("div", { "data-testid": "wrapper" },
|
|
303
|
+
React.createElement(T, null,
|
|
304
|
+
"See ",
|
|
305
|
+
v(React.createElement(ExampleComponent, null))))));
|
|
306
|
+
await act(async () => {
|
|
307
|
+
await tick();
|
|
308
|
+
});
|
|
309
|
+
// then
|
|
310
|
+
expect(mockFn).toHaveBeenCalledWith([{ text: 'See {0}' }]);
|
|
311
|
+
await waitFor(() => expect(getByTestId('wrapper').textContent).toBe('Translated: See Some component'));
|
|
312
|
+
});
|
|
313
|
+
it('should not translate again when only a value changes', async () => {
|
|
314
|
+
// given
|
|
315
|
+
const Counter = () => {
|
|
316
|
+
const [count, setCount] = useState(1);
|
|
317
|
+
return (React.createElement(React.Fragment, null,
|
|
318
|
+
React.createElement("button", { onClick: () => setCount(count + 1) }, "add"),
|
|
319
|
+
React.createElement("div", { "data-testid": "wrapper" },
|
|
320
|
+
React.createElement(T, null,
|
|
321
|
+
"You have ",
|
|
322
|
+
v(count),
|
|
323
|
+
" unread messages"))));
|
|
324
|
+
};
|
|
325
|
+
const { getByRole, getByTestId } = render(React.createElement(Wrapper, null,
|
|
326
|
+
React.createElement(Counter, null)));
|
|
327
|
+
await act(async () => {
|
|
328
|
+
await tick();
|
|
329
|
+
});
|
|
330
|
+
// when
|
|
331
|
+
await act(async () => {
|
|
332
|
+
getByRole('button').click();
|
|
333
|
+
await tick();
|
|
334
|
+
});
|
|
335
|
+
// then
|
|
336
|
+
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
337
|
+
expect(getByTestId('wrapper').textContent).toBe('Translated: You have 2 unread messages');
|
|
338
|
+
});
|
|
339
|
+
it('should still reject other react components', () => {
|
|
340
|
+
expect(() => render(React.createElement(Wrapper, null,
|
|
341
|
+
React.createElement(T, null,
|
|
342
|
+
v(1),
|
|
343
|
+
React.createElement(ExampleComponent, null))))).toThrow('ExampleComponent');
|
|
344
|
+
});
|
|
345
|
+
});
|
|
193
346
|
});
|
|
194
347
|
//# sourceMappingURL=Translate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Translate.test.js","sourceRoot":"","sources":["../../src/components/Translate.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Translate.test.js","sourceRoot":"","sources":["../../src/components/Translate.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React, { ReactElement, ReactNode } from 'react';
|
|
2
|
+
export interface VariableProps {
|
|
3
|
+
value: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
export declare const Variable: ({ value }: VariableProps) => React.JSX.Element;
|
|
6
|
+
/**
|
|
7
|
+
* Marks a value inside `<T>` that should not be translated, such as a name or a
|
|
8
|
+
* count. The text around it is translated once as a template, e.g.
|
|
9
|
+
* `You have {0} unread messages`, and cached no matter what the value is.
|
|
10
|
+
*
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <T>You have {v(count)} unread messages</T>
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare const v: (value: ReactNode) => ReactElement<VariableProps>;
|
|
16
|
+
/**
|
|
17
|
+
* Replaces every `v()` in `children`, including those nested in HTML elements,
|
|
18
|
+
* with a numbered placeholder. Placeholders are numbered in the order they
|
|
19
|
+
* appear, so the same `<T>` always produces the same template.
|
|
20
|
+
*/
|
|
21
|
+
export declare const extractVariables: (children: ReactNode) => {
|
|
22
|
+
template: ReactNode;
|
|
23
|
+
values: ReactNode[];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Puts the values back into a translated text. A placeholder without a value is
|
|
27
|
+
* left as it is.
|
|
28
|
+
*/
|
|
29
|
+
export declare const fillPlaceholders: <V>(text: string, values: readonly V[]) => (string | V)[];
|
|
30
|
+
//# sourceMappingURL=Variable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Variable.d.ts","sourceRoot":"","sources":["../../src/components/Variable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,QAAQ,GAAI,WAAW,aAAa,sBAAiB,CAAC;AAEnE;;;;;;;;GAQG;AACH,eAAO,MAAM,CAAC,GAAI,OAAO,SAAS,KAAG,YAAY,CAAC,aAAa,CAE9D,CAAC;AAOF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,SAAS,KAClB;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAsC5C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,MAAM,MAAM,EACZ,QAAQ,SAAS,CAAC,EAAE,KACnB,CAAC,MAAM,GAAG,CAAC,CAAC,EAYd,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const Variable = ({ value }) => React.createElement(React.Fragment, null, value);
|
|
3
|
+
/**
|
|
4
|
+
* Marks a value inside `<T>` that should not be translated, such as a name or a
|
|
5
|
+
* count. The text around it is translated once as a template, e.g.
|
|
6
|
+
* `You have {0} unread messages`, and cached no matter what the value is.
|
|
7
|
+
*
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <T>You have {v(count)} unread messages</T>
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export const v = (value) => (React.createElement(Variable, { value: value }));
|
|
13
|
+
const PLACEHOLDER = /\{(\d+)\}/g;
|
|
14
|
+
const isVariable = (node) => React.isValidElement(node) && node.type === Variable;
|
|
15
|
+
/**
|
|
16
|
+
* Replaces every `v()` in `children`, including those nested in HTML elements,
|
|
17
|
+
* with a numbered placeholder. Placeholders are numbered in the order they
|
|
18
|
+
* appear, so the same `<T>` always produces the same template.
|
|
19
|
+
*/
|
|
20
|
+
export const extractVariables = (children) => {
|
|
21
|
+
const values = [];
|
|
22
|
+
const walk = (nodes) =>
|
|
23
|
+
// Adjacent text is joined so the template reads "You have {0} messages"
|
|
24
|
+
// rather than having React's `<!-- -->` separators between the parts.
|
|
25
|
+
(React.Children.map(nodes, (node) => {
|
|
26
|
+
if (isVariable(node)) {
|
|
27
|
+
values.push(node.props.value);
|
|
28
|
+
return `{${values.length - 1}}`;
|
|
29
|
+
}
|
|
30
|
+
if (React.isValidElement(node) &&
|
|
31
|
+
typeof node.type === 'string' &&
|
|
32
|
+
node.props.children !== undefined) {
|
|
33
|
+
return React.cloneElement(node, undefined, ...walk(node.props.children));
|
|
34
|
+
}
|
|
35
|
+
return node;
|
|
36
|
+
}) ?? []).reduce((joined, node) => {
|
|
37
|
+
const last = joined[joined.length - 1];
|
|
38
|
+
const isText = typeof node === 'string' || typeof node === 'number';
|
|
39
|
+
if (isText && (typeof last === 'string' || typeof last === 'number')) {
|
|
40
|
+
joined[joined.length - 1] = `${last}${node}`;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
joined.push(node);
|
|
44
|
+
}
|
|
45
|
+
return joined;
|
|
46
|
+
}, []);
|
|
47
|
+
const template = walk(children);
|
|
48
|
+
return { template: values.length > 0 ? template : children, values };
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Puts the values back into a translated text. A placeholder without a value is
|
|
52
|
+
* left as it is.
|
|
53
|
+
*/
|
|
54
|
+
export const fillPlaceholders = (text, values) => {
|
|
55
|
+
const parts = [];
|
|
56
|
+
// `split` with a capturing group puts the placeholder numbers at odd indexes.
|
|
57
|
+
text.split(PLACEHOLDER).forEach((part, i) => {
|
|
58
|
+
if (i % 2 === 0) {
|
|
59
|
+
if (part)
|
|
60
|
+
parts.push(part);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const index = Number(part);
|
|
64
|
+
parts.push(index < values.length ? values[index] : `{${part}}`);
|
|
65
|
+
});
|
|
66
|
+
return parts;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=Variable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Variable.js","sourceRoot":"","sources":["../../src/components/Variable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import { DataLoaderLoadParams } from '@magic-translate/core';
|
|
2
|
-
export
|
|
2
|
+
export interface TranslateFunction {
|
|
3
|
+
(text: string, params?: Omit<DataLoaderLoadParams, 'text'>): string;
|
|
4
|
+
/**
|
|
5
|
+
* As a tagged template, every `${}` value is left untranslated and the text
|
|
6
|
+
* around it is translated once as a template, e.g. `You have {0} unread
|
|
7
|
+
* messages`:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* t`You have ${count} unread messages`
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
(strings: TemplateStringsArray, ...values: unknown[]): string;
|
|
14
|
+
}
|
|
15
|
+
export declare function useTranslate(): TranslateFunction;
|
|
3
16
|
export declare const useT: typeof useTranslate;
|
|
4
17
|
//# sourceMappingURL=use-translate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-translate.d.ts","sourceRoot":"","sources":["../../src/hooks/use-translate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-translate.d.ts","sourceRoot":"","sources":["../../src/hooks/use-translate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IACpE;;;;;;;;OAQG;IACH,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;CAC/D;AAMD,wBAAgB,YAAY,IAAI,iBAAiB,CA4DhD;AAED,eAAO,MAAM,IAAI,qBAAe,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useMagicTranslate } from './use-magic-translate';
|
|
2
2
|
import { useCallback, useMemo, useState } from 'react';
|
|
3
3
|
import { cacheKeyFn } from '@magic-translate/core';
|
|
4
|
+
import { fillPlaceholders } from '../components/Variable';
|
|
5
|
+
const isTemplateStringsArray = (value) => Array.isArray(value) && 'raw' in value;
|
|
4
6
|
export function useTranslate() {
|
|
5
7
|
const { dataLoader, apiKey, language, sourceLanguage } = useMagicTranslate();
|
|
6
8
|
const [translations, setTranslations] = useState(new Map());
|
|
@@ -17,10 +19,17 @@ export function useTranslate() {
|
|
|
17
19
|
});
|
|
18
20
|
});
|
|
19
21
|
}, [cacheFn, dataLoader, lookup]);
|
|
20
|
-
|
|
22
|
+
const translate = (text, params) => {
|
|
21
23
|
load(text, params);
|
|
22
24
|
return lookup(text, params) ?? text;
|
|
23
25
|
};
|
|
26
|
+
return ((textOrStrings, ...rest) => {
|
|
27
|
+
if (!isTemplateStringsArray(textOrStrings)) {
|
|
28
|
+
return translate(textOrStrings, rest[0] ?? {});
|
|
29
|
+
}
|
|
30
|
+
const template = textOrStrings.reduce((acc, part, i) => (i === 0 ? part : `${acc}{${i - 1}}${part}`), '');
|
|
31
|
+
return fillPlaceholders(translate(template, {}), rest.map(String)).join('');
|
|
32
|
+
});
|
|
24
33
|
}
|
|
25
34
|
export const useT = useTranslate;
|
|
26
35
|
//# sourceMappingURL=use-translate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-translate.js","sourceRoot":"","sources":["../../src/hooks/use-translate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,UAAU,EAAwB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-translate.js","sourceRoot":"","sources":["../../src/hooks/use-translate.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,5 +77,51 @@ describe('Translate', () => {
|
|
|
77
77
|
// previous language
|
|
78
78
|
expect(mockFn).toHaveBeenCalledTimes(2);
|
|
79
79
|
});
|
|
80
|
+
describe('tagged template', () => {
|
|
81
|
+
it('should send a template with numbered placeholders', async () => {
|
|
82
|
+
// given
|
|
83
|
+
const { result } = renderHook(() => useTranslate(), { wrapper });
|
|
84
|
+
const count = 3;
|
|
85
|
+
// when
|
|
86
|
+
let text = '';
|
|
87
|
+
act(() => {
|
|
88
|
+
text = result.current `You have ${count} unread ${'new'} messages`;
|
|
89
|
+
});
|
|
90
|
+
expect(text).toBe('You have 3 unread new messages');
|
|
91
|
+
await tick();
|
|
92
|
+
// then
|
|
93
|
+
expect(mockFn).toHaveBeenCalledWith([
|
|
94
|
+
{ text: 'You have {0} unread {1} messages' },
|
|
95
|
+
]);
|
|
96
|
+
});
|
|
97
|
+
it('should put the values into the translation', async () => {
|
|
98
|
+
// given
|
|
99
|
+
const { result, rerender } = renderHook(() => useTranslate(), {
|
|
100
|
+
wrapper,
|
|
101
|
+
});
|
|
102
|
+
const count = 3;
|
|
103
|
+
await act(async () => {
|
|
104
|
+
expect(result.current `You have ${count} unread messages`).toBe('You have 3 unread messages');
|
|
105
|
+
});
|
|
106
|
+
await act(async () => {
|
|
107
|
+
await tick();
|
|
108
|
+
});
|
|
109
|
+
rerender();
|
|
110
|
+
// then
|
|
111
|
+
expect(result.current `You have ${count} unread messages`).toBe('Translated: You have 3 unread messages');
|
|
112
|
+
expect(result.current `You have ${7} unread messages`).toBe('Translated: You have 7 unread messages');
|
|
113
|
+
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
114
|
+
});
|
|
115
|
+
it('should return the values in the source text until the translation has loaded', () => {
|
|
116
|
+
// given
|
|
117
|
+
const { result } = renderHook(() => useTranslate(), { wrapper });
|
|
118
|
+
// then
|
|
119
|
+
let text = '';
|
|
120
|
+
act(() => {
|
|
121
|
+
text = result.current `You have ${3} unread messages`;
|
|
122
|
+
});
|
|
123
|
+
expect(text).toBe('You have 3 unread messages');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
80
126
|
});
|
|
81
127
|
//# sourceMappingURL=use-translate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-translate.test.js","sourceRoot":"","sources":["../../src/hooks/use-translate.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-translate.test.js","sourceRoot":"","sources":["../../src/hooks/use-translate.test.tsx"],"names":[],"mappings":"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"}
|