@strapi/admin 4.5.0 → 4.5.1
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/admin/src/content-manager/components/DynamicZone/components/{AddComponentButton/index.js → AddComponentButton.js} +12 -6
- package/admin/src/content-manager/components/DynamicZone/components/{ComponentPicker/Category/ComponentCard/index.js → ComponentCard.js} +8 -19
- package/admin/src/content-manager/components/DynamicZone/components/{ComponentPicker/Category/index.js → ComponentCategory.js} +19 -18
- package/admin/src/content-manager/components/DynamicZone/components/{ComponentPicker/index.js → ComponentPicker.js} +36 -38
- package/admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js +195 -0
- package/admin/src/content-manager/components/DynamicZone/components/{DzLabel/index.js → DynamicZoneLabel.js} +13 -5
- package/admin/src/content-manager/components/DynamicZone/index.js +33 -118
- package/admin/src/pages/HomePage/index.js +1 -1
- package/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FilterSelect.js +2 -1
- package/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/index.js +1 -0
- package/admin/src/translations/pt-BR.json +14 -14
- package/admin/src/translations/sv.json +117 -85
- package/build/{1856.172d5fa0.chunk.js → 1856.db9f5782.chunk.js} +22 -22
- package/build/{2077.058590f4.chunk.js → 2077.fed8c9c3.chunk.js} +7 -7
- package/build/{2912.2c42c07b.chunk.js → 2912.fccb2c43.chunk.js} +11 -11
- package/build/{9166.90876521.chunk.js → 4610.7614b003.chunk.js} +13 -13
- package/build/{4715.22747b59.chunk.js → 4715.8e33d630.chunk.js} +23 -23
- package/build/{4982.1b75ddb1.chunk.js → 4982.9e58ea3f.chunk.js} +12 -12
- package/build/6925.bb6dd64d.chunk.js +762 -0
- package/build/{7379.d246dd38.chunk.js → 7379.e972985f.chunk.js} +1 -1
- package/build/{7692.a36fb2c2.chunk.js → 7692.31e83caa.chunk.js} +79 -79
- package/build/{7841.c50e9509.chunk.js → 7841.4804bd98.chunk.js} +11 -11
- package/build/{7866.ba215f99.chunk.js → 7866.6db2248d.chunk.js} +14 -14
- package/build/{8380.e53e7207.chunk.js → 8380.37126e0d.chunk.js} +10 -10
- package/build/{8549.832ed79d.chunk.js → 8549.5e5fb6b6.chunk.js} +6 -6
- package/build/{8738.0fe8a61e.chunk.js → 8738.5a02bffb.chunk.js} +35 -35
- package/build/{9066.eaf76ff3.chunk.js → 9066.5d980488.chunk.js} +5 -5
- package/build/9420.7addc099.chunk.js +505 -0
- package/build/{9649.468667d9.chunk.js → 9649.b6afc945.chunk.js} +5 -5
- package/build/{Admin-authenticatedApp.c4f68103.chunk.js → Admin-authenticatedApp.c07d2a86.chunk.js} +2 -2
- package/build/{Admin_marketplace.32375885.chunk.js → Admin_marketplace.444ff7b8.chunk.js} +5 -5
- package/build/{admin-app.9049056c.chunk.js → admin-app.b157c10a.chunk.js} +1 -1
- package/build/content-manager.f38edbb6.chunk.js +1202 -0
- package/build/content-type-builder-translation-pt-BR-json.6fe3b8d1.chunk.js +1 -0
- package/build/{email-settings-page.c3469093.chunk.js → email-settings-page.91c925a5.chunk.js} +5 -5
- package/build/email-translation-en-json.ebad8943.chunk.js +1 -0
- package/build/{i18n-settings-page.46d894ff.chunk.js → i18n-settings-page.4ef64441.chunk.js} +5 -5
- package/build/index.html +1 -1
- package/build/{main.91328e7a.js → main.ca8b0ee3.js} +791 -707
- package/build/pt-BR-json.2b72b1d6.chunk.js +1 -0
- package/build/{runtime~main.c9c319c0.js → runtime~main.ede9da1e.js} +1 -1
- package/build/sv-json.fb1081ff.chunk.js +1 -0
- package/build/{upload-settings.53b690f3.chunk.js → upload-settings.3f7ad973.chunk.js} +5 -5
- package/build/{users-advanced-settings-page.3f4ee86e.chunk.js → users-advanced-settings-page.6a838320.chunk.js} +5 -5
- package/build/users-permissions-translation-sv-json.d5d11648.chunk.js +1 -0
- package/build/{webhook-list-page.02191138.chunk.js → webhook-list-page.a110c462.chunk.js} +5 -5
- package/package.json +15 -15
- package/server/content-types/api-token.js +1 -1
- package/admin/src/content-manager/components/DynamicZone/components/Component/Rectangle.js +0 -19
- package/admin/src/content-manager/components/DynamicZone/components/Component/index.js +0 -191
- package/admin/src/content-manager/icons/Bold/index.js +0 -22
- package/admin/src/content-manager/icons/Code/index.js +0 -13
- package/admin/src/content-manager/icons/Cross/index.js +0 -28
- package/admin/src/content-manager/icons/Italic/index.js +0 -23
- package/admin/src/content-manager/icons/Link/index.js +0 -21
- package/admin/src/content-manager/icons/Media/index.js +0 -14
- package/admin/src/content-manager/icons/Na/index.js +0 -39
- package/admin/src/content-manager/icons/Ol/index.js +0 -13
- package/admin/src/content-manager/icons/Quote/index.js +0 -13
- package/admin/src/content-manager/icons/Striked/index.js +0 -24
- package/admin/src/content-manager/icons/Ul/index.js +0 -15
- package/admin/src/content-manager/icons/Underline/index.js +0 -22
- package/build/6925.f5c8b6fc.chunk.js +0 -761
- package/build/9420.5292d1d2.chunk.js +0 -505
- package/build/content-manager.ff998bed.chunk.js +0 -1204
- package/build/content-type-builder-translation-pt-BR-json.d6c7fcc1.chunk.js +0 -1
- package/build/email-translation-en-json.3d74ff95.chunk.js +0 -1
- package/build/pt-BR-json.7852f808.chunk.js +0 -1
- package/build/sv-json.8e5a7911.chunk.js +0 -1
- package/build/users-permissions-translation-sv-json.83c60841.chunk.js +0 -1
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
import React, { memo,
|
|
1
|
+
import React, { memo, useMemo, useState } from 'react';
|
|
2
2
|
import get from 'lodash/get';
|
|
3
3
|
import isEqual from 'react-fast-compare';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { Stack } from '@strapi/design-system/Stack';
|
|
6
6
|
import { Box } from '@strapi/design-system/Box';
|
|
7
7
|
import { NotAllowedInput, useNotification } from '@strapi/helper-plugin';
|
|
8
|
+
|
|
8
9
|
import { getTrad } from '../../utils';
|
|
10
|
+
|
|
9
11
|
import connect from './utils/connect';
|
|
10
12
|
import select from './utils/select';
|
|
11
|
-
import AddComponentButton from './components/AddComponentButton';
|
|
12
|
-
import DzLabel from './components/DzLabel';
|
|
13
|
-
import Component from './components/Component';
|
|
14
13
|
|
|
14
|
+
import DynamicZoneComponent from './components/DynamicComponent';
|
|
15
|
+
import AddComponentButton from './components/AddComponentButton';
|
|
16
|
+
import DynamicZoneLabel from './components/DynamicZoneLabel';
|
|
15
17
|
import ComponentPicker from './components/ComponentPicker';
|
|
16
|
-
import { useContentTypeLayout } from '../../hooks';
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const createCollapses = (arrayLength) =>
|
|
21
|
-
Array.from({ length: arrayLength }).map(() => ({ isOpen: false }));
|
|
19
|
+
import { useContentTypeLayout } from '../../hooks';
|
|
22
20
|
|
|
23
21
|
const DynamicZone = ({
|
|
24
22
|
name,
|
|
@@ -36,39 +34,16 @@ const DynamicZone = ({
|
|
|
36
34
|
fieldSchema,
|
|
37
35
|
metadatas,
|
|
38
36
|
}) => {
|
|
37
|
+
const [addComponentIsOpen, setAddComponentIsOpen] = useState(false);
|
|
38
|
+
|
|
39
39
|
const toggleNotification = useNotification();
|
|
40
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
41
|
-
const [shouldOpenAddedComponent, setShouldOpenAddedComponent] = useState(false);
|
|
42
40
|
const { getComponentLayout, components } = useContentTypeLayout();
|
|
41
|
+
|
|
43
42
|
const dynamicDisplayedComponentsLength = dynamicDisplayedComponents.length;
|
|
44
43
|
const intlDescription = metadatas.description
|
|
45
44
|
? { id: metadatas.description, defaultMessage: metadatas.description }
|
|
46
45
|
: null;
|
|
47
46
|
|
|
48
|
-
const [componentCollapses, setComponentsCollapses] = useState(
|
|
49
|
-
createCollapses(dynamicDisplayedComponentsLength)
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
setComponentsCollapses(createCollapses(dynamicDisplayedComponentsLength));
|
|
54
|
-
}, [dynamicDisplayedComponentsLength]);
|
|
55
|
-
|
|
56
|
-
useEffect(() => {
|
|
57
|
-
if (shouldOpenAddedComponent) {
|
|
58
|
-
setComponentsCollapses((prev) =>
|
|
59
|
-
prev.map((collapse, index) => {
|
|
60
|
-
if (index === prev.length - 1) {
|
|
61
|
-
return { ...collapse, isOpen: true };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return collapse;
|
|
65
|
-
})
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
setShouldOpenAddedComponent(false);
|
|
69
|
-
}
|
|
70
|
-
}, [shouldOpenAddedComponent]);
|
|
71
|
-
|
|
72
47
|
// We cannot use the default props here
|
|
73
48
|
const { max = Infinity, min = -Infinity } = fieldSchema;
|
|
74
49
|
const dynamicZoneErrors = useMemo(() => {
|
|
@@ -79,8 +54,6 @@ const DynamicZone = ({
|
|
|
79
54
|
.map((key) => formErrors[key]);
|
|
80
55
|
}, [formErrors, name]);
|
|
81
56
|
|
|
82
|
-
const dynamicZoneAvailableComponents = useMemo(() => fieldSchema.components || [], [fieldSchema]);
|
|
83
|
-
|
|
84
57
|
const missingComponentNumber = min - dynamicDisplayedComponentsLength;
|
|
85
58
|
const hasError = dynamicZoneErrors.length > 0;
|
|
86
59
|
|
|
@@ -90,21 +63,17 @@ const DynamicZone = ({
|
|
|
90
63
|
const hasMaxError =
|
|
91
64
|
hasError && get(dynamicZoneErrors, [0, 'id'], '') === 'components.Input.error.validation.max';
|
|
92
65
|
|
|
93
|
-
const handleAddComponent =
|
|
94
|
-
(
|
|
95
|
-
setIsOpen(false);
|
|
66
|
+
const handleAddComponent = (componentUid) => {
|
|
67
|
+
setAddComponentIsOpen(false);
|
|
96
68
|
|
|
97
|
-
|
|
69
|
+
const componentLayoutData = getComponentLayout(componentUid);
|
|
98
70
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
},
|
|
102
|
-
[addComponentToDynamicZone, hasError, name, components, getComponentLayout]
|
|
103
|
-
);
|
|
71
|
+
addComponentToDynamicZone(name, componentLayoutData, components, hasError);
|
|
72
|
+
};
|
|
104
73
|
|
|
105
74
|
const handleClickOpenPicker = () => {
|
|
106
75
|
if (dynamicDisplayedComponentsLength < max) {
|
|
107
|
-
|
|
76
|
+
setAddComponentIsOpen((prev) => !prev);
|
|
108
77
|
} else {
|
|
109
78
|
toggleNotification({
|
|
110
79
|
type: 'info',
|
|
@@ -113,68 +82,19 @@ const DynamicZone = ({
|
|
|
113
82
|
}
|
|
114
83
|
};
|
|
115
84
|
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
prev.map(({ isOpen }, index) => {
|
|
119
|
-
if (index === indexToToggle) {
|
|
120
|
-
return { isOpen: !isOpen };
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return { isOpen };
|
|
124
|
-
})
|
|
125
|
-
);
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
const handleMoveComponentDown = (name, currentIndex) => {
|
|
129
|
-
moveComponentDown(name, currentIndex);
|
|
130
|
-
setComponentsCollapses((prev) => {
|
|
131
|
-
return prev.map(({ isOpen }, index, refArray) => {
|
|
132
|
-
if (index === currentIndex + 1) {
|
|
133
|
-
return { isOpen: refArray[currentIndex].isOpen };
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (index === currentIndex) {
|
|
137
|
-
return { isOpen: refArray[index + 1].isOpen };
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return { isOpen };
|
|
141
|
-
});
|
|
142
|
-
});
|
|
85
|
+
const handleMoveComponentDown = (name, componentIndex) => () => {
|
|
86
|
+
moveComponentDown(name, componentIndex);
|
|
143
87
|
};
|
|
144
88
|
|
|
145
|
-
const handleMoveComponentUp = (name,
|
|
146
|
-
moveComponentUp(name,
|
|
147
|
-
setComponentsCollapses((prev) => {
|
|
148
|
-
return prev.map(({ isOpen }, index, refArray) => {
|
|
149
|
-
if (index === currentIndex - 1) {
|
|
150
|
-
return { isOpen: refArray[currentIndex].isOpen };
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
if (index === currentIndex) {
|
|
154
|
-
return { isOpen: refArray[index - 1].isOpen };
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return { isOpen };
|
|
158
|
-
});
|
|
159
|
-
});
|
|
89
|
+
const handleMoveComponentUp = (name, componentIndex) => () => {
|
|
90
|
+
moveComponentUp(name, componentIndex);
|
|
160
91
|
};
|
|
161
92
|
|
|
162
|
-
const handleRemoveComponent = (name, currentIndex) => {
|
|
93
|
+
const handleRemoveComponent = (name, currentIndex) => () => {
|
|
163
94
|
removeComponentFromDynamicZone(name, currentIndex);
|
|
164
95
|
};
|
|
165
96
|
|
|
166
|
-
if (!isFieldAllowed && isCreatingEntry) {
|
|
167
|
-
return (
|
|
168
|
-
<NotAllowedInput
|
|
169
|
-
description={intlDescription}
|
|
170
|
-
intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}
|
|
171
|
-
labelAction={labelAction}
|
|
172
|
-
name={name}
|
|
173
|
-
/>
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
if (!isFieldAllowed && !isFieldReadable && !isCreatingEntry) {
|
|
97
|
+
if (!isFieldAllowed && (isCreatingEntry || (!isFieldReadable && !isCreatingEntry))) {
|
|
178
98
|
return (
|
|
179
99
|
<NotAllowedInput
|
|
180
100
|
description={intlDescription}
|
|
@@ -189,7 +109,7 @@ const DynamicZone = ({
|
|
|
189
109
|
<Stack spacing={6}>
|
|
190
110
|
{dynamicDisplayedComponentsLength > 0 && (
|
|
191
111
|
<Box>
|
|
192
|
-
<
|
|
112
|
+
<DynamicZoneLabel
|
|
193
113
|
intlDescription={intlDescription}
|
|
194
114
|
label={metadatas.label}
|
|
195
115
|
labelAction={labelAction}
|
|
@@ -198,26 +118,21 @@ const DynamicZone = ({
|
|
|
198
118
|
required={fieldSchema.required || false}
|
|
199
119
|
/>
|
|
200
120
|
{dynamicDisplayedComponents.map((componentUid, index) => {
|
|
201
|
-
const showDownIcon =
|
|
202
|
-
|
|
203
|
-
dynamicDisplayedComponentsLength > 0 &&
|
|
204
|
-
index < dynamicDisplayedComponentsLength - 1;
|
|
205
|
-
const showUpIcon = isFieldAllowed && dynamicDisplayedComponentsLength > 0 && index > 0;
|
|
206
|
-
const isOpen = componentCollapses[index]?.isOpen || false;
|
|
121
|
+
const showDownIcon = isFieldAllowed && index < dynamicDisplayedComponentsLength - 1;
|
|
122
|
+
const showUpIcon = isFieldAllowed && index > 0;
|
|
207
123
|
|
|
208
124
|
return (
|
|
209
|
-
<
|
|
125
|
+
<DynamicZoneComponent
|
|
210
126
|
componentUid={componentUid}
|
|
211
127
|
formErrors={formErrors}
|
|
128
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
212
129
|
key={index}
|
|
213
130
|
index={index}
|
|
214
|
-
isOpen={isOpen}
|
|
215
131
|
isFieldAllowed={isFieldAllowed}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
onToggle={handleToggleComponent}
|
|
132
|
+
onMoveComponentDownClick={handleMoveComponentDown(name, index)}
|
|
133
|
+
onMoveComponentUpClick={handleMoveComponentUp(name, index)}
|
|
219
134
|
name={name}
|
|
220
|
-
|
|
135
|
+
onRemoveComponentClick={handleRemoveComponent(name, index)}
|
|
221
136
|
showDownIcon={showDownIcon}
|
|
222
137
|
showUpIcon={showUpIcon}
|
|
223
138
|
/>
|
|
@@ -233,13 +148,13 @@ const DynamicZone = ({
|
|
|
233
148
|
isDisabled={!isFieldAllowed}
|
|
234
149
|
label={metadatas.label}
|
|
235
150
|
missingComponentNumber={missingComponentNumber}
|
|
236
|
-
isOpen={
|
|
151
|
+
isOpen={addComponentIsOpen}
|
|
237
152
|
name={name}
|
|
238
153
|
onClick={handleClickOpenPicker}
|
|
239
154
|
/>
|
|
240
155
|
<ComponentPicker
|
|
241
|
-
isOpen={
|
|
242
|
-
components={
|
|
156
|
+
isOpen={addComponentIsOpen}
|
|
157
|
+
components={fieldSchema.components ?? []}
|
|
243
158
|
onClickAddComponent={handleAddComponent}
|
|
244
159
|
/>
|
|
245
160
|
</Stack>
|
|
@@ -32,7 +32,7 @@ const LogoContainer = styled(Box)`
|
|
|
32
32
|
`;
|
|
33
33
|
|
|
34
34
|
const HomePage = () => {
|
|
35
|
-
//
|
|
35
|
+
// Temporary until we develop the menu API
|
|
36
36
|
const { collectionTypes, singleTypes, isLoading: isLoadingForModels } = useModels();
|
|
37
37
|
const { guidedTourState, isGuidedTourVisible, isSkipped } = useGuidedTour();
|
|
38
38
|
|
|
@@ -9,6 +9,7 @@ const FilterSelect = ({ message, value, onChange, possibleFilters, onClear, cust
|
|
|
9
9
|
|
|
10
10
|
return (
|
|
11
11
|
<Select
|
|
12
|
+
data-testid={`${message}-button`}
|
|
12
13
|
aria-label={message}
|
|
13
14
|
placeholder={message}
|
|
14
15
|
size="M"
|
|
@@ -20,7 +21,7 @@ const FilterSelect = ({ message, value, onChange, possibleFilters, onClear, cust
|
|
|
20
21
|
>
|
|
21
22
|
{Object.entries(possibleFilters).map(([filterName, count]) => {
|
|
22
23
|
return (
|
|
23
|
-
<Option key={filterName} value={filterName}>
|
|
24
|
+
<Option data-testid={`${filterName}-${count}`} key={filterName} value={filterName}>
|
|
24
25
|
{computeFilterMessage(filterName, count)}
|
|
25
26
|
</Option>
|
|
26
27
|
);
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"ResetPasswordToken": "Redefinir o token de senha",
|
|
74
74
|
"Role": "Função",
|
|
75
75
|
"Roles & Permissions": "Funções e Permissões",
|
|
76
|
-
"Roles.ListPage.notification.delete-all-not-allowed": "
|
|
76
|
+
"Roles.ListPage.notification.delete-all-not-allowed": "Algumas funções não puderam ser removidos por estarem associadas a alguns usuários",
|
|
77
77
|
"Roles.ListPage.notification.delete-not-allowed": "A função não pode ser removida se ainda estiver associada a algum usuário",
|
|
78
78
|
"Roles.RoleRow.select-all": "Selecione {name} para ações em massa",
|
|
79
79
|
"Roles.RoleRow.user-count": "{number, plural, =0 {# user} um {# user} outros {# users}}",
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
"Settings.profile.form.section.experience.clear.select": "Limpar a linguagem da interface selecionada",
|
|
154
154
|
"Settings.profile.form.section.experience.here": "aqui",
|
|
155
155
|
"Settings.profile.form.section.experience.interfaceLanguage": "Linguagem da interface",
|
|
156
|
-
"Settings.profile.form.section.experience.interfaceLanguage.hint": "Somente sua interface será exibida com a
|
|
156
|
+
"Settings.profile.form.section.experience.interfaceLanguage.hint": "Somente sua interface será exibida com a linguagem selecionada.",
|
|
157
157
|
"Settings.profile.form.section.experience.interfaceLanguageHelp": "A nova linguagem seleciona só será exibida a você. Por favor, leia essa {documentation} para disponibilizar outras linguagens para sua equipe.",
|
|
158
158
|
"Settings.profile.form.section.experience.mode.label": "Modo de interface",
|
|
159
159
|
"Settings.profile.form.section.experience.mode.hint": "Selecione o modo de interface que você deseja usar",
|
|
@@ -212,7 +212,7 @@
|
|
|
212
212
|
"Settings.webhooks.trigger.cancel": "Cancelar disparo",
|
|
213
213
|
"Settings.webhooks.trigger.pending": "Pendente…",
|
|
214
214
|
"Settings.webhooks.trigger.save": "Por favor salve para disparar",
|
|
215
|
-
"Settings.webhooks.trigger.success": "
|
|
215
|
+
"Settings.webhooks.trigger.success": "Sucesso!",
|
|
216
216
|
"Settings.webhooks.trigger.success.label": "Disparo realizado com sucesso",
|
|
217
217
|
"Settings.webhooks.trigger.test": "Disparo de teste",
|
|
218
218
|
"Settings.webhooks.trigger.title": "Salvar antes do Disparo",
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
"admin.pages.MarketPlacePage.helmet": "Loja - Extensões",
|
|
236
236
|
"admin.pages.MarketPlacePage.offline.title": "Você está offline",
|
|
237
237
|
"admin.pages.MarketPlacePage.offline.subtitle": "Você precisa estar online para ver as extensões",
|
|
238
|
-
"admin.pages.MarketPlacePage.plugins": "
|
|
238
|
+
"admin.pages.MarketPlacePage.plugins": "Extensões",
|
|
239
239
|
"admin.pages.MarketPlacePage.plugin.copy": "Copiar comando de instalação",
|
|
240
240
|
"admin.pages.MarketPlacePage.plugin.copy.success": "Comando de instalação pronto para ser colado em seu terminal",
|
|
241
241
|
"admin.pages.MarketPlacePage.plugin.info": "Saber mais",
|
|
@@ -249,10 +249,10 @@
|
|
|
249
249
|
"admin.pages.MarketPlacePage.search.empty": "Sem resultado para \"{target}\"",
|
|
250
250
|
"admin.pages.MarketPlacePage.search.placeholder": "Pesquisar",
|
|
251
251
|
"admin.pages.MarketPlacePage.submit.plugin.link": "Submeta sua extensão",
|
|
252
|
-
"admin.pages.MarketPlacePage.submit.provider.link": "
|
|
252
|
+
"admin.pages.MarketPlacePage.submit.provider.link": "Submeta provedor",
|
|
253
253
|
"admin.pages.MarketPlacePage.subtitle": "Faça mais com o Strapi",
|
|
254
|
-
"admin.pages.MarketPlacePage.tab-group.label": "Plugins
|
|
255
|
-
"admin.pages.MarketPlacePage.missingPlugin.title": "
|
|
254
|
+
"admin.pages.MarketPlacePage.tab-group.label": "Plugins e Provedores para Strapi",
|
|
255
|
+
"admin.pages.MarketPlacePage.missingPlugin.title": "Falta-lhe um plugin?",
|
|
256
256
|
"admin.pages.MarketPlacePage.missingPlugin.description": "Diga-nos qual extensão você está procurando e informaremos nossos desenvolvedores de extensões da comunidade caso eles estejam em busca de inspiração!",
|
|
257
257
|
"anErrorOccurred": "Ops! Algo deu errado. Por favor, tente novamente.",
|
|
258
258
|
"app.component.CopyToClipboard.label": "Copiar pra área de transferência",
|
|
@@ -275,7 +275,7 @@
|
|
|
275
275
|
"app.components.DownloadInfo.download": "Transferência em andamento...",
|
|
276
276
|
"app.components.DownloadInfo.text": "Isto poderá levar alguns minutos. Obrigado pela sua paciência",
|
|
277
277
|
"app.components.EmptyAttributes.title": "Ainda não existem campos",
|
|
278
|
-
"app.components.EmptyStateLayout.content-document": "Nenhum conteúdo
|
|
278
|
+
"app.components.EmptyStateLayout.content-document": "Nenhum conteúdo encontrado",
|
|
279
279
|
"app.components.EmptyStateLayout.content-permissions": "Você não tem permissão para acessar esse conteúdo",
|
|
280
280
|
"app.components.GuidedTour.CM.create.content": "<p>Crie e gerencie todo o conteúdo aqui no Gerenciador de Conteúdos.</p><p>Ex: Levando ainda mais o exemplo do site do Blog, pode-se escrever um artigo, salvá-lo e publicá-lo como quiser.</p><p>💡 Dica rápida - Não se esqueça de clicar em publicar no conteúdo que você criar.</p>",
|
|
281
281
|
"app.components.GuidedTour.CM.create.title": "⚡️ Crie seu primeiro conteúdo",
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
"app.components.InputFileDetails.size": "Tamanho:",
|
|
321
321
|
"app.components.InstallPluginPage.Download.description": "Pode demorar alguns segundos para baixar e instalar a extensão.",
|
|
322
322
|
"app.components.InstallPluginPage.Download.title": "Baixando...",
|
|
323
|
-
"app.components.InstallPluginPage.description": "
|
|
323
|
+
"app.components.InstallPluginPage.description": "Estenda seu aplicativo sem esforço.",
|
|
324
324
|
"app.components.LeftMenu.collapse": "Recolher barra de navegação",
|
|
325
325
|
"app.components.LeftMenu.expand": "Expandir barra de navegação",
|
|
326
326
|
"app.components.LeftMenu.general": "Geral",
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
"app.components.LeftMenuLinkContainer.collectionTypes": "Tipos de coleção",
|
|
335
335
|
"app.components.LeftMenuLinkContainer.configuration": "Configurações",
|
|
336
336
|
"app.components.LeftMenuLinkContainer.general": "Geral",
|
|
337
|
-
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "
|
|
337
|
+
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "Nenhuma extensão instalada ainda",
|
|
338
338
|
"app.components.LeftMenuLinkContainer.plugins": "Extensões",
|
|
339
339
|
"app.components.LeftMenuLinkContainer.singleTypes": "Tipos singulares",
|
|
340
340
|
"app.components.ListPluginsPage.deletePlugin.description": "Pode demorar alguns segundos para desinstalar a extensão.",
|
|
@@ -357,9 +357,9 @@
|
|
|
357
357
|
"app.components.PluginCard.PopUpWarning.install.impossible.autoReload.needed": "O recurso autoReload precisa estar ativado. Por favor, inicie seu aplicativo com `yarn develop`.",
|
|
358
358
|
"app.components.PluginCard.PopUpWarning.install.impossible.confirm": "Eu compreendo!",
|
|
359
359
|
"app.components.PluginCard.PopUpWarning.install.impossible.environment": "Por motivos de segurança, uma extensão só pode ser baixada no ambiente de desenvolvimento.",
|
|
360
|
-
"app.components.PluginCard.PopUpWarning.install.impossible.title": "Não é
|
|
360
|
+
"app.components.PluginCard.PopUpWarning.install.impossible.title": "Não é possível baixar",
|
|
361
361
|
"app.components.PluginCard.compatible": "Compatível com a sua aplicação",
|
|
362
|
-
"app.components.PluginCard.compatibleCommunity": "
|
|
362
|
+
"app.components.PluginCard.compatibleCommunity": "Compatível com a comunidade",
|
|
363
363
|
"app.components.PluginCard.more-details": "Mais detalhes",
|
|
364
364
|
"app.components.ToggleCheckbox.off-label": "Desativado",
|
|
365
365
|
"app.components.ToggleCheckbox.on-label": "Ativado",
|
|
@@ -527,7 +527,7 @@
|
|
|
527
527
|
"content-manager.components.NotAllowedInput.text": "Sem permissão para ver esse campo",
|
|
528
528
|
"content-manager.components.RepeatableComponent.error-message": "Um ou mais componentes contêm erros",
|
|
529
529
|
"content-manager.components.Search.placeholder": "Buscar registro...",
|
|
530
|
-
"content-manager.components.Select.draft-info-title": "Estado:
|
|
530
|
+
"content-manager.components.Select.draft-info-title": "Estado: Rascunho",
|
|
531
531
|
"content-manager.components.Select.publish-info-title": "Estado: Publicado",
|
|
532
532
|
"content-manager.components.SettingsViewWrapper.pluginHeader.description.edit-settings": "Customizar visualização de edição.",
|
|
533
533
|
"content-manager.components.SettingsViewWrapper.pluginHeader.description.list-settings": "Customizar visualização de lista.",
|
|
@@ -718,7 +718,7 @@
|
|
|
718
718
|
"global.plugins.users-permissions": "Funções e permissões",
|
|
719
719
|
"global.plugins.users-permissions.description": "Proteja sua API com um processo de autenticação completo baseado em JWT. Esta extensão também vem com uma estratégia de ACL que permite gerenciar as permissões entre os grupos de usuários.",
|
|
720
720
|
"global.profile": "Perfil",
|
|
721
|
-
"global.prompt.unsaved": "Você tem certeza que deseja sair desta página? Todas as suas
|
|
721
|
+
"global.prompt.unsaved": "Você tem certeza que deseja sair desta página? Todas as suas modificações serão perdidas",
|
|
722
722
|
"global.reset-password": "Redefinir senha",
|
|
723
723
|
"global.roles": "Funções",
|
|
724
724
|
"global.save": "Salvar",
|