Merge pull request #11752 from strapi/v4/product-copy-text-changes-v1

Product copy text changes v1
This commit is contained in:
Alexandre BODIN 2021-12-09 10:13:34 +01:00 committed by GitHub
commit 398ecd9071
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 283 additions and 186 deletions

View File

@ -40,18 +40,18 @@ const Notification = ({ dispatch, notification }) => {
variant = 'default';
alertTitle = formatMessage({
id: 'notification.default.title',
defaultMessage: 'Information Alert:',
defaultMessage: 'Information:',
});
} else if (type === 'warning') {
alertTitle = formatMessage({
id: 'notification.warning.title',
defaultMessage: 'Warning Alert:',
defaultMessage: 'Warning:',
});
variant = 'danger';
} else {
alertTitle = formatMessage({
id: 'notification.success.title',
defaultMessage: 'Success Alert:',
defaultMessage: 'Success:',
});
variant = 'success';
}

View File

@ -16,6 +16,7 @@ const DynamicTable = ({
canCreate,
canDelete,
contentTypeName,
action,
isBulkable,
isLoading,
onConfirmDelete,
@ -77,6 +78,7 @@ const DynamicTable = ({
<Table
components={{ ConfirmDialogDelete, ConfirmDialogDeleteAll }}
contentType={contentTypeName}
action={action}
isLoading={isLoading}
headers={tableHeaders}
onConfirmDelete={onConfirmDelete}
@ -98,10 +100,15 @@ const DynamicTable = ({
);
};
DynamicTable.defaultProps = {
action: undefined,
};
DynamicTable.propTypes = {
canCreate: PropTypes.bool.isRequired,
canDelete: PropTypes.bool.isRequired,
contentTypeName: PropTypes.string.isRequired,
action: PropTypes.node,
isBulkable: PropTypes.bool.isRequired,
isLoading: PropTypes.bool.isRequired,
layout: PropTypes.exact({

View File

@ -48,9 +48,7 @@ const LeftMenu = () => {
id: 'collectionTypes',
title: {
id: getTrad('components.LeftMenu.collection-types'),
defaultMessage:
'{number, plural, =0 {Collection Types} one {Collection Type } other {Collection Types}}',
values: { number: intlCollectionTypeLinks.length },
defaultMessage: 'Collection Types',
},
searchable: true,
links: sortBy(matchByTitle(intlCollectionTypeLinks, search), object =>
@ -61,9 +59,7 @@ const LeftMenu = () => {
id: 'singleTypes',
title: {
id: getTrad('components.LeftMenu.single-types'),
defaultMessage:
'{number, plural, =0 {Single Types} one {Single Type } other {Single Types}}',
values: { number: intlSingleTypeLinks.length },
defaultMessage: 'Single Types',
},
searchable: true,
links: sortBy(matchByTitle(intlSingleTypeLinks, search), object =>

View File

@ -569,7 +569,7 @@ describe('Content manager | App | main', () => {
<span
class="c4 c20"
>
Collection Type
Collection Types
</span>
</div>
</div>
@ -641,7 +641,7 @@ describe('Content manager | App | main', () => {
<span
class="c4 c20"
>
Single Type
Single Types
</span>
</div>
</div>

View File

@ -243,7 +243,7 @@ const EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, upd
>
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}

View File

@ -1143,7 +1143,7 @@ exports[`EditSettingsView renders and matches the snapshot 1`] = `
<span
class="c6"
>
Go back
Back
</span>
</a>
</div>
@ -3027,7 +3027,7 @@ exports[`EditSettingsView should add field 1`] = `
<span
class="c6"
>
Go back
Back
</span>
</a>
</div>
@ -5405,7 +5405,7 @@ exports[`EditSettingsView should add relation 1`] = `
<span
class="c6"
>
Go back
Back
</span>
</a>
</div>

View File

@ -191,7 +191,7 @@ const ListSettingsView = ({ layout, slug }) => {
<HeaderLayout
navigationAction={
<Link startIcon={<ArrowLeft />} to={goBackUrl} id="go-back">
{formatMessage({ id: 'app.components.go-back', defaultMessage: 'Go back' })}
{formatMessage({ id: 'app.components.go-back', defaultMessage: 'Back' })}
</Link>
}
primaryAction={

View File

@ -1004,7 +1004,7 @@ exports[`ADMIN | CM | LV | Configure the view renders and matches the snapshot 1
<span
class="c9"
>
Go back
Back
</span>
</a>
</div>
@ -2892,7 +2892,7 @@ exports[`ADMIN | CM | LV | Configure the view should add field 1`] = `
<span
class="c9"
>
Go back
Back
</span>
</a>
</div>

View File

@ -24,6 +24,8 @@ import { Box } from '@strapi/design-system/Box';
import { ActionLayout, ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
import { useNotifyAT } from '@strapi/design-system/LiveRegions';
import { Button } from '@strapi/design-system/Button';
import { Link } from '@strapi/design-system/Link';
import ArrowLeft from '@strapi/icons/ArrowLeft';
import Plus from '@strapi/icons/Plus';
import Cog from '@strapi/icons/Cog';
import axios from 'axios';
@ -234,29 +236,43 @@ function ListView({
)
: null;
const createAction = canCreate ? (
<Button
onClick={() => {
const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};
const getCreateAction = props =>
canCreate ? (
<Button
{...props}
onClick={() => {
const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};
trackUsageRef.current('willCreateEntry', trackerProperty);
push({
pathname: `${pathname}/create`,
search: query.plugins ? pluginsQueryParams : '',
});
}}
startIcon={<Plus />}
>
{formatMessage({
id: getTrad('HeaderLayout.button.label-add-entry'),
defaultMessage: 'Add new entry',
})}
</Button>
) : null;
trackUsageRef.current('willCreateEntry', trackerProperty);
push({
pathname: `${pathname}/create`,
search: query.plugins ? pluginsQueryParams : '',
});
}}
startIcon={<Plus />}
>
{formatMessage({
id: getTrad('HeaderLayout.button.label-add-entry'),
defaultMessage: 'Create new entry',
})}
</Button>
) : null;
return (
<Main aria-busy={isLoading}>
<HeaderLayout primaryAction={createAction} subtitle={subtitle} title={headerLayoutTitle} />
<HeaderLayout
primaryAction={getCreateAction()}
subtitle={subtitle}
title={headerLayoutTitle}
navigationAction={
<Link startIcon={<ArrowLeft />} to="/content-manager/">
{formatMessage({
id: 'app.components.HeaderLayout.link.go-back',
defaultMessage: 'Back',
})}
</Link>
}
/>
{!canRead && (
<ActionLayout endActions={<InjectionZone area="contentManager.listView.actions" />} />
)}
@ -320,6 +336,7 @@ function ListView({
// FIXME: remove the layout props drilling
layout={layout}
rows={data}
action={getCreateAction({ variant: 'secondary' })}
/>
<PaginationFooter pagination={{ pageCount: pagination?.pageCount || 1 }} />
</>

View File

@ -2,7 +2,7 @@ import adminPermissions from '../../../permissions';
const defaultGlobalLinks = [
{
intlLabel: { id: 'Settings.application.title', defaultMessage: 'Application' },
intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' },
to: '/settings/application-infos',
id: '000-application-infos',
isDisplayed: false,

View File

@ -165,7 +165,7 @@ const ApiTokenCreateView = () => {
<Link startIcon={<ArrowLeft />} to="/settings/api-tokens">
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}
@ -185,7 +185,7 @@ const ApiTokenCreateView = () => {
<Stack size={4}>
<Typography variant="delta" as="h2">
{formatMessage({
id: 'app.components.Users.ModalCreateBody.block-title.details',
id: 'Settings.apiTokens.details',
defaultMessage: 'Details',
})}
</Typography>

View File

@ -26,10 +26,10 @@ const ApplicationInfosPage = () => {
<SettingsPageTitle name="Application" />
<Main>
<HeaderLayout
title={formatMessage({ id: 'Settings.application.title', defaultMessage: 'Application' })}
title={formatMessage({ id: 'Settings.application.title', defaultMessage: 'Overview' })}
subtitle={formatMessage({
id: 'Settings.application.description',
defaultMessage: "See your project's details",
defaultMessage: 'Administration panels global information',
})}
/>
<ContentLayout>
@ -45,8 +45,8 @@ const ApplicationInfosPage = () => {
<Stack size={5}>
<Typography variant="delta" as="h3">
{formatMessage({
id: 'Settings.application.information',
defaultMessage: 'Information',
id: 'Settings.application.details',
defaultMessage: 'Details',
})}
</Typography>
@ -54,11 +54,24 @@ const ApplicationInfosPage = () => {
<GridItem col={6} s={12}>
<Typography variant="sigma" textColor="neutral600">
{formatMessage({
id: 'Settings.application.details',
defaultMessage: 'details',
id: 'Settings.application.strapiVersion',
defaultMessage: 'strapi version',
})}
</Typography>
<Typography as="p">v{strapiVersion}</Typography>
<Link
href={
appInfos.communityEdition
? 'https://discord.strapi.io'
: 'https://support.strapi.io/support/home'
}
endIcon={<ExternalLink />}
>
{formatMessage({
id: 'Settings.application.get-help',
defaultMessage: 'Get help',
})}
</Link>
</GridItem>
<GridItem col={6} s={12}>
<Typography variant="sigma" textColor="neutral600">
@ -96,7 +109,7 @@ const ApplicationInfosPage = () => {
<Link href="https://strapi.io/pricing-self-hosted" endIcon={<ExternalLink />}>
{formatMessage({
id: 'Settings.application.link-pricing',
defaultMessage: 'See all pricing',
defaultMessage: 'See all pricing plans',
})}
</Link>
</GridItem>

View File

@ -289,14 +289,14 @@ describe('Application page', () => {
<h1
class="c7"
>
Application
Overview
</h1>
</div>
</div>
<p
class="c8"
>
See your project's details
Administration panels global information
</p>
</div>
</div>
@ -312,7 +312,7 @@ describe('Application page', () => {
<h3
class="c12"
>
Information
Details
</h3>
<div
class="c13 c14"
@ -326,7 +326,7 @@ describe('Application page', () => {
<span
class="c16"
>
details
strapi version
</span>
<p
class="c17"
@ -334,6 +334,35 @@ describe('Application page', () => {
v
4.0.0
</p>
<a
class="c18"
href="https://support.strapi.io/support/home"
rel="noreferrer noopener"
target="_blank"
>
<span
class="c19"
>
Get help
</span>
<span
aria-hidden="true"
class="c20 c21"
>
<svg
fill="none"
height="1em"
viewBox="0 0 24 24"
width="1em"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M16.235 2.824a1.412 1.412 0 010-2.824h6.353C23.368 0 24 .633 24 1.412v6.353a1.412 1.412 0 01-2.823 0V4.82l-8.179 8.178a1.412 1.412 0 01-1.996-1.996l8.178-8.178h-2.945zm4.942 10.588a1.412 1.412 0 012.823 0v9.176c0 .78-.632 1.412-1.412 1.412H1.412C.632 24 0 23.368 0 22.588V1.412C0 .632.632 0 1.412 0h9.176a1.412 1.412 0 010 2.824H2.824v18.353h18.353v-7.765z"
fill="#32324D"
/>
</svg>
</span>
</a>
</div>
</div>
<div
@ -410,7 +439,7 @@ describe('Application page', () => {
<span
class="c19"
>
See all pricing
See all pricing plans
</span>
<span
aria-hidden="true"

View File

@ -135,7 +135,7 @@ const EditPage = () => {
<Link startIcon={<ArrowLeft />} to="/settings/roles">
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}

View File

@ -822,7 +822,7 @@ exports[`<EditPage /> renders and matches the snapshot 1`] = `
<span
class="c6"
>
Go back
Back
</span>
</a>
</div>

View File

@ -150,7 +150,7 @@ const EditPage = ({ canUpdate }) => {
<Link startIcon={<ArrowLeft />} to="/settings/users?pageSize=10&page=1&sort=firstname">
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}
@ -194,7 +194,7 @@ const EditPage = ({ canUpdate }) => {
>
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}
@ -254,7 +254,7 @@ const EditPage = ({ canUpdate }) => {
<Typography variant="delta" as="h2">
{formatMessage({
id: 'app.components.Users.ModalCreateBody.block-title.login',
defaultMessage: 'Login settings',
defaultMessage: "User's role",
})}
</Typography>
<Grid gap={5}>

View File

@ -58,7 +58,7 @@ const ModalForm = ({ queryName, onToggle }) => {
const headerTitle = formatMessage({
id: 'Settings.permissions.users.create',
defaultMessage: 'Create new user',
defaultMessage: 'Invite new user',
});
const handleSubmit = async (body, { setErrors }) => {
@ -118,7 +118,7 @@ const ModalForm = ({ queryName, onToggle }) => {
<Typography variant="beta" as="h2">
{formatMessage({
id: 'app.components.Users.ModalCreateBody.block-title.details',
defaultMessage: 'Details',
defaultMessage: 'User details',
})}
</Typography>
<Box paddingTop={4}>
@ -147,7 +147,7 @@ const ModalForm = ({ queryName, onToggle }) => {
<Typography variant="beta" as="h2">
{formatMessage({
id: 'app.components.Users.ModalCreateBody.block-title.login',
defaultMessage: 'Login settings',
defaultMessage: "User's role",
})}
</Typography>
<Box paddingTop={4}>

View File

@ -2,7 +2,7 @@ const stepper = {
create: {
buttonSubmitLabel: {
id: 'app.containers.Users.ModalForm.footer.button-success',
defaultMessage: 'Create user',
defaultMessage: 'Invite user',
},
isDisabled: false,
next: 'magic-link',

View File

@ -16,7 +16,6 @@ import Envelop from '@strapi/icons/Envelop';
import { useLocation } from 'react-router-dom';
import { useIntl } from 'react-intl';
import { useMutation, useQuery, useQueryClient } from 'react-query';
import get from 'lodash/get';
import adminPermissions from '../../../../../permissions';
import TableRows from './DynamicTable/TableRows';
import Filters from './Filters';
@ -73,8 +72,6 @@ const ListPage = () => {
setIsModalOpen(prev => !prev);
};
const total = get(data, 'pagination.total', 0);
const deleteAllMutation = useMutation(ids => deleteData(ids), {
onSuccess: async () => {
await queryClient.invalidateQueries(queryName);
@ -104,7 +101,7 @@ const ListPage = () => {
>
{formatMessage({
id: 'Settings.permissions.users.create',
defaultMessage: 'Create new user',
defaultMessage: 'Invite new user',
})}
</Button>
) : (
@ -117,13 +114,10 @@ const ListPage = () => {
<HeaderLayout
primaryAction={createAction}
title={title}
subtitle={formatMessage(
{
id: 'Settings.permissions.users.listview.header.subtitle',
defaultMessage: '{number, plural, =0 {# users} one {# user} other {# users}} found',
},
{ number: total }
)}
subtitle={formatMessage({
id: 'Settings.permissions.users.listview.header.subtitle',
defaultMessage: 'All the users who have access to the Strapi admin panel',
})}
/>
{canRead && (
<ActionLayout

View File

@ -1127,14 +1127,14 @@ describe('ADMIN | Pages | USERS | ListPage', () => {
<span
class="c10 c11"
>
Create new user
Invite new user
</span>
</button>
</div>
<p
class="c12"
>
0 users found
All the users who have access to the Strapi admin panel
</p>
</div>
</div>
@ -1403,10 +1403,10 @@ describe('ADMIN | Pages | USERS | ListPage', () => {
<span
aria-labelledby="tooltip-11"
class="c37"
label="Active User"
label="User status"
tabindex="-1"
>
Active User
User status
</span>
</span>
<span

View File

@ -39,7 +39,7 @@ const tableHeaders = [
{
key: 'isActive',
name: 'isActive',
metadatas: { label: 'Active User', sortable: false },
metadatas: { label: 'User status', sortable: false },
// eslint-disable-next-line react/prop-types
cellFormatter: ({ isActive }) => {
return (

View File

@ -12,7 +12,7 @@ const MagicLink = ({ registrationToken }) => {
<MagicLinkWrapper target={target}>
{formatMessage({
id: 'app.components.Users.MagicLink.connect',
defaultMessage: 'Send this link to the user for them to connect.',
defaultMessage: 'Copy and share this link to give access to this user',
})}
</MagicLinkWrapper>
);

View File

@ -44,7 +44,7 @@ const SelectRoles = ({ disabled, error, onChange, value }) => {
});
const hint = formatMessage({
id: 'app.components.Users.ModalCreateBody.block-title.roles.description',
defaultMessage: 'Your user can have one or several roles',
defaultMessage: 'A user can have one or several roles',
});
const placeholder = formatMessage({
id: 'app.components.Select.placeholder',

View File

@ -101,7 +101,7 @@ const HeadersInput = () => {
>
{formatMessage({
id: 'Settings.webhooks.create.header',
defaultMessage: 'Create a new header',
defaultMessage: 'Create new header',
})}
</TextButton>
</GridItem>

View File

@ -86,7 +86,7 @@ const WebhookForm = ({
<Link startIcon={<ArrowLeft />} to="/settings/webhooks">
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}

View File

@ -247,7 +247,7 @@ const ListView = () => {
title={formatMessage({ id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' })}
subtitle={formatMessage({
id: 'Settings.webhooks.list.description',
defaultMessage: 'Get POST changes notifications.',
defaultMessage: 'Get POST changes notifications',
})}
primaryAction={
canCreate &&
@ -255,7 +255,7 @@ const ListView = () => {
<LinkButton startIcon={<Plus />} variant="default" to={`${pathname}/create`} size="L">
{formatMessage({
id: 'Settings.webhooks.list.button.add',
defaultMessage: 'Add new webhook',
defaultMessage: 'Create new webhook',
})}
</LinkButton>
)
@ -305,7 +305,7 @@ const ListView = () => {
>
{formatMessage({
id: 'Settings.webhooks.list.button.add',
defaultMessage: 'Add new webhook',
defaultMessage: 'Create new webhook',
})}
</TFooter>
}
@ -447,7 +447,7 @@ const ListView = () => {
icon={<EmptyDocuments width="160px" />}
content={formatMessage({
id: 'Settings.webhooks.list.empty.description',
defaultMessage: 'Add your first webhook',
defaultMessage: 'No webhooks found',
})}
action={
<Button
@ -457,7 +457,7 @@ const ListView = () => {
>
{formatMessage({
id: 'Settings.webhooks.list.button.add',
defaultMessage: 'Add new webhook',
defaultMessage: 'Create new webhook',
})}
</Button>
}

View File

@ -811,14 +811,14 @@ describe('Admin | containers | ListView', () => {
<span
class="c12 c13"
>
Add new webhook
Create new webhook
</span>
</a>
</div>
<p
class="c14"
>
Get POST changes notifications.
Get POST changes notifications
</p>
</div>
</div>
@ -1263,7 +1263,7 @@ describe('Admin | containers | ListView', () => {
<span
class="c53"
>
Add new webhook
Create new webhook
</span>
</div>
</div>

View File

@ -91,6 +91,7 @@
"Roles.RoleRow.user-count.singular": "{number} user",
"Roles.components.List.empty.withSearch": "There is no role corresponding to the search ({search})...",
"Settings.PageTitle": "Settings - {name}",
"Settings.apiTokens.details": "Details",
"Settings.apiTokens.addFirstToken": "Add your first API Token",
"Settings.apiTokens.addNewToken": "Add new API Token",
"Settings.apiTokens.copy.editMessage": "For security reasons, you can only see your token once.",
@ -103,15 +104,16 @@
"Settings.apiTokens.title": "API Tokens",
"Settings.apiTokens.types.full-access": "Full access",
"Settings.apiTokens.types.read-only": "Read-only",
"Settings.application.description": "See your project's details",
"Settings.application.details": "details",
"Settings.application.description": "Administration panels global information",
"Settings.application.strapiVersion": "strapi version",
"Settings.application.edition-title": "current plan",
"Settings.application.information": "Information",
"Settings.application.link-pricing": "See all pricing",
"Settings.application.details": "Details",
"Settings.application.link-pricing": "See all pricing plans",
"Settings.application.link-upgrade": "Upgrade your admin panel",
"Settings.application.get-help": "Get help",
"Settings.application.node-version": "node version",
"Settings.application.strapi-version": "strapi version",
"Settings.application.title": "Application",
"Settings.application.title": "Overview",
"Settings.error": "Error",
"Settings.global": "Global Settings",
"Settings.permissions": "Administration panel",
@ -132,13 +134,13 @@
"Settings.permissions.menu.link.users.label": "Users",
"Settings.permissions.select-all-by-permission": "Select all {label} permissions",
"Settings.permissions.select-by-permission": "Select {label} permission",
"Settings.permissions.users.create": "Create new user",
"Settings.permissions.users.create": "Invite new user",
"Settings.permissions.users.form.email": "Email",
"Settings.permissions.users.form.firstname": "First name",
"Settings.permissions.users.form.lastname": "Last name",
"Settings.permissions.users.form.sso": "Connect with SSO",
"Settings.permissions.users.form.sso.description": "When enabled (ON), users can login via SSO",
"Settings.permissions.users.listview.header.subtitle": "{number, plural, =0 {# users} one {# user } other {# users}} found",
"Settings.permissions.users.listview.header.subtitle": "All the users who have access to the Strapi admin panel",
"Settings.permissions.users.listview.header.title": "Users",
"Settings.permissions.users.tabs.label": "Tabs Permissions",
"Settings.profile.form.notify.data.loaded": "Your profile data has been loaded",
@ -188,7 +190,7 @@
"Settings.sso.form.settings.title": "Settings",
"Settings.sso.title": "Single Sign-On",
"Settings.webhooks.create": "Create a webhook",
"Settings.webhooks.create.header": "Create a new header",
"Settings.webhooks.create.header": "Create new header",
"Settings.webhooks.created": "Webhook created",
"Settings.webhooks.disabled": "Disabled",
"Settings.webhooks.enabled": "Enabled",
@ -203,9 +205,9 @@
"Settings.webhooks.headers.remove": "Remove header row {number}",
"Settings.webhooks.key": "Key",
"Settings.webhooks.list.all-entries.select": "Select all entries",
"Settings.webhooks.list.button.add": "Add new webhook",
"Settings.webhooks.list.description": "Get POST changes notifications.",
"Settings.webhooks.list.empty.description": "Add your first webhook",
"Settings.webhooks.list.button.add": "Create new webhook",
"Settings.webhooks.list.description": "Get POST changes notifications",
"Settings.webhooks.list.empty.description": "No webhooks found",
"Settings.webhooks.list.empty.link": "See our documentation",
"Settings.webhooks.list.empty.title": "There are no webhooks yet",
"Settings.webhooks.list.select": "Select",
@ -255,6 +257,7 @@
"app.components.DownloadInfo.text": "This could take a minute. Thanks for your patience.",
"app.components.EmptyAttributes.title": "There are no fields yet",
"app.components.EmptyStateLayout.content-permissions": "You don't have the permissions to access that content",
"app.components.EmptyStateLayout.content-document": "No content found",
"app.components.HeaderLayout.link.go-back": "Back",
"app.components.HomePage.button.blog": "See more on the blog",
"app.components.HomePage.community": "Join the community",
@ -326,12 +329,12 @@
"app.components.UpgradePlanModal.text-ee": "Enterprise Edition",
"app.components.UpgradePlanModal.text-power": "Unlock the full power of Strapi by upgrading your plan to the Enterprise Edition",
"app.components.UpgradePlanModal.text-strapi": "of Strapi by upgrading your plan to the",
"app.components.Users.MagicLink.connect": "Send this link to the user for them to connect.",
"app.components.Users.MagicLink.connect": "Copy and share this link to give access to this user",
"app.components.Users.MagicLink.connect.sso": "Send this link to the user, the first login can be made via a SSO provider",
"app.components.Users.ModalCreateBody.block-title.details": "Details",
"app.components.Users.ModalCreateBody.block-title.login": "Login settings",
"app.components.Users.ModalCreateBody.block-title.details": "User details",
"app.components.Users.ModalCreateBody.block-title.login": "Roles",
"app.components.Users.ModalCreateBody.block-title.roles": "User's roles",
"app.components.Users.ModalCreateBody.block-title.roles.description": "Your user can have one or several roles",
"app.components.Users.ModalCreateBody.block-title.roles.description": "A user can have one or several roles",
"app.components.Users.SortPicker.button-label": "Sort by",
"app.components.Users.SortPicker.sortby.email_asc": "Email (A to Z)",
"app.components.Users.SortPicker.sortby.email_desc": "Email (Z to A)",
@ -341,7 +344,7 @@
"app.components.Users.SortPicker.sortby.lastname_desc": "Last name (Z to A)",
"app.components.Users.SortPicker.sortby.username_asc": "Username (A to Z)",
"app.components.Users.SortPicker.sortby.username_desc": "Username (Z to A)",
"app.components.go-back": "Go back",
"app.components.go-back": "Back",
"app.components.listPlugins.button": "Add New Plugin",
"app.components.listPlugins.title.none": "No plugins installed",
"app.components.listPlugins.title.plural": "{number} plugins are installed",
@ -355,7 +358,7 @@
"app.containers.Users.EditPage.header.label": "Edit {name}",
"app.containers.Users.EditPage.header.label-loading": "Edit user",
"app.containers.Users.EditPage.roles-bloc-title": "Attributed roles",
"app.containers.Users.ModalForm.footer.button-success": "Create user",
"app.containers.Users.ModalForm.footer.button-success": "Invite user",
"app.links.configure-view": "Configure the view",
"app.static.links.cheatsheet": "CheatSheet",
"app.utils.SelectOption.defaultMessage": " ",
@ -451,7 +454,7 @@
"content-manager.App.schemas.data-loaded": "The schemas have been successfully loaded",
"content-manager.DynamicTable.relation-loaded": "The relations have been loaded",
"content-manager.EditRelations.title": "Relational data",
"content-manager.HeaderLayout.button.label-add-entry": "Add new entry",
"content-manager.HeaderLayout.button.label-add-entry": "Create new entry",
"content-manager.api.id": "API ID",
"content-manager.components.AddFilterCTA.add": "Filters",
"content-manager.components.AddFilterCTA.hide": "Filters",
@ -481,8 +484,8 @@
"content-manager.components.FiltersPickWrapper.PluginHeader.title.filter": "Filters",
"content-manager.components.FiltersPickWrapper.hide": "Hide",
"content-manager.components.LeftMenu.Search.label": "Search for a content type",
"content-manager.components.LeftMenu.collection-types": "{number, plural, =0 {Collection Types} one {Collection Type } other {Collection Types}}",
"content-manager.components.LeftMenu.single-types": "{number, plural, =0 {Single Types} one {Single Type } other {Single Types}}",
"content-manager.components.LeftMenu.collection-types": "Collection Types",
"content-manager.components.LeftMenu.single-types": "Single Types",
"content-manager.components.LimitSelect.itemsPerPage": "Items per page",
"content-manager.components.NotAllowedInput.text": "No permissions to see this field",
"content-manager.components.RepeatableComponent.error-message": "The component(s) contain error(s)",
@ -649,7 +652,7 @@
"form.button.save": "Save",
"global.prompt.unsaved": "Are you sure you want to leave this page? All your modifications will be lost",
"notification.contentType.relations.conflict": "Content type has conflicting relations",
"notification.default.title": "Information Alert:",
"notification.default.title": "Information:",
"notification.error": "An error occurred",
"notification.error.layout": "Couldn't retrieve the layout",
"notification.form.error.fields": "The form contains some errors",
@ -658,10 +661,10 @@
"notification.permission.not-allowed-read": "You are not allowed to see this document",
"notification.success.delete": "The item has been deleted",
"notification.success.saved": "Saved",
"notification.success.title": "Success Alert:",
"notification.success.title": "Success:",
"notification.version.update.link": "See more",
"notification.version.update.message": "A new version of Strapi is available!",
"notification.warning.title": "Warning Alert:",
"notification.warning.title": "Warning:",
"or": "OR",
"request.error.model.unknown": "This model doesn't exist",
"skipToContent": "Skip to content",

View File

@ -164,7 +164,7 @@ const CreatePage = () => {
<Link startIcon={<ArrowLeft />} to="/settings/roles">
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}

View File

@ -828,7 +828,7 @@ exports[`<CreatePage /> renders and matches the snapshot 1`] = `
<span
class="c6"
>
Go back
Back
</span>
</a>
</div>

View File

@ -15,7 +15,7 @@ const MagicLink = ({ registrationToken }) => {
>
{formatMessage({
id: 'app.components.Users.MagicLink.connect',
defaultMessage: 'Send this link to the user for them to connect.',
defaultMessage: 'Copy and share this link to give access to this user',
})}
</MagicLinkWrapper>
);

View File

@ -39,7 +39,7 @@ const ContentTypeBuilderNav = () => {
/>
<SubNavSections>
{menu.map(section => {
const title = `${section.title.id}${section.links.length > 1 ? 'plural' : 'singular'}`;
const title = section.title.id;
return (
<React.Fragment key={section.name}>

View File

@ -597,7 +597,7 @@ exports[`<ContentTypeBuilderNav /> renders and matches the snapshot 1`] = `
<span
class="c4 c20"
>
content-type-builder.menu.section.models.name.plural
content-type-builder.menu.section.models.name.
</span>
</div>
<div
@ -756,7 +756,7 @@ exports[`<ContentTypeBuilderNav /> renders and matches the snapshot 1`] = `
<span
class="c4 c20"
>
content-type-builder.menu.section.single-types.name.singular
content-type-builder.menu.section.single-types.name.
</span>
</div>
<div
@ -880,7 +880,7 @@ exports[`<ContentTypeBuilderNav /> renders and matches the snapshot 1`] = `
<span
class="c4 c20"
>
content-type-builder.menu.section.components.name.plural
content-type-builder.menu.section.components.name.
</span>
</div>
<div

View File

@ -123,7 +123,7 @@ const useContentTypeBuilderMenu = () => {
{
name: 'models',
title: {
id: `${getTrad('menu.section.models.name.')}`,
id: `${getTrad('menu.section.models.name.plural')}`,
defaultMessage: 'Collection Types',
},
customLink: isInDevelopmentMode && {
@ -136,7 +136,7 @@ const useContentTypeBuilderMenu = () => {
{
name: 'singleTypes',
title: {
id: `${getTrad('menu.section.single-types.name.')}`,
id: `${getTrad('menu.section.single-types.name.plural')}`,
defaultMessage: 'Single Types',
},
customLink: isInDevelopmentMode && {
@ -149,7 +149,7 @@ const useContentTypeBuilderMenu = () => {
{
name: 'components',
title: {
id: `${getTrad('menu.section.components.name.')}`,
id: `${getTrad('menu.section.components.name.plural')}`,
defaultMessage: 'Components',
},
customLink: {

View File

@ -157,13 +157,13 @@ const ListView = () => {
title={upperFirst(label)}
subtitle={formatMessage({
id: getTrad('listView.headerLayout.description'),
defaultMessage: 'Build the data architecture of your content.',
defaultMessage: 'Build the data architecture of your content',
})}
navigationAction={
<Link startIcon={<ArrowLeft />} to="/plugins/content-type-builder/">
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}

View File

@ -1216,7 +1216,7 @@ exports[`<ListView /> renders and matches the snapshot 1`] = `
<span
class="c5"
>
Go back
Back
</span>
</a>
</div>
@ -1330,7 +1330,7 @@ exports[`<ListView /> renders and matches the snapshot 1`] = `
<p
class="c21"
>
Build the data architecture of your content.
Build the data architecture of your content
</p>
</div>
</div>

View File

@ -134,7 +134,7 @@
"form.button.single-type.description": "Best for single instance like about us, homepage, etc.",
"form.contentType.divider.draft-publish": "Draft/Publish",
"from": "from",
"listView.headerLayout.description": "Build the data architecture of your content.",
"listView.headerLayout.description": "Build the data architecture of your content",
"menu.section.components.name.plural": "Components",
"menu.section.components.name.singular": "Component",
"menu.section.models.name.plural": "Collection Types",

View File

@ -24,7 +24,7 @@ export default {
[
{
intlLabel: {
id: getTrad('SettingsNav.link.settings'),
id: getTrad('Settings.email.plugin.title'),
defaultMessage: 'Settings',
},
id: 'settings',

View File

@ -50,7 +50,7 @@ const Configuration = ({ config }) => {
name="shipper-email"
label={formatMessage({
id: getTrad('Settings.email.plugin.label.defaultFrom'),
defaultMessage: 'Default shipper email',
defaultMessage: 'Default sender email',
})}
placeholder={formatMessage({
id: getTrad('Settings.email.plugin.placeholder.defaultFrom'),

View File

@ -12,18 +12,18 @@ const EmailHeader = () => {
<SettingsPageTitle
name={formatMessage({
id: getTrad('Settings.email.plugin.title'),
defaultMessage: 'Email settings',
defaultMessage: 'Configuration',
})}
/>
<HeaderLayout
id="title"
title={formatMessage({
id: getTrad('Settings.email.plugin.title'),
defaultMessage: 'Email settings',
defaultMessage: 'Configuration',
})}
subtitle={formatMessage({
id: getTrad('Settings.email.plugin.subTitle'),
defaultMessage: 'Test the settings for the email plugin',
defaultMessage: 'Test the settings for the Email plugin',
})}
/>
</>

View File

@ -43,6 +43,7 @@ const SettingsPage = () => {
const [isLoading, setIsLoading] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
const [testAddress, setTestAddress] = useState('');
const [isTestAddressValid, setIsTestAddressValid] = useState(false);
const [config, setConfig] = useState({
provider: '',
settings: { defaultFrom: '', defaultReplyTo: '', testAddress: '' },
@ -87,6 +88,13 @@ const SettingsPage = () => {
}
}, [formErrors]);
useEffect(() => {
schema
.validate({ email: testAddress }, { abortEarly: false })
.then(() => setIsTestAddressValid(true))
.catch(() => setIsTestAddressValid(false));
}, [testAddress]);
const handleChange = e => {
setTestAddress(() => e.target.value);
};
@ -186,7 +194,7 @@ const SettingsPage = () => {
onChange={handleChange}
label={formatMessage({
id: getTrad('Settings.email.plugin.label.testAddress'),
defaultMessage: 'Test delivery email address',
defaultMessage: 'Recipient email',
})}
value={testAddress}
error={
@ -203,8 +211,13 @@ const SettingsPage = () => {
/>
</GridItem>
<GridItem col={7} s={12}>
<Button loading={isSubmitting} type="submit" startIcon={<Envelop />}>
Test email
<Button
loading={isSubmitting}
disabled={!isTestAddressValid}
type="submit"
startIcon={<Envelop />}
>
Send test email
</Button>
</GridItem>
</Grid>

View File

@ -42,7 +42,7 @@ describe('Email | Pages | Settings', () => {
const { container } = render(App);
await waitFor(() => {
expect(screen.getByText('Test delivery email address')).toBeInTheDocument();
expect(screen.getByText('Recipient email')).toBeInTheDocument();
});
expect(container.firstChild).toMatchInlineSnapshot(`
@ -722,14 +722,14 @@ describe('Email | Pages | Settings', () => {
class="c4"
id="title"
>
Email settings
Configuration
</h1>
</div>
</div>
<p
class="c5"
>
Test the settings for the email plugin
Test the settings for the Email plugin
</p>
</div>
</div>
@ -789,7 +789,7 @@ describe('Email | Pages | Settings', () => {
class="c17"
for="textinput-3"
>
Default shipper email
Default sender email
</label>
</div>
<div
@ -967,7 +967,7 @@ describe('Email | Pages | Settings', () => {
class="c17"
for="test-address-input"
>
Test delivery email address
Recipient email
</label>
</div>
<div
@ -995,8 +995,9 @@ describe('Email | Pages | Settings', () => {
class=""
>
<button
aria-disabled="false"
aria-disabled="true"
class="c36 c37"
disabled=""
type="submit"
>
<div
@ -1027,7 +1028,7 @@ describe('Email | Pages | Settings', () => {
<span
class="c41 c42"
>
Test email
Send test email
</span>
</button>
</div>

View File

@ -1,9 +1,9 @@
{
"Settings.email.plugin.button.test-email": "Test email",
"Settings.email.plugin.label.defaultFrom": "Default shipper email",
"Settings.email.plugin.button.test-email": "Send test email",
"Settings.email.plugin.label.defaultFrom": "Default sender email",
"Settings.email.plugin.label.defaultReplyTo": "Default response email",
"Settings.email.plugin.label.provider": "Email provider",
"Settings.email.plugin.label.testAddress": "Test delivery email address",
"Settings.email.plugin.label.testAddress": "Recipient email",
"Settings.email.plugin.notification.config.error": "Failed to retrieve the email config",
"Settings.email.plugin.notification.data.loaded": "Email settings data has been loaded",
"Settings.email.plugin.notification.test.error": "Failed to send a test mail to {to}",
@ -11,11 +11,11 @@
"Settings.email.plugin.placeholder.defaultFrom": "ex: Strapi No-Reply <no-reply@strapi.io>",
"Settings.email.plugin.placeholder.defaultReplyTo": "ex: Strapi <example@strapi.io>",
"Settings.email.plugin.placeholder.testAddress": "ex: developer@example.com",
"Settings.email.plugin.subTitle": "Test the settings for the email plugin",
"Settings.email.plugin.subTitle": "Test the settings for the Email plugin",
"Settings.email.plugin.text.configuration": "The plugin is configured through the {file} file, checkout this {link} for the documentation.",
"Settings.email.plugin.title": "Email settings",
"Settings.email.plugin.title": "Configuration",
"Settings.email.plugin.title.config": "Configuration",
"Settings.email.plugin.title.test": "Send a test email",
"Settings.email.plugin.title.test": "Send test email",
"SettingsNav.link.settings": "Settings",
"SettingsNav.section-label": "Email plugin",
"components.Input.error.validation.email": "This is an invalid email"

View File

@ -26,6 +26,7 @@ const Table = ({
children,
contentType,
components,
action,
headers,
isLoading,
onConfirmDeleteAll,
@ -168,7 +169,12 @@ const Table = ({
withBulkActions={withBulkActions}
/>
{!rows.length || isLoading ? (
<EmptyBodyTable colSpan={COL_COUNT} content={content} isLoading={isLoading} />
<EmptyBodyTable
colSpan={COL_COUNT}
content={content}
isLoading={isLoading}
action={action}
/>
) : (
Children.toArray(children).map(child =>
cloneElement(child, {
@ -206,6 +212,7 @@ Table.defaultProps = {
ConfirmDialogDeleteAll: undefined,
ConfirmDialogDelete: undefined,
},
action: undefined,
headers: [],
isLoading: false,
onConfirmDeleteAll: () => {},
@ -223,6 +230,7 @@ Table.propTypes = {
ConfirmDialogDelete: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
ConfirmDialogDeleteAll: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
}),
action: PropTypes.node,
headers: PropTypes.arrayOf(
PropTypes.shape({
cellFormatter: PropTypes.func,

View File

@ -34,7 +34,7 @@ EmptyStateLayout.defaultProps = {
action: undefined,
content: {
id: 'app.components.EmptyStateLayout.content-document',
defaultMessage: "You don't have any content yet...",
defaultMessage: 'No content found',
values: {},
},
hasRadius: true,

View File

@ -22,7 +22,7 @@ const NoContent = ({ content, ...rest }) => {
NoContent.defaultProps = {
content: {
id: 'app.components.EmptyStateLayout.content-document',
defaultMessage: "You don't have any content yet...",
defaultMessage: 'No content found',
values: {},
},
};

View File

@ -124,7 +124,7 @@ export const SettingsPage = () => {
<HeaderLayout
title={formatMessage({
id: getTrad('settings.header.label'),
defaultMessage: 'Media Library - Settings',
defaultMessage: 'Media Library',
})}
primaryAction={
<Button
@ -143,7 +143,7 @@ export const SettingsPage = () => {
}
subtitle={formatMessage({
id: getTrad('settings.sub-header.label'),
defaultMessage: 'Configure the settings for the media library',
defaultMessage: 'Configure the settings for the Media Library',
})}
/>
<ContentLayout>
@ -157,8 +157,8 @@ export const SettingsPage = () => {
<Flex>
<Typography variant="delta" as="h2">
{formatMessage({
id: getTrad('settings.section.image.label'),
defaultMessage: 'Image',
id: getTrad('settings.blockTitle'),
defaultMessage: 'Asset management',
})}
</Typography>
</Flex>
@ -171,11 +171,11 @@ export const SettingsPage = () => {
hint={formatMessage({
id: getTrad('settings.form.responsiveDimensions.description'),
defaultMessage:
'It automatically generates multiple formats (large, medium, small) of the uploaded asset',
'Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.',
})}
label={formatMessage({
id: getTrad('settings.form.responsiveDimensions.label'),
defaultMessage: 'Enable responsive friendly upload',
defaultMessage: 'Responsive friendly upload',
})}
name="responsiveDimensions"
offLabel={formatMessage({
@ -198,9 +198,14 @@ export const SettingsPage = () => {
aria-label="sizeOptimization"
data-testid="sizeOptimization"
checked={modifiedData.sizeOptimization}
hint={formatMessage({
id: getTrad('settings.form.sizeOptimization.description'),
defaultMessage:
'Enabling this option will optimize the file size without compromising on the quality.',
})}
label={formatMessage({
id: getTrad('settings.form.sizeOptimization.label'),
defaultMessage: 'Enable size optimization (without quality loss)',
defaultMessage: 'Size optimization',
})}
name="sizeOptimization"
offLabel={formatMessage({
@ -226,11 +231,11 @@ export const SettingsPage = () => {
hint={formatMessage({
id: getTrad('settings.form.autoOrientation.description'),
defaultMessage:
'Automatically rotate image according to EXIF orientation tag',
'Enabling this option will automatically rotate the image according to EXIF orientation tag.',
})}
label={formatMessage({
id: getTrad('settings.form.autoOrientation.label'),
defaultMessage: 'Enable auto orientation',
defaultMessage: 'Auto orientation',
})}
name="autoOrientation"
offLabel={formatMessage({

View File

@ -42,7 +42,9 @@ describe('Upload | SettingsPage', () => {
await waitFor(() =>
expect(
getByText('Automatically rotate image according to EXIF orientation tag')
getByText(
'Enabling this option will automatically rotate the image according to EXIF orientation tag.'
)
).toBeInTheDocument()
);
@ -527,7 +529,7 @@ describe('Upload | SettingsPage', () => {
<h1
class="c4"
>
Media Library - Settings
Media Library
</h1>
</div>
<button
@ -564,7 +566,7 @@ describe('Upload | SettingsPage', () => {
<p
class="c12"
>
Configure the settings for the media library
Configure the settings for the Media Library
</p>
</div>
</div>
@ -592,7 +594,7 @@ describe('Upload | SettingsPage', () => {
<h2
class="c21"
>
Image
Asset management
</h2>
</div>
<div
@ -617,7 +619,7 @@ describe('Upload | SettingsPage', () => {
class="c27"
for="field-1"
>
Enable responsive friendly upload
Responsive friendly upload
</label>
</div>
<label
@ -626,7 +628,7 @@ describe('Upload | SettingsPage', () => {
<div
class="c29"
>
Enable responsive friendly upload
Responsive friendly upload
</div>
<div
class="c30 c31"
@ -666,7 +668,7 @@ describe('Upload | SettingsPage', () => {
class="c38"
id="field-1-hint"
>
It automatically generates multiple formats (large, medium, small) of the uploaded asset
Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.
</p>
</div>
</div>
@ -691,7 +693,7 @@ describe('Upload | SettingsPage', () => {
class="c27"
for="field-2"
>
Enable size optimization (without quality loss)
Size optimization
</label>
</div>
<label
@ -700,7 +702,7 @@ describe('Upload | SettingsPage', () => {
<div
class="c29"
>
Enable size optimization (without quality loss)
Size optimization
</div>
<div
class="c30 c31"
@ -735,6 +737,12 @@ describe('Upload | SettingsPage', () => {
/>
</div>
</label>
<p
class="c38"
id="field-2-hint"
>
Enabling this option will optimize the file size without compromising on the quality.
</p>
</div>
</div>
</div>
@ -758,7 +766,7 @@ describe('Upload | SettingsPage', () => {
class="c27"
for="field-3"
>
Enable auto orientation
Auto orientation
</label>
</div>
<label
@ -767,7 +775,7 @@ describe('Upload | SettingsPage', () => {
<div
class="c29"
>
Enable auto orientation
Auto orientation
</div>
<div
class="c30 c31"
@ -807,7 +815,7 @@ describe('Upload | SettingsPage', () => {
class="c38"
id="field-3-hint"
>
Automatically rotate image according to EXIF orientation tag
Enabling this option will automatically rotate the image according to EXIF orientation tag.
</p>
</div>
</div>

View File

@ -81,18 +81,20 @@
"search.clear.label": "Clear the search",
"search.label": "Search for an asset",
"search.placeholder": "e.g: the first dog on the moon",
"settings.form.autoOrientation.description": "Automatically rotate image according to EXIF orientation tag",
"settings.form.autoOrientation.label": "Enable auto orientation",
"settings.form.responsiveDimensions.description": "It automatically generates multiple formats (large, medium, small) of the uploaded asset",
"settings.form.responsiveDimensions.label": "Enable responsive friendly upload",
"settings.form.sizeOptimization.label": "Enable size optimization (without quality loss)",
"settings.form.autoOrientation.description": "Enabling this option will automatically rotate the image according to EXIF orientation tag.",
"settings.form.autoOrientation.label": "Auto orientation",
"settings.form.responsiveDimensions.description": "Enabling this option will generate multiple formats (small, medium and large) of the uploaded asset.",
"settings.form.responsiveDimensions.label": "Responsive friendly upload",
"settings.form.sizeOptimization.description": "Enabling this option will optimize the file size without compromising on the quality.",
"settings.form.sizeOptimization.label": "Size optimization",
"settings.form.videoPreview.description": "It will generate a six-second preview of the video (GIF)",
"settings.form.videoPreview.label": "Preview",
"settings.header.label": "Media Library - Settings",
"settings.header.label": "Media Library",
"settings.section.doc.label": "Doc",
"settings.section.image.label": "Image",
"settings.section.video.label": "Video",
"settings.sub-header.label": "Configure the settings for the media library",
"settings.sub-header.label": "Configure the settings for the Media Library",
"settings.blockTitle": "Asset Management",
"sort.created_at_asc": "Oldest uploads",
"sort.created_at_desc": "Most recent uploads",
"sort.label": "Sort by",

View File

@ -57,7 +57,7 @@ const LocaleTable = ({ locales, onDeleteLocale, onEditLocale }) => {
<Td>
<Typography textColor="neutral800">
{locale.isDefault
? formatMessage({ id: getTrad('Settings.locales.row.default-locale') })
? formatMessage({ id: getTrad('Settings.locales.default') })
: null}
</Typography>
</Td>

View File

@ -61,7 +61,7 @@ const ModalCreate = ({ onClose }) => {
<Typography fontWeight="bold" textColor="neutral800" as="h2" id="add-locale-title">
{formatMessage({
id: getTrad('Settings.list.actions.add'),
defaultMessage: 'Add a locale',
defaultMessage: 'Add new locale',
})}
</Typography>
</ModalHeader>

View File

@ -9,11 +9,11 @@
"CheckboxConfirmation.Modal.content": "Disabling localization will engender the deletion of all your content but the one associated to your default locale (if existing).",
"Field.localized": "This value is unique for the selected locale",
"Field.not-localized": "This value is common to all locales",
"Settings.list.actions.add": "Add a locale",
"Settings.list.actions.add": "Add new locale",
"Settings.list.actions.delete": "Delete a locale",
"Settings.list.actions.deleteAdditionalInfos": "This will delete the active locale versions <em>(from Internationalization)</em>",
"Settings.list.actions.edit": "Edit a locale",
"Settings.list.description": "Configure the settings for the internationalization plugin",
"Settings.list.description": "Configure the settings for the Internationalization plugin",
"Settings.list.empty.description": "This is not a usual behavior, meaning that you have eventually modified the database manually. Make sure to have at least one locale saved in your database in order to be able to use Strapi correctly.",
"Settings.list.empty.title": "There are no locales.",
"Settings.locales.list.sort.default": "Sort by the default locale",
@ -44,9 +44,10 @@
"Settings.locales.modal.locales.label": "Locales",
"Settings.locales.modal.locales.loaded": "The locales have been successfully loaded.",
"Settings.locales.modal.title": "Configurations",
"Settings.locales.row.default-locale": "Default",
"Settings.locales.row.default-locale": "Default locale",
"Settings.locales.row.displayName": "Display name",
"Settings.locales.row.id": "ID",
"Settings.locales.default": "Default",
"Settings.permissions.loading": "Loading permissions",
"Settings.permissions.read.denied.description": "In order to be able to read this, make sure to get in touch with the administrator of your system.",
"Settings.permissions.read.denied.title": "You don't have the permissions to access this content.",

View File

@ -109,7 +109,7 @@ const EditPage = () => {
<Link startIcon={<ArrowLeft />} to="/settings/users-permissions/roles">
{formatMessage({
id: 'app.components.go-back',
defaultMessage: 'Go back',
defaultMessage: 'Back',
})}
</Link>
}

View File

@ -1043,7 +1043,7 @@ describe('Admin | containers | RoleEditPage', () => {
<span
class="c6"
>
Go back
Back
</span>
</a>
</div>