@justanarthur/payload-plugin-translator 1.3.20 → 1.3.21
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/dist/client.d.ts +6 -0
- package/dist/client.js +320 -0
- package/dist/index.d.ts +102 -11
- package/dist/index.js +1294 -80
- package/dist/jobs.d.ts +195 -0
- package/dist/jobs.js +824 -0
- package/dist/resolvers/copy.d.ts +21 -3
- package/dist/resolvers/copy.js +18 -12
- package/dist/resolvers/google.d.ts +29 -11
- package/dist/resolvers/google.js +58 -44
- package/dist/resolvers/libreTranslate.d.ts +33 -15
- package/dist/resolvers/libreTranslate.js +60 -45
- package/dist/resolvers/openAI.d.ts +39 -21
- package/dist/resolvers/openAI.js +110 -114
- package/dist/resolvers/types.d.ts +16 -16
- package/dist/resolvers/types.js +0 -3
- package/dist/{client/components/CustomButton/styles.scss → styles-jt3fm5fh.scss} +5 -5
- package/dist/{client/components/TranslatorModal/styles.scss → styles-vs6m7h55.scss} +76 -76
- package/dist/types.d.ts +70 -22
- package/dist/types.js +0 -3
- package/package.json +87 -64
- package/README.md +0 -215
- package/dist/client/api/index.d.ts +0 -8
- package/dist/client/api/index.d.ts.map +0 -1
- package/dist/client/api/index.js +0 -28
- package/dist/client/api/index.js.map +0 -1
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +0 -5
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +0 -1
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +0 -28
- package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +0 -1
- package/dist/client/components/CustomButton/index.d.ts +0 -3
- package/dist/client/components/CustomButton/index.d.ts.map +0 -1
- package/dist/client/components/CustomButton/index.js +0 -10
- package/dist/client/components/CustomButton/index.js.map +0 -1
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +0 -5
- package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +0 -1
- package/dist/client/components/LocaleLabel/LocaleLabel.js +0 -28
- package/dist/client/components/LocaleLabel/LocaleLabel.js.map +0 -1
- package/dist/client/components/LocaleLabel/index.d.ts +0 -2
- package/dist/client/components/LocaleLabel/index.d.ts.map +0 -1
- package/dist/client/components/LocaleLabel/index.js +0 -3
- package/dist/client/components/LocaleLabel/index.js.map +0 -1
- package/dist/client/components/ResolverButton/ResolverButton.d.ts +0 -5
- package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +0 -1
- package/dist/client/components/ResolverButton/ResolverButton.js +0 -16
- package/dist/client/components/ResolverButton/ResolverButton.js.map +0 -1
- package/dist/client/components/ResolverButton/index.d.ts +0 -2
- package/dist/client/components/ResolverButton/index.d.ts.map +0 -1
- package/dist/client/components/ResolverButton/index.js +0 -3
- package/dist/client/components/ResolverButton/index.js.map +0 -1
- package/dist/client/components/TranslatorModal/Content.d.ts +0 -2
- package/dist/client/components/TranslatorModal/Content.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/Content.js +0 -60
- package/dist/client/components/TranslatorModal/Content.js.map +0 -1
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +0 -3
- package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/TranslatorModal.js +0 -26
- package/dist/client/components/TranslatorModal/TranslatorModal.js.map +0 -1
- package/dist/client/components/TranslatorModal/index.d.ts +0 -2
- package/dist/client/components/TranslatorModal/index.d.ts.map +0 -1
- package/dist/client/components/TranslatorModal/index.js +0 -3
- package/dist/client/components/TranslatorModal/index.js.map +0 -1
- package/dist/client/providers/Translator/TranslatorProvider.d.ts +0 -5
- package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +0 -1
- package/dist/client/providers/Translator/TranslatorProvider.js +0 -109
- package/dist/client/providers/Translator/TranslatorProvider.js.map +0 -1
- package/dist/client/providers/Translator/context.d.ts +0 -21
- package/dist/client/providers/Translator/context.d.ts.map +0 -1
- package/dist/client/providers/Translator/context.js +0 -9
- package/dist/client/providers/Translator/context.js.map +0 -1
- package/dist/exports/client.d.ts +0 -2
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js +0 -3
- package/dist/exports/client.js.map +0 -1
- package/dist/i18n-translations.d.ts +0 -87
- package/dist/i18n-translations.d.ts.map +0 -1
- package/dist/i18n-translations.js +0 -88
- package/dist/i18n-translations.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resolvers/copy.d.ts.map +0 -1
- package/dist/resolvers/copy.js.map +0 -1
- package/dist/resolvers/google.d.ts.map +0 -1
- package/dist/resolvers/google.js.map +0 -1
- package/dist/resolvers/libreTranslate.d.ts.map +0 -1
- package/dist/resolvers/libreTranslate.js.map +0 -1
- package/dist/resolvers/openAI.d.ts.map +0 -1
- package/dist/resolvers/openAI.js.map +0 -1
- package/dist/resolvers/types.d.ts.map +0 -1
- package/dist/resolvers/types.js.map +0 -1
- package/dist/translate/endpoint.d.ts +0 -3
- package/dist/translate/endpoint.d.ts.map +0 -1
- package/dist/translate/endpoint.js +0 -23
- package/dist/translate/endpoint.js.map +0 -1
- package/dist/translate/findEntityWithConfig.d.ts +0 -16
- package/dist/translate/findEntityWithConfig.d.ts.map +0 -1
- package/dist/translate/findEntityWithConfig.js +0 -34
- package/dist/translate/findEntityWithConfig.js.map +0 -1
- package/dist/translate/operation.d.ts +0 -9
- package/dist/translate/operation.d.ts.map +0 -1
- package/dist/translate/operation.js +0 -78
- package/dist/translate/operation.js.map +0 -1
- package/dist/translate/traverseFields.d.ts +0 -17
- package/dist/translate/traverseFields.d.ts.map +0 -1
- package/dist/translate/traverseFields.js +0 -233
- package/dist/translate/traverseFields.js.map +0 -1
- package/dist/translate/traverseRichText.d.ts +0 -10
- package/dist/translate/traverseRichText.d.ts.map +0 -1
- package/dist/translate/traverseRichText.js +0 -24
- package/dist/translate/traverseRichText.js.map +0 -1
- package/dist/translate/types.d.ts +0 -27
- package/dist/translate/types.d.ts.map +0 -1
- package/dist/translate/types.js +0 -3
- package/dist/translate/types.js.map +0 -1
- package/dist/translate/updateEntity.d.ts +0 -14
- package/dist/translate/updateEntity.d.ts.map +0 -1
- package/dist/translate/updateEntity.js +0 -26
- package/dist/translate/updateEntity.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/chunkArray.d.ts +0 -2
- package/dist/utils/chunkArray.d.ts.map +0 -1
- package/dist/utils/chunkArray.js +0 -7
- package/dist/utils/chunkArray.js.map +0 -1
- package/dist/utils/isEmpty.d.ts +0 -2
- package/dist/utils/isEmpty.d.ts.map +0 -1
- package/dist/utils/isEmpty.js +0 -8
- package/dist/utils/isEmpty.js.map +0 -1
package/dist/resolvers/openAI.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// src/utils/chunkArray.ts
|
|
2
|
+
var chunkArray = (array, length) => {
|
|
3
|
+
return Array.from({ length: Math.ceil(array.length / length) }, (_, i) => array.slice(i * length, i * length + length));
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
// src/resolvers/openAI.ts
|
|
7
|
+
var defaultPrompt = ({ localeFrom, localeTo, texts }) => {
|
|
8
|
+
return `You are a machine translation service. Your task is to translate values in a strict JSON of key value pairs from ${localeFrom} to ${localeTo}.
|
|
4
9
|
|
|
5
10
|
**INSTRUCTIONS:**
|
|
6
11
|
1. **Translate each value**.
|
|
@@ -17,120 +22,111 @@ const defaultPrompt = ({ localeFrom, localeTo, texts })=>{
|
|
|
17
22
|
**INPUT JSON TO TRANSLATE:**
|
|
18
23
|
${JSON.stringify(texts)}`;
|
|
19
24
|
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
var openAIResolver = ({
|
|
26
|
+
apiKey,
|
|
27
|
+
baseUrl,
|
|
28
|
+
chunkLength = 100,
|
|
29
|
+
model = "gpt-3.5-turbo",
|
|
30
|
+
prompt = defaultPrompt
|
|
31
|
+
}) => {
|
|
32
|
+
return {
|
|
33
|
+
key: "openai",
|
|
34
|
+
resolve: async ({ localeFrom, localeTo, req, texts }) => {
|
|
35
|
+
const apiUrl = `${baseUrl || "https://api.openai.com"}/v1/chat/completions`;
|
|
36
|
+
try {
|
|
37
|
+
const response = await Promise.all(chunkArray(texts, chunkLength).map((texts2) => {
|
|
38
|
+
const structuredTexts = texts2.reduce((acc, curr, index) => {
|
|
39
|
+
acc[index + 1] = curr;
|
|
40
|
+
return acc;
|
|
41
|
+
}, {});
|
|
42
|
+
return fetch(apiUrl, {
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
messages: [
|
|
45
|
+
{
|
|
46
|
+
content: prompt({ localeFrom, localeTo, texts: structuredTexts }),
|
|
47
|
+
role: "user"
|
|
32
48
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
],
|
|
50
|
+
model
|
|
51
|
+
}),
|
|
52
|
+
headers: {
|
|
53
|
+
Authorization: `Bearer ${apiKey}`,
|
|
54
|
+
"Content-Type": "application/json"
|
|
55
|
+
},
|
|
56
|
+
method: "post"
|
|
57
|
+
}).then(async (res) => {
|
|
58
|
+
const data = await res.json();
|
|
59
|
+
if (!res.ok)
|
|
60
|
+
req.payload.logger.info({
|
|
61
|
+
message: "An error occurred when trying to translate the data using OpenAI API",
|
|
62
|
+
openAIresponse: data
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
data,
|
|
66
|
+
success: res.ok
|
|
38
67
|
};
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}));
|
|
78
|
-
const translated = [];
|
|
79
|
-
for (const { data, success } of response){
|
|
80
|
-
if (!success) return {
|
|
81
|
-
success: false
|
|
82
|
-
};
|
|
83
|
-
const content = data?.choices?.[0]?.message?.content;
|
|
84
|
-
if (!content) {
|
|
85
|
-
req.payload.logger.error('An error occurred when trying to translate the data using OpenAI API - missing content in the response');
|
|
86
|
-
return {
|
|
87
|
-
success: false
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
const translatedStructuredTexts = JSON.parse(content);
|
|
91
|
-
const translatedChunk = Object.values(translatedStructuredTexts);
|
|
92
|
-
if (!Array.isArray(translatedChunk)) {
|
|
93
|
-
req.payload.logger.error({
|
|
94
|
-
data: translatedChunk,
|
|
95
|
-
fullContent: content,
|
|
96
|
-
message: 'An error occurred when trying to translate the data using OpenAI API - parsed content is not an array'
|
|
97
|
-
});
|
|
98
|
-
return {
|
|
99
|
-
success: false
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
for (const text of translatedChunk){
|
|
103
|
-
if (text && typeof text !== 'string') {
|
|
104
|
-
req.payload.logger.error({
|
|
105
|
-
chunkData: translatedChunk,
|
|
106
|
-
data: text,
|
|
107
|
-
fullContent: content,
|
|
108
|
-
message: 'An error occurred when trying to translate the data using OpenAI API - parsed content is not a string'
|
|
109
|
-
});
|
|
110
|
-
return {
|
|
111
|
-
success: false
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
translated.push(text);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return {
|
|
118
|
-
success: true,
|
|
119
|
-
translatedTexts: translated
|
|
120
|
-
};
|
|
121
|
-
} catch (e) {
|
|
122
|
-
if (e instanceof Error) {
|
|
123
|
-
req.payload.logger.info({
|
|
124
|
-
message: 'An error occurred when trying to translate the data using OpenAI API',
|
|
125
|
-
originalErr: e.message
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
return {
|
|
129
|
-
success: false
|
|
130
|
-
};
|
|
68
|
+
});
|
|
69
|
+
}));
|
|
70
|
+
const translated = [];
|
|
71
|
+
for (const { data, success } of response) {
|
|
72
|
+
if (!success)
|
|
73
|
+
return {
|
|
74
|
+
success: false
|
|
75
|
+
};
|
|
76
|
+
const content = data?.choices?.[0]?.message?.content;
|
|
77
|
+
if (!content) {
|
|
78
|
+
req.payload.logger.error("An error occurred when trying to translate the data using OpenAI API - missing content in the response");
|
|
79
|
+
return {
|
|
80
|
+
success: false
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const translatedStructuredTexts = JSON.parse(content);
|
|
84
|
+
const translatedChunk = Object.values(translatedStructuredTexts);
|
|
85
|
+
if (!Array.isArray(translatedChunk)) {
|
|
86
|
+
req.payload.logger.error({
|
|
87
|
+
data: translatedChunk,
|
|
88
|
+
fullContent: content,
|
|
89
|
+
message: "An error occurred when trying to translate the data using OpenAI API - parsed content is not an array"
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
success: false
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
for (const text of translatedChunk) {
|
|
96
|
+
if (text && typeof text !== "string") {
|
|
97
|
+
req.payload.logger.error({
|
|
98
|
+
chunkData: translatedChunk,
|
|
99
|
+
data: text,
|
|
100
|
+
fullContent: content,
|
|
101
|
+
message: "An error occurred when trying to translate the data using OpenAI API - parsed content is not a string"
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
success: false
|
|
105
|
+
};
|
|
131
106
|
}
|
|
107
|
+
translated.push(text);
|
|
108
|
+
}
|
|
132
109
|
}
|
|
133
|
-
|
|
110
|
+
return {
|
|
111
|
+
success: true,
|
|
112
|
+
translatedTexts: translated
|
|
113
|
+
};
|
|
114
|
+
} catch (e) {
|
|
115
|
+
if (e instanceof Error) {
|
|
116
|
+
req.payload.logger.info({
|
|
117
|
+
message: "An error occurred when trying to translate the data using OpenAI API",
|
|
118
|
+
originalErr: e.message
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return { success: false };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
134
125
|
};
|
|
135
126
|
|
|
136
|
-
|
|
127
|
+
// src/exports/resolvers/openAI.ts
|
|
128
|
+
var openAI_default = openAIResolver;
|
|
129
|
+
export {
|
|
130
|
+
openAIResolver,
|
|
131
|
+
openAI_default as default
|
|
132
|
+
};
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { PayloadRequest } from "payload";
|
|
2
|
+
type TranslateResolverArgs = {
|
|
3
|
+
/** Locale to translate from */
|
|
4
|
+
localeFrom: string;
|
|
5
|
+
/** Locale to translate to */
|
|
6
|
+
localeTo: string;
|
|
7
|
+
req: PayloadRequest;
|
|
8
|
+
texts: string[];
|
|
9
9
|
};
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
type TranslateResolverResponse = {
|
|
11
|
+
success: false;
|
|
12
12
|
} | {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
success: true;
|
|
14
|
+
translatedTexts: string[];
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
type TranslateResolver = {
|
|
17
|
+
key: string;
|
|
18
|
+
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
19
19
|
};
|
|
20
|
-
|
|
20
|
+
export { TranslateResolverResponse, TranslateResolverArgs, TranslateResolver };
|
package/dist/resolvers/types.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
.translator__custom-save-button {
|
|
2
|
-
display: flex;
|
|
3
|
-
align-items: center;
|
|
4
|
-
gap: 10px;
|
|
5
|
-
}
|
|
1
|
+
.translator__custom-save-button {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: 10px;
|
|
5
|
+
}
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
.translator {
|
|
2
|
-
&__modal {
|
|
3
|
-
display: flex;
|
|
4
|
-
position: relative;
|
|
5
|
-
justify-content: center;
|
|
6
|
-
align-items: center;
|
|
7
|
-
width: fit-content;
|
|
8
|
-
height: fit-content;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
&__wrapper {
|
|
12
|
-
display: flex;
|
|
13
|
-
position: relative;
|
|
14
|
-
flex-direction: column;
|
|
15
|
-
gap: var(--base);
|
|
16
|
-
z-index: 1;
|
|
17
|
-
background: var(--theme-elevation-50);
|
|
18
|
-
padding: 50px;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
&__content {
|
|
22
|
-
display: flex;
|
|
23
|
-
flex-direction: column;
|
|
24
|
-
align-items: center;
|
|
25
|
-
gap: var(--base);
|
|
26
|
-
max-width: 400px;
|
|
27
|
-
|
|
28
|
-
h2 {
|
|
29
|
-
margin: 0;
|
|
30
|
-
text-align: center;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
&__buttons {
|
|
35
|
-
display: flex;
|
|
36
|
-
justify-content: center;
|
|
37
|
-
gap: 10px;
|
|
38
|
-
width: 100%;
|
|
39
|
-
|
|
40
|
-
button {
|
|
41
|
-
margin: 0;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
&__close {
|
|
46
|
-
position: absolute;
|
|
47
|
-
top: 10px;
|
|
48
|
-
right: 10px;
|
|
49
|
-
transition: 0.25s;
|
|
50
|
-
cursor: pointer;
|
|
51
|
-
width: 32px;
|
|
52
|
-
height: 32px;
|
|
53
|
-
|
|
54
|
-
&:hover {
|
|
55
|
-
opacity: 0.6;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
&:before,
|
|
59
|
-
&:after {
|
|
60
|
-
position: absolute;
|
|
61
|
-
left: 15px;
|
|
62
|
-
background-color: var(--theme-elevation-800);
|
|
63
|
-
width: 2px;
|
|
64
|
-
height: 33px;
|
|
65
|
-
content: ' ';
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
&:before {
|
|
69
|
-
transform: rotate(45deg);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
&:after {
|
|
73
|
-
transform: rotate(-45deg);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
1
|
+
.translator {
|
|
2
|
+
&__modal {
|
|
3
|
+
display: flex;
|
|
4
|
+
position: relative;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
align-items: center;
|
|
7
|
+
width: fit-content;
|
|
8
|
+
height: fit-content;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
&__wrapper {
|
|
12
|
+
display: flex;
|
|
13
|
+
position: relative;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
gap: var(--base);
|
|
16
|
+
z-index: 1;
|
|
17
|
+
background: var(--theme-elevation-50);
|
|
18
|
+
padding: 50px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&__content {
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: var(--base);
|
|
26
|
+
max-width: 400px;
|
|
27
|
+
|
|
28
|
+
h2 {
|
|
29
|
+
margin: 0;
|
|
30
|
+
text-align: center;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&__buttons {
|
|
35
|
+
display: flex;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
gap: 10px;
|
|
38
|
+
width: 100%;
|
|
39
|
+
|
|
40
|
+
button {
|
|
41
|
+
margin: 0;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&__close {
|
|
46
|
+
position: absolute;
|
|
47
|
+
top: 10px;
|
|
48
|
+
right: 10px;
|
|
49
|
+
transition: 0.25s;
|
|
50
|
+
cursor: pointer;
|
|
51
|
+
width: 32px;
|
|
52
|
+
height: 32px;
|
|
53
|
+
|
|
54
|
+
&:hover {
|
|
55
|
+
opacity: 0.6;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&:before,
|
|
59
|
+
&:after {
|
|
60
|
+
position: absolute;
|
|
61
|
+
left: 15px;
|
|
62
|
+
background-color: var(--theme-elevation-800);
|
|
63
|
+
width: 2px;
|
|
64
|
+
height: 33px;
|
|
65
|
+
content: ' ';
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&:before {
|
|
69
|
+
transform: rotate(45deg);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
&:after {
|
|
73
|
+
transform: rotate(-45deg);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,23 +1,71 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* Disable the plugin
|
|
11
|
-
*/
|
|
12
|
-
disabled?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Globals with the enabled translator in the admin UI
|
|
15
|
-
*/
|
|
16
|
-
globals: GlobalSlug[];
|
|
17
|
-
/**
|
|
18
|
-
* Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers
|
|
19
|
-
*/
|
|
20
|
-
resolvers: TranslateResolver[];
|
|
21
|
-
_options?: Parameters<typeof traverseFields>[0]['_options'];
|
|
1
|
+
import { CollectionSlug, GlobalSlug } from "payload";
|
|
2
|
+
import { PayloadRequest } from "payload";
|
|
3
|
+
type TranslateResolverArgs = {
|
|
4
|
+
/** Locale to translate from */
|
|
5
|
+
localeFrom: string;
|
|
6
|
+
/** Locale to translate to */
|
|
7
|
+
localeTo: string;
|
|
8
|
+
req: PayloadRequest;
|
|
9
|
+
texts: string[];
|
|
22
10
|
};
|
|
23
|
-
|
|
11
|
+
type TranslateResolverResponse = {
|
|
12
|
+
success: false;
|
|
13
|
+
} | {
|
|
14
|
+
success: true;
|
|
15
|
+
translatedTexts: string[];
|
|
16
|
+
};
|
|
17
|
+
type TranslateResolver = {
|
|
18
|
+
key: string;
|
|
19
|
+
resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
|
|
20
|
+
};
|
|
21
|
+
type TranslatorConfig = {
|
|
22
|
+
/**
|
|
23
|
+
* Collections with the enabled translator in the admin UI
|
|
24
|
+
*/
|
|
25
|
+
collections: CollectionSlug[];
|
|
26
|
+
/**
|
|
27
|
+
* Disable the plugin
|
|
28
|
+
*/
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Globals with the enabled translator in the admin UI
|
|
32
|
+
*/
|
|
33
|
+
globals: GlobalSlug[];
|
|
34
|
+
/**
|
|
35
|
+
* Add resolvers that you want to include, examples on how to write your own in ./plugin/src/resolvers
|
|
36
|
+
*/
|
|
37
|
+
resolvers: TranslateResolver[];
|
|
38
|
+
/**
|
|
39
|
+
* Auto-translate every save in the default locale to the other
|
|
40
|
+
* configured locales via Payload's job queue.
|
|
41
|
+
*
|
|
42
|
+
* When `true`, the plugin:
|
|
43
|
+
* - registers `createTranslateTask()` and `createTranslateWorkflow()`
|
|
44
|
+
* in `config.jobs` (idempotent — skips if a task/workflow with
|
|
45
|
+
* the same slug is already registered, so host-customized
|
|
46
|
+
* factories survive),
|
|
47
|
+
* - prepends `createAutoTranslateCollectionHook` /
|
|
48
|
+
* `createAutoTranslateGlobalHook` to each collection/global
|
|
49
|
+
* listed in `collections` / `globals`.
|
|
50
|
+
*
|
|
51
|
+
* Default: `false`. Public factories stay exported for hosts that
|
|
52
|
+
* need per-entity control.
|
|
53
|
+
*/
|
|
54
|
+
autoTranslate?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Advanced traversal options. Mirrors the options accepted by the
|
|
57
|
+
* internal field walker — keep in sync if you need the latest shape.
|
|
58
|
+
*/
|
|
59
|
+
_options?: {
|
|
60
|
+
/**
|
|
61
|
+
* Hook invoked while walking each rich-text node. Lets you append
|
|
62
|
+
* extra text segments to be translated (e.g. custom lexical nodes).
|
|
63
|
+
*/
|
|
64
|
+
additionalTraverseRichText?: (args: {
|
|
65
|
+
onText: (siblingData: Record<string, unknown>, attribute?: string) => void;
|
|
66
|
+
root: Record<string, unknown>;
|
|
67
|
+
siblingData?: Record<string, unknown>;
|
|
68
|
+
}) => void;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
export { TranslatorConfig };
|
package/dist/types.js
CHANGED