Init Users & Permissions settings section

Signed-off-by: HichamELBSI <elabbassih@gmail.com>
This commit is contained in:
HichamELBSI 2020-08-03 16:49:40 +02:00
parent 81a4509750
commit 43ee492fcb
77 changed files with 2466 additions and 2057 deletions

View File

@ -13,9 +13,7 @@ import { Header, Path, Verb, Wrapper } from './Components';
function BoundRoute({ route }) {
const title = get(route, 'handler');
const formattedRoute = get(route, 'path')
? tail(get(route, 'path').split('/'))
: [];
const formattedRoute = get(route, 'path') ? tail(get(route, 'path').split('/')) : [];
const [controller = '', action = ''] = title ? title.split('.') : [];
return (
@ -27,15 +25,10 @@ function BoundRoute({ route }) {
<span>.{action} </span>
</Header>
<Wrapper>
<Verb className={toLower(get(route, 'method'))}>
{get(route, 'method')}
</Verb>
<Verb className={toLower(get(route, 'method'))}>{get(route, 'method')}</Verb>
<Path>
{map(formattedRoute, value => (
<span
key={value}
style={includes(value, ':') ? { color: '#787E8F' } : {}}
>
<span key={value} style={includes(value, ':') ? { color: '#787E8F' } : {}}>
/{value}
</span>
))}

View File

@ -3,7 +3,8 @@
* Controller
*
*/
import React from 'react';
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import { get, map } from 'lodash';
import { FormattedMessage } from 'react-intl';
@ -13,8 +14,9 @@ import InputCheckbox from '../InputCheckboxPlugin';
import { Header, Label, Separator, Wrapper } from './Components';
function Controller({ actions, inputNamePath, isOpen, name, inputSelected, setInputSelected }) {
function Controller({ actions, inputNamePath, isOpen, name }) {
const { selectAllActions } = useEditPageContext();
const [inputSelected, setInputSelected] = useState('');
const areAllActionsSelected = () => {
return Object.keys(actions).every(action => actions[action].enabled === true);

View File

@ -12,7 +12,7 @@ import { InputsIndex as Input, LoadingIndicator } from 'strapi-helper-plugin';
import { Wrapper } from './Components';
function EditForm({ disabled, onChange, showLoaders, values }) {
function EditForm({ onChange, showLoaders, values }) {
const { roles, settings } = values;
const generateSelectOptions = () =>
@ -44,7 +44,6 @@ function EditForm({ disabled, onChange, showLoaders, values }) {
selectOptions={generateSelectOptions()}
type="select"
value={get(settings, 'default_role')}
disabled={disabled}
/>
<div className="col-6"></div>
<Input
@ -57,12 +56,10 @@ function EditForm({ disabled, onChange, showLoaders, values }) {
name="advanced.settings.unique_email"
onChange={onChange}
type="toggle"
disabled={disabled}
value={get(settings, 'unique_email')}
/>
<div className="col-6"></div>
<Input
disabled={disabled}
label={{
id: 'users-permissions.EditForm.inputToggle.label.sign-up',
}}
@ -76,7 +73,6 @@ function EditForm({ disabled, onChange, showLoaders, values }) {
/>
<div className="col-6"></div>
<Input
disabled={disabled}
label={{
id: 'users-permissions.EditForm.inputToggle.label.email-reset-password',
}}
@ -85,13 +81,11 @@ function EditForm({ disabled, onChange, showLoaders, values }) {
}}
name="advanced.settings.email_reset_password"
onChange={onChange}
placeholder="ex: https://yourfrontend.com/reset-password"
type="text"
value={get(settings, 'email_reset_password')}
/>
<div className="col-6"></div>
<Input
disabled={disabled}
label={{
id: 'users-permissions.EditForm.inputToggle.label.email-confirmation',
}}
@ -105,7 +99,6 @@ function EditForm({ disabled, onChange, showLoaders, values }) {
/>
<div className="col-6"></div>
<Input
disabled={disabled}
label={{
id: 'users-permissions.EditForm.inputToggle.label.email-confirmation-redirection',
}}
@ -116,7 +109,6 @@ function EditForm({ disabled, onChange, showLoaders, values }) {
name="advanced.settings.email_confirmation_redirection"
onChange={onChange}
type="text"
placeholder="ex: https://yourfrontend.com/confirmation/success"
value={get(settings, 'email_confirmation_redirection')}
/>
</div>
@ -127,7 +119,6 @@ function EditForm({ disabled, onChange, showLoaders, values }) {
}
EditForm.propTypes = {
disabled: PropTypes.bool.isRequired,
onChange: PropTypes.func.isRequired,
showLoaders: PropTypes.bool.isRequired,
values: PropTypes.object.isRequired,

View File

@ -30,16 +30,13 @@ const Wrapper = styled.div`
}
}}
&:hover {
background-color: #e9eaeb;
}
&.highlighted {
border-radius: 3px;
background-color: #e9eaeb;
font-weight: 600;
}
&.highlighted,
&:hover {
&.is-checked:hover {
> i,
> svg {
display: block;

View File

@ -53,7 +53,7 @@ function InputCheckboxPlugin({ inputSelected, label, name, setNewInputSelected,
};
return (
<Wrapper className="col-md-4" onClick={handleClick}>
<Wrapper className="col-md-4">
<div
className={`form-check ${isSelected && policiesShown ? 'highlighted' : ''} ${
value ? 'is-checked' : ''
@ -70,7 +70,7 @@ function InputCheckboxPlugin({ inputSelected, label, name, setNewInputSelected,
/>
{label}
</Label>
<i className="fa fa-cog" />
<i className="fa fa-cog" onClick={handleClick} />
</div>
</Wrapper>
);

View File

@ -7,15 +7,7 @@
import React, { useEffect, useRef, useState } from 'react';
import { FormattedMessage } from 'react-intl';
import PropTypes from 'prop-types';
import {
difference,
findIndex,
has,
includes,
isEmpty,
map,
toLower,
} from 'lodash';
import { difference, findIndex, has, includes, isEmpty, map, toLower } from 'lodash';
import { Label } from 'strapi-helper-plugin';
import InputSearchLi from '../InputSearchLi';

View File

@ -8,8 +8,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { map, omitBy, size } from 'lodash';
import { Button, LoadingBar, LoadingIndicator, CheckPermissions } from 'strapi-helper-plugin';
import pluginPermissions from '../../permissions';
import { Button, LoadingBar, LoadingIndicator } from 'strapi-helper-plugin';
import ListRow from '../ListRow';
import { Flex, ListWrapper, Title, Wrapper } from './Components';
@ -86,25 +85,8 @@ const generateListTitle = (data, settingType) => {
}
};
function List({
allowedActions,
data,
deleteData,
noButton,
onButtonClick,
settingType,
showLoaders,
values,
}) {
function List({ data, deleteData, noButton, onButtonClick, settingType, showLoaders, values }) {
const object = omitBy(data, v => v.name === 'server'); // Remove the server key when displaying providers
const button = allowedActions.canCreateRole ? (
<Button onClick={onButtonClick} secondaryHotlineAdd>
<FormattedMessage id={`users-permissions.List.button.${settingType}`} />
</Button>
) : (
// Align the list
<div style={{ height: 26 }} />
);
return (
<Wrapper>
@ -116,7 +98,15 @@ function List({
generateListTitle(data, settingType)
)}
</Title>
<div>{noButton ? '' : button}</div>
<div>
{noButton ? (
''
) : (
<Button onClick={onButtonClick} secondaryHotlineAdd>
<FormattedMessage id={`users-permissions.List.button.${settingType}`} />
</Button>
)}
</div>
</Flex>
<ListWrapper
@ -130,7 +120,6 @@ function List({
<ul className={noButton ? 'padded-list' : ''}>
{map(object, item => (
<ListRow
allowedActions={allowedActions}
deleteData={deleteData}
item={item}
key={item.name}

View File

@ -10,10 +10,8 @@ import { FormattedMessage } from 'react-intl';
import { capitalize, get, includes } from 'lodash';
import { IconLinks } from '@buffetjs/core';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { CheckPermissions, PopUpWarning } from 'strapi-helper-plugin';
import getTrad from '../../utils/getTrad';
import pluginPermissions from '../../permissions';
import { PopUpWarning } from 'strapi-helper-plugin';
import en from '../../translations/en.json';
import { HomePageContext } from '../../contexts/HomePage';
import { Container, Flex, Row, Wrapper } from './Components';
@ -32,38 +30,30 @@ class ListRow extends React.Component {
undeletableIDs = ['public', 'authenticated'];
generateContent = () => {
let links = [
{
icon: <FontAwesomeIcon icon="pencil-alt" />,
onClick: this.handleClick,
},
{
icon: <FontAwesomeIcon icon="trash-alt" />,
onClick: e => {
e.stopPropagation();
this.setState({ showModalDelete: true });
},
},
];
switch (this.props.settingType) {
case 'roles':
let links = [
{
icon: (
<CheckPermissions permissions={pluginPermissions.updateRole}>
<FontAwesomeIcon icon="pencil-alt" />
</CheckPermissions>
),
onClick: this.handleClick,
},
{
icon: (
<CheckPermissions permissions={pluginPermissions.deleteRole}>
<FontAwesomeIcon icon="trash-alt" />
</CheckPermissions>
),
onClick: e => {
e.stopPropagation();
this.setState({ showModalDelete: true });
},
},
];
if (includes(this.protectedRoleIDs, get(this.props.item, 'type', ''))) {
links = [];
}
if (includes(this.undeletableIDs, get(this.props.item, 'type', ''))) {
links = [
{
icon: (
<CheckPermissions permissions={pluginPermissions.updateRole}>
<FontAwesomeIcon icon="pencil-alt" />
</CheckPermissions>
),
icon: <FontAwesomeIcon icon="pencil-alt" />,
onClick: this.handleClick,
},
];
@ -85,6 +75,8 @@ class ListRow extends React.Component {
</Wrapper>
);
case 'providers':
links.pop(); // Remove the delete CTA
return (
<Wrapper className="row">
<div className="col-md-4">
@ -101,33 +93,20 @@ class ListRow extends React.Component {
</div>
<div className="col-md-6" style={{ fontWeight: '500' }}>
{get(this.props.values, [get(this.props.item, 'name'), 'enabled']) ? (
<span style={{ color: '#5A9E06' }}>
<FormattedMessage id={getTrad('ListRow.enabled')} />
</span>
<span style={{ color: '#5A9E06' }}>Enabled</span>
) : (
<span style={{ color: '#F64D0A' }}>
<FormattedMessage id={getTrad('ListRow.disabled')} />
</span>
<span style={{ color: '#F64D0A' }}>Disabled</span>
)}
</div>
<div className="col-md-2">
<IconLinks
links={[
{
icon: (
<CheckPermissions permissions={pluginPermissions.updateProviders}>
<FontAwesomeIcon icon="pencil-alt" />
</CheckPermissions>
),
onClick: this.handleClick,
},
]}
/>
<IconLinks links={links} />
</div>
</Wrapper>
);
case 'email-templates':
links.pop(); // Remove the delete CTA
return (
<Wrapper className="row">
<div className="col-md-4">
@ -137,7 +116,7 @@ class ListRow extends React.Component {
</div>
<div>
{this.props.item.display && en[this.props.item.display] ? (
<FormattedMessage id={getTrad(this.props.item.display)} />
<FormattedMessage id={`users-permissions.${this.props.item.display}`} />
) : (
this.props.item.name
)}
@ -145,18 +124,7 @@ class ListRow extends React.Component {
</Flex>
</div>
<div className="col-md-8">
<IconLinks
links={[
{
icon: (
<CheckPermissions permissions={pluginPermissions.updateEmailTemplates}>
<FontAwesomeIcon icon="pencil-alt" />
</CheckPermissions>
),
onClick: this.handleClick,
},
]}
/>
<IconLinks links={links} />
</div>
</Wrapper>
);
@ -168,7 +136,6 @@ class ListRow extends React.Component {
handleClick = () => {
const { pathname, push } = this.context;
const { allowedActions } = this.props;
switch (this.props.settingType) {
case 'roles': {
@ -197,7 +164,7 @@ class ListRow extends React.Component {
render() {
return (
<Row>
<Row onClick={this.handleClick}>
<Container>{this.generateContent()}</Container>
<PopUpWarning
isOpen={this.state.showModalDelete}

View File

@ -17,7 +17,7 @@ import { Banner, Chevron, ControllerWrapper, Description, Icon, Name, Wrapper }
class Plugin extends React.Component {
// eslint-disable-line react/prefer-stateless-function
state = { collapse: false, inputSelected: '' };
state = { collapse: false };
static contextType = EditPageContext;
@ -51,10 +51,6 @@ class Plugin extends React.Component {
}
};
setInputSelectedState = name => {
this.setState({ inputSelected: name });
};
render() {
const { appPlugins } = this.context;
const { plugin } = this.props;
@ -105,8 +101,6 @@ class Plugin extends React.Component {
inputNamePath={`permissions.${this.props.name}`}
isOpen={this.state.collapse}
key={key}
inputSelected={this.state.inputSelected}
setInputSelected={this.setInputSelectedState}
name={key}
actions={controllerActions}
resetInputBackground={this.state.resetInputBackground}

View File

@ -36,11 +36,7 @@ const PluginsContainer = styled.div`
}
}
> div:not(:first-child) {
background: linear-gradient(
315deg,
rgba(255, 255, 255, 0) 0%,
rgba(227, 233, 243, 0.54) 100%
);
background: linear-gradient(315deg, rgba(255, 255, 255, 0) 0%, rgba(227, 233, 243, 0.54) 100%);
> div {
line-height: 5.2rem;
}

View File

@ -31,9 +31,7 @@ class Plugins extends React.Component {
</div>
</Header>
<PluginsContainer
className={
!has(this.props.plugins, 'application') && 'pluginsGradient'
}
className={!has(this.props.plugins, 'application') && 'pluginsGradient'}
>
{map(Object.keys(this.props.plugins).sort(), plugin => (
<Plugin

View File

@ -24,26 +24,14 @@ const Policies = ({
const baseTitle = 'users-permissions.Policies.header';
const title = shouldDisplayPoliciesHint ? 'hint' : 'title';
const value = get(values, inputSelectName);
const path = without(
inputSelectName.split('.'),
'permissions',
'controllers',
'policy'
);
const path = without(inputSelectName.split('.'), 'permissions', 'controllers', 'policy');
const controllerRoutes = get(
routes,
without(
inputSelectName.split('.'),
'permissions',
'controllers',
'policy'
)[0]
without(inputSelectName.split('.'), 'permissions', 'controllers', 'policy')[0]
);
const displayedRoutes = isEmpty(controllerRoutes)
? []
: controllerRoutes.filter(
o => toLower(o.handler) === toLower(takeRight(path, 2).join('.'))
);
: controllerRoutes.filter(o => toLower(o.handler) === toLower(takeRight(path, 2).join('.')));
return (
<Wrapper className="col-md-5">
@ -69,9 +57,7 @@ const Policies = ({
</div>
<div className="row">
{!shouldDisplayPoliciesHint
? map(displayedRoutes, (route, key) => (
<BoundRoute key={key} route={route} />
))
? map(displayedRoutes, (route, key) => <BoundRoute key={key} route={route} />)
: ''}
</div>
</div>

View File

@ -202,7 +202,7 @@ class PopUpForm extends React.Component {
const params = {
link: (
<a
href="https://strapi.io/documentation/v3.x/plugins/users-permissions.html#templating-emails"
href="https://github.com/strapi/strapi/blob/master/docs/3.0.0-beta.x/guides/authentication.md#templating-emails"
target="_blank"
rel="noopener noreferrer"
>

View File

@ -0,0 +1,32 @@
/**
*
* This component is the skeleton around the actual pages, and should only
* contain code that should be seen on all pages. (e.g. navigation bar)
*
*/
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import { NotFound } from 'strapi-helper-plugin';
import pluginId from '../../pluginId';
import EditPage from '../EditPage';
import HomePage from '../HomePage';
const App = () => {
return (
<div className={pluginId}>
<Switch>
<Route
path={`/plugins/${pluginId}/:settingType/:actionType/:id?`}
component={EditPage}
exact
/>
<Route path={`/plugins/${pluginId}/:settingType`} component={HomePage} exact />
<Route component={NotFound} />
</Switch>
</div>
);
};
export default App;

View File

@ -0,0 +1,27 @@
/**
*
* Initializer
*
*/
import { memo, useEffect, useRef } from 'react';
import PropTypes from 'prop-types';
import pluginId from '../../pluginId';
const Initializer = ({ updatePlugin }) => {
const ref = useRef();
ref.current = updatePlugin;
useEffect(() => {
ref.current(pluginId, 'isReady', true);
}, []);
return null;
};
Initializer.propTypes = {
updatePlugin: PropTypes.func.isRequired,
};
export default memo(Initializer);
export { Initializer };

View File

@ -0,0 +1,17 @@
import React from 'react';
import { mount, shallow } from 'enzyme';
import { Initializer } from '../index';
describe('<Initializer />', () => {
it('should not crash', () => {
shallow(<Initializer updatePlugin={jest.fn()} />);
});
it('should call the updatePlugin props on mount', () => {
const props = { updatePlugin: jest.fn() };
mount(<Initializer {...props} />);
expect(props.updatePlugin).toHaveBeenCalledWith('users-permissions', 'isReady', true);
});
});

View File

@ -4,9 +4,7 @@ import PropTypes from 'prop-types';
const EditPageContext = createContext({});
const EditPageContextProvider = ({ children, ...rest }) => {
return (
<EditPageContext.Provider value={rest}>{children}</EditPageContext.Provider>
);
return <EditPageContext.Provider value={rest}>{children}</EditPageContext.Provider>;
};
const useEditPageContext = () => useContext(EditPageContext);

View File

@ -4,9 +4,7 @@ import PropTypes from 'prop-types';
const HomePageContext = createContext({});
const HomePageContextProvider = ({ children, ...rest }) => {
return (
<HomePageContext.Provider value={rest}>{children}</HomePageContext.Provider>
);
return <HomePageContext.Provider value={rest}>{children}</HomePageContext.Provider>;
};
const useHomePageContext = () => useContext(HomePageContext);

View File

@ -0,0 +1 @@
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><text transform="translate(-24 -6)" fill="#4B515A" fill-rule="evenodd" font-size="24" font-family="AppleColorEmoji, Apple Color Emoji"><tspan x="24" y="28">🔐</tspan></text></svg>

After

Width:  |  Height:  |  Size: 244 B

View File

@ -0,0 +1,46 @@
// NOTE TO PLUGINS DEVELOPERS:
// If you modify this file by adding new options to the plugin entry point
// Here's the file: strapi/docs/3.0.0-beta.x/plugin-development/frontend-field-api.md
// Here's the file: strapi/docs/3.0.0-beta.x/guides/registering-a-field-in-admin.md
// Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated
// IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED
import pluginPkg from '../../package.json';
import pluginLogo from './assets/images/logo.svg';
import layout from '../../config/layout';
import pluginId from './pluginId';
import App from './containers/App';
import Initializer from './containers/Initializer';
import lifecycles from './lifecycles';
import reducers from './reducers';
import trads from './translations';
export default strapi => {
const pluginDescription = pluginPkg.strapi.description || pluginPkg.description;
const plugin = {
blockerComponent: null,
blockerComponentProps: {},
description: pluginDescription,
icon: pluginPkg.strapi.icon,
id: pluginId,
initializer: Initializer,
injectedComponents: [],
isRequired: pluginPkg.strapi.required || false,
layout,
lifecycles,
leftMenuLinks: [],
leftMenuSections: [],
mainComponent: App,
name: pluginPkg.strapi.name,
pluginLogo,
preventComponentRendering: false,
reducers,
settings: {},
suffixUrl: () => '/roles',
suffixUrlToReplaceForLeftMenuHighlight: '/roles',
trads,
};
return strapi.registerPlugin(plugin);
};

View File

@ -0,0 +1,30 @@
/*
*
* SET THE HOOKS TO ENABLE THE MAGIC OF STRAPI.
* -------------------------------------------
*
* Secure, customise and enhance your project by setting
* the hooks via this file.
*
*/
function lifecycles() {
// TODO: Make it work and remove it when the split-admin PR has been merged
// const componentsToAdd = [
// {
// area: 'NavRight',
// key: 'UsersPermissionsLogout',
// mainComponent: require('./components/Logout').default,
// },
// ];
// this.setComponents(componentsToAdd);
// Set hooks for the AdminPage container.
// Note: we don't need to specify the first argument because we already know what "willSecure" refers to.
// Set hooks for the App container of the Content Manager.
// Note: we have to specify the first argument to select a specific container which is located in a plugin, or not.
// this.setHooks('content-manager.App', {
// willSomething: (props, store) => { console.log("Do Something"); }
// });
}
export default lifecycles;

View File

@ -0,0 +1,5 @@
import pluginPkg from '../../package.json';
const pluginId = pluginPkg.name.replace(/^strapi-plugin-/i, '');
export default pluginId;

View File

@ -0,0 +1,10 @@
import editPageReducer from './containers/EditPage/reducer';
import homePageReducer from './containers/HomePage/reducer';
import pluginId from './pluginId';
const reducers = {
[`${pluginId}_editPage`]: editPageReducer,
[`${pluginId}_homePage`]: homePageReducer,
};
export default reducers;

View File

@ -0,0 +1,102 @@
{
"BoundRoute.title": "Bound route to",
"Controller.input.label": "{label} ",
"Controller.selectAll": "تحديد الكل",
"EditForm.inputSelect.description.role": "سيتم إرفاق المستخدم المصادق الجديد بالدور المحدد.",
"EditForm.inputSelect.durations.description": "عدد الساعات التي لا يمكن للمستخدم الاشتراك خلالها.",
"EditForm.inputSelect.durations.label": "المدة",
"EditForm.inputSelect.label.role": "الدور الافتراضي للمستخدمين المصادقين",
"EditForm.inputSelect.subscriptions.description": "حدد عدد الاشتراكات لكل IP في الساعة.",
"EditForm.inputSelect.subscriptions.label": "إدارة حصص الاشتراك",
"EditForm.inputToggle.description.email": "عدم السماح للمستخدم بإنشاء حسابات متعددة باستخدام نفس عنوان البريد الإلكتروني مع موفري مصادقة مختلفين.",
"EditForm.inputToggle.description.sign-up": "عند تعطيل (OFF) ، يتم حظر عملية التسجيل. لا أحد يستطيع الاشتراك بعد الآن بغض النظر عن المزود المستخدم.",
"EditForm.inputToggle.label.email": "حساب واحد لكل بريد الاكتروني",
"EditForm.inputToggle.label.sign-up": "تفعيل التسجيل",
"EditPage.cancel": "الغاء",
"EditPage.form.roles": "تفاصيل الدور",
"EditPage.form.roles.label.description": "الوصف",
"EditPage.form.roles.label.name": "الأسم",
"EditPage.form.roles.label.users": "المستخدمون المرتبطون بهذا الدور ({number})",
"EditPage.form.roles.name.error": "القيمة مطلوبة.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "إنشاء دور جديد",
"EditPage.notification.permissions.error": "حدث خطأ أثناء جلب الأذونات",
"EditPage.notification.policies.error": "حدث خطأ أثناء جلب السياسات",
"EditPage.notification.role.error": "حدث خطأ أثناء جلب الدور",
"EditPage.submit": "حفظ",
"Email.template.reset_password": "إعادة تعيين كلمة المرور",
"Email.template.success_register": "التسجيل ناجح",
"Email.template.validation_email": "التحقق من صحة عنوان البريد الإلكتروني",
"HeaderNav.link.advancedSettings": "إعدادات متقدمة",
"HeaderNav.link.emailTemplates": "قوالب الإيميل",
"HeaderNav.link.providers": "مزودين",
"HeaderNav.link.roles": "الأدوار والأذونات",
"HomePage.header.description": "حدد الأدوار والأذونات للمستخدمين لديك.",
"HomePage.header.title": "الأدوار والأذونات",
"InputSearch.placeholder": "ابحث عن مستخدم",
"List.button.providers": "إضافة موفر جديد",
"List.button.roles": "إضافة دور جديد",
"List.title.emailTemplates.plural": "يتوفر {number} نماذج للبريد الإلكتروني",
"List.title.emailTemplates.singular": "يتوفر {number} نموذج للبريد الإلكتروني",
"List.title.providers.disabled.plural": "{number} معطلين",
"List.title.providers.disabled.singular": "{number} معطل",
"List.title.providers.enabled.plural": "يتم تمكين {number} مزودين و",
"List.title.providers.enabled.singular": "يتم تمكين {number} مزود و",
"List.title.roles.plural": "{number} ادوار متوفرة",
"List.title.roles.singular": "{number} دور متوفر",
"Plugin.permissions.application.description": "حدد جميع الإجراءات المسموح بها لمشروعك.",
"Plugin.permissions.plugins.description": "حدد جميع الإجراءات المسموح بها للإضافة {name}.",
"Plugins.header.description": "يتم سرد الإجراءات المحددة المرتبطة بالمسار أدناه.",
"Plugins.header.title": "الصلاحيات",
"Policies.InputSelect.empty": "لا شيء",
"Policies.InputSelect.label": "السماح بتنفيذ هذا الإجراء لـ:",
"Policies.header.hint": "حدد إجراءات التطبيق أو إجراءات الإضافة وانقر على رمز الترس لعرض المسار المرتبط",
"Policies.header.title": "إعدادات متقدمة",
"PopUpForm.Email.email_templates.inputDescription": "إذا كنت غير متأكد من كيفية استخدام المتغيرات ، {link}",
"PopUpForm.Email.link.documentation": "تحقق من وثائقنا.",
"PopUpForm.Email.options.from.email.label": "البريد الإلكتروني للشاحن",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "أسم المورد",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "الرسالة",
"PopUpForm.Email.options.object.label": "موضوع",
"PopUpForm.Email.options.response_email.label": "البريد الإلكتروني للاستجابة",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>يرجى النقر على هذا الرابط لتأكيد حسابك</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "يرجى تأكيد عنوان بريدك الإلكتروني لـ %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>يرجى النقر على هذا الرابط لتأكيد حسابك</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "يرجى تأكيد عنوان بريدك الإلكتروني لـ %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>يرجى النقر على هذا الرابط لتأكيد حسابك</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "يرجى تأكيد عنوان بريدك الإلكتروني لـ %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "نص",
"PopUpForm.Providers.enabled.description": "في حالة التعطيل ، لن يتمكن المستخدمون من استخدام هذا الموفر.",
"PopUpForm.Providers.enabled.label": "مفعل",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "عنوان URL لإعادة التوجيه لإضافتة تكوين تطبيق Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "عنوان URL لإعادة التوجيه لإضافتة تكوين تطبيق Github",
"PopUpForm.Providers.google.providerConfig.redirectURL": "عنوان URL لإعادة التوجيه لإضافتة تكوين تطبيق Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "عنوان URL لإعادة التوجيه لإضافتة تكوين تطبيق Instagram",
"PopUpForm.Providers.key.label": "معرف العميل",
"PopUpForm.Providers.key.placeholder": "نص",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "عنوان URL لإعادة التوجيه لإضافتة تكوين تطبيق Linkedin",
"PopUpForm.Providers.redirectURL.front-end.label": "عنوان URL لإعادة التوجيه إلى تطبيق الواجهة الأمامية (front-end)",
"PopUpForm.Providers.secret.label": "سر العميل (Client Secret)",
"PopUpForm.Providers.secret.placeholder": "نص",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "عنوان URL لإعادة التوجيه لإضافتة تكوين تطبيق Twitter",
"PopUpForm.button.cancel": "الغاء",
"PopUpForm.button.save": "حفظ",
"PopUpForm.header.add.providers": "إضافة موفر جديد",
"PopUpForm.header.edit.email-templates": "تحرير قوالب البريد الإلكتروني",
"PopUpForm.header.edit.providers": "تحرير موفر",
"PopUpForm.inputSelect.providers.label": "اختر الموفر",
"notification.error.delete": "حدث خطأ أثناء محاولة حذف العنصر",
"notification.error.fetch": "حدث خطأ أثناء محاولة جلب البيانات",
"notification.error.fetchUser": "حدث خطأ أثناء محاولة جلب المستخدمين",
"notification.info.emailSent": "تم إرسال البريد الإلكتروني",
"notification.success.delete": "تم حذف هذا العنصر",
"notification.success.submit": "تم تحديث الإعدادات",
"plugin.description.long": "حماية الـAPI الخاص بك مع عملية مصادقة كاملة استناداً إلى JWT. يأتي هذا الملحق أيضًا مع إستراتيجية ACL التي تسمح لك بإدارة الأذونات بين مجموعات المستخدمين.",
"plugin.description.short": "حماية الـAPI الخاص بك مع عملية مصادقة كاملة استناداً إلى JWT"
}

View File

@ -0,0 +1,113 @@
{
"BoundRoute.title": "Spojit adresu s",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Vybrat vše",
"Controller.unselectAll": "Zrušit výběr",
"EditForm.inputSelect.description.role": "Připojí nově autentifikovaného uživatele ke svolené roli.",
"EditForm.inputSelect.durations.description": "Počet hodin, po které se uživatel nemůže odebírat.",
"EditForm.inputSelect.durations.label": "Délka",
"EditForm.inputSelect.label.role": "Výchozí role pro autentifikovaného uživatele",
"EditForm.inputSelect.subscriptions.description": "Limitovat počet odběrů na IP adresu na hodinu.",
"EditForm.inputSelect.subscriptions.label": "Spravovat kvóty na odběry",
"EditForm.inputToggle.description.email": "Zabránit uživateli vytvářet různé účty se stejným e-mailem a jinými poskytovateli autentifikace.",
"EditForm.inputToggle.description.email-confirmation": "Pokud je tato funkce povolena (ON), nově registrovaní uživatelé dostanou potvrzující e-mail.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Po potvrzení e-mailu, zvolte kam budete přesměrováni.",
"EditForm.inputToggle.description.email-reset-password": "Adresa stránky obnovení hesla vaší aplikace",
"EditForm.inputToggle.description.sign-up": "Pokud je tato možnost zakázána (OFF), není možno projít registrací. Nikdo se již nemůže připojit, bez ohledu jakého použije poskytovatele.",
"EditForm.inputToggle.label.email": "Jeden účet na e-mail",
"EditForm.inputToggle.label.email-confirmation": "Povolit potvrzení z e-mailu",
"EditForm.inputToggle.label.email-confirmation-redirection": "Adresa pro přesměrování",
"EditForm.inputToggle.label.email-reset-password": "Stránka pro obnovení hesla",
"EditForm.inputToggle.label.sign-up": "Povolit registrace",
"EditPage.cancel": "Zrušit",
"EditPage.form.roles": "Detaily role",
"EditPage.form.roles.label.description": "Popis",
"EditPage.form.roles.label.name": "Název",
"EditPage.form.roles.label.users": "Uživatelé spojení s touto rolí ({number})",
"EditPage.form.roles.name.error": "Tato hodnota je povinná.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Vytvořit novou roli",
"EditPage.notification.permissions.error": "Při pokusu o načtení práv došlo k chybě.",
"EditPage.notification.policies.error": "Při pokusu o načtení pokročilých nastavení došlo k chybě.",
"EditPage.notification.role.error": "Při pokusu o načtení role došlo k chybě.",
"EditPage.submit": "Uložit",
"Email.template.email_confirmation": "Potvrzení e-mailové adresy",
"Email.template.reset_password": "Obnovit heslo",
"Email.template.success_register": "Registrace proběhla úspěšně",
"HeaderNav.link.advancedSettings": "Pokročilá nastavení",
"HeaderNav.link.emailTemplates": "E-mailové šablony",
"HeaderNav.link.providers": "Poskytovatelé",
"HeaderNav.link.roles": "Role & Práva",
"HomePage.header.description": "Definujte role a práva vašim uživatelům.",
"HomePage.header.title": "Role & Práva",
"InputSearch.placeholder": "Vyhledat uživatele",
"List.button.providers": "Přidat nového poskytovatele",
"List.button.roles": "Přidat novou roli",
"List.title.emailTemplates.plural": "{number} e-mailových šablon je k dispozici",
"List.title.emailTemplates.singular": "{number} e-mailová šablona je k dispozici",
"List.title.providers.disabled.plural": "{number} jsou zakázána",
"List.title.providers.disabled.singular": "{number} je zakázán",
"List.title.providers.enabled.plural": "{number} poskytovatele jsou nyní povoleni a",
"List.title.providers.enabled.singular": "{number} poskytovatel je nyní povolen a",
"List.title.roles.plural": "{number} role jsou k dispozici",
"List.title.roles.singular": "{number} role je k dispozici",
"Plugin.permissions.application.description": "Definujte všechy povolené akce na vašem projektu.",
"Plugin.permissions.plugins.description": "Nastavit všechny akce pro zásuvný modul {name}.",
"Plugins.header.description": "Pouze akce spojené s adresou jsou vypsány níže.",
"Plugins.header.title": "Povolení",
"Policies.InputSelect.empty": "Žádné",
"Policies.InputSelect.label": "Povolit vykonání této akce:",
"Policies.header.hint": "Vyberte akce aplikace, nebo akce zásuvného modulu a klikněte na ikonku ozubeného kolečka pro zobrazení adresy s nimi spojenou.",
"Policies.header.title": "Pokročilá nastavení",
"PopUpForm.Email.email_templates.inputDescription": "Pokud si nejste jisti jak používat proměnné, {link}",
"PopUpForm.Email.link.documentation": "podívejte se na naši dokumentaci.",
"PopUpForm.Email.options.from.email.label": "Odesilatelův e-mail",
"PopUpForm.Email.options.from.email.placeholder": "jannovak@gmail.com",
"PopUpForm.Email.options.from.name.label": "Jméno odesilatele",
"PopUpForm.Email.options.from.name.placeholder": "Jan Novák",
"PopUpForm.Email.options.message.label": "Zpráva",
"PopUpForm.Email.options.object.label": "Předmět",
"PopUpForm.Email.options.response_email.label": "Response e-mail",
"PopUpForm.Email.options.response_email.placeholder": "jannovak@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Prosím klikněte na následující odkaz pro ověření vašeho účtu.</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Prosím potvrďte e-mailovou adresu pro %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Prosím klikněte na tento odkaz pro ověření vašeho účtu</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Prosím potvrďte e-mailovou adresu pr %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Prosím klikněte na tento odkaz pro ověření vašeho účtu</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Prosím potvrďte e-mailovou adresu pr %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace Discord",
"PopUpForm.Providers.enabled.description": "If disabled, users won't be able to use this provider.",
"PopUpForm.Providers.enabled.label": "Povolit",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace GitHub",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace Instagram",
"PopUpForm.Providers.vk.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace VK",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace Linkedin",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace Microsoft",
"PopUpForm.Providers.redirectURL.front-end.label": "Adresa pro přesměrování na vaši front-end aplikaci",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Adresa pro přesměrování, kterou přidejte do nastavení aplikace Twitter",
"PopUpForm.button.cancel": "Zrušit",
"PopUpForm.button.save": "Uložit",
"PopUpForm.header.add.providers": "Přidat nového poskytovatele",
"PopUpForm.header.edit.email-templates": "Upravit e-mailové šablony",
"PopUpForm.header.edit.providers": "Upravit Poskytovatele",
"PopUpForm.inputSelect.providers.label": "Zvolit poskytovatele",
"components.Input.error.password.length": "Heslo je příliš krátké",
"notification.error.delete": "Při pokusu o odstranění položky došlo k chybě",
"notification.error.fetch": "Při pokusu o načtení dat došlo k chybě",
"notification.error.fetchUser": "Při pokusu u načtení uživatelů došlo k chybě.",
"notification.info.emailSent": "E-mail byl odeslán",
"notification.success.delete": "E-mail byl odstraněn",
"notification.success.submit": "Nastavení bylo aktualizování",
"plugin.description.long": "Chraňte své API pomocí kompletního autentifikačního procesu, založeného na JWT. Tento zásuvný modul obsahuje ACL strategii, která vám umožní spravovat oprávnění mezi skupinami uživatelů.",
"plugin.description.short": "Chraňte své API pomocí kompletního autentifikačního procesu, založeného na JWT"
}

View File

@ -0,0 +1,110 @@
{
"BoundRoute.title": "Pfad gebunden an",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Alle auswählen",
"EditForm.inputSelect.description.role": "Es wird den neuen authentifizierten Benutzer an die ausgewählte Rolle anhängen.",
"EditForm.inputSelect.durations.description": "Anzahl Stunden, während derer eine Registration unmöglich ist.",
"EditForm.inputSelect.durations.label": "Dauer",
"EditForm.inputSelect.label.role": "Standardrolle für authentifizierte Benutzer",
"EditForm.inputSelect.subscriptions.description": "Lege die Anzahl an subscriptions pro Stunde und IP fest.",
"EditForm.inputSelect.subscriptions.label": "Abonnementkontingente verwalten",
"EditForm.inputToggle.description.email": "Verbiete das Anlegen verschiedener Accounts derselben E-Mail-Adresse bei unterschiedlichen Anmeldemethoden.",
"EditForm.inputToggle.description.email-confirmation": "Wenn aktiviert (ON), neu registrierte Benutzer erhalten eine Bestätigungs-E-Mail.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Nachdem Sie die E-Mail bestätigt haben, wähle wohin sie weitergeleitet wird.",
"EditForm.inputToggle.description.sign-up": "Wenn deaktiviert (OFF), wird der Registrationsprozess unterbunden. Niemand kann sich mehr registrieren.",
"EditForm.inputToggle.label.email": "Ein Account pro E-Mail-Adresse",
"EditForm.inputToggle.label.email-confirmation": "Aktiviere E-Mail Benachrichtigungen",
"EditForm.inputToggle.label.email-confirmation-redirection": "Weiterleitungs-URL",
"EditForm.inputToggle.label.sign-up": "Registration ermöglichen",
"EditPage.cancel": "Abbrechen",
"EditPage.form.roles": "Details zu Rollen",
"EditPage.form.roles.label.description": "Beschreibung",
"EditPage.form.roles.label.name": "Name",
"EditPage.form.roles.label.users": "Benutzer mit dieser Rolle ({number})",
"EditPage.form.roles.name.error": "Dieser Wert ist erforderlich.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Erstelle eine neue Rolle",
"EditPage.notification.permissions.error": "Beim Abruf von Befugnissen ist ein Fehler aufgetreten",
"EditPage.notification.policies.error": "Beim Abruf von policies ist ein Fehler aufgetreten",
"EditPage.notification.role.error": "Beim Abruf der Rolle ist ein Fehler aufgetreten",
"EditPage.submit": "Speichern",
"Email.template.email_confirmation": "Bestätigung der E-Mail Adresse",
"Email.template.reset_password": "Passwort zurücksetzen",
"Email.template.success_register": "Anmeldung erfolgreich",
"Email.template.validation_email": "Validierung der E-Mail-Adresse",
"HeaderNav.link.advancedSettings": "Erweiterte Einstellungen",
"HeaderNav.link.emailTemplates": "E-Mail-Templates",
"HeaderNav.link.providers": "Methoden",
"HeaderNav.link.roles": "Rollen",
"HomePage.header.description": "Lege Rollen und deren Berechtigungen fest.",
"HomePage.header.title": "Benutzer & Berechtigungen",
"InputSearch.placeholder": "Suche nach einem Benutzer",
"List.button.providers": "Neue Methode hinzufügen",
"List.button.roles": "Neue Rolle hinzufügen",
"List.title.emailTemplates.plural": "{number} E-Mail-Templates sind verfügbar",
"List.title.emailTemplates.singular": "{number} E-Mail-Template ist verfügbar",
"List.title.providers.disabled.plural": "{number} sind deaktiviert",
"List.title.providers.disabled.singular": "{number} ist deaktiviert",
"List.title.providers.enabled.plural": "{number} Methoden sind aktiviert und",
"List.title.providers.enabled.singular": "{number} Methode ist aktiviert und",
"List.title.roles.plural": "{number} Rollen sind verfügbar",
"List.title.roles.singular": "{number} Rolle ist verfügbar",
"Plugin.permissions.application.description": "Definiere die möglichen Aktionen deines Projekts.",
"Plugin.permissions.plugins.description": "Definiere die möglichen Aktionen des {name} Plugins.",
"Plugins.header.description": "Nur Aktionen, die an einen Pfad gebunden sind, werden hier gelistet.",
"Plugins.header.title": "Befugnisse",
"Policies.InputSelect.empty": "Keine",
"Policies.InputSelect.label": "Diese Aktion folgenden erlauben:",
"Policies.header.hint": "Wähle eine Aktion aus und klicke auf das Zahnrad, um den an diese Aktion gebundenen Pfand anzuzeigen",
"Policies.header.title": "Fortgeschrittene Einstellungen",
"PopUpForm.Email.email_templates.inputDescription": "Für mehr Informationen, {link}",
"PopUpForm.Email.link.documentation": "schau in unsere Dokumentation.",
"PopUpForm.Email.options.from.email.label": "E-Mail-Adresse des Absenders",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Name des Absenders",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Nachricht",
"PopUpForm.Email.options.object.label": "Betreff",
"PopUpForm.Email.options.response_email.label": "Antwort E-Mail-Adresse",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Hier klicken, um deinen Account zu bestätigen</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Bitte bestätige deine E-Mail-Adresse für %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Hier klicken, um deinen Account zu bestätigen</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Bitte bestätige deine E-Mail-Adresse für %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Hier klicken, um deinen Account zu bestätigen</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Bitte bestätige deine E-Mail-Adresse für %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.enabled.description": "Wenn deaktiviert, kann diese Methode nicht verwendet werden.",
"PopUpForm.Providers.enabled.label": "Aktivieren",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner Discord-App gesetzt wird",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner Facebook-App gesetzt wird",
"PopUpForm.Providers.github.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner Github-App gesetzt wird",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner Google-App gesetzt wird",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner Instagram-App gesetzt wird",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner Microsoft-App gesetzt wird",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner LinkedIn-App gesetzt wird",
"PopUpForm.Providers.redirectURL.front-end.label": "Die URL, die zur Weiterleitung zu deiner Frontend-App verwendet wird",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Die URL, die in den Einstellungen deiner Twitter-App gesetzt wird",
"PopUpForm.button.cancel": "Abbrechen",
"PopUpForm.button.save": "Speichern",
"PopUpForm.header.add.providers": "Neue Methode hinzufügen",
"PopUpForm.header.edit.email-templates": "E-Mail-Templates bearbeiten",
"PopUpForm.header.edit.providers": "Methode bearbeiten",
"PopUpForm.inputSelect.providers.label": "Wähle die Methode aus",
"components.Input.error.password.length": "Passwort ist zu kurz",
"notification.error.delete": "Beim Löschen des Objekts ist ein Fehler aufgetreten",
"notification.error.fetch": "Beim Abruf von Daten ist ein Fehler aufgetreten",
"notification.error.fetchUser": "Beim Abruf von Benutzern ist ein Fehler aufgetreten",
"notification.info.emailSent": "Die E-Mail wurde versendet",
"notification.success.delete": "Das Objekt wurde gelöscht",
"notification.success.submit": "Einstellungen aktualisiert",
"plugin.description.long": "Beschütze deine API mit einem vollständigen Authentifikationsprozess basierend auf JWT. Zudem bietet dieses Plugin eine ACL-Strategie, die erlaubt, die Befugnisse zwischen Benutzergruppen festzulegen.",
"plugin.description.short": "Beschütze deine API mit einem vollständigen Authentifikationsprozess basierend auf JWT."
}

View File

@ -0,0 +1,114 @@
{
"BoundRoute.title": "Bound route to",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Select all",
"Controller.unselectAll": "Unselect all",
"EditForm.inputSelect.description.role": "It will attach the new authenticated user to the selected role.",
"EditForm.inputSelect.durations.description": "Number of hours during which the user can't subscribe.",
"EditForm.inputSelect.durations.label": "Duration",
"EditForm.inputSelect.label.role": "Default role for authenticated users",
"EditForm.inputSelect.subscriptions.description": "Limit the number of subscriptions per IP per hour.",
"EditForm.inputSelect.subscriptions.label": "Manage subscription quotas",
"EditForm.inputToggle.description.email": "Disallow the user to create multiple accounts using the same email address with different authentication providers.",
"EditForm.inputToggle.description.email-confirmation": "When enabled (ON), new registred users receive a confirmation email.",
"EditForm.inputToggle.description.email-confirmation-redirection": "After confirmed your email, chose where you will be redirected.",
"EditForm.inputToggle.description.email-reset-password": "URL of your application's reset password page",
"EditForm.inputToggle.description.sign-up": "When disabled (OFF), the registration process is forbidden. No one can subscribe anymore no matter the used provider.",
"EditForm.inputToggle.label.email": "One account per email address",
"EditForm.inputToggle.label.email-confirmation": "Enable email confirmation",
"EditForm.inputToggle.label.email-confirmation-redirection": "Redirection url",
"EditForm.inputToggle.label.email-reset-password": "Reset password page",
"EditForm.inputToggle.label.sign-up": "Enable sign-ups",
"EditPage.cancel": "Cancel",
"EditPage.form.roles": "Role details",
"EditPage.form.roles.label.description": "Description",
"EditPage.form.roles.label.name": "Name",
"EditPage.form.roles.label.users": "Users associated with this role ({number})",
"EditPage.form.roles.name.error": "This value is required.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Create a new role",
"EditPage.notification.permissions.error": "An error occurred while fetching permissions",
"EditPage.notification.policies.error": "An error occurred while fetching policies",
"EditPage.notification.role.error": "An error occurred while fetching the role",
"EditPage.submit": "Save",
"Email.template.email_confirmation": "Email address confirmation",
"Email.template.reset_password": "Reset password",
"Email.template.success_register": "Registration successful",
"HeaderNav.link.advancedSettings": "Advanced settings",
"HeaderNav.link.emailTemplates": "Email templates",
"HeaderNav.link.providers": "Providers",
"HeaderNav.link.roles": "Roles & Permissions",
"HomePage.header.description": "Define the roles and permissions for your users.",
"HomePage.header.title": "Roles & Permissions",
"InputSearch.placeholder": "Search for a user",
"List.button.providers": "Add New Provider",
"List.button.roles": "Add New Role",
"List.title.emailTemplates.plural": "{number} email templates are available",
"List.title.emailTemplates.singular": "{number} email template is available",
"List.title.providers.disabled.plural": "{number} are disabled",
"List.title.providers.disabled.singular": "{number} is disabled",
"List.title.providers.enabled.plural": "{number} providers are enabled and",
"List.title.providers.enabled.singular": "{number} provider is enabled and",
"List.title.roles.plural": "{number} roles are available",
"List.title.roles.singular": "{number} role is available",
"Plugin.permissions.application.description": "Define all your project's allowed actions.",
"Plugin.permissions.plugins.description": "Define all allowed actions for the {name} plugin.",
"Plugins.header.description": "Only actions bound by a route are listed below.",
"Plugins.header.title": "Permissions",
"Policies.InputSelect.empty": "None",
"Policies.InputSelect.label": "Allow to perform this action for:",
"Policies.header.hint": "Select the application's actions or the plugin's actions and click on the cog icon to display the bound route",
"Policies.header.title": "Advanced settings",
"PopUpForm.Email.email_templates.inputDescription": "If you're unsure how to use variables, {link}",
"PopUpForm.Email.link.documentation": "check out our documentation.",
"PopUpForm.Email.options.from.email.label": "Shipper email",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Shipper name",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Message",
"PopUpForm.Email.options.object.label": "Subject",
"PopUpForm.Email.options.response_email.label": "Response email",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Please click on this link to validate your account</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Please confirm your email address for %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Please click on this link to validate your account</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Please confirm your email address for %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Please click on this link to validate your account</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Please confirm your email address for %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "The redirect URL to add in your Discord application configurations",
"PopUpForm.Providers.enabled.description": "If disabled, users won't be able to use this provider.",
"PopUpForm.Providers.enabled.label": "Enable",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "The redirect URL to add in your Facebook application configurations",
"PopUpForm.Providers.github.providerConfig.redirectURL": "The redirect URL to add in your GitHub application configurations",
"PopUpForm.Providers.google.providerConfig.redirectURL": "The redirect URL to add in your Google application configurations",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "The redirect URL to add in your Instagram application configurations",
"PopUpForm.Providers.vk.providerConfig.redirectURL": "The redirect URL to add in your VK application configurations",
"PopUpForm.Providers.twitch.providerConfig.redirectURL": "The redirect URL to add in your Twitch application configurations",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "The redirect URL to add in your Linkedin application configurations",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "The redirect URL to add in your Microsoft application configurations",
"PopUpForm.Providers.redirectURL.front-end.label": "The redirect URL to your front-end app",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "The redirect URL to add in your Twitter application configurations",
"PopUpForm.button.cancel": "Cancel",
"PopUpForm.button.save": "Save",
"PopUpForm.header.add.providers": "Add New Provider",
"PopUpForm.header.edit.email-templates": "Edit Email Templates",
"PopUpForm.header.edit.providers": "Edit Provider",
"PopUpForm.inputSelect.providers.label": "Choose the provider",
"components.Input.error.password.length": "Password is too short",
"notification.error.delete": "An error occurred while trying to delete the item",
"notification.error.fetch": "An error occurred while trying to fetch data",
"notification.error.fetchUser": "An error occurred while trying to fetch users",
"notification.info.emailSent": "The email has been sent",
"notification.success.delete": "The item has been deleted",
"notification.success.submit": "Settings have been updated",
"plugin.description.long": "Protect your API with a full authentication process based on JWT. This plugin comes also with an ACL strategy that allows you to manage the permissions between the groups of users.",
"plugin.description.short": "Protect your API with a full authentication process based on JWT"
}

View File

@ -0,0 +1,109 @@
{
"BoundRoute.title": "Ruta enlazada a",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Seleccionar todo",
"EditForm.inputSelect.description.role": "Adjuntará el nuevo usuario autenticado al rol seleccionado.",
"EditForm.inputSelect.durations.description": "Número de horas durante las cuales el usuario no puede suscribirse.",
"EditForm.inputSelect.durations.label": "Duración",
"EditForm.inputSelect.label.role": "Rol predeterminado para usuarios autenticados",
"EditForm.inputSelect.subscriptions.description": "Limite el número de suscripciones de IP por hora.",
"EditForm.inputSelect.subscriptions.label": "Gestionar cuotas de suscripción",
"EditForm.inputToggle.description.email": "No permita que el usuario cree varias cuentas utilizando la misma dirección de correo electrónico con distintos proveedores de autenticación.",
"EditForm.inputToggle.description.email-confirmation": "Estando habilitado (ON), nuevos usuarios registrados reciben un correo de confirmación.",
"EditForm.inputToggle.description.email-confirmation-redirection": "After confirmed your email, chose where you will be redirected.",
"EditForm.inputToggle.description.sign-up": "Cuando está desactivado (OFF), el proceso de registro está prohibido. Nadie puede suscribirse sin importar el proveedor utilizado.",
"EditForm.inputToggle.label.email": "Una cuenta por dirección de correo electrónico",
"EditForm.inputToggle.label.email-confirmation": "Habilitar confirmación de correo",
"EditForm.inputToggle.label.email-confirmation-redirection": "URL de redirección",
"EditForm.inputToggle.label.sign-up": "Habilitar inscripciones",
"EditPage.cancel": "Cancelar",
"EditPage.form.roles": "Detalles del rol",
"EditPage.form.roles.label.description": "Descripción",
"EditPage.form.roles.label.name": "Nombre",
"EditPage.form.roles.label.users": "Usuarios asociados a este rol ({number})",
"EditPage.form.roles.name.error": "Este valor es obligatorio.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Crear un nuevo rol",
"EditPage.notification.permissions.error": "Se ha producido un error al obtener las autorizaciones",
"EditPage.notification.policies.error": "Se ha producido un error al recuperar las políticas",
"EditPage.notification.role.error": "Se ha producido un error al recuperar el rol",
"EditPage.submit": "Guardar",
"Email.template.email_confirmation": "Confirmación de dirección de correo",
"Email.template.reset_password": "Restablecer contraseña",
"Email.template.success_register": "Inscripción exitosa",
"HeaderNav.link.advancedSettings": "Ajustes avanzados",
"HeaderNav.link.emailTemplates": "Plantillas de email",
"HeaderNav.link.providers": "Proveedores",
"HeaderNav.link.roles": "Roles y Permisos",
"HomePage.header.description": "Defina los roles y permisos para sus usuarios.",
"HomePage.header.title": "Roles y Permisos",
"InputSearch.placeholder": "Buscar un usuario",
"List.button.providers": "Añadir nuevo proveedor",
"List.button.roles": "Añadir nuevo rol",
"List.title.emailTemplates.plural": "{number} plantillas de email disponibles",
"List.title.emailTemplates.singular": "{number} plantilla de email está disponible",
"List.title.providers.disabled.plural": "{number} están desactivados",
"List.title.providers.disabled.singular": "{number} está desactivado",
"List.title.providers.enabled.plural": "{number} proveedores están habilitados y",
"List.title.providers.enabled.singular": "{number} está habilitado y",
"List.title.roles.plural": "{number} roles disponibles",
"List.title.roles.singular": "{number} rol disponible",
"Plugin.permissions.application.description": "Defina todas las acciones permitidas de su proyecto.",
"Plugin.permissions.plugins.description": "Defina todas las acciones permitidas para el plugin {name}.",
"Plugins.header.description": "Sólo las acciones vinculadas a una ruta se enumeran a continuación.",
"Plugins.header.title": "Permisos",
"Policies.InputSelect.empty": "Ninguno",
"Policies.InputSelect.label": "Permita que se realice esta acción para:",
"Policies.header.hint": "Seleccione las acciones de la aplicación o las acciones del plugin y haga clic en el icono del engranaje para ver la ruta vinculada",
"Policies.header.title": "Ajustes avanzados",
"PopUpForm.Email.email_templates.inputDescription": "Si no estás seguro de cómo usar las variables, {link}",
"PopUpForm.Email.link.documentation": "consulte nuestra documentación.",
"PopUpForm.Email.options.from.email.label": "Email del remitente",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Nombre del remitente",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Mensaje",
"PopUpForm.Email.options.object.label": "Tema",
"PopUpForm.Email.options.response_email.label": "Email de respuesta",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Haga clic en este enlace para validar su cuenta</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Confirme su dirección de email para %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Haga clic en este enlace para validar su cuenta</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Confirme su dirección de email para %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Haga clic en este enlace para validar su cuenta</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Por favor, confirme su dirección de email para %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXTO",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "La URL de redirección para agregar a las configuraciones de su aplicación Discord",
"PopUpForm.Providers.enabled.description": "Si está desactivado, los usuarios no podrán utilizar este proveedor.",
"PopUpForm.Providers.enabled.label": "Habilitar",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "La URL de redirección que se debe agregar en la configuración de la aplicación Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "La URL de redirección que se debe agregar en la configuración de la aplicación GitHub",
"PopUpForm.Providers.google.providerConfig.redirectURL": "La URL de redirección que se debe agregar en la configuración de la aplicación Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "La URL de redirección que se debe agregar en la configuración de la aplicación Instagram",
"PopUpForm.Providers.key.label": "ID de cliente",
"PopUpForm.Providers.key.placeholder": "TEXTO",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "La URL de redirección que se debe agregar en la configuración de la aplicación Linkedin",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "La URL de redirección para agregar a las configuraciones de su aplicación Microsoft",
"PopUpForm.Providers.redirectURL.front-end.label": "La URL de redireccionamiento a su aplicación front-end",
"PopUpForm.Providers.secret.label": "Secreto Cliente",
"PopUpForm.Providers.secret.placeholder": "TEXTO",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "La URL de redirección que se debe agregar en la configuración de la aplicación Twitter",
"PopUpForm.button.cancel": "Cancelar",
"PopUpForm.button.save": "Guardar",
"PopUpForm.header.add.providers": "Añadir nuevo proveedor",
"PopUpForm.header.edit.email-templates": "Editar Plantillas de Email",
"PopUpForm.header.edit.providers": "Editar Proveedor",
"PopUpForm.inputSelect.providers.label": "Elija el proveedor",
"components.Input.error.password.length": "Contraseña muy corta",
"notification.error.delete": "Se ha producido un error al intentar borrar el elemento",
"notification.error.fetch": "Se ha producido un error al intentar recuperar los datos",
"notification.error.fetchUser": "Se ha producido un error al intentar buscar usuarios",
"notification.info.emailSent": "El email ha sido enviado",
"notification.success.delete": "El elemento ha sido borrado",
"notification.success.submit": "Los ajustes se han actualizado",
"plugin.description.long": "Proteja su API con un proceso de autenticación completo basado en JWT. Este plugin viene también con una estrategia ACL que le permite administrar los permisos entre los grupos de usuarios.",
"plugin.description.short": "Proteja su API con un proceso de autenticación completo basado en JWT"
}

View File

@ -0,0 +1,113 @@
{
"BoundRoute.title": "Route associée à",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Tout cocher",
"Controller.unselectAll": "Tout décocher",
"EditForm.inputSelect.description.role": "Choisissez le rôle qui sera lié aux utilisateurs lors de leur enregistrement.",
"EditForm.inputSelect.durations.description": "Nombre d'heure pendant lesquelles un utilisateur ne peut pas s'inscrire.",
"EditForm.inputSelect.durations.label": "Durée",
"EditForm.inputSelect.label.role": "Rôle par defaut pour les nouveaux utilisateurs",
"EditForm.inputSelect.subscriptions.description": "Limitez le nombre d'inscriptions par IP par heure.",
"EditForm.inputSelect.subscriptions.label": "Quotas d'inscriptions",
"EditForm.inputToggle.description.email": "Interdire l'utilisateur de créer de multiple comptes avec la même adresse e-mail avec des providers différents",
"EditForm.inputToggle.description.email-confirmation": "Quand cette option est activée (ON), les nouveaux utilisateurs enregistrés reçoivent un e-mail de confirmation.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Après confirmation de votre e-mail, choisissez où vous allez être redirigé.",
"EditForm.inputToggle.description.email-reset-password": "URL de la page de réinitialisation de mot de passe.",
"EditForm.inputToggle.description.sign-up": "Quand l'inscription est désactivée (OFF), aucun utilisateur ne peut s'inscrire qu'importe le provider",
"EditForm.inputToggle.label.email": "Un compte par adresse e-mail",
"EditForm.inputToggle.label.email-confirmation": "Activer l'e-mail de confirmation",
"EditForm.inputToggle.label.email-confirmation-redirection": "Redirection de l'URL",
"EditForm.inputToggle.label.email-reset-password": "Page de réinitialisation de mot de passe",
"EditForm.inputToggle.label.sign-up": "Activer l'inscription",
"EditPage.cancel": "Cancel",
"EditPage.form.roles": "Rôles détails",
"EditPage.form.roles.label.description": "Description",
"EditPage.form.roles.label.name": "Nom",
"EditPage.form.roles.label.users": "Utilisateurs associés avec ce rôle ({number})",
"EditPage.form.roles.name.error": "Ce champ est obligatoire.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Créez un nouveau rôle",
"EditPage.notification.permissions.error": "Une erreur est survenue en récupérant les permissions",
"EditPage.notification.policies.error": "Une erreur est survenue en récupérant les policies",
"EditPage.notification.role.error": "Une erreur est survenue en récupérant le rôle",
"EditPage.submit": "Sauvegarder",
"Email.template.email_confirmation": "Confirmation de l'adresse email",
"Email.template.reset_password": "Modification de mot de passe",
"Email.template.success_register": "Inscription réussie",
"Email.template.validation_email": "E-mail de validation d'adresse",
"HeaderNav.link.advancedSettings": "Paramètres avancés",
"HeaderNav.link.emailTemplates": "Templates d'e-mail",
"HeaderNav.link.providers": "Fournisseurs",
"HeaderNav.link.roles": "Rôles & Permissions",
"HomePage.header.description": "Définissez les rôles et permissions pour chacun d'eux",
"HomePage.header.title": "Roles & Permissions",
"InputSearch.placeholder": "Recherchez un utilisateur",
"List.button.providers": "Ajouter un Nouveau Provider",
"List.button.roles": "Ajouter un Nouveau Rôle",
"List.title.emailTemplates.plural": "{number} templates d'e-mail sont disponibles",
"List.title.emailTemplates.singular": "{number} template d'e-mail est disponible",
"List.title.providers.disabled.plural": "{number} indisponibles",
"List.title.providers.disabled.singular": "{number} indisponible",
"List.title.providers.enabled.plural": "{number} providers sont disponibles et",
"List.title.providers.enabled.singular": "{number} provider est disponible et",
"List.title.roles.plural": "{number} rôles sont disponibles",
"List.title.roles.singular": "{number} rôle est disponible",
"Plugin.permissions.application.description": "Définissez les actions autorisées dans votre projet.",
"Plugin.permissions.plugins.description": "Définissez les actions autorisées dans le {name} plugin.",
"Plugins.header.description": "Sont listés uniquement les actions associées à une route.",
"Plugins.header.title": "Permissions",
"Policies.InputSelect.empty": "Aucune",
"Policies.InputSelect.label": "Autorisez cette action pour :",
"Policies.header.hint": "Sélectionnez les actions de l'application ou d'un plugin et cliquer sur l'icon de paramètres pour voir les routes associées à cette action",
"Policies.header.title": "Paramètres avancés",
"PopUpForm.Email.email_templates.inputDescription": "Regardez la documentation des variables, {link}",
"PopUpForm.Email.link.documentation": "afin de templeter vos e-mails",
"PopUpForm.Email.options.from.email.label": "E-mail de l'envoyeur",
"PopUpForm.Email.options.from.email.placeholder": "arthurdupont@gmail.com",
"PopUpForm.Email.options.from.name.label": "Nom de l'envoyeur",
"PopUpForm.Email.options.from.name.placeholder": "Arthur Dupont",
"PopUpForm.Email.options.message.label": "Message",
"PopUpForm.Email.options.object.label": "Objet",
"PopUpForm.Email.options.response_email.label": "E-mail de réponse",
"PopUpForm.Email.options.response_email.placeholder": "arthurdupont@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Merci de cliquer sur ce lien pour valider votre compte</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Merci de confirmer votre adresse e-mail pour %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Merci de cliquer sur ce lien pour valider votre compte</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Merci de confirmer votre adresse e-mail pour %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Merci de cliquer sur ce lien pour valider votre compte</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Merci de confirmer votre adresse e-mail pour %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations Discord de votre application",
"PopUpForm.Providers.enabled.description": "S'il est désactivé les utilisateurs ne pourront pas utiliser ce provider.",
"PopUpForm.Providers.enabled.label": "Activer",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations Facebook de votre application",
"PopUpForm.Providers.github.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations GitHub de votre application",
"PopUpForm.Providers.google.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations Google de votre application",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations Instagram de votre application",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations Linkedin de votre application",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations Microsoft de votre application",
"PopUpForm.Providers.redirectURL.front-end.label": "L'URL de redirection de votre app front-end",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "L'URL de redirection à ajouter dans les configurations Twitter de votre application",
"PopUpForm.button.cancel": "Annuler",
"PopUpForm.button.save": "Sauvegarder",
"PopUpForm.header.add.providers": "Ajouter un Nouveau Provider",
"PopUpForm.header.edit.email-templates": "Editer E-mail Templates",
"PopUpForm.header.edit.providers": "Editer le Provider",
"PopUpForm.inputSelect.providers.label": "Sélectionnez le provider",
"components.Input.error.password.length": "Le mot de passe doit contenir au moins 6 caractères",
"notification.error.delete": "Une erreur est survenue en essayant de supprimer cet élément",
"notification.error.fetch": "Une erreur est survenue en essayant de récupérer les données",
"notification.error.fetchUser": "Une erreur est survenue en esssayent de récupérer les users",
"notification.info.emailSent": "L'e-mail a été envoyé",
"notification.success.delete": "L'élément a bien été supprimé",
"notification.success.submit": "Les configurations ont bien été sauvegardés",
"plugin.description.long": "Protégez votre API avec un système d'authentification complet basé sur JWT (JSON Web Token). Ce plugin ajoute aussi une stratégie ACL (Access Control Layer) qui vous permet de gérer les permissions entre les groupes d'utilisateurs.",
"plugin.description.short": "Protégez votre API avec un système d'authentification complet basé sur JWT"
}

View File

@ -0,0 +1,43 @@
import ar from './ar.json';
import cs from './cs.json';
import de from './de.json';
import en from './en.json';
import es from './es.json';
import fr from './fr.json';
import it from './it.json';
import ja from './ja.json';
import ko from './ko.json';
import nl from './nl.json';
import pl from './pl.json';
import ptBR from './pt-BR.json';
import pt from './pt.json';
import ru from './ru.json';
import tr from './tr.json';
import vi from './vi.json';
import zhHans from './zh-Hans.json';
import zh from './zh.json';
import sk from './sk.json';
const trads = {
ar,
cs,
de,
en,
es,
fr,
it,
ja,
ko,
nl,
pl,
'pt-BR': ptBR,
pt,
ru,
tr,
vi,
'zh-Hans': zhHans,
zh,
sk,
};
export default trads;

View File

@ -0,0 +1,102 @@
{
"BoundRoute.title": "Percorso vincolato a",
"Controller.input.label": "{label}",
"Controller.selectAll": "Seleziona tutto",
"EditForm.inputSelect.description.role": "Questa operazione associerà i nuovi utenti autenticati al ruolo selezionato.",
"EditForm.inputSelect.durations.description": "Numero di ore in cui l'utente non può registrarsi",
"EditForm.inputSelect.durations.label": "Durata",
"EditForm.inputSelect.label.role": "Ruolo di default per gli utenti autenticati",
"EditForm.inputSelect.subscriptions.description": "Limita il numero di sottoscrizioni per IP per ora.",
"EditForm.inputSelect.subscriptions.label": "Gestisci le sottoscrizioni di quota",
"EditForm.inputToggle.description.email": "Non consentire all'utente di creare account multipli usando lo stesso indirizzo email con fornitori di autenticazione diversi.",
"EditForm.inputToggle.description.sign-up": "Quando disabilitata (OFF), il processo di registrazione è proibito. Nessuno può iscriversi indipendentemente dal fornitore utilizzato.",
"EditForm.inputToggle.label.email": "Un account per indirizzo email",
"EditForm.inputToggle.label.sign-up": "Abilita iscrizioni",
"EditPage.cancel": "Cancella",
"EditPage.form.roles": "Dettagli del ruolo",
"EditPage.form.roles.label.description": "Descrizione",
"EditPage.form.roles.label.name": "Nome",
"EditPage.form.roles.label.users": "Utente associato con questo ruolo ({number})",
"EditPage.form.roles.name.error": "Questo valore è obbligatorio",
"EditPage.header.description": "{description}",
"EditPage.header.description.create": "Crea",
"EditPage.header.title": "{name}",
"EditPage.header.title.create": "Crea un nuovo ruolo",
"EditPage.notification.permissions.error": "Si è verificato un errore durante il recupero dei permessi",
"EditPage.notification.policies.error": "Si è verificato un errore durante il recupero delle policy",
"EditPage.notification.role.error": "Si è verificato un errore durante il recupero del ruolo",
"EditPage.submit": "Salva",
"Email.template.reset_password": "Reset password",
"Email.template.success_register": "Registrazione avvenuta",
"Email.template.validation_email": "Validazione dell'indirizzo Email",
"HeaderNav.link.emailTemplates": "Template delle Email",
"HeaderNav.link.providers": "Providers",
"HeaderNav.link.roles": "Ruoli e permessi",
"HomePage.header.description": "Definisci i ruoli e i permessi per i tuoi utenti.",
"HomePage.header.title": "Ruoli e permessi",
"InputSearch.placeholder": "Cerca un utente",
"List.button.providers": "Aggiungi un nuovo Provider",
"List.button.roles": "Aggiungi un ruolo",
"List.title.emailTemplates.plural": "{number} template per le email disponibili",
"List.title.emailTemplates.singular": "{number} template per le email disponibile",
"List.title.providers.disabled.plural": "{number} sono disabilitati",
"List.title.providers.disabled.singular": "{number} disabilitato",
"List.title.providers.enabled.plural": "{number} providers sono disponibili e",
"List.title.providers.enabled.singular": "{number} provider è abilitato e",
"List.title.roles.plural": "{number} ruoli disponibili",
"List.title.roles.singular": "{number} ruolo disponibile",
"Plugin.permissions.application.description": "Definire tutte le azioni consentite per il tuo progetto.",
"Plugin.permissions.plugins.description": "Definire tutte le azioni consentite per il plugin {name}.",
"Plugins.header.description": "Solo le azioni guidate da un percorso sono elencate sotto.",
"Plugins.header.title": "Permessi",
"Policies.InputSelect.empty": "Nessuno",
"Policies.InputSelect.label": "Consenti di eseguire questa azione per:",
"Policies.header.hint": "Seleziona le azioni dell'applicazione o del plugin e clicca sull'icona cog per mostrare il percorso corrispondente",
"Policies.header.title": "Impostazioni avanzate",
"PopUpForm.Email.email_templates.inputDescription": "Se non sai bene come usare le variabili, {link}",
"PopUpForm.Email.link.documentation": "controlla la documentazione",
"PopUpForm.Email.options.from.email.label": "Email del mittente",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Nome del mittente",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Messaggio",
"PopUpForm.Email.options.object.label": "Soggetto",
"PopUpForm.Email.options.response_email.label": "Email di risposta",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "Clicca su questo link per validare il tuo account",
"PopUpForm.Email.reset_password.options.object.placeholder": "Conferma gentilmente il tuo indirizzo email per %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "Clicca su questo link per validare il tuo account",
"PopUpForm.Email.success_register.options.object.placeholder": "Conferma gentilmente il tuo indirizzo email per %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "Clicca su questo link per validare il tuo account",
"PopUpForm.Email.validation_email.options.object.placeholder": "Conferma gentilmente il tuo indirizzo email per %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.enabled.description": "Se disabilitato, gli utenti non potranno usare questo provider.",
"PopUpForm.Providers.enabled.label": "Abilita",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Github",
"PopUpForm.Providers.google.providerConfig.redirectURL": "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Instagram",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Linkdin",
"PopUpForm.Providers.redirectURL.front-end.label": "L'URL di redirect per la tua app di front-end",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Twitter",
"PopUpForm.button.cancel": "Cancella",
"PopUpForm.button.save": "Salva",
"PopUpForm.header.add.providers": "Aggiungi nuovo Provider",
"PopUpForm.header.edit.email-templates": "Modifica il template delle Email",
"PopUpForm.header.edit.providers": "Modifica Provider",
"PopUpForm.inputSelect.providers.label": "Scegli il provider",
"eaderNav.link.advancedSettings": "Impostazioni avanzate",
"notification.error.delete": "Si è verificato un errore mentre si stava cercando di eliminare l'elemento",
"notification.error.fetch": "Si è verificato un errore mentre si stava cercando di recuperare i dati",
"notification.error.fetchUser": "Si è verificato un errore mentre si stava cercando di recuperare gli utenti",
"notification.info.emailSent": "Email inviata",
"notification.success.delete": "L'elemento è stato eliminato",
"notification.success.submit": "Impostazioni aggiornate",
"opUpForm.Providers.key.label": "Client ID",
"plugin.description.long": "Proteggi le tue API con un processo completo di autenticazione basato su JWT. Questo plugin è implementato con una strategia ACL che ti consente di gestire i permessi tra i gruppi di utenti.",
"plugin.description.short": "Proteggi le tue API con un processo completo di autenticazione basato su JWT"
}

View File

@ -0,0 +1,109 @@
{
"BoundRoute.title": "Bound route to",
"Controller.input.label": "{label} ",
"Controller.selectAll": "すべて選択",
"EditForm.inputSelect.description.role": "新しい認証されたユーザーが選択された役割にアタッチされます。",
"EditForm.inputSelect.durations.description": "ユーザーが購読できない時間数。",
"EditForm.inputSelect.durations.label": "期間",
"EditForm.inputSelect.label.role": "認証されたユーザーのデフォルトの役割",
"EditForm.inputSelect.subscriptions.description": "1時間あたりのIPあたりのサブスクリプション数を制限する。",
"EditForm.inputSelect.subscriptions.label": "サブスクリプションクォータの管理",
"EditForm.inputToggle.description.email": "ユーザーが異なる認証プロバイダで同じ電子メールアドレスを使用して複数のアカウントを作成できないようにします。",
"EditForm.inputToggle.description.email-confirmation": "有効ONにすると、新しい登録ユーザーに確認メールが送信されます。",
"EditForm.inputToggle.description.email-confirmation-redirection": "あなたのEメールを確認したら、リダイレクト先を選択してください。",
"EditForm.inputToggle.description.sign-up": "あなたの電子メールを確認した後、リダイレクト先を選択しました。",
"EditForm.inputToggle.label.email": "メールアドレスごとに1つのアカウント",
"EditForm.inputToggle.label.email-confirmation": "Eメールの確認を有効にする",
"EditForm.inputToggle.label.email-confirmation-redirection": "リダイレクトURL",
"EditForm.inputToggle.label.sign-up": "申し込みを有効にする",
"EditPage.cancel": "キャンセル",
"EditPage.form.roles": "ロールの詳細",
"EditPage.form.roles.label.description": "説明文",
"EditPage.form.roles.label.name": "名前",
"EditPage.form.roles.label.users": "このロールに関連付けられたユーザー({number}",
"EditPage.form.roles.name.error": "この値は必須です。",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "新しいロールを追加する",
"EditPage.notification.permissions.error": "権限を取得中にエラーが発生しました",
"EditPage.notification.policies.error": "ポリシーの取得中にエラーが発生しました",
"EditPage.notification.role.error": "ロールを取得中にエラーが発生しました",
"EditPage.submit": "保存",
"Email.template.email_confirmation": "メールアドレス確認",
"Email.template.reset_password": "パスワードをリセット",
"Email.template.success_register": "登録に成功",
"HeaderNav.link.advancedSettings": "高度な設定",
"HeaderNav.link.emailTemplates": "メールテンプレート",
"HeaderNav.link.providers": "プロバイダー",
"HeaderNav.link.roles": "ロールと権限",
"HomePage.header.description": "ユーザーのロールと権限を定義します。",
"HomePage.header.title": "ロールと権限",
"InputSearch.placeholder": "ユーザーを検索する",
"List.button.providers": "プロバイダーを追加する",
"List.button.roles": "ロールを追加する",
"List.title.emailTemplates.plural": "{number} 個のメールテンプレートが利用可能です",
"List.title.emailTemplates.singular": "{number} 個のメールテンプレートが利用可能です",
"List.title.providers.disabled.plural": "{number} 個が無効です",
"List.title.providers.disabled.singular": "{number} 個が無効です",
"List.title.providers.enabled.plural": "{number} 個のプロバイダーが有効になっている、",
"List.title.providers.enabled.singular": "{number} 個のプロバイダーが有効になっている、",
"List.title.roles.plural": "{number} 個のロールは利用可能です",
"List.title.roles.singular": "{number} 個のロールは利用可能です",
"Plugin.permissions.application.description": "プロジェクトで許可されているすべてのアクションを定義します",
"Plugin.permissions.plugins.description": "{name} 個のプラグインに対して許可されたすべてのアクションを定義する",
"Plugins.header.description": "ルートにバインドされたアクションのみが以下にリストされています",
"Plugins.header.title": "権限",
"Policies.InputSelect.empty": "None",
"Policies.InputSelect.label": "次の場合にこの操作を実行できるようにします:",
"Policies.header.hint": "アプリケーションのアクションまたはプラグインのアクションを選択し、コグアイコンをクリックしてバインドされたルートを表示します",
"Policies.header.title": "高度な設定",
"PopUpForm.Email.email_templates.inputDescription": "変数の使用方法がわからない場合は、{link}",
"PopUpForm.Email.link.documentation": "私たちのドキュメントをチェックしてください。",
"PopUpForm.Email.options.from.email.label": "送信者Eメール",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "送信者名",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "メッセージ",
"PopUpForm.Email.options.object.label": "件名",
"PopUpForm.Email.options.response_email.label": "応答メール",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>このリンクをクリックしてアカウントを確認してください</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "あなたのメールアドレスを確認してください %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>このリンクをクリックしてアカウントを確認してください</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "あなたのメールアドレスを確認してください %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>このリンクをクリックしてアカウントを確認してください</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "あなたのメールアドレスを確認してください %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Discordアプリケーションの設定で追加するリダイレクトURL",
"PopUpForm.Providers.enabled.description": "無効にすると、ユーザーはこのプロバイダを使用できなくなります。",
"PopUpForm.Providers.enabled.label": "有効にする",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Facebookアプリケーション設定で追加するリダイレクトURL",
"PopUpForm.Providers.github.providerConfig.redirectURL": "GitHubアプリケーションの設定で追加するリダイレクトURL",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Googleアプリケーション設定で追加するリダイレクトURL",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Instagramアプリケーション設定で追加するリダイレクトURL",
"PopUpForm.Providers.key.label": "クライアントID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "あなたのLinkedinアプリケーション構成に追加するリダイレクトURL",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "Microsoftアプリケーション構成で追加するリダイレクトURL",
"PopUpForm.Providers.redirectURL.front-end.label": "フロントエンドアプリへのリダイレクトURL",
"PopUpForm.Providers.secret.label": "クライアントの秘密",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Twitterアプリケーション設定で追加するリダイレクトURL",
"PopUpForm.button.cancel": "キャンセル",
"PopUpForm.button.save": "保存",
"PopUpForm.header.add.providers": "プロバイダーを追加",
"PopUpForm.header.edit.email-templates": "メールテンプレートの編集",
"PopUpForm.header.edit.providers": "プロバイダを編集",
"PopUpForm.inputSelect.providers.label": "プロバイダの選択",
"components.Input.error.password.length": "パスワードが一致しません",
"notification.error.delete": "アイテムの削除中にエラーが発生しました",
"notification.error.fetch": "データの取得中にエラーが発生しました",
"notification.error.fetchUser": "ユーザーの取得中にエラーが発生しました",
"notification.info.emailSent": "メールが送信されました",
"notification.success.delete": "アイテムが削除されました",
"notification.success.submit": "設定が更新されました",
"plugin.description.long": "JWTに基づいた完全な認証プロセスでAPIを保護します。このプラグインには、ユーザーのグループ間で権限を管理できるACL戦略もあります。",
"plugin.description.short": "JWTに基づく完全な認証プロセスでAPIを保護する"
}

View File

@ -0,0 +1,112 @@
{
"BoundRoute.title": "라우트(bound route)",
"Controller.input.label": "{label} ",
"Controller.selectAll": "전체 선택",
"Controller.unselectAll": "전체 선택 해제",
"EditForm.inputSelect.description.role": "인증된 사용자에 선택한 역할(role)을 부여합니다.",
"EditForm.inputSelect.durations.description": "사용자가 사용할 수 없는 시간을 설정합니다.",
"EditForm.inputSelect.durations.label": "기간(duration)",
"EditForm.inputSelect.label.role": "인증된 사용자의 기본 역할(role)",
"EditForm.inputSelect.subscriptions.description": "동일 IP에서 시간당 사용할 수 있는 횟수를 제한합니다.",
"EditForm.inputSelect.subscriptions.label": "사용량 관리",
"EditForm.inputToggle.description.email": "사용자가 동일한 이메일 주소를 사용해 여러 계정을 만들지 못하게 합니다.",
"EditForm.inputToggle.description.email-confirmation": "(ON)이 활성화되면, 새로 가입하는 사용자는 인증 메일을 받게됩니다.",
"EditForm.inputToggle.description.email-confirmation-redirection": "이메일 인증완료 후 리다이렉트 될 주소",
"EditForm.inputToggle.description.email-reset-password": "애플리케이션의 비밀번호 재설정 URL 페이지",
"EditForm.inputToggle.description.sign-up": "비활성(OFF)일 경우, 등록 프로세스를 금지합니다. 사용하는 프로바이더(provider)에 관계 없이 누구도 가입할 수 없습니다.",
"EditForm.inputToggle.label.email": "이메일 주소 당 하나의 계정",
"EditForm.inputToggle.label.email-confirmation": "이메일 인증 활성화",
"EditForm.inputToggle.label.email-confirmation-redirection": "리다이렉션 url",
"EditForm.inputToggle.label.email-reset-password": "패스워드 재설정 페이지",
"EditForm.inputToggle.label.sign-up": "사용자 등록",
"EditPage.cancel": "취소",
"EditPage.form.roles": "역할(role) 세부설정",
"EditPage.form.roles.label.description": "설명",
"EditPage.form.roles.label.name": "이름",
"EditPage.form.roles.label.users": "이 역할(role)에 속한 사용자 ({number})",
"EditPage.form.roles.name.error": "내용을 입력해 주세요.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "새로운 역할(role) 생성",
"EditPage.notification.permissions.error": "권한(permissions)을 가져오는데 에러가 발생했습니다.",
"EditPage.notification.policies.error": "정책(policies)를 가져오는데 에러가 발생했습니다.",
"EditPage.notification.role.error": "역할(role)을 가져오는데 에러가 발생했습니다.",
"EditPage.submit": "저장",
"Email.template.email_confirmation": "이메일 주소 인증",
"Email.template.reset_password": "패스워드 재설정",
"Email.template.success_register": "등록했습니다.",
"HeaderNav.link.advancedSettings": "고급 설정",
"HeaderNav.link.emailTemplates": "이메일 템플릿",
"HeaderNav.link.providers": "프로바이더(Providers)",
"HeaderNav.link.roles": "역할(Roles) & 권한(Permissions)",
"HomePage.header.description": "사용자의 역할(roles)과 권한(permissions)을 설정하고 관리합니다.",
"HomePage.header.title": "역할(roles) & 권한(permissions)",
"InputSearch.placeholder": "사용자 검색",
"List.button.providers": "새 프로바이더(provider) 추가",
"List.button.roles": "새 역할(role) 추가",
"List.title.emailTemplates.plural": "{number}개의 이메일 템플릿이 있습니다.",
"List.title.emailTemplates.singular": "{number}개의 이메일 템플릿이 있습니다.",
"List.title.providers.disabled.plural": "{number}개 사용 불가능",
"List.title.providers.disabled.singular": "{number}개 사용 불가능",
"List.title.providers.enabled.plural": "{number}개 사용 가능, ",
"List.title.providers.enabled.singular": "{number}개 사용 가능, ",
"List.title.roles.plural": "{number}개의 역할(role)이 있습니다.",
"List.title.roles.singular": "{number}개의 역할(role)이 있습니다.",
"Plugin.permissions.application.description": "프로젝트에서 허용할 액션을 설정합니다.",
"Plugin.permissions.plugins.description": "{name} 플러그인에서 허용할 액션을 설정합니다.",
"Plugins.header.description": "라우트(route)에 연결된 액션만 표시됩니다.",
"Plugins.header.title": "권한(Permissions)",
"Policies.InputSelect.empty": "비어있음",
"Policies.InputSelect.label": "다음에 대해 이 액션을 허용합니다.",
"Policies.header.hint": "애플리케이션 또는 플러그인을 선택하고 항목을 클릭하면 바인딩 된 경로를 표시할 수 있습니다.",
"Policies.header.title": "고급 설정",
"PopUpForm.Email.email_templates.inputDescription": "이메일 템플릿 문법은 이 {link}를 확인하세요.",
"PopUpForm.Email.link.documentation": "문서",
"PopUpForm.Email.options.from.email.label": "보내는 이메일",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "보내는 사람",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "내용",
"PopUpForm.Email.options.object.label": "제목",
"PopUpForm.Email.options.response_email.label": "응답받을 이메일",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>이 링크를 클릭하고 계정을 확인하세요.</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "%APP_NAME%의 이메일 주소를 확인하세요.",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>이 링크를 클릭하고 계정을 확인하세요.</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "%APP_NAME%의 이메일 주소를 확인하세요.",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>이 링크를 클릭하고 계정을 확인하세요.</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "%APP_NAME%의 이메일 주소를 확인하세요.",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Discord 애플리케이션 구성에 추가 할 리다이렉트 URL",
"PopUpForm.Providers.enabled.description": "사용하지 않을 경우 이 프로바이더(provider) 기능을 이용할 수 없습니다.",
"PopUpForm.Providers.enabled.label": "사용",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Facebook 애플리케이션 구성에 추가 할 리다이렉트 URL",
"PopUpForm.Providers.github.providerConfig.redirectURL": "Github 애플리케이션 구성에 추가 할 리다이렉트 URL",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Google 애플리케이션 구성에 추가 할 리다이렉트 URL",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Instagram 애플리케이션 구성에 추가 할 리다이렉트 URL",
"PopUpForm.Providers.key.label": "클라이언트 ID(Client ID)",
"PopUpForm.Providers.key.placeholder": "텍스트",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "Linkedin",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "Microsoft 애플리케이션 구성에 추가 할 리다이렉트 URL",
"PopUpForm.Providers.redirectURL.front-end.label": "프론트엔드 애플리케이션 리다이렉트 URL",
"PopUpForm.Providers.secret.label": "클라이언트 시크릿(Client Secret)",
"PopUpForm.Providers.secret.placeholder": "텍스트",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Twitter",
"PopUpForm.button.cancel": "취소",
"PopUpForm.button.save": "저장",
"PopUpForm.header.add.providers": "새 프로바이더(provider) 추가",
"PopUpForm.header.edit.email-templates": "이메일 템플릿 수정",
"PopUpForm.header.edit.providers": "프로바이더(Provider) 설정",
"PopUpForm.inputSelect.providers.label": "프로바이더(provider) 선택",
"components.Input.error.password.length": "패스워드가 너무 짧습니다.",
"notification.error.delete": "항목을 삭제하는데 에러가 발생했습니다.",
"notification.error.fetch": "데이터를 가져오는데 에러가 발생했습니다.",
"notification.error.fetchUser": "사용자를 가져오는데 에러가 발생했습니다.",
"notification.info.emailSent": "이메일을 보냈습니다.",
"notification.success.delete": "항목을 삭제했습니다.",
"notification.success.submit": "설정을 업데이트했습니다.",
"plugin.description.long": "JWT 기반의 인증 프로세스로 API를 보호하세요. 이 플러그인에서 사용자 그룹간 권한을 관리할 수 있는 ACL 전략도 설정할 수 있습니다.",
"plugin.description.short": "JWT 기반의 인증 프로세스로 API를 보호하세요."
}

View File

@ -0,0 +1,110 @@
{
"BoundRoute.title": "Gebonden route naar",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Alles selecteren",
"EditForm.inputSelect.description.role": "Het zal de nieuwe geautoriseerde gebruiker aan de geselecteerde rol verbinden.",
"EditForm.inputSelect.durations.description": "Aantal uur welke de gebruiker niet kan abonneren.",
"EditForm.inputSelect.durations.label": "Tijdsduur",
"EditForm.inputSelect.label.role": "Standaard rol voor geautoriseerde gebruikers",
"EditForm.inputSelect.subscriptions.description": "Stel een limiet in voor het aantal abonnementen per IP per uur",
"EditForm.inputSelect.subscriptions.label": "Beheer abonnementen quotas",
"EditForm.inputToggle.description.email": "Zorg ervoor dat de gebruiker niet meerdere accounts kan maken met hetzelfde e-mailadres maar met verschillende leveranciers.",
"EditForm.inputToggle.description.email-confirmation": "Wanneer ingeschakeld (ON), ontvangen nieuw geregistreerde gebruikers een bevestigingsmail.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Na het bevestigen van je e-mail, kies naar waar je doorgestuurd zal worden.",
"EditForm.inputToggle.description.sign-up": "Wanneer uitgeschakeld (OFF), is registratie verboden. Niemand kan abonneren ongeacht de leverancier",
"EditForm.inputToggle.label.email": "Één account per e-mailadres.",
"EditForm.inputToggle.label.email-confirmation": "Schakel emailbevestiging in",
"EditForm.inputToggle.label.email-confirmation-redirection": "Doorstuur URL",
"EditForm.inputToggle.label.sign-up": "Registratie inschakelen",
"EditPage.cancel": "Annuleren",
"EditPage.form.roles": "Rol details",
"EditPage.form.roles.label.description": "Beschrijving",
"EditPage.form.roles.label.name": "Naam",
"EditPage.form.roles.label.users": "Gebruikers geassocieerd met deze rol ({number})",
"EditPage.form.roles.name.error": "Deze waarde is verplicht.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Nieuwe rol aanmaken",
"EditPage.notification.permissions.error": "Er is een fout opgetreden tijdens het ophalen van de permissies",
"EditPage.notification.policies.error": "Er is een fout opgetreden tijdens het ophalen van het beleid",
"EditPage.notification.role.error": "Er is een fout opgetreden tijdens het ophalen van de rol",
"EditPage.submit": "Opslaan",
"Email.template.email_confirmation": "E-mailadres bevestiging",
"Email.template.reset_password": "Wachtwoord herstellen",
"Email.template.success_register": "Registratie gelukt",
"Email.template.validation_email": "E-mailadres validatie",
"HeaderNav.link.advancedSettings": "Geavanceerde instellingen",
"HeaderNav.link.emailTemplates": "E-mail sjabloon",
"HeaderNav.link.providers": "Leveranciers",
"HeaderNav.link.roles": "Rollen & Permissies",
"HomePage.header.description": "Geef de rollen en permissies aan voor je gebruikers.",
"HomePage.header.title": "Rollen & Permissies",
"InputSearch.placeholder": "Zoek naar een gebruiker",
"List.button.providers": "Nieuwe leverancier toevoegen",
"List.button.roles": "Nieuwe rol toevoegen",
"List.title.emailTemplates.plural": "{number} e-mail sjablonen beschikbaar",
"List.title.emailTemplates.singular": "{number} e-mail sjabloon beschikbaar",
"List.title.providers.disabled.plural": "{number} zijn uitgeschakeld",
"List.title.providers.disabled.singular": "{number} is uitgeschakeld",
"List.title.providers.enabled.plural": "{number} leveranciers zijn ingeschakeld en",
"List.title.providers.enabled.singular": "{number} leverancier is ingeschakeld en",
"List.title.roles.plural": "{number} rollen zijn beschikbaar",
"List.title.roles.singular": "{number} rol is beschikbaar",
"Plugin.permissions.application.description": "Voer alle toegestane acties van je project in.",
"Plugin.permissions.plugins.description": "Voer alle toegestane acties in voor extensie {name}.",
"Plugins.header.description": "Alleen acties gekoppeld aan een route worden hieronder weergegeven.",
"Plugins.header.title": "Permissies",
"Policies.InputSelect.empty": "Geen",
"Policies.InputSelect.label": "Deze actie toestaan voor:",
"Policies.header.hint": "Selecteer de actie van de applicatie of de acties van de extensie en klik op het tandwiel icoontje om de gekoppelde route weer te geven",
"Policies.header.title": "Geavanceerde instellingen",
"PopUpForm.Email.email_templates.inputDescription": "Als je niet zeker weet hoe je variabelen moet gebruiken, {link}",
"PopUpForm.Email.link.documentation": "bekijk onze documentatie.",
"PopUpForm.Email.options.from.email.label": "Afzender e-mail",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Afzender naam",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Bericht",
"PopUpForm.Email.options.object.label": "Onderwerp",
"PopUpForm.Email.options.response_email.label": "Antwoord e-mail",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Klik op deze link om je account te valideren</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Bevestig a.u.b. het e-mailadres voor %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Klik op deze link om je account te valideren</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Bevestig a.u.b. het e-mailadres voor %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Klik op deze link om je account te valideren</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Bevestig a.u.b. het e-mailadres voor %APP_NAME%",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "De doorstuur URL om in je Discord applicatie configuratie te zetten",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.enabled.description": "Als deze uitgeschakeld is kunnen gebruikers geen gebruik maken van deze leverancier.",
"PopUpForm.Providers.enabled.label": "Inschakelen",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "De doorstuur URL om in je Facebook applicatie configuratie te zetten",
"PopUpForm.Providers.github.providerConfig.redirectURL": "De doorstuur URL om in je GitHub applicatie configuratie te zetten",
"PopUpForm.Providers.google.providerConfig.redirectURL": "De doorstuur URL om in je Google applicatie configuratie te zetten",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "De doorstuur URL om in je Instagram applicatie configuratie te zetten",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "De doorstuur URL om in je Microsoft applicatie configuratie te zetten",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "De doorstuur URL om in je LinkedIn applicatie configuratie te zetten",
"PopUpForm.Providers.redirectURL.front-end.label": "De doorstuur URL voor jouw front-end app",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "De doorstuur URL om in je Twitter applicatie configuratie te zetten",
"PopUpForm.button.cancel": "Annuleren",
"PopUpForm.button.save": "Opslaan",
"PopUpForm.header.add.providers": "Nieuwe leverancier toevoegen",
"PopUpForm.header.edit.email-templates": "E-mail sjablonen aanpassen",
"PopUpForm.header.edit.providers": "Leverancier aanpassen",
"PopUpForm.inputSelect.providers.label": "Kies een leverancier",
"components.Input.error.password.length": "Wachtwoord is te kort",
"notification.error.delete": "Er is een fout opgetreden tijdens het verwijderen van dit item",
"notification.error.fetch": "Er is een fout opgetreden tijdens het ophalen van de data",
"notification.error.fetchUser": "Er is een fout opgetreden tijdens het ophalen van de gebruikers",
"notification.info.emailSent": "De e-mail is verstuurd",
"notification.success.delete": "Het item is verwijderd",
"notification.success.submit": "Instellingen zijn geüpdatet",
"plugin.description.long": "Beveilig je API met een volledig authenticatie proces op JWT. Deze extensie komt ook met een ACL strategie welke ervoor zorgt dat je de permissies tussen groepen van gebruikers kan beheren.",
"plugin.description.short": "Beveilig je API met een volledig authenticatie proces op JWT"
}

View File

@ -0,0 +1,114 @@
{
"BoundRoute.title": "Wywoływanie",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Zaznacz wszystko",
"Controller.unselectAll": "Odznacz wszystko",
"EditForm.inputSelect.description.role": "Połączy nowego uwierzytelnionego użytkownika z wybraną rolą.",
"EditForm.inputSelect.durations.description": "Liczba godzin podczas których użytkownik nie może dołączyć.",
"EditForm.inputSelect.durations.label": "Okres",
"EditForm.inputSelect.label.role": "Domyślna rola dla uwierzytelnionych użytkowników",
"EditForm.inputSelect.subscriptions.description": "Ogranicz liczbę rejestracji z tego samego IP na godzinę.",
"EditForm.inputSelect.subscriptions.label": "Rejestracje",
"EditForm.inputToggle.description.email": "Nie zezwalaj użytkownikowi na tworzenie wielu kont za pomocą tego samego adresu e-mail u różnych dostawców uwierzytelniania.",
"EditForm.inputToggle.description.email-confirmation": "Gdy włączone (ON), nowo zarejestrowani uzytkownicy otrzymają wiadomość potwierdzającą.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Po potwierdzeniu adresu email, wybierz gdzie zostaniesz przekierowany.",
"EditForm.inputToggle.description.sign-up": "Po wyłączeniu (OFF) proces rejestracji jest zabroniony. Nikt nie może już dołączyć bez względu na używanego dostawcę.",
"EditForm.inputToggle.label.email": "Jedno konto na adres email",
"EditForm.inputToggle.description.email-reset-password": "Adres URL strony resetowania hasła aplikacji",
"EditForm.inputToggle.label.email-confirmation": "Zezwól na potwierdzenie adresu email",
"EditForm.inputToggle.label.email-confirmation-redirection": "url przekierowania",
"EditForm.inputToggle.label.sign-up": "Rejestracja",
"EditForm.inputToggle.label.email-reset-password": "Straona resetowania hasła",
"EditPage.cancel": "Anuluj",
"EditPage.form.roles": "Szczegóły",
"EditPage.form.roles.label.description": "Opis",
"EditPage.form.roles.label.name": "Nazwa",
"EditPage.form.roles.label.users": "Użytkownicy powiązani z tą rolą ({number})",
"EditPage.form.roles.name.error": "Wpisanie wartości dla tego atrybutu jest wymagane.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Rola",
"EditPage.notification.permissions.error": "Wystąpił błąd podczas pobierania uprawnień",
"EditPage.notification.policies.error": "Wystąpił błąd podczas pobierania polityk",
"EditPage.notification.role.error": "Wystąpił błąd podczas pobierania ról",
"EditPage.submit": "Zapisz",
"Email.template.email_confirmation": "Potwierdzenie adresu email",
"Email.template.reset_password": "Reset hasła",
"Email.template.success_register": "Pomyślna rejestracja",
"Email.template.validation_email": "Sprawdzanie adresu e-mail",
"HeaderNav.link.advancedSettings": "Zaawansowane",
"HeaderNav.link.emailTemplates": "Szablony e-mail",
"HeaderNav.link.providers": "Dostawcy",
"HeaderNav.link.roles": "Role",
"HomePage.header.description": "Określ role i uprawnienia dla każdego z użytkowników.",
"HomePage.header.title": "Użytkownicy & Uprawnienia",
"InputSearch.placeholder": "Wyszukaj",
"List.button.providers": "Dostawca",
"List.button.roles": "Rola",
"List.title.emailTemplates.plural": "{number} szablonów e-mail jest dostępnych",
"List.title.emailTemplates.singular": "{number} szablon e-mail jest dostępny",
"List.title.providers.disabled.plural": "{number} jest wyłączonych",
"List.title.providers.disabled.singular": "{number} jest wyłączony",
"List.title.providers.enabled.plural": "{number} dostawców jest włączonych i",
"List.title.providers.enabled.singular": "{number} dostawca jest włączony i",
"List.title.roles.plural": "{number} ról jest dostępnych",
"List.title.roles.singular": "{number} rola jest dostępna",
"Plugin.permissions.application.description": "Określ dozwolone działania w projekcie.",
"Plugin.permissions.plugins.description": "Określ dozwolone działania w wtyczce {name}.",
"Plugins.header.description": "Jedynie akcje związane z wywoływaniami wymienionymi poniżej.",
"Plugins.header.title": "Uprawnienia",
"Policies.InputSelect.empty": "Nikogo",
"Policies.InputSelect.label": "Zezwól na wykonanie tej akcji dla:",
"Policies.header.hint": "Wybierz działania aplikacji lub działania wtyczki i kliknij ikonę koła zębatego, aby wyświetlić wywoływania",
"Policies.header.title": "Zaawansowane",
"PopUpForm.Email.email_templates.inputDescription": "Nie wiesz jak skonfigurować zmienne? {link}",
"PopUpForm.Email.link.documentation": "Zajrzyj do dokumentacji.",
"PopUpForm.Email.options.from.email.label": "Email nadawcy",
"PopUpForm.Email.options.from.email.placeholder": "jannowak@gmail.com",
"PopUpForm.Email.options.from.name.label": "Nazwa nadawcy",
"PopUpForm.Email.options.from.name.placeholder": "Jan Nowak",
"PopUpForm.Email.options.message.label": "Wiadomość",
"PopUpForm.Email.options.object.label": "Temat",
"PopUpForm.Email.options.response_email.label": "Email zwrotny",
"PopUpForm.Email.options.response_email.placeholder": "jannowak@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Kliknij ten link, aby potwierdzić swoje konto</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Potwierdź swój adres e-mail dla %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Kliknij ten link, aby potwierdzić swoje konto</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Potwierdź swój adres e-mail dla %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Kliknij ten link, aby potwierdzić swoje konto</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Potwierdź swój adres email dla %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEKST",
"PopUpForm.Providers.enabled.description": "W przypadku wyłączenia, użytkownicy nie będą mogli skorzystać z tego dostawcy.",
"PopUpForm.Providers.enabled.label": "Włączony",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji GitHub",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji Instagram",
"PopUpForm.Providers.key.label": "ID klienta",
"PopUpForm.Providers.key.placeholder": "TEKST",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji Discord",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji Linkedin",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji Microsoft",
"PopUpForm.Providers.redirectURL.front-end.label": "Adres przekierowania do własnej aplikacji",
"PopUpForm.Providers.secret.label": "Klucz sekretny klienta",
"PopUpForm.Providers.secret.placeholder": "TEKST",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Adres przekierowania do dodania w aplikacji Twitter",
"PopUpForm.button.cancel": "Anuluj",
"PopUpForm.button.save": "Zapisz",
"PopUpForm.header.add.providers": "Dostawca",
"PopUpForm.header.edit.email-templates": "Zmień szablony e-mail",
"PopUpForm.header.edit.providers": "Edytuj dostawcę",
"PopUpForm.inputSelect.providers.label": "Dostawca",
"components.Input.error.password.length": "Hasło jest za krótkie",
"notification.error.delete": "Wystąpił błąd podczas usuwania pozycji",
"notification.error.fetch": "Wystąpił błąd podczas pobierania danych",
"notification.error.fetchUser": "Wystąpił błąd podczas pobierania użytkowników",
"notification.info.emailSent": "E-mail został wysłany",
"notification.success.delete": "Pozycja została usunięta",
"notification.success.submit": "Ustawienia zostały zaktualizowane",
"plugin.description.long": "Chroń API za pomocą procesu pełnego uwierzytelniania opartego na JWT. Ta wtyczka zawiera również strategię ACL, która pozwala zarządzać uprawnieniami między grupami użytkowników.",
"plugin.description.short": "Chroń API za pomocą procesu pełnego uwierzytelniania opartego na JWT",
"PopUpForm.Providers.vk.providerConfig.redirectURL": "Adres URL przekierowania do dodania w konfiguracji aplikacji VK"
}

View File

@ -0,0 +1,102 @@
{
"BoundRoute.title": "Rota definida para",
"Controller.input.label": "{label}",
"Controller.selectAll": "Selecionar tudo",
"EditForm.inputSelect.description.role": "Ele anexará o novo usuário autenticado ao nível selecionado.",
"EditForm.inputSelect.durations.description": "Número de horas durante as quais o usuário não pode se registrar.",
"EditForm.inputSelect.durations.label": "Duração",
"EditForm.inputSelect.label.role": "Nível padrão para usuários autenticados",
"EditForm.inputSelect.subscriptions.description": "Limitar o número de assinaturas por IP por hora",
"EditForm.inputSelect.subscriptions.label": "Gerenciar cotas de assinatura",
"EditForm.inputToggle.description.email": "Não permitir que o usuário crie várias contas usando o mesmo endereço de e-mail com diferentes provedores de autenticação.",
"EditForm.inputToggle.description.sign-up": "Quando desativado (OFF), o processo de registro é proibido. Nenhum novo usuário poderá se registrar, não importa o provedor usado.",
"EditForm.inputToggle.label.email": "Limitar 1 conta por endereço de email",
"EditForm.inputToggle.label.sign-up": "Ativar registro de usuários",
"EditPage.cancel": "Cancelar",
"EditPage.form.roles": "Detalhes do nível",
"EditPage.form.roles.label.description": "Descrição",
"EditPage.form.roles.label.name": "Nome",
"EditPage.form.roles.label.users": "Usuários associados a este nível ({number})",
"EditPage.form.roles.name.error": "Este valor é obrigatório.",
"EditPage.header.description": "{description}",
"EditPage.header.description.create": "",
"EditPage.header.title": "{name}",
"EditPage.header.title.create": "Criar um novo nível",
"EditPage.notification.permissions.error": "Ocorreu um erro ao buscar permissões",
"EditPage.notification.policies.error": "Ocorreu um erro ao buscar políticas",
"EditPage.notification.role.error": "Ocorreu um erro ao buscar o nível",
"EditPage.submit": "Salvar",
"Email.template.reset_password": "Redefinir senha",
"Email.template.success_register": "Registo bem sucedido",
"Email.template.validation_email": "Validação de endereço de email",
"HeaderNav.link.advancedSettings": "Configurações avançadas",
"HeaderNav.link.emailTemplates": "Modelos de email",
"HeaderNav.link.providers": "Provedores",
"HeaderNav.link.roles": "Níveis & Permissões",
"HomePage.header.description": "Defina os níveis e permissões para seus usuários",
"HomePage.header.title": "Níveis & Permissões",
"InputSearch.placeholder": "Buscar usuário",
"List.button.providers": "Adicionar novo provedor",
"List.button.roles": "Adicionar novo nível",
"List.title.emailTemplates.plural": "{number} modelos de e-mail estão disponíveis",
"List.title.emailTemplates.singular": "{number} modelo de e-mail está disponível",
"List.title.providers.disabled.plural": "{number} estão desativados",
"List.title.providers.disabled.singular": "{number} está desativado",
"List.title.providers.enabled.plural": "os provedores {number} estão habilitados e",
"List.title.providers.enabled.singular": "{number} provedor está ativado e",
"List.title.roles.plural": "{number} níveis estão disponíveis",
"List.title.roles.singular": "o nível {number} está disponível",
"Plugin.permissions.application.description": "Defina todas as ações permitidas do seu projeto.",
"Plugin.permissions.plugins.description": "Defina todas as ações permitidas para o plugin {name}.",
"Plugins.header.description": "Somente ações vinculadas por uma rota estão listadas abaixo.",
"Plugins.header.title": "Permissões",
"Policies.InputSelect.empty": "None",
"Policies.InputSelect.label": "Permitir para executar esta ação para:",
"Policies.header.hint": "Selecione as ações do aplicativo ou as ações do plugin e clique no ícone do cog para exibir a rota",
"Policies.header.title": "Configurações avançadas",
"PopUpForm.Email.email_templates.inputDescription": "Se não tiver certeza de como usar variáveis, {link}",
"PopUpForm.Email.link.documentation": "confira nossa documentação",
"PopUpForm.Email.options.from.email.label": "Email do remetente",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Nome do remetente",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Mensagem",
"PopUpForm.Email.options.object.label": "Assunto",
"PopUpForm.Email.options.response_email.label": "Email de resposta",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p> Por favor, clique neste link para validar sua conta </ p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Confirme seu endereço de e-mail para% APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p> Por favor, clique neste link para validar sua conta </ p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Confirme seu endereço de e-mail para% APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p> Por favor, clique neste link para validar sua conta </ p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Confirme seu endereço de e-mail para% APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.enabled.description": "Se desativado, os usuários não poderão usar este provedor",
"PopUpForm.Providers.enabled.label": "Ativar",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "O URL de redirecionamento para adicionar em suas configurações de aplicativos do Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "O URL de redirecionamento para adicionar nas configurações do aplicativo GitHub",
"PopUpForm.Providers.google.providerConfig.redirectURL": "O URL de redirecionamento a adicionar nas suas configurações de aplicativo do Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "O URL de redirecionamento a adicionar nas suas configurações de aplicativo do Instagram",
"PopUpForm.Providers.key.label": "ID do cliente",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "O URL de redirecionamento a ser adicionado nas configurações do aplicativo Linkedin",
"PopUpForm.Providers.redirectURL.front-end.label": "O URL de redirecionamento para seu aplicativo front-end",
"PopUpForm.Providers.secret.label": "Segredo do Cliente",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "O URL de redirecionamento a ser adicionado nas configurações do aplicativo do Twitter",
"PopUpForm.button.cancel": "Cancelar",
"PopUpForm.button.save": "Salvar",
"PopUpForm.header.add.providers": "Adicionar novo provedor",
"PopUpForm.header.edit.email-templates": "Editar modelos de email",
"PopUpForm.header.edit.providers": "Editar provedor",
"PopUpForm.inputSelect.providers.label": "Escolher o provedor",
"notification.error.delete": "Ocorreu um erro ao tentar eliminar o registro",
"notification.error.fetch": "Ocorreu um erro ao tentar buscar dados",
"notification.error.fetchUser": "Ocorreu um erro ao tentar buscar usuários",
"notification.info.emailSent": "O email foi enviado",
"notification.success.delete": "O item foi excluído",
"notification.success.submit": "As configurações foram atualizadas",
"plugin.description.long": "Proteja sua API com um processo de autenticação completo baseado no JWT. Esse plugin também vem com uma estratégia de ACL que permite gerenciar as permissões entre os grupos de usuários.",
"plugin.description.short": "Proteja sua API com um processo de autenticação completo baseado no JWT"
}

View File

@ -0,0 +1,109 @@
{
"BoundRoute.title": "Ligar rota a",
"Controller.input.label": "{legenda} ",
"Controller.selectAll": "Selecionar todos",
"EditForm.inputSelect.description.role": "Vai atribuir o grupo selecionado ao novo utilizador autenticado.",
"EditForm.inputSelect.durations.description": "Número de horas em que o utilizador não se pode registar.",
"EditForm.inputSelect.durations.label": "Duração",
"EditForm.inputSelect.label.role": "Grupo por defeito para utilizadores autenticados",
"EditForm.inputSelect.subscriptions.description": "Limitar o número de registos por endereço IP por hora.",
"EditForm.inputSelect.subscriptions.label": "Gerir limites de registo",
"EditForm.inputToggle.description.email": "Proibir a criação de múltiplas contas com o mesmo email por serviços de autenticação diferentes.",
"EditForm.inputToggle.description.email-confirmation": "Quando ativado (ON), os novos utilizadores recebem um email de confirmação.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Após confirmar o seu email, escolha para onde vai ser redirecionado.",
"EditForm.inputToggle.description.sign-up": "Quando desativado (OFF), o processo de registo está proibido. Ninguém se consegue registar mais, independentemente do serviço de authenticação.",
"EditForm.inputToggle.label.email": "Uma conta por endereço de email",
"EditForm.inputToggle.label.email-confirmation": "Ativar email de confirmação",
"EditForm.inputToggle.label.email-confirmation-redirection": "Endereço de redirecionamento (URL)",
"EditForm.inputToggle.label.sign-up": "Ativar registos",
"EditPage.cancel": "Cancelar",
"EditPage.form.roles": "Detalhes do grupo",
"EditPage.form.roles.label.description": "Descrição",
"EditPage.form.roles.label.name": "Nome",
"EditPage.form.roles.label.users": "Utilizadores associados a este grupo ({number})",
"EditPage.form.roles.name.error": "Este valor é obrigatório.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Criar um novo grupo",
"EditPage.notification.permissions.error": "Ocorreu um erro a obter as permissões",
"EditPage.notification.policies.error": "Ocorreu um erro a obter as restrições",
"EditPage.notification.role.error": "Ocorreu um erro a obter os grupos",
"EditPage.submit": "Guardar",
"Email.template.email_confirmation": "Endereço de email de confirmação",
"Email.template.reset_password": "Redefinir palavra-passe",
"Email.template.success_register": "Registado com sucesso",
"HeaderNav.link.advancedSettings": "Configurações avançadas",
"HeaderNav.link.emailTemplates": "Modelos de email",
"HeaderNav.link.providers": "Serviços de autenticação",
"HeaderNav.link.roles": "Grupos e permissões",
"HomePage.header.description": "Defina os grupos e permissões dos seus utilizadores.",
"HomePage.header.title": "Grupos e permissões",
"InputSearch.placeholder": "Procurar um utilizador",
"List.button.providers": "Adicionar um novo serviço de autenticação",
"List.button.roles": "Adicionar um novo grupo",
"List.title.emailTemplates.plural": "{number} modelos de email disponíveis",
"List.title.emailTemplates.singular": "{number} modelo de email disponível",
"List.title.providers.disabled.plural": "{number} estão desativados",
"List.title.providers.disabled.singular": "{number} está desativado",
"List.title.providers.enabled.plural": "{number} serviços de antenticação estão ativados e",
"List.title.providers.enabled.singular": "{number} serviço de antenticação está ativado e",
"List.title.roles.plural": "{number} grupos estão disponíveis",
"List.title.roles.singular": "{number} grupo está disponível",
"Plugin.permissions.application.description": "Defina todas as ações permitidas para o seu projeto.",
"Plugin.permissions.plugins.description": "Defina todas as ações permitidas para o plugin {name}.",
"Plugins.header.description": "Todas as ações associadas a uma rota estão listadas abaixo.",
"Plugins.header.title": "Permissões",
"Policies.InputSelect.empty": "Nenhum(a)",
"Policies.InputSelect.label": "Permitir executar esta ação para:",
"Policies.header.hint": "Selecione as ações da aplicação ou dos plugins e clique no ícone para mostrar as rotas associadas",
"Policies.header.title": "Configurações avançadas",
"PopUpForm.Email.email_templates.inputDescription": "Se não tem a certeza de como usar as variáveis, {link}",
"PopUpForm.Email.link.documentation": "consulte a nossa documentação.",
"PopUpForm.Email.options.from.email.label": "Shipper email",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Shipper name",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Mensagem",
"PopUpForm.Email.options.object.label": "Assunto",
"PopUpForm.Email.options.response_email.label": "Email de resposta",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Por favor clique neste link para validar a sua conta</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Por favor confirme o seu endereço de email para %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Por favor clique neste link para validar a sua conta</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Por favor confirme o seu endereço de email para %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Por favor clique neste link para validar a sua conta</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Por favor confirme o seu endereço de email para %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXTO",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação de Discord",
"PopUpForm.Providers.enabled.description": "Se desativado, os utilizadores não conseguirão utilizar este serviço de autenticação.",
"PopUpForm.Providers.enabled.label": "Ativar",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação do Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação de GitHub",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação da Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação da Instagram",
"PopUpForm.Providers.key.label": "ID de Client",
"PopUpForm.Providers.key.placeholder": "TEXTO",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação de Linkedin",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação da Microsoft",
"PopUpForm.Providers.redirectURL.front-end.label": "Endereço de redirecionamento para a sua aplicação de front-end",
"PopUpForm.Providers.secret.label": "Segredo de cliente",
"PopUpForm.Providers.secret.placeholder": "TEXTO",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Endereço de redirecionamento para adicionar às configurações da sua aplicação de Twitter",
"PopUpForm.button.cancel": "Cancelar",
"PopUpForm.button.save": "Guardar",
"PopUpForm.header.add.providers": "Adicionar novo serviço de autenticação",
"PopUpForm.header.edit.email-templates": "Editar Modelos de Email",
"PopUpForm.header.edit.providers": "Editar o serviço de autenticação",
"PopUpForm.inputSelect.providers.label": "Selecionar o serviço de autenticação",
"components.Input.error.password.length": "A password é demasiado curta",
"notification.error.delete": "Ocorreu um erro a tentar eliminar o item",
"notification.error.fetch": "Ocorreu um erro a tentar obter os dados",
"notification.error.fetchUser": "Ocorreu um erro a tentar obter os utilizadores",
"notification.info.emailSent": "O email foi enviado",
"notification.success.delete": "O item foi eliminado",
"notification.success.submit": "As configurações foram atualizadas",
"plugin.description.long": "Proteja a sua API com um processo completo de autenticação baseado em JWT. Este plugin também vem com estratégia de ACL que permite gerir permissões entre grupos de utilizadores.",
"plugin.description.short": "Proteja a sua API com um processo completo de autenticação baseado em JWT"
}

View File

@ -0,0 +1,111 @@
{
"BoundRoute.title": "Связать путь с",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Выделить все",
"components.Input.error.password.length": "Пароль слишком короткий",
"EditForm.inputSelect.description.role": "При регистрации пользователи будут иметь выбранную роль.",
"EditForm.inputSelect.durations.description": "Количество часов, в течение которых пользователь не может подписаться.",
"EditForm.inputSelect.durations.label": "Длительность",
"EditForm.inputSelect.label.role": "Роль по умолчанию для новых пользователей",
"EditForm.inputSelect.subscriptions.description": "Ограничить количество подписчиков на каждый IP-адрес в час.",
"EditForm.inputSelect.subscriptions.label": "Управление квотами на подписку",
"EditForm.inputToggle.description.email": "Запретить пользователю создавать несколько учетных записей, используя один и тот же адрес электронной почты с различными провайдерами аутентификации.",
"EditForm.inputToggle.description.email-confirmation": "Если включено (ON), при регистрации пользователи будут получать письмо для подтверждения адреса электронной почты.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Укажите URL-адрес для перенаправления после подтверждения адреса электронной почты.",
"EditForm.inputToggle.description.sign-up": "Когда выключенно (OFF) процесс регистрации запрещен. Никто не может зарегистрироваться, независимо от провайдера.",
"EditForm.inputToggle.label.email": "Одна учетная запись на адрес электронной почты",
"EditForm.inputToggle.label.email-confirmation": "Включить подтверждение по электронной почте",
"EditForm.inputToggle.label.email-confirmation-redirection": "URL-адрес для перенаправления",
"EditForm.inputToggle.label.sign-up": "Включить регистрацию",
"EditPage.cancel": "Отменить",
"EditPage.form.roles": "Детали роли",
"EditPage.form.roles.label.description": "Описание",
"EditPage.form.roles.label.name": "Название",
"EditPage.form.roles.label.users": "Пользователи с этой ролью ({number})",
"EditPage.form.roles.name.error": "Это значение обязательно.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Создать новую роль",
"EditPage.notification.permissions.error": "Возникла ошибка при загрузке доступов",
"EditPage.notification.policies.error": "Возникла ошибка при загрузке политик пользователя",
"EditPage.notification.role.error": "Возникла ошибка при загрузке роли",
"EditPage.submit": "Сохранить",
"Email.template.email_confirmation": "Подтверждение адреса электронной почты",
"Email.template.reset_password": "Сброс пароля",
"Email.template.success_register": "Регистрация прошла успешно",
"Email.template.validation_email": "Проверка email",
"HeaderNav.link.advancedSettings": "Расширенные настройки",
"HeaderNav.link.emailTemplates": "Шаблоны писем",
"HeaderNav.link.providers": "Провайдеры",
"HeaderNav.link.roles": "Роли и доступы",
"HomePage.header.description": "Настройка ролей и доступов для ваших пользователей.",
"HomePage.header.title": "Роли и доступы",
"InputSearch.placeholder": "Искать пользователя",
"List.button.providers": "Добавить новый провайдер",
"List.button.roles": "Добавить новую роль",
"List.title.emailTemplates.plural": "{number} шаблонов доступно",
"List.title.emailTemplates.singular": "{number} шаблон доступен",
"List.title.providers.disabled.plural": "{number} отключено",
"List.title.providers.disabled.singular": "{number} отключен",
"List.title.providers.enabled.plural": "{number} провайдеров включено и",
"List.title.providers.enabled.singular": "{number} провайдер включен и",
"List.title.roles.plural": "{number} доступных ролей",
"List.title.roles.singular": "{number} роль доступна",
"Plugin.permissions.application.description": "Определить все доступные действия для вашего проекта.",
"Plugin.permissions.plugins.description": "Определить действия доступные для плагина {name}.",
"Plugins.header.description": "В списке выводятся только действия, связанные с маршрутом.",
"Plugins.header.title": "Доступы",
"Policies.InputSelect.empty": "Нет",
"Policies.InputSelect.label": "Разрешить выполнение этого действия для:",
"Policies.header.hint": "Выберите действия приложения или плагина и щелкните значок шестеренки, чтобы отобразить связанный маршрут",
"Policies.header.title": "Расширенные настройки",
"PopUpForm.Email.email_templates.inputDescription": "Если вы не уверены как использовать переменные, {link}",
"PopUpForm.Email.link.documentation": "ознакомьтесь с нашей документацией.",
"PopUpForm.Email.options.from.email.label": "Адрес отправителя",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Имя отправителя",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Сообщение",
"PopUpForm.Email.options.object.label": "Тема",
"PopUpForm.Email.options.response_email.label": "Адрес для ответа",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Пожалуйста, нажмите на ссылку чтобы подтвердить вашу учетную запись</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Пожалуйста подтвердите ваш email для %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Пожалуйста, нажмите на ссылку чтобы подтвердить вашу учетную запись</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Пожалуйста подтвердите ваш email для %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Пожалуйста, нажмите на ссылку чтобы подтвердить вашу учетную запись</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Пожалуйста подтвердите ваш email для %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки Discord приложения",
"PopUpForm.Providers.enabled.description": "Если отключено, пользователи не смогут использовать этот провайдер.",
"PopUpForm.Providers.enabled.label": "Включить",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки Facebook приложения",
"PopUpForm.Providers.github.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки GitHub приложения",
"PopUpForm.Providers.google.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки Google приложения",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки Instagram приложения",
"PopUpForm.Providers.vk.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки VK приложения",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки Linkedin приложения",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки Microsoft приложения",
"PopUpForm.Providers.redirectURL.front-end.label": "URL-адрес перенаправления для вашего приложения",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "URL-адрес перенаправления, который необходимо добавить в настройки Twitter приложения",
"PopUpForm.button.cancel": "Отменить",
"PopUpForm.button.save": "Сохранить",
"PopUpForm.header.add.providers": "Добавить новый провайдер",
"PopUpForm.header.edit.email-templates": "Редактировать шаблон письма",
"PopUpForm.header.edit.providers": "Редактирование провайдера",
"PopUpForm.inputSelect.providers.label": "Выбрать провайдера",
"notification.error.delete": "Возникла ошибка в процессе удаления",
"notification.error.fetch": "Возникла ошибка при загрузке данных",
"notification.error.fetchUser": "Возникла ошибка при загрузке пользователей",
"notification.info.emailSent": "Письмо отправленно",
"notification.success.delete": "Успешно удалено",
"notification.success.submit": "Настройки обновлены",
"plugin.description.long": "Защитите ваш API с помощью процесса полной аутентификации, основанном на JWT. Этот плагин также включает в себя возможности ACL (Access Control List), которые позволят вам настраивать доступы для групп пользователей.",
"plugin.description.short": "Защитите ваш API с помощью процесса полной аутентификации, основанном на JWT"
}

View File

@ -0,0 +1,113 @@
{
"BoundRoute.title": "URL endpoint naviazaný k",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Označiť všetky",
"Controller.unselectAll": "Odznačiť všetky",
"EditForm.inputSelect.description.role": "Pridá rolu k používateľovi.",
"EditForm.inputSelect.durations.description": "Počet hodín počas ktorých sa používateľ nemôže prihlásiť.",
"EditForm.inputSelect.durations.label": "Trvanie",
"EditForm.inputSelect.label.role": "Predvolená rola pre autorizovaných používateľov",
"EditForm.inputSelect.subscriptions.description": "Obmedzenie počtu odberov pre IP adresu za hodinu.",
"EditForm.inputSelect.subscriptions.label": "Spravovať kvóty odberov",
"EditForm.inputToggle.description.email": "Zakázať používateľovi vytvoriť viac účtov s rovnakou e-mailovou adresou pre rôznych poskytovateľov.",
"EditForm.inputToggle.description.email-confirmation": "Ak je povolené (ON), registrovaní používatelia dostanú potvrdzovací e-mail.",
"EditForm.inputToggle.description.email-confirmation-redirection": "URL na ktorú bude používateľ presmerovaný po potvrdení e-mailu.",
"EditForm.inputToggle.description.sign-up": "Ak je zakázané (OFF), registrácie nebudú povolené. Nikto sa nebude môcť registrovať bez ohľadu na zvoleného poskytovateľa.",
"EditForm.inputToggle.description.email-reset-password": "URL pre nastavenie nového hesla",
"EditForm.inputToggle.label.email": "Iba jedno konto pre jednu e-mailovú adresu",
"EditForm.inputToggle.label.email-confirmation": "Povoliť potvrdzovanie e-mailových adries",
"EditForm.inputToggle.label.email-confirmation-redirection": "URL pre potvrdenie e-mailovej adresy",
"EditForm.inputToggle.label.email-reset-password": "URL pre obnovu hesla",
"EditForm.inputToggle.label.sign-up": "Povoliť registrácie",
"EditPage.cancel": "Zrušiť",
"EditPage.form.roles": "Detail roly",
"EditPage.form.roles.label.description": "Popis",
"EditPage.form.roles.label.name": "Názov",
"EditPage.form.roles.label.users": "Používatelia s touto rolou ({number})",
"EditPage.form.roles.name.error": "Táto hodnota je povinná.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Vytvoriť novú rolu",
"EditPage.notification.permissions.error": "Nastala chyba pri načitávaní oprávnení",
"EditPage.notification.policies.error": "Nastala chyba pri načitávaní pravidiel",
"EditPage.notification.role.error": "Nastala chyba pri načitávaní roly",
"EditPage.submit": "Uložiť",
"Email.template.email_confirmation": "Potvrdenie e-mailovej adresy",
"Email.template.reset_password": "Obnova hesla",
"Email.template.success_register": "Registrácia úspešná",
"HeaderNav.link.advancedSettings": "Pokročilé nastavenia",
"HeaderNav.link.emailTemplates": "Šablóny emailov",
"HeaderNav.link.providers": "Poskytovatelia",
"HeaderNav.link.roles": "Roly a oprávnenia",
"HomePage.header.description": "Nastavte roly a oprávnenia pre používateľov.",
"HomePage.header.title": "Roly a oprávnenia",
"InputSearch.placeholder": "Hľadať používateľa",
"List.button.providers": "Pridať nového poskytovateľa",
"List.button.roles": "Pridať novú rolu",
"List.title.emailTemplates.plural": "Dostupné e-mailové šablóny: {number}",
"List.title.emailTemplates.singular": "Dostupné e-mailové šablóny: {number}",
"List.title.providers.disabled.plural": "zakázané: {number}",
"List.title.providers.disabled.singular": "zakázané: {number}",
"List.title.providers.enabled.plural": "{number} poskytovatelia sú povolení a",
"List.title.providers.enabled.singular": "{number} poskytovateľ je povolený a",
"List.title.roles.plural": "{number} role sú dostupné",
"List.title.roles.singular": "{number} rola je dostupná",
"Plugin.permissions.application.description": "Zvoľte akcie, ktoré majú byť povolené.",
"Plugin.permissions.plugins.description": "Zvoľte akcie, ktoré majú byť povolené pre plugin {name}.",
"Plugins.header.description": "Zobrazujú sa iba akcie naviazané na URL endpoint.",
"Plugins.header.title": "Oprávnenia",
"Policies.InputSelect.empty": "Žiadne",
"Policies.InputSelect.label": "Povoliť túto akciu pre:",
"Policies.header.hint": "Vyberte akciu a kliknite na ikonku nastavení pre zobrazenie naviazanej URL",
"Policies.header.title": "Pokročilé nastavenia",
"PopUpForm.Email.email_templates.inputDescription": "Ak si nie ste istý ako používať premenné, {link}",
"PopUpForm.Email.link.documentation": "pozrite si dokumentáciu.",
"PopUpForm.Email.options.from.email.label": "E-mail odosielateľa",
"PopUpForm.Email.options.from.email.placeholder": "janko.hrasko@gmail.com",
"PopUpForm.Email.options.from.name.label": "Meno odosielateľa",
"PopUpForm.Email.options.from.name.placeholder": "Janko Hraško",
"PopUpForm.Email.options.message.label": "Obsah e-mailu",
"PopUpForm.Email.options.object.label": "Predmet",
"PopUpForm.Email.options.response_email.label": "Odpovedať na e-mail",
"PopUpForm.Email.options.response_email.placeholder": "janko.hrasko@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Prosím kliknite na tento odkaz pre overenie Vášho konta</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Prosím potvrďte Vašu e-mailovú adresu pre %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Prosím kliknite na tento odkaz pre overenie Vášho konta</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Prosím potvrďte Vašu e-mailovú adresu pre %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Prosím kliknite na tento odkaz pre overenie Vášho konta</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Prosím potvrďte Vašu e-mailovú adresu pre %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Discord",
"PopUpForm.Providers.enabled.description": "Ak je zakázané, používatelia nebudú môcť použiť tohto poskytovateľa.",
"PopUpForm.Providers.enabled.label": "Povoliť",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Github",
"PopUpForm.Providers.google.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Instagram",
"PopUpForm.Providers.vk.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie VK",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Linkedin",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Microsoft",
"PopUpForm.Providers.redirectURL.front-end.label": "URL presmerovania do vašej aplikácie",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "URL presmerovania, ktorú je potrebné pridať v nastaveniach aplikácie Twitter",
"PopUpForm.button.cancel": "Zrušiť",
"PopUpForm.button.save": "Uložiť",
"PopUpForm.header.add.providers": "Pridať nového poskytovateľa",
"PopUpForm.header.edit.email-templates": "Upraviť šablóny e-mailov",
"PopUpForm.header.edit.providers": "Upraviť poskytovateľa",
"PopUpForm.inputSelect.providers.label": "Vyberte poskytovateľa",
"components.Input.error.password.length": "Heslo je príliš krátke",
"notification.error.delete": "Nastala chyba pri vymazávaní položky",
"notification.error.fetch": "Nastala chyba pri načitávaní dát",
"notification.error.fetchUser": "Nastala chyba pri načitávaní používateľov",
"notification.info.emailSent": "E-mail bol odoslaný",
"notification.success.delete": "Položka bola odstránená",
"notification.success.submit": "Nastavenia boli uložené",
"plugin.description.long": "Zabezpečte vaše API pomocou JWT tokenov. Tento plugin taktiež podporuje ACL záznamy, ktoré umožňujú spravovať oprávnenia v rámci skupín používateľov.",
"plugin.description.short": "Zabezpečte vaše API pomocou JWT tokenov"
}

View File

@ -0,0 +1,110 @@
{
"BoundRoute.title": "Bağlı rota",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Hepsini seç",
"EditForm.inputSelect.description.role": "Yeni kimliği doğrulanmış kullanıcıyı seçilen rolü ekler.",
"EditForm.inputSelect.durations.description": "Kullanıcının abone olamayacağı süre sayısı.",
"EditForm.inputSelect.durations.label": "Süre",
"EditForm.inputSelect.label.role": "Kimliği doğrulanmış kullanıcılar için varsayılan rol",
"EditForm.inputSelect.subscriptions.description": "Saat başına IP için abone sayısını sınırlayın.",
"EditForm.inputSelect.subscriptions.label": "Abonelik kotalarını yönetme",
"EditForm.inputToggle.description.email": "Kullanıcıyı, farklı kimlik doğrulama sağlayıcılarıyla aynı e-posta adresini kullanarak birden fazla hesap oluşturmasına izin vermeyin.",
"EditForm.inputToggle.description.email-confirmation": "Etkinleştirildiğinde yeni kayıtlı kullanıcılar bir onay e-postası alır.",
"EditForm.inputToggle.description.email-confirmation-redirection": "E-postanızı onayladıktan sonra, yönlendirileceğiniz yeri seçin.",
"EditForm.inputToggle.description.sign-up": "Devre dışı bırakıldığında (KAPALI), kayıt işlemi yasaktır. Artık kullanılan sağlayıcı ne olursa olsun hiç kimse abone olamaz.",
"EditForm.inputToggle.label.email": "E-posta adresi başına bir hesap",
"EditForm.inputToggle.label.email-confirmation": "E-posta onayını etkinleştir",
"EditForm.inputToggle.label.email-confirmation-redirection": "Yönlendirme URL'si",
"EditForm.inputToggle.label.sign-up": "Kayıtları etkinleştir",
"EditPage.cancel": "İptal",
"EditPage.form.roles": "Rol detayları",
"EditPage.form.roles.label.description": "Açıklama",
"EditPage.form.roles.label.name": "İsim",
"EditPage.form.roles.label.users": "Bu rolle ilişkili kullanıcılar ({number})",
"EditPage.form.roles.name.error": "Zorunlu alandır.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Yeni bir rol oluştur",
"EditPage.notification.permissions.error": "İzinler getirilirken bir hata oluştu.",
"EditPage.notification.policies.error": "İlkeler getirilirken bir hata oluştu.",
"EditPage.notification.role.error": "Rol getirilirken bir hata oluştu.",
"EditPage.submit": "Kaydet",
"Email.template.email_confirmation": "E-posta adresi onayı",
"Email.template.reset_password": "Şifreyi yenile",
"Email.template.success_register": "Kayıt başarılı",
"Email.template.validation_email": "E-posta adresinin doğrulanması",
"HeaderNav.link.advancedSettings": "Gelişmiş Ayarlar",
"HeaderNav.link.emailTemplates": "E-posta Şablonları",
"HeaderNav.link.providers": "Sağlayıcıları",
"HeaderNav.link.roles": "Kurallar",
"HomePage.header.description": "Kullanıcılarınızın rollerini ve izinlerini tanımlayın.",
"HomePage.header.title": "Kullanıcılar & İzinler",
"InputSearch.placeholder": "Kullanıcı ara",
"List.button.providers": "AYeni Sağlayıcı Ekle",
"List.button.roles": "Yeni Rol Ekle",
"List.title.emailTemplates.plural": "{number} e-posta şablonları kullanılabilir",
"List.title.emailTemplates.singular": "{number} e-posta şablonu kullanılabilir",
"List.title.providers.disabled.plural": "{number} devre dışı",
"List.title.providers.disabled.singular": "{number} devre dışı",
"List.title.providers.enabled.plural": "{number} sağlayıcılar etkinleştirilmiş ve",
"List.title.providers.enabled.singular": "{number} sağlayıcı etkinleştirilmiş ve",
"List.title.roles.plural": "{number} roller kullanılabilir",
"List.title.roles.singular": "{number} rol kullanılabilir",
"Plugin.permissions.application.description": "Projenizin izin verilen tüm eylemlerini tanımlayın.",
"Plugin.permissions.plugins.description": "{name} eklentisi için izin verilen tüm eylemleri tanımlayın.",
"Plugins.header.description": "Yalnızca bir güzergahla sınırlandırılan işlemler aşağıda listelenmiştir.",
"Plugins.header.title": "İzinler",
"Policies.InputSelect.empty": "Yok",
"Policies.InputSelect.label": "Gerçekleşmesine izin verilen aksiyonlar:",
"Policies.header.hint": "Uygulamanın eylemlerini veya eklentinin eylemlerini seçin ve bağlı rotayı görüntülemek için dişli çark simgesini tıklayın",
"Policies.header.title": "Gelişmiş Ayarlar",
"PopUpForm.Email.email_templates.inputDescription": "Değişkenleri nasıl kullanacağınızdan emin değilseniz, {link}",
"PopUpForm.Email.link.documentation": "dokümanlarımıza göz atın.",
"PopUpForm.Email.options.from.email.label": "Gönderenin E-posta",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Gönderenin adı",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Mesaj",
"PopUpForm.Email.options.object.label": "Konu",
"PopUpForm.Email.options.response_email.label": "Yanıt e-postası",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Hesabınızı doğrulamak için lütfen bu bağlantıyı tıklayın.</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Lütfen %APP_NAME% için e-posta adresinizi onaylayın",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Hesabınızı doğrulamak için lütfen bu bağlantıyı tıklayın.</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Lütfen %APP_NAME% için e-posta adresinizi onaylayın",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Hesabınızı doğrulamak için lütfen bu bağlantıyı tıklayın.</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Lütfen %APP_NAME% için e-posta adresinizi onaylayın",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Discord uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.Providers.callback.placeholder": "METİN",
"PopUpForm.Providers.enabled.description": "Devre dışı bırakıldıysa kullanıcılar bu sağlayıcıyı kullanamaz.",
"PopUpForm.Providers.enabled.label": "Etkinleştirme",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Facebook uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.Providers.github.providerConfig.redirectURL": "GitHub uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Google uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Instagram uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.Providers.key.label": "Web istemcisi ID",
"PopUpForm.Providers.key.placeholder": "METİN",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "Linkedin uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "Microsoft uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.Providers.redirectURL.front-end.label": "Arayüz uygulamanızın yönlendirme URL'si",
"PopUpForm.Providers.secret.label": "Web istemcisi Secret",
"PopUpForm.Providers.secret.placeholder": "METİN",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Twitter uygulama yapılandırmalarınıza eklenecek yönlendirme URL'si",
"PopUpForm.button.cancel": "İptal",
"PopUpForm.button.save": "Kaydet",
"PopUpForm.header.add.providers": "Yeni Sağlayıcı Ekle",
"PopUpForm.header.edit.email-templates": "E-posta Şablonlarını Düzenle",
"PopUpForm.header.edit.providers": "sağlayıcını düzenle",
"PopUpForm.inputSelect.providers.label": "Sağlayıcıyı seçin",
"components.Input.error.password.length": "Şifreniz çok kısa",
"notification.error.delete": "Öğe silinirken bir hata oluştu",
"notification.error.fetch": "Verileri getirmeye çalışılırken bir hata oluştu",
"notification.error.fetchUser": "Kullanıcıları getirmeye çalışılırken bir hata oluştu",
"notification.info.emailSent": "E-posta gönderildi",
"notification.success.delete": "Öğe silindi",
"notification.success.submit": "Ayarlar güncellendi",
"plugin.description.long": "Servisinizi JWT'ye dayalı tam bir kimlik doğrulama işlemi ile koruyun. Bu eklenti, kullanıcı grupları arasındaki izinleri yönetmenize izin veren bir ACL stratejisiyle de gelir.",
"plugin.description.short": "Servisinizi JWT'ye dayalı tam bir kimlik doğrulama işlemi ile koruyun"
}

View File

@ -0,0 +1,112 @@
{
"BoundRoute.title": "Đến tới",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Chọn tất cả",
"Controller.unselectAll": "Bỏ chọn tất cả",
"EditForm.inputSelect.description.role": "Đính kèm người dùng mới đã được xác thực vào quyền được chọn.",
"EditForm.inputSelect.durations.description": "Số giờ mà người dùng không thể đăng ký.",
"EditForm.inputSelect.durations.label": "Thời gian",
"EditForm.inputSelect.label.role": "Quyền mặc định cho các người dùng đã được chứng thực",
"EditForm.inputSelect.subscriptions.description": "Giới hạn số lượng đăng ký trên địa chỉ IP trên giờ.",
"EditForm.inputSelect.subscriptions.label": "Quản lý hạn ngạch đăng ký",
"EditForm.inputToggle.description.email": "Không cho phép người dùng tạo nhiều tài khoản có cùng địa chỉ email với nhiều nhà cung cấp chứng thực.",
"EditForm.inputToggle.description.email-confirmation": "Khi được kích hoạt (ON), người dùng đăng ký mới nhận được một email xác nhận.",
"EditForm.inputToggle.description.email-confirmation-redirection": "Sau khi xác nhận email của bạn, chọn nơi bạn sẽ được đưa về.",
"EditForm.inputToggle.description.email-reset-password": "URL của trang lấy lại mật khẩu của ứng dụng của bạn",
"EditForm.inputToggle.description.sign-up": "Khi không kích hoạt (OFF), quá trình đăng ký bị cấm. Không ai có thể đăng ký thêm dù dùng bất kỳ nhà cung cấp nào.",
"EditForm.inputToggle.label.email": "Một tài khoản trên một địa chỉ email",
"EditForm.inputToggle.label.email-confirmation": "Kích hoạt email xác nhận",
"EditForm.inputToggle.label.email-confirmation-redirection": "URL đưa về",
"EditForm.inputToggle.label.email-reset-password": "Trang lấy lại mật khẩu",
"EditForm.inputToggle.label.sign-up": "Kích hoạt đăng ký",
"EditPage.cancel": "Hủy bỏ",
"EditPage.form.roles": "Chi tiết Vai trò",
"EditPage.form.roles.label.description": "Mô tả",
"EditPage.form.roles.label.name": "Tên",
"EditPage.form.roles.label.users": "Các người dùng đã liên kết với vai trò ({number})",
"EditPage.form.roles.name.error": "Giá trị bắt buộc.",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "Tạo mới một vai trò",
"EditPage.notification.permissions.error": "Một lỗi đã xảy ra trong khi lấy về các quyền",
"EditPage.notification.policies.error": "Một lỗi đã xảy ra trong khi lấy về các chính sách",
"EditPage.notification.role.error": "Một lỗi đã xảy ra trong khi lấy về vai trò",
"EditPage.submit": "Lưu",
"Email.template.email_confirmation": "Xác nhận địa chỉ email",
"Email.template.reset_password": "Lấy lại mật khẩu",
"Email.template.success_register": "Đăng ký thành công",
"HeaderNav.link.advancedSettings": "Cài đặt nâng cao",
"HeaderNav.link.emailTemplates": "Mẫu email",
"HeaderNav.link.providers": "Các nhà cung cấp",
"HeaderNav.link.roles": "Các Vai trò & Quyền",
"HomePage.header.description": "Định nghĩa vai trò và quyền cho các người dùng của bạn.",
"HomePage.header.title": "Vai trò & Quyền",
"InputSearch.placeholder": "Tìm một người dùng",
"List.button.providers": "Thêm Mới Nhà Cung Cấp",
"List.button.roles": "Thêm Mới Quyền",
"List.title.emailTemplates.plural": "{number} mẫu email có sẵn",
"List.title.emailTemplates.singular": "{number} mẫu email có sẵn",
"List.title.providers.disabled.plural": "{number} đã không được kích hoạt",
"List.title.providers.disabled.singular": "{number} đã không được kích hoạt",
"List.title.providers.enabled.plural": "{number} nhà cung cấp đã được kích hoạt và",
"List.title.providers.enabled.singular": "{number} nhà cung cấp đã được kích hoạt và",
"List.title.roles.plural": "{number} vai trò đã được kích hoạt",
"List.title.roles.singular": "{number} vai trò đã được kích hoạt",
"Plugin.permissions.application.description": "Định nghĩa tất cả hành động được phép cho dự án của bạn.",
"Plugin.permissions.plugins.description": "Định nghĩa tất cả hành động được phép cho {name} plugin.",
"Plugins.header.description": "Chỉ các hành động đến bởi một đường dẫn được liệt kê bên dưới.",
"Plugins.header.title": "Các Quyền",
"Policies.InputSelect.empty": "Rỗng",
"Policies.InputSelect.label": "Được phép thực hiện hành động này cho:",
"Policies.header.hint": "Chọn các hành động của ứng dựng hoặc hành động của plugin và nhấn vào biểu tượng bánh răng để hiển thị đường đến",
"Policies.header.title": "Các cài đặt nâng cao",
"PopUpForm.Email.email_templates.inputDescription": "Nếu bạn không chắc sử dụng các biến như thế nào, {link}",
"PopUpForm.Email.link.documentation": "kiểm tra tài liệu của chúng tôi.",
"PopUpForm.Email.options.from.email.label": "Email người gửi",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Tên người gửi",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "Thông điệp",
"PopUpForm.Email.options.object.label": "Chủ đề",
"PopUpForm.Email.options.response_email.label": "Email phản hồi",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>Vui lòng nhấn liên kết này để xác nhận tài khoản của bạn</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "Vui lòng xác nhận địa chỉ email cho %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>Vui lòng nhấn liên kết này để xác nhận tài khoản của bạn</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "Vui lòng xác nhận địa chỉ email cho %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>Vui lòng nhấn liên kết này để xác nhận tài khoản của bạn</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "Vui lòng xác nhận địa chỉ email cho %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "VĂN BẢN",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng Discord",
"PopUpForm.Providers.enabled.description": "Nếu không kích hoạt, người dùng sẽ không thể dùng nhà cung cấp này.",
"PopUpForm.Providers.enabled.label": "Kích hoạt",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng Facebook",
"PopUpForm.Providers.github.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng GitHub",
"PopUpForm.Providers.google.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng Google",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng Instagram",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "VĂN BẢN",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng Linkedin",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng Microsoft",
"PopUpForm.Providers.redirectURL.front-end.label": "URL chuyển tiếp đến ứng dụng bên ngoài của bạn",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "VĂN BẢN",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "URL chuyển tiếp để thêm vào các cấu hình ứng dụng Twitter",
"PopUpForm.button.cancel": "Hủy bỏ",
"PopUpForm.button.save": "Lưu",
"PopUpForm.header.add.providers": "Thêm Mới Nhà Cung Cấp",
"PopUpForm.header.edit.email-templates": "Sửa Các Mẫu Email",
"PopUpForm.header.edit.providers": "Sửa Nhà Cung Cấp",
"PopUpForm.inputSelect.providers.label": "Chọn Nhà Cung Cấp",
"components.Input.error.password.length": "Mật khẩu quá ngắn",
"notification.error.delete": "Một lỗi đã xảy ra trong khi cố gắng xoá một bản ghi",
"notification.error.fetch": "Một lỗi đã xảy ra trong khi cố gắng lấy về dữ liệu",
"notification.error.fetchUser": "Một lỗi đã xảy ra trong khi cố gắng lấy về người dùng",
"notification.info.emailSent": "Email đã được gửi",
"notification.success.delete": "Bản ghi đã được xoá",
"notification.success.submit": "Các cấu hình đã được cập nhật",
"plugin.description.long": "Bảo vệ API của bạn với quá trình chứng thực đầy đủ dựa trên JWT. Plugin này cũng kèm với chiến lược ACL cho phép bạn quản lý quyền giữa các nhóm người dùng.",
"plugin.description.short": "Bảo vệ API của bạn với quá trình chứng thực đầy đủ dựa trên JWT"
}

View File

@ -0,0 +1,113 @@
{
"BoundRoute.title": "绑定路由到",
"Controller.input.label": "{label} ",
"Controller.selectAll": "选择全部",
"Controller.unselectAll": "取消选择全部",
"EditForm.inputSelect.description.role": "新验证身份的用户将被赋予所选角色。",
"EditForm.inputSelect.durations.description": "用户无法订阅的时间段。",
"EditForm.inputSelect.durations.label": "持续时间",
"EditForm.inputSelect.label.role": "认证用户的默认角色",
"EditForm.inputSelect.subscriptions.description": "限制每个每小时IP的订阅数。",
"EditForm.inputSelect.subscriptions.label": "管理订阅配额",
"EditForm.inputToggle.description.email": "不允许用户使用不同的认证提供者(绑定的相同的电子邮件地址)来创建多个帐户。",
"EditForm.inputToggle.description.email-confirmation": "启用ON新注册的用户会收到一封确认电子邮件。",
"EditForm.inputToggle.description.email-confirmation-redirection": "确认您的电子邮件后,选择将您重定向到的位置。",
"EditForm.inputToggle.description.email-reset-password": "应用程序的重置密码页面的 URL",
"EditForm.inputToggle.description.sign-up": "当禁用OFF注册过程将被禁止。任何人无论使用任何的供应商都不可以订阅。",
"EditForm.inputToggle.label.email": "每个电子邮件地址一个帐户",
"EditForm.inputToggle.label.email-confirmation": "启用电子邮件确认",
"EditForm.inputToggle.label.email-confirmation-redirection": "重定向 URL",
"EditForm.inputToggle.label.email-reset-password": "重置密码页面 URL",
"EditForm.inputToggle.label.sign-up": "启用注册",
"EditPage.cancel": "取消",
"EditPage.form.roles": "角色详情",
"EditPage.form.roles.label.description": "描述",
"EditPage.form.roles.label.name": "名称",
"EditPage.form.roles.label.users": "与此角色相关联的用户数: ({number})",
"EditPage.form.roles.name.error": "此值是必需的。",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "创建一个新角色",
"EditPage.notification.permissions.error": "获取权限时发生错误",
"EditPage.notification.policies.error": "获取鉴权策略时发生错误",
"EditPage.notification.role.error": "获取角色时发生错误",
"EditPage.submit": "保存",
"Email.template.email_confirmation": "确认电子邮件地址",
"Email.template.reset_password": "重置密码",
"Email.template.success_register": "注册成功",
"HeaderNav.link.advancedSettings": "高级设置",
"HeaderNav.link.emailTemplates": "电子邮件模板",
"HeaderNav.link.providers": "提供者",
"HeaderNav.link.roles": "角色和权限",
"HomePage.header.description": "定义用户的角色和权限。",
"HomePage.header.title": "角色和权限",
"InputSearch.placeholder": "搜索用户",
"List.button.providers": "添加新供应商",
"List.button.roles": "添加新角色",
"List.title.emailTemplates.plural": "{number} 电子邮件模板是可用的",
"List.title.emailTemplates.singular": "{number} 电子邮件模板是可用的",
"List.title.providers.disabled.plural": "{number} 被禁用",
"List.title.providers.disabled.singular": "{number} 被禁用",
"List.title.providers.enabled.plural": "{number} 个供应商被启用, ",
"List.title.providers.enabled.singular": "{number} 个供应商被启用, ",
"List.title.roles.plural": "{number} 角色可用",
"List.title.roles.singular": "{number} 个角色可用",
"Plugin.permissions.application.description": "定义所有项目的允许操作。",
"Plugin.permissions.plugins.description": "定义 {name} 插件所有允许的操作。",
"Plugins.header.description": "下面只列出路由绑定的操作。",
"Plugins.header.title": "权限",
"Policies.InputSelect.empty": "没有",
"Policies.InputSelect.label": "允许执行以下操作:",
"Policies.header.hint": "选择应用程序或插件的操作,然后点击 COG 图标显示绑定的路由",
"Policies.header.title": "高级设置",
"PopUpForm.Email.email_templates.inputDescription": "如果你不确定如何使用变量, {link}",
"PopUpForm.Email.link.documentation": "看看我们的文档。",
"PopUpForm.Email.options.from.email.label": "Shipper 电子邮件地址",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "Shipper 名称",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "消息",
"PopUpForm.Email.options.object.label": "主题",
"PopUpForm.Email.options.response_email.label": "回复电子邮件",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>请点击此链接验证您的帐户</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "请确认您的电子邮件地址 %APP_NAME%",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>请点击此链接验证您的帐户</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "请确认您的电子邮件地址 %APP_NAME%",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>请点击此链接验证您的帐户</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "请确认您的电子邮件地址 %APP_NAME%",
"PopUpForm.Providers.callback.placeholder": "文本",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "Discord 应用中配置的重定向 URL",
"PopUpForm.Providers.enabled.description": "如果禁用,用户将无法使用此供应商。",
"PopUpForm.Providers.enabled.label": "启用",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "Facebook 应用中配置的重定向 URL",
"PopUpForm.Providers.github.providerConfig.redirectURL": "GitHub 应用中配置的重定向 URL",
"PopUpForm.Providers.google.providerConfig.redirectURL": "Google 应用中配置的重定向 URL",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "Instagram 应用中配置的重定向 URL",
"PopUpForm.Providers.vk.providerConfig.redirectURL": "VK 应用中配置的重定向 URL",
"PopUpForm.Providers.key.label": "Client ID",
"PopUpForm.Providers.key.placeholder": "文本",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "Linkedin 应用中配置的重定向 URL",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "要在您的 Microsoft 应用程序配置中添加的重定向 URL",
"PopUpForm.Providers.redirectURL.front-end.label": "重定向 URL",
"PopUpForm.Providers.secret.label": "Client Secret",
"PopUpForm.Providers.secret.placeholder": "文本",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "Twitter 应用中配置的重定向 URL",
"PopUpForm.button.cancel": "取消",
"PopUpForm.button.save": "保存",
"PopUpForm.header.add.providers": "增加新的供应商",
"PopUpForm.header.edit.email-templates": "编辑电子邮件模版",
"PopUpForm.header.edit.providers": "编辑供应商",
"PopUpForm.inputSelect.providers.label": "选择供应商",
"components.Input.error.password.length": "密码过短",
"notification.error.delete": "删除数据时出错",
"notification.error.fetch": "获取数据时出错",
"notification.error.fetchUser": "获取用户时出错",
"notification.info.emailSent": "电子邮件已发送",
"notification.success.delete": "该项已被删除",
"notification.success.submit": "设置已被更新",
"plugin.description.long": "使用基于 JWT 的完整身份验证过程来保护 API。这个插件还有一个 ACL 策略,允许你管理用户组之间的权限。",
"plugin.description.short": "使用基于 JWT 的完整身份验证过程保护 API"
}

View File

@ -0,0 +1,109 @@
{
"BoundRoute.title": "綁定路徑到",
"Controller.input.label": "{label} ",
"Controller.selectAll": "全選",
"EditForm.inputSelect.description.role": "將新的驗證使用者加入此身份。",
"EditForm.inputSelect.durations.description": "每小時使用者訂閱失敗的數量",
"EditForm.inputSelect.durations.label": "時間",
"EditForm.inputSelect.label.role": "驗證使用者預設身份",
"EditForm.inputSelect.subscriptions.description": "限制 IP 每小時請求數",
"EditForm.inputSelect.subscriptions.label": "管理請求量",
"EditForm.inputToggle.description.email": "禁止使用者使用同一個電子郵件地址 + 不同的驗證方式註冊多個帳號",
"EditForm.inputToggle.description.email-confirmation": "當啟用後,新註冊的使用者將會收到一封認證郵件。",
"EditForm.inputToggle.description.email-confirmation-redirection": "認證完後後,使用者被重新導向的網址。",
"EditForm.inputToggle.description.sign-up": "當停用後,不論使用任何驗證方式使用者將無法註冊。",
"EditForm.inputToggle.label.email": "電子郵件地址單一帳號限制",
"EditForm.inputToggle.label.email-confirmation": "啟用電子郵件地址驗證",
"EditForm.inputToggle.label.email-confirmation-redirection": "重新導向網址",
"EditForm.inputToggle.label.sign-up": "啟用註冊",
"EditPage.cancel": "取消",
"EditPage.form.roles": "身份詳細資料",
"EditPage.form.roles.label.description": "說明",
"EditPage.form.roles.label.name": "名稱",
"EditPage.form.roles.label.users": "和這個身份有關的使用者 ({number})",
"EditPage.form.roles.name.error": "必填數值",
"EditPage.header.description": "{description} ",
"EditPage.header.description.create": " ",
"EditPage.header.title": "{name} ",
"EditPage.header.title.create": "建立一個身份",
"EditPage.notification.permissions.error": "讀取權限時發生錯誤",
"EditPage.notification.policies.error": "讀取政策時發生錯誤",
"EditPage.notification.role.error": "讀取身份時發生錯誤",
"EditPage.submit": "儲存",
"Email.template.email_confirmation": "電子郵件地址認證",
"Email.template.reset_password": "重設密碼",
"Email.template.success_register": "註冊成功",
"HeaderNav.link.advancedSettings": "進階設定",
"HeaderNav.link.emailTemplates": "郵件範本",
"HeaderNav.link.providers": "驗證方式",
"HeaderNav.link.roles": "身份",
"HomePage.header.description": "為您的使用者設定身份和權限",
"HomePage.header.title": "使用者 & 權限",
"InputSearch.placeholder": "搜尋使用者",
"List.button.providers": "增加新的驗證方式",
"List.button.roles": "增加新身份",
"List.title.emailTemplates.plural": "{number} 個郵件範本可用",
"List.title.emailTemplates.singular": "{number} 個郵件範本可用",
"List.title.providers.disabled.plural": "{number} 已停用",
"List.title.providers.disabled.singular": "{number} 已停用",
"List.title.providers.enabled.plural": "{number} 個驗證方式已啟動",
"List.title.providers.enabled.singular": "{number} 個驗證方式已啟動",
"List.title.roles.plural": "{number} 個可用身份",
"List.title.roles.singular": "{number} 個可用身份",
"Plugin.permissions.application.description": "定義您專案中所有可用的操作",
"Plugin.permissions.plugins.description": "為 {name} 擴充功能定義所有可用的操作",
"Plugins.header.description": "只有綁定路徑的操作會顯示在下方",
"Plugins.header.title": "權限",
"Policies.InputSelect.empty": "無",
"Policies.InputSelect.label": "限制此操作:",
"Policies.header.hint": "選取應用程式或擴充功能的操作然後點擊齒輪圖示以顯示綁定路徑",
"Policies.header.title": "進階設定",
"PopUpForm.Email.email_templates.inputDescription": "如果您不確定要怎麼使用變數,請 {link}",
"PopUpForm.Email.link.documentation": "閱讀我們的文件",
"PopUpForm.Email.options.from.email.label": "寄件人地址",
"PopUpForm.Email.options.from.email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.options.from.name.label": "寄件人名稱",
"PopUpForm.Email.options.from.name.placeholder": "John Doe",
"PopUpForm.Email.options.message.label": "訊息",
"PopUpForm.Email.options.object.label": "主旨",
"PopUpForm.Email.options.response_email.label": "回覆地址",
"PopUpForm.Email.options.response_email.placeholder": "johndoe@gmail.com",
"PopUpForm.Email.reset_password.options.message.placeholder": "<p>請點擊這個連結以認證您的電子郵件地址</p>",
"PopUpForm.Email.reset_password.options.object.placeholder": "請確認這個 %APP_NAME% 地址正不正確",
"PopUpForm.Email.success_register.options.message.placeholder": "<p>請點擊這個連結以認證您的電子郵件地址</p>",
"PopUpForm.Email.success_register.options.object.placeholder": "請確認這個 %APP_NAME% 地址正不正確",
"PopUpForm.Email.validation_email.options.message.placeholder": "<p>請點擊這個連結以認證您的電子郵件地址</p>",
"PopUpForm.Email.validation_email.options.object.placeholder": "請確認這個 %APP_NAME% 地址正不正確",
"PopUpForm.Providers.callback.placeholder": "TEXT",
"PopUpForm.Providers.discord.providerConfig.redirectURL": "在 Discord 的設定中填入的重新導向網址",
"PopUpForm.Providers.enabled.description": "如果停用,使用者將無法使用這個驗證方式",
"PopUpForm.Providers.enabled.label": "啟用",
"PopUpForm.Providers.facebook.providerConfig.redirectURL": "在 Facebook 的設定中填入的重新導向網址",
"PopUpForm.Providers.github.providerConfig.redirectURL": "在 GitHub 的設定中填入的重新導向網址",
"PopUpForm.Providers.google.providerConfig.redirectURL": "在 Google 的設定中填入的重新導向網址",
"PopUpForm.Providers.instagram.providerConfig.redirectURL": "在 Instagram 的設定中填入的重新導向網址",
"PopUpForm.Providers.key.label": "客戶端 ID",
"PopUpForm.Providers.key.placeholder": "TEXT",
"PopUpForm.Providers.linkedin2.providerConfig.redirectURL": "在 Linkedin 的設定中填入的重新導向網址",
"PopUpForm.Providers.microsoft.providerConfig.redirectURL": "在 Microsoft 的設定中填入的重新導向網址",
"PopUpForm.Providers.redirectURL.front-end.label": "您應用程式的前端頁面網址",
"PopUpForm.Providers.secret.label": "客戶端密鑰",
"PopUpForm.Providers.secret.placeholder": "TEXT",
"PopUpForm.Providers.twitter.providerConfig.redirectURL": "在 Twitter 的設定中填入的重新導向網址",
"PopUpForm.button.cancel": "取消",
"PopUpForm.button.save": "儲存",
"PopUpForm.header.add.providers": "新增驗證方式",
"PopUpForm.header.edit.email-templates": "編輯郵件範本",
"PopUpForm.header.edit.providers": "編輯 驗證方式",
"PopUpForm.inputSelect.providers.label": "選擇驗證方式",
"components.Input.error.password.length": "密碼長度過短",
"notification.error.delete": "刪除項目時發生錯誤",
"notification.error.fetch": "讀取資料時發生錯誤",
"notification.error.fetchUser": "讀取使用者資料時發生錯誤",
"notification.info.emailSent": "郵件已寄出",
"notification.success.delete": "項目已刪除",
"notification.success.submit": "設定已更新",
"plugin.description.long": "使用 JWT 認證保護您的 API。這個擴充功能也使用 ACL 來讓你管理不同群組使用者的權限。",
"plugin.description.short": "使用 JWT 認證保護您的 API"
}

View File

@ -0,0 +1,5 @@
import pluginId from '../pluginId';
const getTrad = id => `${pluginId}.${id}`;
export default getTrad;

View File

@ -0,0 +1,7 @@
import React from 'react';
const AdvancedSettingsPage = () => {
return <div>Advanced settings</div>;
};
export default AdvancedSettingsPage;

View File

@ -1,28 +0,0 @@
/**
*
* This component is the skeleton around the actual pages, and should only
* contain code that should be seen on all pages. (e.g. navigation bar)
*
*/
import React from 'react';
import { Redirect } from 'react-router-dom';
import { LoadingIndicatorPage, useUserPermissions } from 'strapi-helper-plugin';
import pluginPermissions from '../../permissions';
import Main from '../Main';
const App = () => {
const { isLoading, allowedActions } = useUserPermissions(pluginPermissions);
if (isLoading) {
return <LoadingIndicatorPage />;
}
if (allowedActions.canMain) {
return <Main allowedActions={allowedActions} />;
}
return <Redirect to="/" />;
};
export default App;

View File

@ -1,55 +0,0 @@
import styled from 'styled-components';
import { sizes } from 'strapi-helper-plugin';
const Wrapper = styled.div`
* {
box-sizing: border-box;
}
> .container-fluid {
padding: 18px 30px;
> div:first-child {
margin-bottom: 7px;
@media (min-width: ${sizes.desktop}) {
margin-bottom: 11px;
}
}
}
.form-wrapper {
padding-top: 21px;
}
.form-container {
background: #ffffff;
padding: 22px 28px 0px;
border-radius: 2px;
box-shadow: 0 2px 4px #e3e9f3;
}
form {
padding-top: 2rem;
}
`;
const Loader = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
min-height: 260px;
margin: auto;
`;
const Title = styled.div`
font-size: 18px;
line-height: 18px;
font-weight: bold;
`;
const Separator = styled.div`
margin-top: 13px;
border-top: 1px solid #f6f6f6;
`;
export { Loader, Title, Separator, Wrapper };

View File

@ -1,239 +0,0 @@
/*
*
* EditPage actions
*
*/
import { fromJS, List, Map } from 'immutable';
import { get, replace, toString } from 'lodash';
import {
ADD_USER,
GET_PERMISSIONS,
GET_PERMISSIONS_SUCCEEDED,
GET_POLICIES,
GET_POLICIES_SUCCEEDED,
GET_ROLE,
GET_ROLE_SUCCEEDED,
GET_ROUTES_SUCCEEDED,
GET_USER,
GET_USER_SUCCEEDED,
ON_CANCEL,
ON_CHANGE_INPUT,
ON_CLICK_ADD,
ON_CLICK_DELETE,
RESET_PROPS,
RESET_SHOULD_DISPLAY_POLICIES_HINT,
SELECT_ALL_ACTIONS,
SET_ACTION_TYPE,
SET_ERRORS,
SET_FORM,
SET_INPUT_POLICIES_PATH,
SET_ROLE_ID,
SET_SHOULD_DISPLAY_POLICIES_HINT,
SUBMIT,
SUBMIT_ERROR,
SUBMIT_SUCCEEDED,
} from './constants';
export function addUser(newUser) {
return {
type: ADD_USER,
newUser,
};
}
export function getPermissions() {
return {
type: GET_PERMISSIONS,
};
}
export function getPermissionsSucceeded(data) {
const permissions = Map(fromJS(data.permissions));
return {
type: GET_PERMISSIONS_SUCCEEDED,
permissions,
};
}
export function getPolicies() {
return {
type: GET_POLICIES,
};
}
export function getPoliciesSucceeded(policies) {
const formattedPolicies = policies.policies.reduce((acc, current) => {
acc.push({ value: current });
return acc;
},[]);
return {
type: GET_POLICIES_SUCCEEDED,
policies: [{ name: 'users-permissions.Policies.InputSelect.empty', value: '' }].concat(formattedPolicies),
};
}
export function getRole(id) {
return {
type: GET_ROLE,
id,
};
}
export function getRoleSucceeded(data) {
const form = Map({
name: get(data, ['role', 'name']),
description: get(data, ['role', 'description']),
users: List(get(data, ['role', 'users'])),
permissions: Map(fromJS(get(data, ['role', 'permissions']))),
});
return {
type: GET_ROLE_SUCCEEDED,
form,
};
}
export function getRoutesSucceeded(routes) {
return {
type: GET_ROUTES_SUCCEEDED,
routes,
};
}
export function getUser(user) {
return {
type: GET_USER,
user,
};
}
export function getUserSucceeded(users) {
return {
type: GET_USER_SUCCEEDED,
users: users.filter(o => toString(o.role) !== '0'),
};
}
export function onCancel() {
return {
type: ON_CANCEL,
};
}
export function onChangeInput({ target }) {
const keys = ['modifiedData'].concat(target.name.split('.'));
return {
type: ON_CHANGE_INPUT,
keys,
value: target.value,
};
}
export function onClickAdd(itemToAdd) {
return {
type: ON_CLICK_ADD,
itemToAdd,
};
}
export function onClickDelete(itemToDelete) {
return {
type: ON_CLICK_DELETE,
itemToDelete,
};
}
export const resetProps = () => ({
type: RESET_PROPS,
});
export function resetShouldDisplayPoliciesHint() {
return {
type: RESET_SHOULD_DISPLAY_POLICIES_HINT,
};
}
export function selectAllActions(name, shouldEnable) {
return {
type: SELECT_ALL_ACTIONS,
keys: ['modifiedData'].concat(name.split('.')),
shouldEnable,
};
}
export function setActionType(action) {
const actionType = action === 'create' ? 'POST' : 'PUT';
return {
type: SET_ACTION_TYPE,
actionType,
};
}
export function setErrors(formErrors) {
return {
type: SET_ERRORS,
formErrors,
};
}
export function setForm() {
const form = Map({
name: '',
description: '',
users: List([]),
permissions: Map({}),
});
return {
type: SET_FORM,
form,
};
}
export function setInputPoliciesPath(path) {
const inputPath = replace(path, 'enabled', 'policy');
return {
type: SET_INPUT_POLICIES_PATH,
inputPath,
};
}
export function setRoleId(roleId) {
return {
type: SET_ROLE_ID,
roleId,
};
}
export function setShouldDisplayPolicieshint() {
return {
type: SET_SHOULD_DISPLAY_POLICIES_HINT,
};
}
export function submit(context) {
return {
type: SUBMIT,
context,
};
}
export function submitError(errors) {
return {
type: SUBMIT_ERROR,
errors,
};
}
export function submitSucceeded() {
return {
type: SUBMIT_SUCCEEDED,
};
}

View File

@ -1,32 +0,0 @@
/*
*
* EditPage constants
*
*/
export const ADD_USER = 'UsersPermissions/EditPage/ADD_USER';
export const GET_PERMISSIONS = 'UsersPermissions/EditPage/GET_PERMISSIONS';
export const GET_PERMISSIONS_SUCCEEDED = 'UsersPermissions/EditPage/GET_PERMISSIONS_SUCCEEDED';
export const GET_POLICIES = 'UsersPermissions/EditPage/GET_POLICIES';
export const GET_POLICIES_SUCCEEDED = 'UsersPermissions/EditPage/GET_POLICIES_SUCCEEDED';
export const GET_ROLE = 'UsersPermissions/EditPage/GET_ROLE';
export const GET_ROLE_SUCCEEDED = 'UsersPermissions/EditPage/GET_ROLE_SUCCEEDED';
export const GET_ROUTES_SUCCEEDED = 'UsersPermissions/EditPage/GET_ROUTES_SUCCEEDED';
export const GET_USER = 'UsersPermissions/EditPage/GET_USER';
export const GET_USER_SUCCEEDED = 'UsersPermissions/EditPage/GET_USER_SUCCEEDED';
export const ON_CANCEL = 'UsersPermissions/EditPage/ON_CANCEL';
export const ON_CHANGE_INPUT = 'UsersPermissions/EditPage/ON_CHANGE_INPUT';
export const ON_CLICK_ADD = 'UsersPermissions/EditPage/ON_CLICK_ADD';
export const ON_CLICK_DELETE = 'UsersPermissions/EditPage/ON_CLICK_DELETE';
export const RESET_PROPS = 'UsersPermissions/EditPage/RESET_PROPS';
export const RESET_SHOULD_DISPLAY_POLICIES_HINT = 'UsersPermissions/EditPage/RESET_SHOULD_DISPLAY_POLICIES_HINT';
export const SELECT_ALL_ACTIONS = 'UsersPermissions/EditPage/SELECT_ALL_ACTIONS';
export const SET_ACTION_TYPE = 'UsersPermissions/EditPage/SET_ACTION_TYPE';
export const SET_ERRORS = 'UsersPermissions/EditPage/SET_ERRORS';
export const SET_FORM = 'UsersPermissions/EditPage/SET_FORM';
export const SET_INPUT_POLICIES_PATH = 'UsersPermissions/EditPage/SET_INPUT_POLICIES_PATH';
export const SET_ROLE_ID = 'UsersPermissions/EditPage/SET_ROLE_ID';
export const SET_SHOULD_DISPLAY_POLICIES_HINT = 'UsersPermissions/EditPage/SET_SHOULD_DISPLAY_POLICIES_HINT';
export const SUBMIT = 'UsersPermissions/EditPage/SUBMIT';
export const SUBMIT_ERROR = 'UsersPermissions/EditPage/SUBMIT_ERROR';
export const SUBMIT_SUCCEEDED = 'UsersPermissions/EditPage/SUBMIT_SUCCEEDED';

View File

@ -1,384 +0,0 @@
/**
*
* EditPage
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect';
import { bindActionCreators, compose } from 'redux';
import { FormattedMessage } from 'react-intl';
import { findIndex, get, isEmpty, isEqual, size } from 'lodash';
// Design
import {
GlobalContext,
BackHeader,
InputsIndex as Input,
LoadingIndicator,
LoadingIndicatorPage,
} from 'strapi-helper-plugin';
import { Header } from '@buffetjs/custom';
import { EditPageContextProvider } from '../../contexts/EditPage';
import InputSearch from '../../components/InputSearchContainer';
import Plugins from '../../components/Plugins';
import Policies from '../../components/Policies';
import pluginId from '../../pluginId';
import getTrad from '../../utils/getTrad';
// Actions
import {
addUser,
getPermissions,
getPolicies,
getRole,
getUser,
onCancel,
onChangeInput,
onClickAdd,
onClickDelete,
selectAllActions,
setActionType,
setErrors,
setForm,
setInputPoliciesPath,
setRoleId,
setShouldDisplayPolicieshint,
submit,
resetProps,
resetShouldDisplayPoliciesHint,
} from './actions';
// Selectors
import makeSelectEditPage from './selectors';
import saga from './saga';
import { Loader, Title, Separator, Wrapper } from './Components';
/* eslint-disable react/sort-comp */
export class EditPage extends React.Component {
// eslint-disable-line react/prefer-stateless-function
getChildContext = () => ({
onChange: this.props.onChangeInput,
selectAllActions: this.props.selectAllActions,
setInputPoliciesPath: this.props.setInputPoliciesPath,
setShouldDisplayPolicieshint: this.props.setShouldDisplayPolicieshint,
resetShouldDisplayPoliciesHint: this.props.resetShouldDisplayPoliciesHint,
});
static contextType = GlobalContext;
componentDidMount() {
this.props.setActionType(this.props.match.params.actionType);
this.props.getPolicies();
if (this.props.match.params.actionType === 'create') {
// Set reducer modifiedData
this.props.setForm();
// Get the available permissions
this.props.getPermissions();
} else {
this.props.setRoleId(this.props.match.params.id);
this.props.getRole(this.props.match.params.id);
}
}
componentDidUpdate(prevProps) {
// Redirect user to HomePage if submit ok
if (prevProps.editPage.didSubmit !== this.props.editPage.didSubmit) {
this.props.history.push(`/plugins/${pluginId}/roles`);
}
}
componentWillUnmount() {
// Empty formErrors
this.props.setErrors([]);
// Empty modifiedData so prev values aren't displayed when loading
this.props.resetProps();
this.props.resetShouldDisplayPoliciesHint();
}
handleSubmit = () => {
// Check if the name field is filled
if (isEmpty(get(this.props.editPage, ['modifiedData', 'name']))) {
return this.props.setErrors([
{
name: 'name',
errors: [{ id: getTrad('EditPage.form.roles.name.error') }],
},
]);
}
return this.props.submit(this.context);
};
showLoaderForm = () => {
const {
editPage: { modifiedData },
match: {
params: { actionType },
},
} = this.props;
return actionType !== 'create' && isEmpty(modifiedData);
};
showLoaderPermissions = () => {
const {
editPage: { modifiedData },
} = this.props;
return isEmpty(get(modifiedData, ['permissions']));
};
renderFirstBlock = () => (
<>
<div className="col-md-6">
<div className="row">
<Input
autoFocus
customBootstrapClass="col-md-12"
errors={get(this.props.editPage, [
'formErrors',
findIndex(this.props.editPage.formErrors, ['name', 'name']),
'errors',
])}
didCheckErrors={this.props.editPage.didCheckErrors}
label={{ id: getTrad('EditPage.form.roles.label.name') }}
name="name"
onChange={this.props.onChangeInput}
type="text"
validations={{ required: true }}
value={get(this.props.editPage, ['modifiedData', 'name'])}
/>
</div>
<div className="row">
<Input
customBootstrapClass="col-md-12"
label={{
id: getTrad('EditPage.form.roles.label.description'),
}}
name="description"
onChange={this.props.onChangeInput}
type="textarea"
validations={{ required: true }}
value={get(this.props.editPage, ['modifiedData', 'description'])}
/>
</div>
</div>
<InputSearch
addUser={this.props.addUser}
didDeleteUser={this.props.editPage.didDeleteUser}
didFetchUsers={this.props.editPage.didFetchUsers}
didGetUsers={this.props.editPage.didGetUsers}
getUser={this.props.getUser}
label={{
id: getTrad('EditPage.form.roles.label.users'),
params: {
number: size(get(this.props.editPage, ['modifiedData', 'users'])),
},
}}
onClickAdd={itemToAdd => {
this.context.emitEvent('didAssociateUserToRole');
this.props.onClickAdd(itemToAdd);
}}
onClickDelete={this.props.onClickDelete}
name="users"
type="text"
users={get(this.props.editPage, 'users')}
validations={{ required: true }}
values={get(this.props.editPage, ['modifiedData', 'users'])}
/>
<div className="col-md-12">
<Separator />
</div>
</>
);
render() {
const { formatMessage, plugins: appPlugins } = this.context;
const pluginHeaderTitle =
this.props.match.params.actionType === 'create'
? getTrad('EditPage.header.title.create')
: getTrad('EditPage.header.title');
const pluginHeaderDescription =
this.props.match.params.actionType === 'create'
? getTrad('EditPage.header.description.create')
: getTrad('EditPage.header.description');
const pluginHeaderActions = [
{
label: formatMessage({ id: getTrad('EditPage.cancel') }),
color: 'cancel',
onClick: this.props.onCancel,
type: 'button',
key: 'button-cancel',
},
{
color: 'success',
label: formatMessage({ id: getTrad('EditPage.submit') }),
onClick: this.handleSubmit,
type: 'submit',
disabled: isEqual(this.props.editPage.modifiedData, this.props.editPage.initialData),
key: 'button-submit',
},
];
if (this.showLoaderForm()) {
return <LoadingIndicatorPage />;
}
return (
<EditPageContextProvider
appPlugins={appPlugins}
onChange={this.props.onChangeInput}
selectAllActions={this.props.selectAllActions}
setInputPoliciesPath={this.props.setInputPoliciesPath}
setShouldDisplayPolicieshint={this.props.setShouldDisplayPolicieshint}
resetShouldDisplayPoliciesHint={this.props.resetShouldDisplayPoliciesHint}
>
<Wrapper>
<BackHeader onClick={() => this.props.history.goBack()} />
<div className="container-fluid">
<FormattedMessage
id={pluginHeaderTitle}
values={{ name: get(this.props.editPage.initialData, 'name') }}
>
{title => {
return (
<FormattedMessage
id={pluginHeaderDescription}
values={{
description: get(this.props.editPage.initialData, 'description', ''),
}}
>
{description => {
return (
<Header
title={{
label: title,
}}
content={description}
actions={pluginHeaderActions}
/>
);
}}
</FormattedMessage>
);
}}
</FormattedMessage>
<div className="form-wrapper row">
<div className="col-md-12">
<div className="form-container">
<Title>
<FormattedMessage id={getTrad('EditPage.form.roles')} />
</Title>
<form>
<div className="row">
{this.showLoaderForm() ? (
<Loader>
<LoadingIndicator />
</Loader>
) : (
this.renderFirstBlock()
)}
</div>
<div className="row" style={{ marginRight: '-30px' }}>
{this.showLoaderPermissions() && (
<Loader style={{ minHeight: '400px' }}>
<LoadingIndicator />
</Loader>
)}
{!this.showLoaderPermissions() && (
<Plugins
plugins={get(this.props.editPage, ['modifiedData', 'permissions'])}
/>
)}
<Policies
shouldDisplayPoliciesHint={this.props.editPage.shouldDisplayPoliciesHint}
inputSelectName={this.props.editPage.inputPoliciesPath}
routes={this.props.editPage.routes}
selectOptions={this.props.editPage.policies}
values={this.props.editPage.modifiedData}
/>
</div>
</form>
</div>
</div>
</div>
</div>
</Wrapper>
</EditPageContextProvider>
);
}
}
EditPage.childContextTypes = {
onChange: PropTypes.func.isRequired,
selectAllActions: PropTypes.func.isRequired,
setInputPoliciesPath: PropTypes.func.isRequired,
setShouldDisplayPolicieshint: PropTypes.func.isRequired,
resetShouldDisplayPoliciesHint: PropTypes.func.isRequired,
};
EditPage.propTypes = {
addUser: PropTypes.func.isRequired,
editPage: PropTypes.object.isRequired,
getPermissions: PropTypes.func.isRequired,
getPolicies: PropTypes.func.isRequired,
getRole: PropTypes.func.isRequired,
getUser: PropTypes.func.isRequired,
history: PropTypes.object.isRequired,
match: PropTypes.object.isRequired,
onCancel: PropTypes.func.isRequired,
onChangeInput: PropTypes.func.isRequired,
onClickAdd: PropTypes.func.isRequired,
onClickDelete: PropTypes.func.isRequired,
resetProps: PropTypes.func.isRequired,
resetShouldDisplayPoliciesHint: PropTypes.func.isRequired,
selectAllActions: PropTypes.func.isRequired,
setActionType: PropTypes.func.isRequired,
setErrors: PropTypes.func.isRequired,
setForm: PropTypes.func.isRequired,
setInputPoliciesPath: PropTypes.func.isRequired,
setRoleId: PropTypes.func.isRequired,
setShouldDisplayPolicieshint: PropTypes.func.isRequired,
submit: PropTypes.func.isRequired,
};
const mapStateToProps = createStructuredSelector({
editPage: makeSelectEditPage(),
});
function mapDispatchToProps(dispatch) {
return bindActionCreators(
{
addUser,
getPermissions,
getPolicies,
getRole,
getUser,
onCancel,
onChangeInput,
onClickAdd,
onClickDelete,
selectAllActions,
setActionType,
setErrors,
setForm,
setInputPoliciesPath,
setRoleId,
setShouldDisplayPolicieshint,
submit,
resetProps,
resetShouldDisplayPoliciesHint,
},
dispatch
);
}
const withConnect = connect(mapStateToProps, mapDispatchToProps);
const withSaga = strapi.injectSaga({ key: 'editPage', saga, pluginId });
export default compose(withSaga, withConnect)(EditPage);

View File

@ -1,134 +0,0 @@
/*
*
* EditPage reducer
*
*/
import { fromJS, List, Map } from 'immutable';
import { map } from 'lodash';
import {
ADD_USER,
GET_PERMISSIONS_SUCCEEDED,
GET_POLICIES_SUCCEEDED,
GET_ROLE_SUCCEEDED,
GET_USER_SUCCEEDED,
GET_ROUTES_SUCCEEDED,
ON_CANCEL,
ON_CHANGE_INPUT,
ON_CLICK_ADD,
ON_CLICK_DELETE,
RESET_PROPS,
RESET_SHOULD_DISPLAY_POLICIES_HINT,
SELECT_ALL_ACTIONS,
SET_ACTION_TYPE,
SET_ERRORS,
SET_FORM,
SET_INPUT_POLICIES_PATH,
SET_ROLE_ID,
SET_SHOULD_DISPLAY_POLICIES_HINT,
SUBMIT_ERROR,
SUBMIT_SUCCEEDED,
} from './constants';
const initialState = fromJS({
actionType: '',
didCheckErrors: false,
didDeleteUser: false,
didGetUsers: false,
didFetchUsers: false,
didSubmit: false,
formErrors: List([]),
initialData: Map({}),
inputPoliciesPath: '',
modifiedData: Map({}),
policies: List([]),
roleId: '',
routes: Map([]),
shouldDisplayPoliciesHint: true,
users: List([]),
});
function editPageReducer(state = initialState, action) {
switch (action.type) {
case ADD_USER:
return state
.updateIn(['modifiedData', 'users'], list => list.push(action.newUser));
case GET_PERMISSIONS_SUCCEEDED:
return state
.updateIn(['initialData', 'permissions'], () => action.permissions)
.updateIn(['modifiedData', 'permissions'], () => action.permissions);
case GET_POLICIES_SUCCEEDED:
return state.set('policies', List(action.policies));
case GET_ROLE_SUCCEEDED:
return state
.set('didGetUsers', !state.get('didGetUsers'))
.set('initialData', action.form)
.set('modifiedData', action.form);
case GET_ROUTES_SUCCEEDED:
return state.set('routes', Map(action.routes.routes));
case GET_USER_SUCCEEDED:
return state
.set('didFetchUsers', !state.get('didFetchUsers'))
.setIn(['users'], List(action.users));
case ON_CANCEL:
return state
.set('didCheckErrors', !state.get('didCheckErrors'))
.set('formErrors', List([]))
.set('didDeleteUser', !state.get('didDeleteUser'))
.set('modifiedData', state.get('initialData'));
case ON_CHANGE_INPUT:
return state
.updateIn(action.keys, () => action.value);
case ON_CLICK_ADD:
return state
.updateIn(['modifiedData', 'users'], list => list.push(action.itemToAdd));
case ON_CLICK_DELETE:
return state
.set('didDeleteUser', !state.get('didDeleteUser'))
.updateIn(['modifiedData', 'users'], list => list.filter(o => o[o.id ? 'id' : '_id'] !== action.itemToDelete[o.id ? 'id' : '_id']));
case RESET_PROPS:
return state
.updateIn(['modifiedData'], () => Map({}))
.update('initialData', () => Map({}))
.update('users', () => List([]));
case RESET_SHOULD_DISPLAY_POLICIES_HINT:
return state.set('shouldDisplayPoliciesHint', true);
case SELECT_ALL_ACTIONS: {
const controllerActions = state.getIn(action.keys).toJS();
map(controllerActions, (value, key) => {
controllerActions[key].enabled = action.shouldEnable;
});
return state
.updateIn(action.keys, () => Map(fromJS(controllerActions)));
}
case SET_ACTION_TYPE:
return state
.set('formErrors', List([]))
.set('actionType', action.actionType);
case SET_ERRORS:
return state
.set('formErrors', List(action.formErrors))
.set('didCheckErrors', !state.get('didCheckErrors'));
case SET_FORM:
return state
.set('didGetUsers', !state.get('didGetUsers'))
.set('initialData', action.form)
.set('modifiedData', action.form);
case SET_INPUT_POLICIES_PATH:
return state.set('inputPoliciesPath', action.inputPath);
case SET_ROLE_ID:
return state.set('roleId', action.roleId);
case SET_SHOULD_DISPLAY_POLICIES_HINT:
return state.set('shouldDisplayPoliciesHint', false);
case SUBMIT_ERROR:
return state
.set('formErrors', List(action.errors));
case SUBMIT_SUCCEEDED:
return state
.set('didSubmit', !state.get('didSubmit'));
default:
return state;
}
}
export default editPageReducer;

View File

@ -1,125 +0,0 @@
import { all, call, fork, put, select, takeLatest } from 'redux-saga/effects';
import { request } from 'strapi-helper-plugin';
import pluginId from '../../pluginId';
import getTrad from '../../utils/getTrad';
import {
getPermissionsSucceeded,
getPoliciesSucceeded,
getRoleSucceeded,
getRoutesSucceeded,
getUserSucceeded,
submitSucceeded,
} from './actions';
import {
GET_PERMISSIONS,
GET_POLICIES,
GET_ROLE,
GET_USER,
SUBMIT,
} from './constants';
import {
makeSelectActionType,
makeSelectModifiedData,
makeSelectRoleId,
} from './selectors';
export function* fetchUser(action) {
try {
const data = yield call(request, `/${pluginId}/search/${action.user}`, {
method: 'GET',
});
yield put(getUserSucceeded(data));
} catch (error) {
strapi.notification.error(getTrad('notification.error.fetchUser'));
}
}
export function* permissionsGet() {
try {
const response = yield call(request, `/${pluginId}/permissions`, {
method: 'GET',
params: {
lang: strapi.currentLanguage,
},
});
yield put(getPermissionsSucceeded(response));
} catch (err) {
strapi.notification.error(
getTrad('EditPage.notification.permissions.error')
);
}
}
export function* policiesGet() {
try {
const [policies, routes] = yield all([
call(request, `/${pluginId}/policies`, { method: 'GET' }),
call(request, `/${pluginId}/routes`, { method: 'GET' }),
]);
yield put(getPoliciesSucceeded(policies));
yield put(getRoutesSucceeded(routes));
} catch (err) {
strapi.notification.error(getTrad('EditPage.notification.policies.error'));
}
}
export function* roleGet(action) {
try {
const role = yield call(request, `/${pluginId}/roles/${action.id}`, {
method: 'GET',
params: {
lang: strapi.currentLanguage,
},
});
yield put(getRoleSucceeded(role));
} catch (err) {
strapi.notification.error(getTrad('EditPage.notification.role.error'));
}
}
export function* submit(action) {
try {
const actionType = yield select(makeSelectActionType());
const body = yield select(makeSelectModifiedData());
const roleId = yield select(makeSelectRoleId());
const opts = {
method: actionType,
body,
};
const requestURL =
actionType === 'POST'
? `/${pluginId}/roles`
: `/${pluginId}/roles/${roleId}`;
const response = yield call(request, requestURL, opts);
if (actionType === 'POST') {
action.context.emitEvent('didCreateRole');
}
if (response.ok) {
yield put(submitSucceeded());
}
} catch (error) {
console.log(error); // eslint-disable-line no-console
}
}
export default function* defaultSaga() {
yield fork(takeLatest, GET_PERMISSIONS, permissionsGet);
yield fork(takeLatest, GET_POLICIES, policiesGet);
yield fork(takeLatest, GET_ROLE, roleGet);
yield fork(takeLatest, GET_USER, fetchUser);
yield fork(takeLatest, SUBMIT, submit);
// yield take(LOCATION_CHANGE);
// yield cancel(loadPermissionsWatcher);
// yield cancel(loadPoliciesWatcher);
// yield cancel(loadRoleWatcher);
}

View File

@ -1,39 +0,0 @@
import { createSelector } from 'reselect';
import pluginId from '../../pluginId';
/**
* Direct selector to the editPage state domain
*/
const selectEditPageDomain = () => (state) => state.get(`${pluginId}_editPage`);
/**
* Default selector used by EditPage
*/
const makeSelectEditPage = () => createSelector(
selectEditPageDomain(),
(substate) => substate.toJS(),
);
const makeSelectActionType = () => createSelector(
selectEditPageDomain(),
(substate) => substate.get('actionType'),
);
const makeSelectModifiedData = () => createSelector(
selectEditPageDomain(),
(substate) => substate.get('modifiedData').toJS(),
);
const makeSelectRoleId = () => createSelector(
selectEditPageDomain(),
(substate) => substate.get('roleId'),
);
export default makeSelectEditPage;
export {
makeSelectActionType,
makeSelectModifiedData,
makeSelectRoleId,
selectEditPageDomain,
};

View File

@ -0,0 +1,7 @@
import React from 'react';
const EmailTemplatesPage = () => {
return <div>Email templates</div>;
};
export default EmailTemplatesPage;

View File

@ -1,7 +0,0 @@
import styled from 'styled-components';
const Wrapper = styled.div`
padding: 18px 30px;
`;
export default Wrapper;

View File

@ -1,128 +0,0 @@
/*
*
* HomePage actions
*
*/
import { fromJS } from 'immutable';
import { isArray } from 'lodash';
import {
CANCEL_CHANGES,
DELETE_DATA,
DELETE_DATA_SUCCEEDED,
FETCH_DATA,
FETCH_DATA_SUCCEEDED,
ON_CHANGE,
RESET_PROPS,
SET_DATA_TO_EDIT,
SET_FORM,
SET_FORM_ERRORS,
SUBMIT,
SUBMIT_SUCCEEDED,
UNSET_DATA_TO_EDIT,
} from './constants';
export function cancelChanges() {
return {
type: CANCEL_CHANGES,
};
}
export function deleteData(dataToDelete, deleteEndPoint) {
return {
type: DELETE_DATA,
dataToDelete,
deleteEndPoint,
};
}
export function deleteDataSucceeded(indexDataToDelete) {
return {
type: DELETE_DATA_SUCCEEDED,
indexDataToDelete,
};
}
export function fetchData(endPoint) {
return {
type: FETCH_DATA,
endPoint,
};
}
export function fetchDataSucceeded(data) {
if (!isArray(data)) {
const list = Object.keys(data).reduce((acc, current) => {
const obj = Object.assign({ name: current }, data[current]);
acc.push(obj);
return acc;
}, []);
return {
type: FETCH_DATA_SUCCEEDED,
data: list,
modifiedData: fromJS(data),
};
}
return {
type: FETCH_DATA_SUCCEEDED,
data,
modifiedData: fromJS({}),
};
}
export function onChange({ target }) {
return {
type: ON_CHANGE,
keys: ['modifiedData'].concat(target.name.split('.')),
value: target.value,
};
}
export function resetProps() {
return {
type: RESET_PROPS,
};
}
export function setDataToEdit(dataToEdit) {
return {
type: SET_DATA_TO_EDIT,
dataToEdit,
};
}
export function setForm(data) {
return {
type: SET_FORM,
form: fromJS(data),
};
}
export function setFormErrors(formErrors) {
return {
type: SET_FORM_ERRORS,
formErrors,
};
}
export function submit(endPoint, context) {
return {
type: SUBMIT,
endPoint,
context,
};
}
export function submitSucceeded() {
return {
type: SUBMIT_SUCCEEDED,
};
}
export function unsetDataToEdit() {
return {
type: UNSET_DATA_TO_EDIT,
};
}

View File

@ -1,54 +0,0 @@
import { get, isEmpty, isObject } from 'lodash';
export default function checkFormValidity(
settingType,
data,
providerToEdit = ''
) {
const formErrors = [];
switch (settingType) {
case 'providers': {
const isProviderEnabled = get(data, 'enabled');
const keys = providerToEdit === 'email' ? [] : ['key', 'secret'];
keys.forEach(key => {
if (isProviderEnabled && isEmpty(get(data, key))) {
formErrors.push({
name: key,
errors: [{ id: 'components.Input.error.validation.required' }],
});
}
});
break;
}
case 'email-templates': {
Object.keys(data.options).forEach(value => {
if (isObject(data.options[value])) {
Object.keys(data.options[value]).forEach(subValue => {
if (isEmpty(get(data, ['options', value, subValue]))) {
formErrors.push({
name: `options.${value}.${subValue}`,
errors: [{ id: 'components.Input.error.validation.required' }],
});
}
});
}
if (
value !== 'response_email' &&
isEmpty(get(data, ['options', value]))
) {
formErrors.push({
name: `options.${value}`,
errors: [{ id: 'components.Input.error.validation.required' }],
});
}
});
break;
}
default:
}
return formErrors;
}

View File

@ -1,19 +0,0 @@
/*
*
* HomePage constants
*
*/
export const CANCEL_CHANGES = 'UsersPermissions/HomePage/CANCEL_CHANGES';
export const DELETE_DATA = 'UsersPermissions/HomePage/DELETE_DATA';
export const DELETE_DATA_SUCCEEDED = 'UsersPermissions/HomePage/DELETE_DATA_SUCCEEDED';
export const FETCH_DATA = 'UsersPermissions/HomePage/FETCH_DATA';
export const FETCH_DATA_SUCCEEDED = 'UsersPermissions/HomePage/FETCH_DATA_SUCCEEDED';
export const ON_CHANGE = 'UsersPermissions/HomePage/ON_CHANGE';
export const RESET_PROPS = 'UsersPermissions/HomePage/RESET_PROPS';
export const SET_DATA_TO_EDIT = 'UsersPermissions/HomePage/SET_DATA_TO_EDIT';
export const SET_FORM = 'UsersPermissions/HomePage/SET_FORM';
export const SET_FORM_ERRORS = 'UsersPermissions/HomePage/SET_FORM_ERRORS';
export const SUBMIT = 'UsersPermissions/HomePage/SUBMIT';
export const SUBMIT_SUCCEEDED = 'UsersPermissions/HomePage/SUBMIT_SUCCEEDED';
export const UNSET_DATA_TO_EDIT = 'UsersPermissions/HomePage/UNSET_DATA_TO_EDIT';

View File

@ -1,313 +0,0 @@
/*
*
* HomePage
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { injectIntl } from 'react-intl';
import { bindActionCreators, compose } from 'redux';
import { clone, get, includes, isEqual, isEmpty } from 'lodash';
import { Header } from '@buffetjs/custom';
import { Button } from '@buffetjs/core';
import { GlobalContext, HeaderNav, CheckPermissions } from 'strapi-helper-plugin';
import pluginId from '../../pluginId';
import getTrad from '../../utils/getTrad';
import { HomePageContextProvider } from '../../contexts/HomePage';
import EditForm from '../../components/EditForm';
import List from '../../components/List';
import PopUpForm from '../../components/PopUpForm';
import selectHomePage from './selectors';
import Wrapper from './Wrapper';
import {
cancelChanges,
deleteData,
fetchData,
onChange,
resetProps,
setDataToEdit,
setFormErrors,
submit,
unsetDataToEdit,
} from './actions';
import saga from './saga';
import checkFormValidity from './checkFormValidity';
import pluginPermissions from '../../permissions';
/* eslint-disable consistent-return */
/* eslint-disable react/sort-comp */
/* eslint-disable react/no-access-state-in-setstate */
const keyBoardShortCuts = [18, 78];
export class HomePage extends React.Component {
state = { mapKey: {}, showModalEdit: false };
pluginHeaderActions = [
{
label: this.context.formatMessage({
id: getTrad('EditPage.cancel'),
}),
color: 'cancel',
onClick: () => this.props.cancelChanges(),
type: 'button',
key: 'button-cancel',
Component: props => (
<CheckPermissions permissions={pluginPermissions.updateAdvancedSettings}>
<Button {...props} />
</CheckPermissions>
),
},
{
color: 'success',
label: this.context.formatMessage({
id: getTrad('EditPage.submit'),
}),
onClick: () => this.props.submit(this.props.match.params.settingType),
type: 'submit',
key: 'button-submit',
Component: props => (
<CheckPermissions permissions={pluginPermissions.updateAdvancedSettings}>
<Button {...props} />
</CheckPermissions>
),
},
];
componentDidMount() {
this.props.fetchData(this.props.match.params.settingType);
document.addEventListener('keydown', this.handleKeyBoardShortCut);
document.addEventListener('keyup', this.handleKeyBoardShortCut);
}
UNSAFE_componentWillReceiveProps(nextProps) {
if (nextProps.dataToEdit !== this.props.dataToEdit) {
this.setState({ showModalEdit: !isEmpty(nextProps.dataToEdit) });
}
}
UNSAFE_componentWillUpdate(nextProps) {
const allowedPaths = ['roles', 'providers', 'email-templates', 'advanced'];
const shouldRedirect =
allowedPaths.filter(el => el === nextProps.match.params.settingType).length === 0;
if (shouldRedirect) {
this.props.history.push('/404');
}
if (nextProps.didDeleteData !== this.props.didDeleteData) {
this.props.fetchData(nextProps.match.params.settingType);
}
}
componentDidUpdate(prevProps) {
if (prevProps.match.params.settingType !== this.props.match.params.settingType) {
this.props.fetchData(this.props.match.params.settingType);
}
}
componentWillUnmount() {
document.removeEventListener('keydown', this.handleKeyBoardShortCut);
document.removeEventListener('keyup', this.handleKeyBoardShortCut);
this.props.resetProps();
}
getEndPoint = () => this.props.match.params.settingType;
handleKeyBoardShortCut = e => {
if (includes(keyBoardShortCuts, e.keyCode)) {
const mapKey = clone(this.state.mapKey);
mapKey[e.keyCode] = e.type === 'keydown';
this.setState({ mapKey });
// Check if user pressed option + n;
if (mapKey[18] && mapKey[78]) {
this.setState({ mapKey: {} });
this.handleButtonClick();
}
}
};
handleButtonClick = () => {
// TODO change open modal URL
if (this.props.match.params.settingType === 'roles') {
this.context.emitEvent('willCreateRole');
this.props.history.push(`${this.props.location.pathname}/create`);
} else if (this.props.match.params.settingType === 'providers') {
this.props.history.push(
`${this.props.location.pathname}#add::${this.props.match.params.settingType}`
);
}
};
handleSubmit = e => {
e.preventDefault();
const modifiedObject = get(this.props.modifiedData, [
this.getEndPoint(),
this.props.dataToEdit,
]);
const initObject = get(this.props.initialData, [this.getEndPoint(), this.props.dataToEdit]);
const formErrors = checkFormValidity(
this.props.match.params.settingType,
modifiedObject,
this.props.dataToEdit
);
if (isEqual(initObject, modifiedObject)) {
return this.props.unsetDataToEdit();
}
if (isEmpty(formErrors)) {
this.setState({ showModalEdit: false });
this.props.submit(this.props.match.params.settingType, this.context);
} else {
this.props.setFormErrors(formErrors);
}
};
isAdvanded = () => {
return this.getEndPoint() === 'advanced';
};
showLoaders = () => {
const { data, isLoading, modifiedData } = this.props;
return (
(isLoading && get(data, this.getEndPoint()) === undefined && !this.isAdvanded()) ||
(isLoading && this.isAdvanded() && get(modifiedData, this.getEndPoint()) === undefined)
);
};
static contextType = GlobalContext;
render() {
const {
allowedActions,
data,
didCheckErrors,
formErrors,
modifiedData,
initialData,
match,
dataToEdit,
tabs,
} = this.props;
const { formatMessage } = this.context;
const headerActions =
match.params.settingType === 'advanced' && !isEqual(modifiedData, initialData)
? this.pluginHeaderActions
: [];
const noButtonList =
match.params.settingType === 'email-templates' || match.params.settingType === 'providers';
const values = get(modifiedData, this.getEndPoint(), {});
return (
<HomePageContextProvider
emitEvent={this.context.emitEvent}
pathname={this.props.location.pathname}
push={this.props.history.push}
setDataToEdit={this.props.setDataToEdit}
unsetDataToEdit={this.props.unsetDataToEdit}
>
<form onSubmit={e => e.preventDefault()}>
<Wrapper className="container-fluid">
<Header
title={{
label: formatMessage({
id: getTrad('HomePage.header.title'),
}),
}}
content={formatMessage({
id: getTrad('HomePage.header.description'),
})}
actions={headerActions}
/>
<HeaderNav links={tabs} style={{ marginTop: '4.6rem' }} />
{!this.isAdvanded() ? (
<List
allowedActions={allowedActions}
data={get(data, this.getEndPoint(), [])}
deleteData={this.props.deleteData}
noButton={noButtonList}
onButtonClick={this.handleButtonClick}
settingType={match.params.settingType}
showLoaders={this.showLoaders()}
values={values}
/>
) : (
<EditForm
disabled={!allowedActions.canUpdateAdvancedSettings}
onChange={this.props.onChange}
values={values}
showLoaders={this.showLoaders()}
/>
)}
</Wrapper>
<PopUpForm
actionType="edit"
isOpen={this.state.showModalEdit}
dataToEdit={dataToEdit}
didCheckErrors={didCheckErrors}
formErrors={formErrors}
onChange={this.props.onChange}
onSubmit={this.handleSubmit}
settingType={match.params.settingType}
values={get(modifiedData, [this.getEndPoint(), dataToEdit], {})}
/>
</form>
</HomePageContextProvider>
);
}
}
HomePage.propTypes = {
cancelChanges: PropTypes.func.isRequired,
data: PropTypes.object.isRequired,
dataToEdit: PropTypes.string.isRequired,
deleteData: PropTypes.func.isRequired,
didCheckErrors: PropTypes.bool.isRequired,
didDeleteData: PropTypes.bool.isRequired,
fetchData: PropTypes.func.isRequired,
formErrors: PropTypes.array.isRequired,
history: PropTypes.object.isRequired,
initialData: PropTypes.object.isRequired,
isLoading: PropTypes.bool.isRequired,
location: PropTypes.object.isRequired,
match: PropTypes.object.isRequired,
modifiedData: PropTypes.object.isRequired,
onChange: PropTypes.func.isRequired,
resetProps: PropTypes.func.isRequired,
setDataToEdit: PropTypes.func.isRequired,
setFormErrors: PropTypes.func.isRequired,
submit: PropTypes.func.isRequired,
unsetDataToEdit: PropTypes.func.isRequired,
};
function mapDispatchToProps(dispatch) {
return bindActionCreators(
{
cancelChanges,
deleteData,
fetchData,
onChange,
resetProps,
setDataToEdit,
setFormErrors,
submit,
unsetDataToEdit,
},
dispatch
);
}
const mapStateToProps = selectHomePage();
const withConnect = connect(mapStateToProps, mapDispatchToProps);
const withSaga = strapi.injectSaga({ key: 'homePage', saga, pluginId });
export default compose(withSaga, withConnect)(injectIntl(HomePage));

View File

@ -1,100 +0,0 @@
/*
*
* HomePage reducer
*
*/
import { fromJS, List, Map } from 'immutable';
import {
CANCEL_CHANGES,
DELETE_DATA,
DELETE_DATA_SUCCEEDED,
FETCH_DATA,
FETCH_DATA_SUCCEEDED,
ON_CHANGE,
RESET_PROPS,
SET_DATA_TO_EDIT,
SET_FORM,
SET_FORM_ERRORS,
SUBMIT_SUCCEEDED,
UNSET_DATA_TO_EDIT,
} from './constants';
const initialState = fromJS({
data: fromJS({}),
dataToDelete: Map({}),
dataToEdit: '',
deleteEndPoint: '',
didCheckErrors: false,
formErrors: List([]),
initialData: Map({}),
isLoading: true,
modifiedData: Map({}),
showButtons: false,
didDeleteData: false,
endPoint: 'roles',
});
function homePageReducer(state = initialState, action) {
switch (action.type) {
case CANCEL_CHANGES:
return state
.set('formErrors', List([]))
.update('modifiedData', () => state.get('initialData'));
case DELETE_DATA:
return state
.set('dataToDelete', Map(action.dataToDelete))
.set('deleteEndPoint', action.deleteEndPoint);
case DELETE_DATA_SUCCEEDED:
return state
.updateIn(['data', state.get('endPoint')], list => list.splice(action.indexDataToDelete, 1))
.set('deleteEndPoint', '')
.set('dataToDelete', Map({}))
.update('didDeleteData', (v) => !v);
case FETCH_DATA:
return state
.update('endPoint', () => action.endPoint)
.update('isLoading', () => true);
case FETCH_DATA_SUCCEEDED:
return state
.updateIn(['data', state.get('endPoint')], () => List(action.data))
.updateIn(['initialData', state.get('endPoint')], () => action.modifiedData)
.update('isLoading', () => false)
.updateIn(['modifiedData', state.get('endPoint')], () => action.modifiedData);
case ON_CHANGE:
return state
.updateIn(action.keys, () => action.value);
case RESET_PROPS:
return initialState
.update('data', () => state.get('data'))
.update('initialData', () => state.get('initialData'))
.update('modifiedData', () => state.get('modifiedData'))
.update('endPoint', () => 'roles');
case SET_DATA_TO_EDIT:
return state.update('dataToEdit', () => action.dataToEdit);
case SET_FORM:
return state
.set('formErrors', List([]))
.updateIn(['initialData', state.get('endPoint')], () => action.form)
.updateIn(['modifiedData', state.get('endPoint')], () => action.form);
case SET_FORM_ERRORS:
return state
.update('didCheckErrors', (v) => v = !v)
.set('formErrors', List(action.formErrors));
case SUBMIT_SUCCEEDED:
return state
.set('formErrors', List([]))
.update('dataToEdit', () => '')
.update('initialData', () => state.get('modifiedData'));
case UNSET_DATA_TO_EDIT:
return state
.set('formErrors', List([]))
.update('dataToEdit', () => '')
.update('modifiedData', () => state.get('initialData'));
default:
return state;
}
}
export default homePageReducer;

View File

@ -1,95 +0,0 @@
import { findIndex, get } from 'lodash';
import { takeLatest, put, fork, select, call } from 'redux-saga/effects';
import { request } from 'strapi-helper-plugin';
import pluginId from '../../pluginId';
import getTrad from '../../utils/getTrad';
import {
deleteDataSucceeded,
fetchDataSucceeded,
setForm,
submitSucceeded,
} from './actions';
import { DELETE_DATA, FETCH_DATA, SUBMIT } from './constants';
import {
makeSelectAllData,
makeSelectDataToDelete,
makeSelectDeleteEndPoint,
makeSelectModifiedData,
} from './selectors';
export function* dataDelete() {
try {
const allData = yield select(makeSelectAllData());
const dataToDelete = yield select(makeSelectDataToDelete());
const endPointAPI = yield select(makeSelectDeleteEndPoint());
const indexDataToDelete = findIndex(allData[endPointAPI], [
'name',
dataToDelete.name,
]);
if (indexDataToDelete !== -1) {
const id = dataToDelete.id;
const requestURL = `/${pluginId}/${endPointAPI}/${id}`;
const response = yield call(request, requestURL, { method: 'DELETE' });
if (response.ok) {
yield put(deleteDataSucceeded(indexDataToDelete));
strapi.notification.success(getTrad('notification.success.delete'));
}
}
} catch (err) {
strapi.notification.error(getTrad('notification.error.delete'));
}
}
export function* dataFetch(action) {
try {
const response = yield call(request, `/${pluginId}/${action.endPoint}`, {
method: 'GET',
});
if (action.endPoint === 'advanced') {
yield put(setForm(response));
} else {
const data = response[action.endPoint] || response;
yield put(fetchDataSucceeded(data));
}
} catch (err) {
strapi.notification.error(getTrad('notification.error.fetch'));
}
}
export function* submitData(action) {
try {
const body = yield select(makeSelectModifiedData());
const opts = {
method: 'PUT',
body:
action.endPoint === 'advanced'
? get(body, ['advanced', 'settings'], {})
: body,
};
yield call(request, `/${pluginId}/${action.endPoint}`, opts);
if (action.endPoint === 'email-templates') {
action.context.emitEvent('didEditEmailTemplates');
} else if (action.endPoint === 'providers') {
action.context.emitEvent('didEditAuthenticationProvider');
}
yield put(submitSucceeded());
strapi.notification.success(getTrad('notification.success.submit'));
} catch (error) {
strapi.notification.error('notification.error');
}
}
// Individual exports for testing
export function* defaultSaga() {
yield fork(takeLatest, FETCH_DATA, dataFetch);
yield fork(takeLatest, DELETE_DATA, dataDelete);
yield fork(takeLatest, SUBMIT, submitData);
}
// All sagas to be loaded
export default defaultSaga;

View File

@ -1,49 +0,0 @@
import { createSelector } from 'reselect';
import pluginId from '../../pluginId';
/**
* Direct selector to the homePage state domain
*/
const selectHomePageDomain = () => state => state.get(`${pluginId}_homePage`);
/**
* Default selector used by HomePage
*/
const selectHomePage = () => createSelector(
selectHomePageDomain(),
(substate) => substate.toJS(),
);
/**
* Other specific selectors
*/
const makeSelectAllData = () => createSelector(
selectHomePageDomain(),
(substate) => substate.get('data').toJS(),
);
const makeSelectDataToDelete = () => createSelector(
selectHomePageDomain(),
(substate) => substate.get('dataToDelete').toJS(),
);
const makeSelectDeleteEndPoint = () => createSelector(
selectHomePageDomain(),
(substate) => substate.get('deleteEndPoint'),
);
const makeSelectModifiedData = () => createSelector(
selectHomePageDomain(),
(substate) => substate.get('modifiedData').toJS(),
);
export default selectHomePage;
export {
makeSelectAllData,
makeSelectDataToDelete,
makeSelectDeleteEndPoint,
makeSelectModifiedData,
};

View File

@ -1,75 +0,0 @@
/**
*
* This component is the skeleton around the actual pages, and should only
* contain code that should be seen on all pages. (e.g. navigation bar)
*
*/
import React from 'react';
import { Switch, Redirect, Route, useRouteMatch } from 'react-router-dom';
import { CheckPagePermissions, NotFound } from 'strapi-helper-plugin';
import { get, upperFirst, camelCase } from 'lodash';
import pluginId from '../../pluginId';
import pluginPermissions from '../../permissions';
import getTrad from '../../utils/getTrad';
import EditPage from '../EditPage';
import HomePage from '../HomePage';
const Main = ({ allowedActions }) => {
const settingType = useRouteMatch(`/plugins/${pluginId}/:settingType`);
const tabs = ['roles', 'providers', 'email-templates', 'advanced-settings']
.map(tabName => {
const name = tabName === 'advanced-settings' ? 'advanced' : tabName;
const camelCaseName = camelCase(tabName);
return {
tabName,
to: `/plugins/${pluginId}/${name}`,
name: getTrad(`HeaderNav.link.${camelCaseName}`),
canAccess: allowedActions[`canRead${upperFirst(camelCaseName)}`],
};
})
.filter(tab => tab.canAccess);
const firstAllowedSettingEndPoint = get(tabs, '0.to', '');
// Todo check if the settingType is allowed
if (!settingType) {
return <Redirect to={firstAllowedSettingEndPoint} />;
}
return (
<div className={pluginId}>
<Switch>
<Route
path={`/plugins/${pluginId}/:settingType/:actionType/:id?`}
render={props => (
<CheckPagePermissions permissions={pluginPermissions.updateRole}>
<EditPage {...props} />
</CheckPagePermissions>
)}
exact
/>
<Route
path={`/plugins/${pluginId}/:settingType`}
render={props => <HomePage {...props} tabs={tabs} allowedActions={allowedActions} />}
exact
/>
<Route component={NotFound} />
</Switch>
</div>
);
};
Main.defaultProps = {
allowedActions: {
canMain: false,
canReadAdvancedSettings: false,
canReadEmails: false,
canReadProviders: false,
canReadRoles: false,
},
};
export default Main;

View File

@ -0,0 +1,7 @@
import React from 'react';
const ProvidersPage = () => {
return <div>Providers</div>;
};
export default ProvidersPage;

View File

@ -0,0 +1,7 @@
import React from 'react';
const RolesPage = () => {
return <div>Roles</div>;
};
export default RolesPage;

View File

@ -5,16 +5,21 @@
// Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated
// IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED
import React from 'react';
import { CheckPagePermissions } from 'strapi-helper-plugin';
import pluginPkg from '../../package.json';
import pluginLogo from './assets/images/logo.svg';
import pluginPermissions from './permissions';
import layout from '../../config/layout';
import pluginId from './pluginId';
import App from './containers/App';
import Initializer from './containers/Initializer';
import RolesPage from './containers/Roles';
import ProvidersPage from './containers/Providers';
import EmailTemplatesPage from './containers/EmailTemplates';
import AdvancedSettingsPage from './containers/AdvancedSettings';
import lifecycles from './lifecycles';
import reducers from './reducers';
import trads from './translations';
import getTrad from './utils/getTrad';
export default strapi => {
const pluginDescription = pluginPkg.strapi.description || pluginPkg.description;
@ -32,27 +37,75 @@ export default strapi => {
isRequired: pluginPkg.strapi.required || false,
layout,
lifecycles,
mainComponent: App,
name,
pluginLogo,
preventComponentRendering: false,
reducers,
settings: {},
trads,
menu: {
pluginsSectionLinks: [
{
destination: `/plugins/${pluginId}`,
icon,
label: {
id: `${pluginId}.plugin.name`,
defaultMessage: 'Roles & Permissions',
reducers: null, // TODO : this is temp
settings: {
menuSection: {
id: pluginId,
title: getTrad('plugin.name'),
links: [
{
title: {
id: getTrad('HeaderNav.link.roles'),
defaultMessage: 'Roles',
},
name: 'roles',
to: `${strapi.settingsBaseURL}/${pluginId}/roles`,
Component: () => (
<CheckPagePermissions permissions={pluginPermissions.settings}>
<RolesPage />
</CheckPagePermissions>
),
permissions: pluginPermissions.settings,
},
name,
permissions: pluginPermissions.main,
},
],
{
title: {
id: getTrad('HeaderNav.link.providers'),
defaultMessage: 'Providers',
},
name: 'providers',
to: `${strapi.settingsBaseURL}/${pluginId}/providers`,
Component: () => (
<CheckPagePermissions permissions={pluginPermissions.settings}>
<ProvidersPage />
</CheckPagePermissions>
),
permissions: pluginPermissions.settings,
},
{
title: {
id: getTrad('HeaderNav.link.email-templates'),
defaultMessage: 'Email templates',
},
name: 'email-templates',
to: `${strapi.settingsBaseURL}/${pluginId}/email-templates`,
Component: () => (
<CheckPagePermissions permissions={pluginPermissions.settings}>
<EmailTemplatesPage />
</CheckPagePermissions>
),
permissions: pluginPermissions.settings,
},
{
title: {
id: getTrad('HeaderNav.link.advanced-settings'),
defaultMessage: 'Advanced Settings',
},
name: 'advanced-settings',
to: `${strapi.settingsBaseURL}/${pluginId}/advanced-settings`,
Component: () => (
<CheckPagePermissions permissions={pluginPermissions.settings}>
<AdvancedSettingsPage />
</CheckPagePermissions>
),
permissions: pluginPermissions.settings,
},
],
},
},
trads,
};
return strapi.registerPlugin(plugin);

View File

@ -39,7 +39,7 @@
"HeaderNav.link.advancedSettings": "Advanced settings",
"HeaderNav.link.emailTemplates": "Email templates",
"HeaderNav.link.providers": "Providers",
"HeaderNav.link.roles": "Roles & Permissions",
"HeaderNav.link.roles": "Roles",
"HomePage.header.description": "Define the roles and permissions for your users.",
"HomePage.header.title": "Roles & Permissions",
"InputSearch.placeholder": "Search for a user",
@ -112,5 +112,5 @@
"notification.success.submit": "Settings have been updated",
"plugin.description.long": "Protect your API with a full authentication process based on JWT. This plugin comes also with an ACL strategy that allows you to manage the permissions between the groups of users.",
"plugin.description.short": "Protect your API with a full authentication process based on JWT",
"plugin.name": "Roles & Permissions"
"plugin.name": "Users & Permissions Plugin"
}