Merge branch 'master' into fix-filters

This commit is contained in:
Jim LAURIE 2018-06-11 19:06:43 +02:00 committed by GitHub
commit 98f9c0f61e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 755 additions and 471 deletions

View File

@ -7,6 +7,7 @@ language: node_js
node_js:
- "9"
- "10"
before_install:
- export CHROME_BIN=chromium-browser

View File

@ -16,6 +16,7 @@ import messages from './messages.json';
function LeftMenuLinkContainer({ layout, plugins }) {
const pluginsObject = plugins.toJS();
// Generate the list of sections
const pluginsSections = Object.keys(pluginsObject).reduce((acc, current) => {
pluginsObject[current].leftMenuSections.forEach((section = {}) => {
@ -38,7 +39,7 @@ function LeftMenuLinkContainer({ layout, plugins }) {
return acc;
}, {});
const linkSections = Object.keys(pluginsSections).map((current, j) => {
const contentTypesToShow = get(layout, 'layout.contentTypesToShow');
const contentTypes = contentTypesToShow
@ -68,7 +69,7 @@ function LeftMenuLinkContainer({ layout, plugins }) {
// Check if the plugins list is empty or not and display plugins by name
const pluginsLinks = !isEmpty(pluginsObject) ? (
map(sortBy(pluginsObject, 'name'), plugin => {
if (plugin.id !== 'email' && plugin.id !== 'content-manager') {
if (plugin.id !== 'email' && plugin.id !== 'content-manager' && plugin.id !== 'settings-manager') {
return (
<LeftMenuLink
key={get(plugin, 'id')}
@ -85,6 +86,8 @@ function LeftMenuLinkContainer({ layout, plugins }) {
</li>
);
const hasSettingsManager = get(pluginsObject, 'settings-manager', null);
return (
<div className={styles.leftMenuLinkContainer}>
{linkSections}
@ -105,11 +108,13 @@ function LeftMenuLinkContainer({ layout, plugins }) {
label={messages.installNewPlugin.id}
destination="/install-plugin"
/>
<LeftMenuLink
icon="gear"
label={messages.configuration.id}
destination="/configuration"
/>
{hasSettingsManager && (
<LeftMenuLink
icon="gear"
label={messages.configuration.id}
destination="/plugins/settings-manager"
/>
)}
</ul>
</div>
</div>

View File

@ -21,3 +21,7 @@ button {
margin-right: -2rem;
}
}
form .row {
text-align: left;
}

View File

@ -144,6 +144,7 @@ InputSelectWithErrors.defaultProps = {
labelStyle: {},
onBlur: false,
onFocus: () => {},
selectOptions: [],
style: {},
tabIndex: '0',
validations: {},
@ -198,7 +199,7 @@ InputSelectWithErrors.propTypes = {
}),
PropTypes.string,
]),
).isRequired,
),
style: PropTypes.object,
tabIndex: PropTypes.string,
validations: PropTypes.object,

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="70" height="40" viewBox="0 0 70 40"><style>.st1{fill:#fff}</style><path fill="#f8b195" d="M67 40H3c-1.6 0-3-1.3-3-3V3c0-1.6 1.4-3 3-3h64c1.7 0 3 1.4 3 3v34c0 1.7-1.3 3-3 3z"/><circle cx="22" cy="10" r="2" class="st1"/><circle cx="22" cy="20" r="2" class="st1"/><circle cx="22" cy="30" r="2" class="st1"/><path d="M49 12H28c-1.1 0-2-.9-2-2s.9-2 2-2h21c1.1 0 2 .9 2 2s-.9 2-2 2zM49 22H28c-1.1 0-2-.9-2-2s.9-2 2-2h21c1.1 0 2 .9 2 2s-.9 2-2 2zM49 32H28c-1.1 0-2-.9-2-2s.9-2 2-2h21c1.1 0 2 .9 2 2s-.9 2-2 2z" class="st1"/></svg>

After

Width:  |  Height:  |  Size: 571 B

View File

@ -18,6 +18,7 @@ import IcoNumber from '../../assets/images/icon_number.png';
import IcoRelation from '../../assets/images/icon_relation.png';
import IcoString from '../../assets/images/icon_string.png';
import IcoText from '../../assets/images/icon_text.png';
import IcoEnum from '../../assets/images/icon_enum.svg';
import styles from './styles.scss';
@ -34,6 +35,7 @@ const asset = {
'relation': IcoRelation,
'string': IcoString,
'text': IcoText,
'enum': IcoEnum,
};
function AttributeCard({ attribute, autoFocus, handleClick, tabIndex }) {

View File

@ -22,6 +22,7 @@ import IcoPassword from '../../assets/images/icon_password.png';
import IcoRelation from '../../assets/images/icon_relation.png';
import IcoString from '../../assets/images/icon_string.png';
import IcoText from '../../assets/images/icon_text.png';
import IcoEnum from '../../assets/images/icon_enum.svg';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-static-element-interactions */
@ -45,8 +46,7 @@ class AttributeRow extends React.Component {
decimal: IcoNumber,
email: IcoEmail,
password: IcoPassword,
// TODO add Enumeration icon
enumeration: IcoJson,
enumeration: IcoEnum,
};
this.state = {
showWarning: false,

View File

@ -155,7 +155,7 @@ class PopUpForm extends React.Component { // eslint-disable-line react/prefer-st
<ModalBody className={styles.modalBody} style={modalBodyStyle}>
<form onSubmit={this.props.onSubmit}>
<div className="container-fluid">
<div className={`row ${this.props.renderModalBody ? 'justify-content-center' : ''}`}>
<div className="row">
{modalBody}
</div>
</div>

View File

@ -1,13 +1,14 @@
/**
*
* PopUpRelations
*
*/
*
* PopUpRelations
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import { findIndex, get, isEmpty, map, take, takeRight } from 'lodash';
import { FormattedMessage } from 'react-intl';
import pluralize from 'pluralize';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import Input from 'components/InputsIndex';
@ -17,12 +18,21 @@ import RelationNaturePicker from 'components/RelationNaturePicker';
import styles from './styles.scss';
/* eslint-disable jsx-a11y/tabindex-no-positive */
class PopUpRelations extends React.Component { // eslint-disable-line react/prefer-stateless-function
class PopUpRelations extends React.Component {
// eslint-disable-line react/prefer-stateless-function
constructor(props) {
super(props);
this.popUpHeaderNavLinks = [
{ name: 'defineRelation', message: 'content-type-builder.popUpForm.navContainer.relation', nameToReplace: 'advancedSettings' },
{ name: 'advancedSettings', message: 'content-type-builder.popUpForm.navContainer.advanced', nameToReplace: 'defineRelation' },
{
name: 'defineRelation',
message: 'content-type-builder.popUpForm.navContainer.relation',
nameToReplace: 'advancedSettings',
},
{
name: 'advancedSettings',
message: 'content-type-builder.popUpForm.navContainer.advanced',
nameToReplace: 'defineRelation',
},
];
}
@ -33,12 +43,93 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
}
componentWillReceiveProps(nextProps) {
if (isEmpty(this.props.dropDownItems) && !isEmpty(nextProps.dropDownItems) && !this.props.isEditting) {
if (
isEmpty(this.props.dropDownItems) &&
!isEmpty(nextProps.dropDownItems) &&
!this.props.isEditting
) {
this.init(nextProps);
}
}
init = (props) => {
setPlaceholders = (firstCTName, secondCTName, relationType, values = this.props.values) => {
switch (relationType) {
case 'oneToMany':
firstCTName = pluralize(firstCTName);
break;
case 'manyToOne':
secondCTName = pluralize(secondCTName);
break;
case 'manyToMany':
firstCTName = pluralize(firstCTName);
secondCTName = pluralize(secondCTName);
break;
default:
// Do nothing
}
if (get(this.props.contentType, 'name') !== get(values, 'params.target')) {
this.props.onChange({ target: { name: 'name', value: firstCTName } });
this.props.onChange({ target: { name: 'params.key', value: secondCTName } });
this.props.resetFormErrors();
} else {
this.props.onChange({ target: { name: 'name', value: '' } });
this.props.onChange({ target: { name: 'params.key', value: '' } });
}
}
handleChange = e => {
this.props.onChange(e);
const shouldResetKeyParams = e.target.value === 'oneWay';
if (!this.props.isEditting && !shouldResetKeyParams) {
this.setPlaceholders(
get(this.props.values, ['params', 'target']),
get(this.props.contentType, 'name'),
e.target.value,
);
}
if (shouldResetKeyParams) {
this.props.onChange({ target: { name: 'params.key', value: '-' } });
}
}
handleClick = e => {
const value = e.target.id.split('.');
[
{
target: {
type: 'string',
value: value[0],
name: 'params.target',
},
},
{
target: {
type: 'string',
value: value[1] !== 'undefined' ? value[1] : '',
name: 'params.pluginValue',
},
},
].map(target => this.props.onChange(target));
if (!this.props.isEditting) {
if (get(this.props.contentType, 'name') !== value[0]) {
this.setPlaceholders(
value[0],
get(this.props.contentType, 'name'),
get(this.props.values, ['params', 'nature']),
value[0],
);
} else {
this.props.onChange({ target: { name: 'name', value: '' } });
this.props.onChange({ target: { name: 'params.key', value: '' } });
}
}
};
init = props => {
const target = {
name: 'params.target',
type: 'string',
@ -56,7 +147,14 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
},
});
}
}
if (get(props.contentType, 'name') !== get(props.dropDownItems, ['0', 'name'])) {
[
{ target: { name: 'name', value: get(props.dropDownItems, ['0', 'name']) } },
{ target: { name: 'params.key', value: get(props.contentType, 'name') } },
].map(target => this.props.onChange(target));
}
};
renderNavContainer = () => (
<div className={styles.navContainer}>
@ -70,7 +168,7 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
/>
))}
</div>
)
);
renderModalBodyAdvanced = () => (
<ModalBody className={`${styles.modalBodyAdvanced}`}>
@ -95,7 +193,10 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
<div className={styles.inputContainer}>
<div className="row">
{map(takeRight(this.props.form.items, 2), (value, index) => {
const addon = index === 0 ? get(this.props.values, 'name') : get(this.props.values, ['params', 'key']);
const addon =
index === 0
? get(this.props.values, 'name')
: get(this.props.values, ['params', 'key']);
return (
<Input
key={index}
@ -117,12 +218,25 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
</div>
</div>
</ModalBody>
)
);
renderModalBodyRelations = () => {
const header = get(this.props.values, ['params', 'pluginValue']) ?
get(this.props.dropDownItems, [findIndex(this.props.dropDownItems, {'name': get(this.props.values, ['params', 'target']), source: get(this.props.values, ['params', 'pluginValue']) })])
: get(this.props.dropDownItems, [findIndex(this.props.dropDownItems, ['name', get(this.props.values, ['params', 'target'])])]);
const header = get(this.props.values, ['params', 'pluginValue'])
? get(this.props.dropDownItems, [
findIndex(this.props.dropDownItems, {
name: get(this.props.values, ['params', 'target']),
source: get(this.props.values, ['params', 'pluginValue']),
}),
])
: get(this.props.dropDownItems, [
findIndex(this.props.dropDownItems, [
'name',
get(this.props.values, ['params', 'target']),
]),
]);
const errs = findIndex(this.props.formErrors, ['name',get(this.props.form, ['items', '0', 'name'])]) !== -1 ? this.props.formErrors[findIndex(this.props.formErrors, ['name', get(this.props.form, ['items', '0', 'name'])])].errors: [];
const errors = findIndex(this.props.formErrors, ['name', get(this.props.form, ['items', '1', 'name'])]) !== -1 ? this.props.formErrors[findIndex(this.props.formErrors, ['name', get(this.props.form, ['items', '1', 'name'])])].errors : [];
return (
<ModalBody className={`${styles.modalBody} ${styles.flex}`}>
@ -138,11 +252,11 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
onSubmit={this.props.onSubmit}
onChange={this.props.onChange}
didCheckErrors={this.props.didCheckErrors}
errors={findIndex(this.props.formErrors, ['name', get(this.props.form, ['items', '0', 'name'])]) !== -1 ? this.props.formErrors[findIndex(this.props.formErrors, ['name', get(this.props.form, ['items', '0', 'name'])])].errors : []}
errors={errs}
/>
<RelationNaturePicker
selectedIco={get(this.props.values, ['params', 'nature'])}
onChange={this.props.onChange}
onChange={this.handleChange}
contentTypeName={get(this.props.contentType, 'name')}
contentTypeTarget={get(this.props.values, ['params', 'target'])}
/>
@ -156,24 +270,46 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
value={get(this.props.values, ['params', 'key'])}
onChange={this.props.onChange}
didCheckErrors={this.props.didCheckErrors}
errors={findIndex(this.props.formErrors, ['name', get(this.props.form, ['items', '1', 'name'])]) !== -1 ? this.props.formErrors[findIndex(this.props.formErrors, ['name', get(this.props.form, ['items', '1', 'name'])])].errors : []}
errors={errors}
dropDownItems={this.props.dropDownItems}
onClick={this.handleClick}
/>
</ModalBody>
);
}
};
render() {
const loader = this.props.showLoader ?
<Button onClick={this.props.onSubmit} type="submit" className={styles.primary} disabled={this.props.showLoader}><p className={styles.saving}><span>.</span><span>.</span><span>.</span></p></Button>
: <Button type="submit" onClick={this.props.onSubmit} className={styles.primary}><FormattedMessage id="content-type-builder.form.button.continue" /></Button>;
const loader = this.props.showLoader ? (
<Button
onClick={this.props.onSubmit}
type="submit"
className={styles.primary}
disabled={this.props.showLoader}
>
<p className={styles.saving}>
<span>.</span>
<span>.</span>
<span>.</span>
</p>
</Button>
) : (
<Button type="submit" onClick={this.props.onSubmit} className={styles.primary}>
<FormattedMessage id="content-type-builder.form.button.continue" />
</Button>
);
const modalBody = this.props.showRelation ? this.renderModalBodyRelations(): this.renderModalBodyAdvanced();
const modalBody = this.props.showRelation
? this.renderModalBodyRelations()
: this.renderModalBodyAdvanced();
const handleToggle = this.props.toggle;
return (
<div className={styles.popUpRelations}>
<Modal isOpen={this.props.isOpen} toggle={this.props.toggle} className={`${styles.modalPosition}`}>
<Modal
isOpen={this.props.isOpen}
toggle={this.props.toggle}
className={`${styles.modalPosition}`}
>
<ModalHeader toggle={this.props.toggle} className={styles.popUpFormHeader} />
<div className={styles.headerContainer}>
<div className={styles.titleContainer}>
@ -190,7 +326,9 @@ class PopUpRelations extends React.Component { // eslint-disable-line react/pref
{modalBody}
<ModalFooter className={styles.modalFooter}>
<Button onClick={handleToggle} className={styles.secondary}><FormattedMessage id="content-type-builder.form.button.cancel" /></Button>
<Button onClick={handleToggle} className={styles.secondary}>
<FormattedMessage id="content-type-builder.form.button.cancel" />
</Button>
{loader}{' '}
</ModalFooter>
</Modal>
@ -203,19 +341,14 @@ PopUpRelations.propTypes = {
contentType: PropTypes.object,
didCheckErrors: PropTypes.bool.isRequired,
dropDownItems: PropTypes.array,
form: PropTypes.oneOfType([
PropTypes.array.isRequired,
PropTypes.object.isRequired,
]).isRequired,
formErrors: PropTypes.oneOfType([
PropTypes.array,
PropTypes.object,
]).isRequired,
form: PropTypes.oneOfType([PropTypes.array.isRequired, PropTypes.object.isRequired]).isRequired,
formErrors: PropTypes.oneOfType([PropTypes.array, PropTypes.object]).isRequired,
isEditting: PropTypes.bool,
isOpen: PropTypes.bool.isRequired,
onChange: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
popUpTitle: PropTypes.string.isRequired,
resetFormErrors: PropTypes.func.isRequired,
routePath: PropTypes.string.isRequired,
showLoader: PropTypes.bool,
showRelation: PropTypes.bool.isRequired,

View File

@ -1,8 +1,8 @@
/**
*
* RelationBox
*
*/
*
* RelationBox
*
*/
import React from 'react';
import PropTypes from 'prop-types';
@ -16,7 +16,8 @@ import styles from './styles.scss';
/* eslint-disable jsx-a11y/no-static-element-interactions */
/* eslint-disable react/jsx-wrap-multilines */
class RelationBox extends React.Component { // eslint-disable-line react/prefer-stateless-function
class RelationBox extends React.Component {
// eslint-disable-line react/prefer-stateless-function
constructor(props) {
super(props);
@ -25,58 +26,64 @@ class RelationBox extends React.Component { // eslint-disable-line react/prefer-
};
}
handleClick = (e) => {
const value = e.target.id.split('.');
const target = {
type: 'string',
value: value[0],
name: 'params.target',
};
this.props.onChange({ target });
this.props.onChange({
target: {
type: 'string',
value: value[1] !== 'undefined' ? value[1] : '',
name: 'params.pluginValue',
},
});
getPlaceholder = () => {
switch (true) {
case this.props.relationType === 'oneToMany' && this.props.isFirstContentType:
return pluralize(this.props.contentTypeTargetPlaceholder);
case this.props.relationType === 'manyToOne' && !this.props.isFirstContentType:
return pluralize(this.props.contentTypeTargetPlaceholder);
case this.props.relationType === 'manyToMany':
return pluralize(this.props.contentTypeTargetPlaceholder);
default:
return this.props.contentTypeTargetPlaceholder;
}
}
toggle = () => this.setState({ showMenu: !this.state.showMenu });
renderDropdownMenu = () => (
<div className={styles.dropDown}>
<ButtonDropdown isOpen={this.state.showMenu} toggle={this.toggle} style={{ backgroundColor: 'transparent' }}>
<DropdownToggle caret>
</DropdownToggle>
<ButtonDropdown
isOpen={this.state.showMenu}
toggle={this.toggle}
style={{ backgroundColor: 'transparent' }}
>
<DropdownToggle caret />
<DropdownMenu className={styles.dropDownContent}>
{map(this.props.dropDownItems, (value, key) => {
const id = value.source ? `${value.name}.${value.source}` : `${value.name}. `;
let divStyle;
if (get(this.props.header, 'name') === value.name && !isEmpty(get(this.props.header,'source')) && value.source) {
divStyle = { color: '#323740', fontWeight: 'bold'};
} else if (value.source === get(this.props.header, 'source') && value.name === get(this.props.header, 'name')) {
divStyle = { color: '#323740', fontWeight: 'bold'};
if (
get(this.props.header, 'name') === value.name &&
!isEmpty(get(this.props.header, 'source')) &&
value.source
) {
divStyle = { color: '#323740', fontWeight: 'bold' };
} else if (
value.source === get(this.props.header, 'source') &&
value.name === get(this.props.header, 'name')
) {
divStyle = { color: '#323740', fontWeight: 'bold' };
} else {
divStyle = { color: 'rgba(50,55,64,0.75)' };
}
return (
<div style={{ height: '3.6rem'}} key={key}>
<DropdownItem onClick={this.handleClick} id={id}>
<div style={{ height: '3.6rem' }} key={key}>
<DropdownItem onClick={this.props.onClick} id={id}>
<div style={divStyle} id={`${value.name}.${value.source}`}>
<i className={`fa ${value.icon}`} style={divStyle} id={id} />
{value.name}&nbsp;
{value.source ? (
{value.source && (
<FormattedMessage id="content-type-builder.from">
{(message) => (
<span style={{ fontStyle: 'italic' }} id={id}>({message}: {value.source})</span>
{message => (
<span style={{ fontStyle: 'italic' }} id={id}>
({message}: {value.source})
</span>
)}
</FormattedMessage>
) : ''}
)}
</div>
</DropdownItem>
</div>
@ -85,63 +92,41 @@ class RelationBox extends React.Component { // eslint-disable-line react/prefer-
</DropdownMenu>
</ButtonDropdown>
</div>
)
);
render() {
let placeholder;
switch (true) {
case this.props.relationType === 'oneToMany' && this.props.isFirstContentType:
placeholder = pluralize(this.props.contentTypeTargetPlaceholder);
break;
case this.props.relationType === 'manyToOne' && !this.props.isFirstContentType:
placeholder = pluralize(this.props.contentTypeTargetPlaceholder);
break;
case this.props.relationType === 'manyToMany':
placeholder = pluralize(this.props.contentTypeTargetPlaceholder);
break;
default:
placeholder = this.props.contentTypeTargetPlaceholder;
}
const content = isEmpty(this.props.input) ?
<div /> :
<Input
disabled={this.props.relationType === 'oneWay' && this.props.tabIndex === '2'}
tabIndex={this.props.tabIndex}
type={get(this.props.input, 'type')}
onChange={this.props.onChange}
label={get(this.props.input, 'label')}
name={get(this.props.input, 'name')}
value={this.props.value}
placeholder={placeholder}
customBootstrapClass="col-md-12"
validations={get(this.props.input, 'validations')}
errors={this.props.errors}
didCheckErrors={this.props.didCheckErrors}
pluginID="content-type-builder"
autoFocus={this.props.autoFocus}
/>;
const dropDown = !isEmpty(this.props.dropDownItems) ? this.renderDropdownMenu() : '';
return (
<div className={styles.relationBox}>
<div className={styles.headerContainer}>
<i className={`fa ${get(this.props.header, 'icon')}`} />
{startCase(get(this.props.header, 'name'))}&nbsp;
<span style={{ fontStyle: 'italic', fontWeight: '500' }}>
{get(this.props.header, 'source') ? (
`(${get(this.props.header, 'source')})`
): ''}
{get(this.props.header, 'source') ? `(${get(this.props.header, 'source')})` : ''}
</span>
{dropDown}
{!isEmpty(this.props.dropDownItems) && this.renderDropdownMenu()}
</div>
<div className={styles.inputContainer}>
<form onSubmit={this.props.onSubmit}>
<div className="container-fluid">
<div className={`row ${styles.input}`}>
{content}
{!isEmpty(this.props.input) && (
<Input
disabled={this.props.relationType === 'oneWay' && this.props.tabIndex === '2'}
tabIndex={this.props.tabIndex}
type={get(this.props.input, 'type')}
onChange={this.props.onChange}
label={get(this.props.input, 'label')}
name={get(this.props.input, 'name')}
value={this.props.value}
placeholder={this.getPlaceholder()}
customBootstrapClass="col-md-12"
validations={get(this.props.input, 'validations')}
errors={this.props.errors}
didCheckErrors={this.props.didCheckErrors}
pluginID="content-type-builder"
autoFocus={this.props.autoFocus}
/>
)}
</div>
</div>
</form>
@ -161,6 +146,7 @@ RelationBox.propTypes = {
input: PropTypes.object,
isFirstContentType: PropTypes.bool,
onChange: PropTypes.func.isRequired,
onClick: PropTypes.func,
onSubmit: PropTypes.func.isRequired,
relationType: PropTypes.string,
tabIndex: PropTypes.string.isRequired,
@ -175,6 +161,7 @@ RelationBox.defaultProps = {
header: {},
input: {},
isFirstContentType: false,
onClick: () => {},
relationType: 'oneToOne',
value: '',
};

View File

@ -115,6 +115,10 @@
{
"type": "relation",
"description": "content-type-builder.popUpForm.attributes.relation.description"
},
{
"type": "enumeration",
"description": "content-type-builder.popUpForm.attributes.enumeration.description"
}
]
},
@ -912,6 +916,84 @@
}
]
}
},
"enumeration": {
"baseSettings": {
"items": [
{
"label": {
"id": "content-type-builder.form.attribute.item.enumeration.name"
},
"name": "name",
"type": "string",
"value": ""
},
{
"label": {
"id": "content-type-builder.form.attribute.item.enumeration.rules"
},
"name": "params.enumValue",
"type": "textarea",
"placeholder": "content-type-builder.form.attribute.item.enumeration.placeholder",
"value": false,
"validations": {
"required": true
}
}
]
},
"advancedSettings": {
"items": [
{
"label": {
"id": "content-type-builder.form.attribute.settings.default"
},
"name": "params.default",
"type": "string",
"value": "",
"validations": {}
},
{
"label": {
"id": "content-type-builder.form.attribute.item.enumeration.graphql"
},
"name": "params.enumName",
"type": "string",
"value": "",
"validations": {},
"inputDescription": {
"id": "content-type-builder.form.attribute.item.enumeration.graphql.description"
}
},
{
"title": {
"id": "content-type-builder.form.attribute.item.settings.name"
},
"label": {
"id": "content-type-builder.form.attribute.item.requiredField"
},
"name": "params.required",
"type": "checkbox",
"value": false,
"validations": {},
"inputDescription": {
"id": "content-type-builder.form.attribute.item.requiredField.description"
}
},
{
"label": {
"id": "content-type-builder.form.attribute.item.uniqueField"
},
"name": "params.unique",
"type": "checkbox",
"value": false,
"validations": {},
"inputDescription": {
"id": "content-type-builder.form.attribute.item.uniqueField.description"
}
}
]
}
}
}
}

View File

@ -384,6 +384,11 @@ export class Form extends React.Component { // eslint-disable-line react/prefer-
handleChange = ({ target }) => {
let value = target.type === 'number' && target.value !== '' ? toNumber(target.value) : target.value;
// Parse enumeration textarea to transform it into a array
if (target.name === 'params.enumValue') {
value = target.value.split(',');
}
if (isObject(target.value) && target.value._isAMomentObject === true) {
value = moment(target.value, 'YYYY-MM-DD HH:mm:ss').format();
}
@ -391,14 +396,12 @@ export class Form extends React.Component { // eslint-disable-line react/prefer-
if (includes(this.props.hash.split('::')[1], 'attribute')) {
this.props.changeInputAttribute(target.name, value);
if (target.name === 'params.nature' && target.value === "manyToMany") {
if (target.name === 'params.nature' && target.value === 'manyToMany') {
this.props.changeInputAttribute('params.dominant', true);
}
if (target.name === 'params.nature' && target.value === "oneWay") {
if (target.name === 'params.nature' && target.value === 'oneWay') {
this.props.changeInputAttribute('params.key', '-');
}else if (target.name === 'params.nature'){
this.props.changeInputAttribute('params.key', '');
}
} else {
@ -539,7 +542,6 @@ export class Form extends React.Component { // eslint-disable-line react/prefer-
}
render() {
// Ensure typeof(popUpFormType) is String
const popUpFormType = split(this.props.hash, '::')[1] || '';
const popUpTitle = this.generatePopUpTitle(popUpFormType);
@ -576,6 +578,7 @@ export class Form extends React.Component { // eslint-disable-line react/prefer-
formErrors={this.props.formErrors}
didCheckErrors={this.props.didCheckErrors}
isEditting={edit}
resetFormErrors={this.props.resetFormErrors}
/>
);
}

View File

@ -79,7 +79,9 @@ function formReducer(state = initialState, action) {
.update('formErrors', (list) => list.splice(findIndex(state.get('formErrors').toJS(), ['target', 'name']), 1))
.set('didCheckErrors', !state.get('didCheckErrors'));
case RESET_FORM_ERRORS:
return state.set('formErrors', List());
return state
.update('didCheckErrors', v => v = !v)
.set('formErrors', List());
case RESET_IS_FORM_SET:
return state
.set('isFormSet', false)

View File

@ -146,9 +146,12 @@ export class ModelPage extends React.Component { // eslint-disable-line react/pr
}
handleDelete = (attributeName) => {
const index = findIndex(this.props.modelPage.model.attributes, ['name', attributeName]);
const parallelAttributeIndex = findIndex(this.props.modelPage.model.attributes, (attr) => attr.params.key === attributeName);
const { modelPage: { model } } = this.props;
const index = findIndex(model.attributes, ['name', attributeName]);
const attributeToRemove = get(model, ['attributes', index]);
const parallelAttributeIndex = attributeToRemove.name === attributeToRemove.params.key ?
-1 : findIndex(model.attributes, (attr) => attr.params.key === attributeName);
this.props.deleteAttribute(index, this.props.match.params.modelName, parallelAttributeIndex !== -1);
}
@ -158,7 +161,7 @@ export class ModelPage extends React.Component { // eslint-disable-line react/pr
// Display a notification if the attribute is not present in the ones that the ctb handles
if (!has(attribute.params, 'nature') && !includes(availableAttributes, attribute.params.type)) {
return strapi.notification.info('content-type-builder.notification.info.enumeration');
return strapi.notification.info('content-type-builder.notification.info.disable');
}
const settingsType = attribute.params.type ? 'baseSettings' : 'defineRelation';
const parallelAttributeIndex = findIndex(this.props.modelPage.model.attributes, ['name', attribute.params.key]);

View File

@ -1,164 +1,173 @@
{
"plugin.description.short": "Modelliere die Datenstruktur deiner API.",
"plugin.description.long": "Modelliere die Datenstruktur deiner API. Lege neue Felder und Beziehungen innerhalb von einer Minute an. Erforderliche Dateien werden automatisch in deinem Projekt angelegt und aktualisiert.",
"attribute.string": "String",
"attribute.text": "Text",
"attribute.boolean": "Boolean",
"attribute.float": "Float",
"attribute.integer": "Integer",
"attribute.decimal": "Decimal",
"attribute.date": "Datum",
"attribute.json": "JSON",
"attribute.media": "Medien",
"attribute.email": "E-Mail",
"attribute.password": "Passwort",
"attribute.relation": "Beziehung",
"attribute.enumeration": "Enumeration",
"plugin.description.short": "Modelliere die Datenstruktur deiner API.",
"plugin.description.long":
"Modelliere die Datenstruktur deiner API. Lege neue Felder und Beziehungen innerhalb von einer Minute an. Erforderliche Dateien werden automatisch in deinem Projekt angelegt und aktualisiert.",
"attribute.string": "String",
"attribute.text": "Text",
"attribute.boolean": "Boolean",
"attribute.float": "Float",
"attribute.integer": "Integer",
"attribute.decimal": "Decimal",
"attribute.date": "Datum",
"attribute.json": "JSON",
"attribute.media": "Medien",
"attribute.email": "E-Mail",
"attribute.password": "Passwort",
"attribute.relation": "Beziehung",
"attribute.enumeration": "Enumeration",
"attribute.WYSIWYG": "Text (WYSIWYG)",
"contentType.temporaryDisplay": "(Nicht gespeichert)",
"from": "aus",
"home.contentTypeBuilder.name": "Content-Typen",
"home.contentTypeBuilder.description": "Verwalte deine Content-Typen.",
"home.emptyContentType.title": "Es sind keine Content-Typen verfügbar",
"home.emptyContentType.description": "Lege deinen ersten Content-Typ an, Daten deiner API abrufen zu können.",
"contentType.temporaryDisplay": "(Nicht gespeichert)",
"from": "aus",
"home.contentTypeBuilder.name": "Content-Typen",
"home.contentTypeBuilder.description": "Verwalte deine Content-Typen.",
"home.emptyContentType.title": "Es sind keine Content-Typen verfügbar",
"home.emptyContentType.description": "Lege deinen ersten Content-Typ an, Daten deiner API abrufen zu können.",
"home.emptyAttributes.title": "Es gibt noch keine Felder",
"home.emptyAttributes.description": "Füge deinem Content-Typen das erste Feld hinzu",
"home.emptyAttributes.title": "Es gibt noch keine Felder",
"home.emptyAttributes.description": "Füge deinem Content-Typen das erste Feld hinzu",
"button.contentType.create": "Lege einen Content-Typ an",
"button.contentType.add": "Neuer Content-Typ",
"button.attributes.add": "Neues Feld",
"button.contentType.create": "Lege einen Content-Typ an",
"button.contentType.add": "Neuer Content-Typ",
"button.attributes.add": "Neues Feld",
"error.validation.required": "Dieser Wert ist erforderlich.",
"error.validation.regex": "Dieser Wert entspricht nicht dem RegEx.",
"error.validation.max": "Dieser Wert ist zu hoch.",
"error.validation.min": "Dieser Wert ist zu niedrig.",
"error.validation.maxLength": "Dieser Wert ist zu lang.",
"error.validation.minLength": "Dieser Wert ist zu kurz.",
"error.contentTypeName.taken": "Dieser Name existiert bereits",
"error.attribute.taken": "Dieser Feldname ist bereits vergeben",
"error.attribute.key.taken": "Dieser Wert existiert bereits",
"error.attribute.sameKeyAndName": "Darf nicht gleich sein",
"error.validation.minSupMax": "Darf nicht höher sein",
"error.validation.required": "Dieser Wert ist erforderlich.",
"error.validation.regex": "Dieser Wert entspricht nicht dem RegEx.",
"error.validation.max": "Dieser Wert ist zu hoch.",
"error.validation.min": "Dieser Wert ist zu niedrig.",
"error.validation.maxLength": "Dieser Wert ist zu lang.",
"error.validation.minLength": "Dieser Wert ist zu kurz.",
"error.contentTypeName.taken": "Dieser Name existiert bereits",
"error.attribute.taken": "Dieser Feldname ist bereits vergeben",
"error.attribute.key.taken": "Dieser Wert existiert bereits",
"error.attribute.sameKeyAndName": "Darf nicht gleich sein",
"error.validation.minSupMax": "Darf nicht höher sein",
"form.attribute.item.textarea.name": "Name",
"form.attribute.item.number.name": "Name",
"form.attribute.item.date.name": "Name",
"form.attribute.item.media.name": "Name",
"form.attribute.item.media.multiple": "Erlaube mehrere Dateien",
"form.attribute.item.json.name": "Name",
"form.attribute.item.boolean.name": "Name",
"form.attribute.item.string.name": "Name",
"form.attribute.item.settings.name": "Einstellungen",
"form.attribute.item.requiredField": "Benötigtes Feld",
"form.attribute.item.uniqueField": "Einzigartiges Feld",
"form.attribute.item.minimum": "Mindestwert",
"form.attribute.item.minimumLength": "Mindestlänge",
"form.attribute.item.maximumLength": "Maximallänge",
"form.attribute.item.maximum": "Maximalwert",
"form.attribute.item.requiredField.description": "Du wirst keinen Eintrag anlegen können, wenn dieses Feld leer ist",
"form.attribute.item.uniqueField.description": "Du wirst keinen Eintrag anlegen können, wenn es bereits einen Eintrag mit identischem Inhalt gibt",
"form.attribute.item.defineRelation.fieldName": "Feldname",
"form.attribute.item.customColumnName": "Eigener Spaltenname",
"form.attribute.item.customColumnName.description": "Dies ist nützlich, um Spalten in der Datenbank für Antworten der API umzubenennen",
"form.attribute.item.number.type": "Zahlenformat",
"form.attribute.item.number.type.integer": "integer (z.B.: 10)",
"form.attribute.item.number.type.float": "float (z.B.: 3.33333333)",
"form.attribute.item.number.type.decimal": "decimal (z.B.: 2.22)",
"form.attribute.settings.default": "Standardwert",
"form.attribute.settings.default.checkboxLabel": "Set to true",
"form.attribute.item.textarea.name": "Name",
"form.attribute.item.number.name": "Name",
"form.attribute.item.date.name": "Name",
"form.attribute.item.media.name": "Name",
"form.attribute.item.media.multiple": "Erlaube mehrere Dateien",
"form.attribute.item.json.name": "Name",
"form.attribute.item.boolean.name": "Name",
"form.attribute.item.string.name": "Name",
"form.attribute.item.enumeration.name": "Name",
"form.attribute.item.enumeration.rules": "Werte (trennen Sie sie mit einem Komma)",
"form.attribute.item.enumeration.placeholder": "Ex: Morgen, Mittag, Abend",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
"form.attribute.item.settings.name": "Einstellungen",
"form.attribute.item.requiredField": "Benötigtes Feld",
"form.attribute.item.uniqueField": "Einzigartiges Feld",
"form.attribute.item.minimum": "Mindestwert",
"form.attribute.item.minimumLength": "Mindestlänge",
"form.attribute.item.maximumLength": "Maximallänge",
"form.attribute.item.maximum": "Maximalwert",
"form.attribute.item.requiredField.description": "Du wirst keinen Eintrag anlegen können, wenn dieses Feld leer ist",
"form.attribute.item.uniqueField.description": "Du wirst keinen Eintrag anlegen können, wenn es bereits einen Eintrag mit identischem Inhalt gibt",
"form.attribute.item.defineRelation.fieldName": "Feldname",
"form.attribute.item.customColumnName": "Eigener Spaltenname",
"form.attribute.item.customColumnName.description": "Dies ist nützlich, um Spalten in der Datenbank für Antworten der API umzubenennen",
"form.attribute.item.number.type": "Zahlenformat",
"form.attribute.item.number.type.integer": "integer (z.B.: 10)",
"form.attribute.item.number.type.float": "float (z.B.: 3.33333333)",
"form.attribute.item.number.type.decimal": "decimal (z.B.: 2.22)",
"form.attribute.settings.default": "Standardwert",
"form.attribute.settings.default.checkboxLabel": "Set to true",
"form.button.cancel": "Abbrechen",
"form.button.continue": "Weiter",
"form.button.save": "Speichern",
"form.button.cancel": "Abbrechen",
"form.button.continue": "Weiter",
"form.button.save": "Speichern",
"form.contentType.item.connections": "Verbindung",
"form.contentType.item.name": "Name",
"form.contentType.item.name.description": "Der Name des Content-Typs sollte Singular sein. {link}",
"form.contentType.item.name.link.description": "Schau dir unsere Dokumentation an.",
"form.contentType.item.description": "Beschreibung",
"form.contentType.item.description.placeholder": "Beschreibe deinen Content-Typ",
"form.contentType.item.collectionName": "Name des Dokuments in der Datenbank",
"form.contentType.item.collectionName.inputDescription": "Nützlich, wenn Content-Typ und Datenbankname unterschiedlich sind",
"form.contentType.item.connections": "Verbindung",
"form.contentType.item.name": "Name",
"form.contentType.item.name.description": "Der Name des Content-Typs sollte Singular sein. {link}",
"form.contentType.item.name.link.description": "Schau dir unsere Dokumentation an.",
"form.contentType.item.description": "Beschreibung",
"form.contentType.item.description.placeholder": "Beschreibe deinen Content-Typ",
"form.contentType.item.collectionName": "Name des Dokuments in der Datenbank",
"form.contentType.item.collectionName.inputDescription": "Nützlich, wenn Content-Typ und Datenbankname unterschiedlich sind",
"menu.section.contentTypeBuilder.name.plural": "Content-Typen",
"menu.section.contentTypeBuilder.name.singular": "Content-Typ",
"menu.section.documentation.name": "Dokumentation",
"menu.section.documentation.guide": "Mehr über Content-Typen findest du in unserer",
"menu.section.documentation.guideLink": "Anleitung.",
"menu.section.documentation.tutorial": "Schau dir unser",
"menu.section.documentation.tutorialLink": "Tutorial an.",
"menu.section.contentTypeBuilder.name.plural": "Content-Typen",
"menu.section.contentTypeBuilder.name.singular": "Content-Typ",
"menu.section.documentation.name": "Dokumentation",
"menu.section.documentation.guide": "Mehr über Content-Typen findest du in unserer",
"menu.section.documentation.guideLink": "Anleitung.",
"menu.section.documentation.tutorial": "Schau dir unser",
"menu.section.documentation.tutorialLink": "Tutorial an.",
"modelPage.contentHeader.emptyDescription.description": "Dieser Content-Typ hat keine Beschreibung",
"modelPage.contentType.list.title.plural": "Felder",
"modelPage.contentType.list.title.singular": "Feld",
"modelPage.contentType.list.title.including": "schließt ein",
"modelPage.contentType.list.relationShipTitle.plural": "Beziehungen",
"modelPage.contentType.list.relationShipTitle.singular": "Beziehung",
"modelPage.attribute.relationWith": "Beziehung mit",
"modelPage.contentHeader.emptyDescription.description": "Dieser Content-Typ hat keine Beschreibung",
"modelPage.contentType.list.title.plural": "Felder",
"modelPage.contentType.list.title.singular": "Feld",
"modelPage.contentType.list.title.including": "schließt ein",
"modelPage.contentType.list.relationShipTitle.plural": "Beziehungen",
"modelPage.contentType.list.relationShipTitle.singular": "Beziehung",
"modelPage.attribute.relationWith": "Beziehung mit",
"noTableWarning.description": "Vergiss nicht, die Tabelle `{modelName}` in deiner Datenbank zu erstellen",
"noTableWarning.infos": "Mehr Informationen",
"noTableWarning.description": "Vergiss nicht, die Tabelle `{modelName}` in deiner Datenbank zu erstellen",
"noTableWarning.infos": "Mehr Informationen",
"notification.error.message": "Ein Fehler ist aufgetreten",
"notification.info.contentType.creating.notSaved": "Bitte speichere zuerst diesen Content-Typ bevor du einen neuen anlegst",
"notification.info.optimized": "Dieses Plugin ist auf deinen localStorage optimiert",
"notification.success.message.contentType.edit": "Der Content-Typ wurde aktualisiert",
"notification.success.message.contentType.create": "Der Content-Typ wurde angelegt",
"notification.success.contentTypeDeleted": "Der Content-Typ wurde gelöscht",
"notification.info.enumeration": "Dieses Feld ist momentan nicht editierbar...😮",
"notification.error.message": "Ein Fehler ist aufgetreten",
"notification.info.contentType.creating.notSaved": "Bitte speichere zuerst diesen Content-Typ bevor du einen neuen anlegst",
"notification.info.disable": "Dieses Feld ist momentan nicht editierbar...😮",
"notification.info.optimized": "Dieses Plugin ist auf deinen localStorage optimiert",
"notification.success.message.contentType.edit": "Der Content-Typ wurde aktualisiert",
"notification.success.message.contentType.create": "Der Content-Typ wurde angelegt",
"notification.success.contentTypeDeleted": "Der Content-Typ wurde gelöscht",
"popUpForm.attributes.string.description": "Titel, Namen, Namenslisten",
"popUpForm.attributes.text.description": "Beschreibungen, Paragraphen, Artikel",
"popUpForm.attributes.boolean.description": "Ja/Nein, 1 oder 0, Wahr/Falsch",
"popUpForm.attributes.number.description": "Jegliche Zahlen",
"popUpForm.attributes.date.description": "Event-Daten, Öffnungszeiten",
"popUpForm.attributes.json.description": "Daten in JSON-Format",
"popUpForm.attributes.media.description": "Bilder, Videos, PDFs und andere",
"popUpForm.attributes.relation.description": "Bezieht sich auf einen Content-Typ",
"popUpForm.attributes.email.description": "E-Mail-Adressen von Benutzern",
"popUpForm.attributes.password.description": "Passwörter von Benutzers",
"popUpForm.attributes.string.description": "Titel, Namen, Namenslisten",
"popUpForm.attributes.text.description": "Beschreibungen, Paragraphen, Artikel",
"popUpForm.attributes.boolean.description": "Ja/Nein, 1 oder 0, Wahr/Falsch",
"popUpForm.attributes.number.description": "Jegliche Zahlen",
"popUpForm.attributes.date.description": "Event-Daten, Öffnungszeiten",
"popUpForm.attributes.json.description": "Daten in JSON-Format",
"popUpForm.attributes.media.description": "Bilder, Videos, PDFs und andere",
"popUpForm.attributes.relation.description": "Bezieht sich auf einen Content-Typ",
"popUpForm.attributes.email.description": "E-Mail-Adressen von Benutzern",
"popUpForm.attributes.password.description": "Passwörter von Benutzers",
"popUpForm.attributes.enumeration.description": "Liste der Auswahlmöglichkeiten",
"popUpForm.attributes.string.name": "String",
"popUpForm.attributes.text.name": "Text",
"popUpForm.attributes.boolean.name": "Boolean",
"popUpForm.attributes.date.name": "Datum",
"popUpForm.attributes.json.name": "JSON",
"popUpForm.attributes.media.name": "Medien",
"popUpForm.attributes.number.name": "Zahl",
"popUpForm.attributes.relation.name": "Beziehung",
"popUpForm.attributes.email.name": "E-Mail",
"popUpForm.attributes.password.name": "Passwort",
"popUpForm.attributes.enumeration.name": "Enumeration",
"popUpForm.create": "Neu",
"popUpForm.edit": "Bearbeiten",
"popUpForm.field": "Feld",
"popUpForm.create.contentType.header.title": "Neuer Content-Typ",
"popUpForm.choose.attributes.header.title": "Neues Feld hinzufügen",
"popUpForm.edit.contentType.header.title": "Content-Typen bearbeiten",
"popUpForm.attributes.string.name": "String",
"popUpForm.attributes.text.name": "Text",
"popUpForm.attributes.boolean.name": "Boolean",
"popUpForm.attributes.date.name": "Datum",
"popUpForm.attributes.json.name": "JSON",
"popUpForm.attributes.media.name": "Medien",
"popUpForm.attributes.number.name": "Zahl",
"popUpForm.attributes.relation.name": "Beziehung",
"popUpForm.attributes.email.name": "E-Mail",
"popUpForm.attributes.password.name": "Passwort",
"popUpForm.create": "Neu",
"popUpForm.edit": "Bearbeiten",
"popUpForm.field": "Feld",
"popUpForm.create.contentType.header.title": "Neuer Content-Typ",
"popUpForm.choose.attributes.header.title": "Neues Feld hinzufügen",
"popUpForm.edit.contentType.header.title": "Content-Typen bearbeiten",
"popUpForm.navContainer.relation": "Beziehung definieren",
"popUpForm.navContainer.base": "Grundeinstellungen",
"popUpForm.navContainer.advanced": "Fortgeschrittene Einstellungen",
"popUpForm.navContainer.relation": "Beziehung definieren",
"popUpForm.navContainer.base": "Grundeinstellungen",
"popUpForm.navContainer.advanced": "Fortgeschrittene Einstellungen",
"popUpRelation.title": "Beziehung",
"popUpRelation.title": "Beziehung",
"popUpWarning.button.cancel": "Abbrechen",
"popUpWarning.button.confirm": "Bestätigen",
"popUpWarning.title": "Bitte bestätigen",
"popUpWarning.bodyMessage.contentType.delete": "Bist du sicher, dass du diesen Content-Typ löschen willst?",
"popUpWarning.bodyMessage.attribute.delete": "Bist du sicher, dass du dieses Feld löschen willst?",
"popUpWarning.button.cancel": "Abbrechen",
"popUpWarning.button.confirm": "Bestätigen",
"popUpWarning.title": "Bitte bestätigen",
"popUpWarning.bodyMessage.contentType.delete": "Bist du sicher, dass du diesen Content-Typ löschen willst?",
"popUpWarning.bodyMessage.attribute.delete": "Bist du sicher, dass du dieses Feld löschen willst?",
"table.contentType.title.plural": "Content-Typen sind verfügbar",
"table.contentType.title.singular": "Content-Typ ist verfügbar",
"table.contentType.head.name": "Name",
"table.contentType.head.description": "Beschreibung",
"table.contentType.head.fields": "Felder",
"table.contentType.title.plural": "Content-Typen sind verfügbar",
"table.contentType.title.singular": "Content-Typ ist verfügbar",
"table.contentType.head.name": "Name",
"table.contentType.head.description": "Beschreibung",
"table.contentType.head.fields": "Felder",
"relation.oneToOne": "hat ein(en)",
"relation.oneToMany": "gehört zu vielen",
"relation.manyToOne": "hat viele",
"relation.manyToMany": "hat und gehört zu vielen",
"relation.attributeName.placeholder": "z.B.: Autor, Kategorie"
"relation.oneToOne": "hat ein(en)",
"relation.oneToMany": "gehört zu vielen",
"relation.manyToOne": "hat viele",
"relation.manyToMany": "hat und gehört zu vielen",
"relation.attributeName.placeholder": "z.B.: Autor, Kategorie"
}
}

View File

@ -53,6 +53,11 @@
"form.attribute.item.json.name": "Name",
"form.attribute.item.boolean.name": "Name",
"form.attribute.item.string.name": "Name",
"form.attribute.item.enumeration.name": "Name",
"form.attribute.item.enumeration.rules": "Values (separate them with a comma)",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
"form.attribute.item.enumeration.placeholder": "Ex: morning,noon,evening",
"form.attribute.item.appearance.name": "Appearance",
"form.attribute.item.appearance.label": "Display as a WYSIWYG",
"form.attribute.item.appearance.description":
@ -116,11 +121,11 @@
"notification.error.message": "An error occurred",
"notification.info.contentType.creating.notSaved":
"Please save your current Content Type before creating a new one",
"notification.info.disable": "This field is not editable for the moment...😮",
"notification.info.optimized": "This plugin is optimized with your localStorage",
"notification.success.message.contentType.edit": "Your Content Type has been updated",
"notification.success.message.contentType.create": "Your Content Type has been created",
"notification.success.contentTypeDeleted": "The Content Type has been deleted",
"notification.info.enumeration": "This field is not editable for the moment...😮",
"popUpForm.attributes.string.description": "Titles, names, paragraphs, list of names",
"popUpForm.attributes.text.description": "Descriptions, text paragraphs, articles ",
@ -132,6 +137,7 @@
"popUpForm.attributes.relation.description": "Refers to a Content Type",
"popUpForm.attributes.email.description": "User's email...",
"popUpForm.attributes.password.description": "User password...",
"popUpForm.attributes.enumeration.description": "List of choices",
"popUpForm.attributes.string.name": "String",
"popUpForm.attributes.text.name": "Text",
@ -143,6 +149,7 @@
"popUpForm.attributes.relation.name": "Relation",
"popUpForm.attributes.email.name": "Email",
"popUpForm.attributes.password.name": "Password",
"popUpForm.attributes.enumeration.name": "Enumeration",
"popUpForm.create": "Add New",
"popUpForm.edit": "Edit",
"popUpForm.field": "Field",

View File

@ -1,20 +1,20 @@
{
"plugin.description.short": "Modelisez la structure de données de votre API.",
"plugin.description.short": "Modélisez la structure de données de votre API.",
"plugin.description.long":
"Modelisez la structure de données de votre API. Créer des nouveaux champs et relations en un instant. Les fichiers se créent et se mettent à jour automatiquement.",
"Modélisez la structure de données de votre API. Créer des nouveaux champs et relations en un instant. Les fichiers se créent et se mettent à jour automatiquement.",
"attribute.string": "Chaîne de caractères",
"attribute.text": "Text",
"attribute.text": "Texte",
"attribute.boolean": "Booléen",
"attribute.float": "Décimal approximatif",
"attribute.integer": "Entier",
"attribute.decimal": "Décimal",
"attribute.date": "Date",
"attribute.json": "JSON",
"attribute.media": "Media",
"attribute.media": "Média",
"attribute.password": "Mot de passe",
"attribute.email": "Email",
"attribute.relation": "Relation",
"attribute.enumeration": "Enumération",
"attribute.enumeration": "Énumération",
"attribute.WYSIWYG": "Text (WYSIWYG)",
"contentType.temporaryDisplay": "(Non sauvegardé)",
@ -26,7 +26,7 @@
"home.emptyContentType.title": "Il n'y a pas de model disponible",
"home.emptyContentType.description": "Créez votre premier modèle...",
"home.emptyAttributes.title": "Il n'y a pas encore de champs",
"home.emptyAttributes.title": "Il n'y a pas encore de champ",
"home.emptyAttributes.description": "Ajoutez votre premier champ a votre modèle",
"button.contentType.create": "Créer un modèle",
@ -54,6 +54,11 @@
"form.attribute.item.media.name": "Nom",
"form.attribute.item.media.multiple": "Peut être relié à plusieurs fichiers",
"form.attribute.item.string.name": "Nom",
"form.attribute.item.enumeration.name": "Nom",
"form.attribute.item.enumeration.rules": "Valeurs (les séparer par une virgule)",
"form.attribute.item.enumeration.graphql": "Surchage du nom pour GraphQL",
"form.attribute.item.enumeration.graphql.description": "Vous permet de remplacer le nom généré par défaut pour GraphQL",
"form.attribute.item.enumeration.placeholder": "Ex: matin,midi,soir",
"form.attribute.item.appearance.name": "Apparence",
"form.attribute.item.appearance.label": "Editable avec un WYSIWYG",
"form.attribute.item.appearance.description":
@ -118,11 +123,11 @@
"notification.error.message": "Une erreur est survenue",
"notification.info.contentType.creating.notSaved":
"Sauvegardez votre Modèle en cours avant d'en créer un nouveau",
"notification.info.disable": "Ce champ n'est pas modifiable pour le moment...😮",
"notification.info.optimized": "Ce plugin est optimisé pour votre localStorage",
"notification.success.message.contentType.edit": "Votre modèle a bien été modifié",
"notification.success.message.contentType.create": "Votre modèle a bien été créée",
"notification.success.contentTypeDeleted": "Le modèle a bien été supprimé.",
"notification.info.enumeration": "Ce champs n'est pas modifiable pour le moment...😮",
"popUpForm.attributes.string.description": "Titres, noms,...",
"popUpForm.attributes.text.description": "Descriptions, paragraphes texte, articles ",
@ -134,22 +139,24 @@
"popUpForm.attributes.relation.description": "Pointe vers un autre Modèle",
"popUpForm.attributes.password.description": "Mot de passe utilisateur...",
"popUpForm.attributes.email.description": "Email utilisateurs",
"popUpForm.attributes.enumeration.description": "Liste de choix",
"popUpForm.attributes.string.name": "Chaîne de caractères",
"popUpForm.attributes.text.name": "Text",
"popUpForm.attributes.text.name": "Texte",
"popUpForm.attributes.boolean.name": "Booléen",
"popUpForm.attributes.number.name": "Nombre",
"popUpForm.attributes.date.name": "Date",
"popUpForm.attributes.json.name": "JSON",
"popUpForm.attributes.media.name": "Media",
"popUpForm.attributes.media.name": "Média",
"popUpForm.attributes.relation.name": "Relation",
"popUpForm.attributes.email.name": "Email",
"popUpForm.attributes.password.name": "Mot de passe",
"popUpForm.attributes.enumeration": "Énumération",
"popUpForm.create": "Ajouter un Nouveau",
"popUpForm.edit": "Modifer",
"popUpForm.field": "Champ",
"popUpForm.create.contentType.header.title": "Ajouter un Nouveau Modèle",
"popUpForm.choose.attributes.header.title": "Ajouter un Nouveau Champs",
"popUpForm.choose.attributes.header.title": "Ajouter un Nouveau Champ",
"popUpForm.edit.contentType.header.title": "Modifier un Modèle",
"popUpForm.navContainer.relation": "Définir relation",
"popUpForm.navContainer.base": "Réglages de base",

View File

@ -52,6 +52,11 @@
"form.attribute.item.json.name": "Nazwa",
"form.attribute.item.boolean.name": "Nazwa",
"form.attribute.item.string.name": "Nazwa",
"form.attribute.item.enumeration.name": "Nazwa",
"form.attribute.item.enumeration.rules": "Values (separate them with a comma)",
"form.attribute.item.enumeration.placeholder": "Ex: morning,noon,evening",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
"form.attribute.item.settings.name": "Ustawienia",
"form.attribute.item.requiredField": "Wymagany",
"form.attribute.item.uniqueField": "Unikalny",
@ -110,11 +115,11 @@
"notification.error.message": "Wystąpił błąd",
"notification.info.contentType.creating.notSaved":
"Zapisz proszę aktualny model zanim stworzysz nowy",
"notification.info.disable": "Tego pola nie można obecnie edytować... 😮",
"notification.info.optimized": "Ta wtyczka jest zoptymalizowana z localStorage",
"notification.success.message.contentType.edit": "Model został zmieniony",
"notification.success.message.contentType.create": "Model został utworzony",
"notification.success.contentTypeDeleted": "Model został usunięty",
"notification.info.enumeration": "Tego pola nie można obecnie edytować... 😮",
"popUpForm.attributes.string.description": "Tytuły, nazwy, paragrafy, lista nazwisk",
"popUpForm.attributes.text.description": "Opisy, paragrafy, artykuły ",
@ -126,7 +131,8 @@
"popUpForm.attributes.relation.description": "Odnosi się do modelu",
"popUpForm.attributes.email.description": "Email użytkownika...",
"popUpForm.attributes.password.description": "Hasło użytkownika...",
"popUpForm.attributes.enumeration.description": "List of choices",
"popUpForm.attributes.string.name": "Ciąg",
"popUpForm.attributes.text.name": "Tekst",
"popUpForm.attributes.boolean.name": "Typ logiczny",
@ -137,6 +143,7 @@
"popUpForm.attributes.relation.name": "Relacja",
"popUpForm.attributes.email.name": "Email",
"popUpForm.attributes.password.name": "Hasło",
"popUpForm.attributes.enumeration.name": "Wyliczenie",
"popUpForm.create": "Nowy",
"popUpForm.edit": "Zmień",
"popUpForm.field": "Atrybut",

View File

@ -1,176 +1,183 @@
{
"plugin.description.short": "Моделируйте структуру данных вашего API.",
"plugin.description.long":
"Моделируйте структуру данных вашего API. Создавайте новые поля и связи всего за минуту. Файлы автоматически создаются и обновляются в вашем проекте.",
"attribute.string": "String",
"attribute.text": "Text",
"attribute.boolean": "Boolean",
"attribute.float": "Float",
"attribute.integer": "integer",
"attribute.decimal": "Decimal",
"attribute.date": "Date",
"attribute.json": "JSON",
"attribute.media": "Media",
"attribute.email": "Email",
"attribute.password": "Password",
"attribute.relation": "Связь",
"attribute.enumeration": "Enumeration",
"attribute.WYSIWYG": "Text (WYSIWYG)",
"plugin.description.short": "Моделируйте структуру данных вашего API.",
"plugin.description.long":
"Моделируйте структуру данных вашего API. Создавайте новые поля и связи всего за минуту. Файлы автоматически создаются и обновляются в вашем проекте.",
"attribute.string": "String",
"attribute.text": "Text",
"attribute.boolean": "Boolean",
"attribute.float": "Float",
"attribute.integer": "Integer",
"attribute.decimal": "Decimal",
"attribute.date": "Date",
"attribute.json": "JSON",
"attribute.media": "Media",
"attribute.email": "Email",
"attribute.password": "Password",
"attribute.relation": "Связь",
"attribute.enumeration": "Enumeration",
"attribute.WYSIWYG": "Text (WYSIWYG)",
"contentType.temporaryDisplay": "(Не сохранено)",
"from": "from",
"home.contentTypeBuilder.name": "Типы Данных",
"home.contentTypeBuilder.description": "Создавайте и обновляйте ваш Тип Данных.",
"home.emptyContentType.title": "Нет Типов Данных",
"home.emptyContentType.description":
"Создайте ваш первый Тип Данных и у вас появится возможность загружать ваши данные при помощи API.",
"home.emptyAttributes.title": "Пока ни одного поля не создано",
"home.emptyAttributes.description": "Добавте первое поле в ваш новый Тип Данных",
"button.contentType.create": "Создать Тип Данных",
"button.contentType.add": "Добавить Тип Данных",
"button.attributes.add": "Добавить Новое Поле",
"error.validation.required": "Это поле является обязательным.",
"error.validation.regex": "Не соответствует регулярному выражению.",
"error.validation.max": "Слишком большое.",
"error.validation.min": "Слишком маленькое.",
"error.validation.maxLength": "Слишком длинное.",
"error.validation.minLength": "Слишком короткое.",
"error.contentTypeName.taken": "Это название уже существует",
"error.attribute.taken": "Поле с таким названием уже существует",
"error.attribute.key.taken": "Это значение уже существует",
"error.attribute.sameKeyAndName": "Не может быть одинаковым",
"error.validation.minSupMax": "Не может быть выше",
"form.attribute.item.textarea.name": "Название",
"form.attribute.item.number.name": "Название",
"form.attribute.item.date.name": "Название",
"form.attribute.item.media.name": "Название",
"form.attribute.item.media.multiple": "Возможно несколько файлов",
"form.attribute.item.json.name": "Название",
"form.attribute.item.boolean.name": "Название",
"form.attribute.item.string.name": "Название",
"form.attribute.item.enumeration.name": "Название",
"form.attribute.item.enumeration.rules": "Values (separate them with a comma)",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
"form.attribute.item.enumeration.placeholder": "Ex: morning,noon,evening",
"form.attribute.item.appearance.name": "Отображение",
"form.attribute.item.appearance.label": "Показывать WYSIWYG",
"form.attribute.item.appearance.description":
"В противном случае значение будет доступно для редактирования как обычное текстовое поле",
"form.attribute.item.settings.name": "Настройки",
"form.attribute.item.requiredField": "Обязательное поле",
"form.attribute.item.uniqueField": "Уникальное поле",
"form.attribute.item.minimum": "Минимальное значение",
"form.attribute.item.minimumLength": "Минимальная длина",
"form.attribute.item.maximumLength": "Максимальная длина",
"form.attribute.item.maximum": "Максимальное значение",
"form.attribute.item.requiredField.description":
"Вы не сможете создать запись если это поле останенься пустым",
"form.attribute.item.uniqueField.description":
"Вы не сможете создать запись если существует запись с аналогичным содержанием",
"form.attribute.item.defineRelation.fieldName": "Название поля",
"form.attribute.item.customColumnName": "Настраиваемые названия столбца",
"form.attribute.item.customColumnName.description":
"Это удобно иметь возможность переименовывать название столбцов для настройки ответов от API.",
"form.attribute.item.number.type": "Числовой формат",
"form.attribute.item.number.type.integer": "integer (ex: 10)",
"form.attribute.item.number.type.float": "float (ex: 3.33333333)",
"form.attribute.item.number.type.decimal": "decimal (ex: 2.22)",
"form.attribute.settings.default": "Стандартное значение",
"form.attribute.settings.default.checkboxLabel": "Установить значение — true",
"form.button.cancel": "Отменить",
"form.button.continue": "Продолжить",
"form.button.save": "Сохранить",
"form.contentType.item.connections": "Соединение",
"form.contentType.item.name": "Название",
"form.contentType.item.name.description": "Название Типов Данных должны быть уникальными: {link}",
"form.contentType.item.name.link.description": "Ознакомьтесь с нашей документацией",
"form.contentType.item.description": "Описание",
"form.contentType.item.description.placeholder": "Добавте ваше короткое описание...",
"form.contentType.item.collectionName": "Название коллекции",
"form.contentType.item.collectionName.inputDescription":
"Полезно, когда название вашего Типа Данных и название вашей таблицы различаются",
"menu.section.contentTypeBuilder.name.plural": "Типы Данных",
"menu.section.contentTypeBuilder.name.singular": "Тип Данных",
"menu.section.documentation.name": "Документация",
"menu.section.documentation.guide": "Прочтите больше о Типах Данных в нашем",
"menu.section.documentation.guideLink": "руководстве.",
"menu.section.documentation.tutorial": "Посмотрите наши",
"menu.section.documentation.tutorialLink": "обучающие видео.",
"modelPage.contentHeader.emptyDescription.description":
"Нет описания для этого Типа Данных",
"modelPage.contentType.list.title.plural": "поля",
"modelPage.contentType.list.title.singular": "поле",
"modelPage.contentType.list.title.including": "включает",
"modelPage.contentType.list.relationShipTitle.plural": "связи",
"modelPage.contentType.list.relationShipTitle.singular": "связь",
"modelPage.attribute.relationWith": "Связан с",
"noTableWarning.description": "Не забудте создать таблицу `{modelName}` в вашей базе данных",
"noTableWarning.infos": "Больше информации",
"notification.error.message": "Возникла ошибка",
"notification.info.contentType.creating.notSaved":
"Пожалуйста сохраните ваш текущий Тип Данных перед тем как создавать новый",
"notification.info.disable": "Это поле в данный момент не редактируемо...😮",
"notification.info.optimized": "Плагин оптимизирован с вашим localstorage",
"notification.success.message.contentType.edit": "Ваш Тип Данных обновлен",
"notification.success.message.contentType.create": "Ваш Тип Данных создан",
"notification.success.contentTypeDeleted": "Ваш Тип Данных удален",
"popUpForm.attributes.string.description": "Загаловки, названия, имена, перечень названий",
"popUpForm.attributes.text.description": "Описания, текстовые параграфы, статьи",
"popUpForm.attributes.boolean.description": "Yes или no, 1 или 0, true или false",
"popUpForm.attributes.number.description": "Все что является числом",
"popUpForm.attributes.date.description": "Дата события, рабочие часы",
"popUpForm.attributes.json.description": "Данные в JSON формате",
"popUpForm.attributes.media.description": "Картинки, видео, PDF и другие виды файлов",
"popUpForm.attributes.relation.description": "Связан с Типом Данных",
"popUpForm.attributes.email.description": "Пользовательский email...",
"popUpForm.attributes.password.description": "Пароль пользователя...",
"popUpForm.attributes.enumeration.description": "List of choices",
"contentType.temporaryDisplay": "(Не сохранено)",
"from": "from",
"home.contentTypeBuilder.name": "Типы Данных",
"home.contentTypeBuilder.description": "Создавайте и обновляйте ваш Тип Данных.",
"home.emptyContentType.title": "Нет Типов Данных",
"home.emptyContentType.description":
"Создайте ваш первый Тип Данных и у вас появится возможность загружать ваши данные при помощи API.",
"home.emptyAttributes.title": "Пока ни одного поля не создано",
"home.emptyAttributes.description": "Добавте первое поле в ваш новый Тип Данных",
"button.contentType.create": "Создать Тип Данных",
"button.contentType.add": "Добавить Тип Данных",
"button.attributes.add": "Добавить Новое Поле",
"error.validation.required": "Это поле является обязательным.",
"error.validation.regex": "Не соответствует регулярному выражению.",
"error.validation.max": "Слишком большое.",
"error.validation.min": "Слишком маленькое.",
"error.validation.maxLength": "Слишком длинное.",
"error.validation.minLength": "Слишком короткое.",
"error.contentTypeName.taken": "Это название уже существует",
"error.attribute.taken": "Поле с таким названием уже существует",
"error.attribute.key.taken": "Это значение уже существует",
"error.attribute.sameKeyAndName": "Не может быть одинаковым",
"error.validation.minSupMax": "Не может быть выше",
"form.attribute.item.textarea.name": "Название",
"form.attribute.item.number.name": "Название",
"form.attribute.item.date.name": "Название",
"form.attribute.item.media.name": "Название",
"form.attribute.item.media.multiple": "Возможно несколько файлов",
"form.attribute.item.json.name": "Название",
"form.attribute.item.boolean.name": "Название",
"form.attribute.item.string.name": "Название",
"form.attribute.item.appearance.name": "Отображение",
"form.attribute.item.appearance.label": "Показывать WYSIWYG",
"form.attribute.item.appearance.description":
"В противном случае значение будет доступно для редактирования как обычное текстовое поле",
"form.attribute.item.settings.name": "Настройки",
"form.attribute.item.requiredField": "Обязательное поле",
"form.attribute.item.uniqueField": "Уникальное поле",
"form.attribute.item.minimum": "Минимальное значение",
"form.attribute.item.minimumLength": "Минимальная длина",
"form.attribute.item.maximumLength": "Максимальная длина",
"form.attribute.item.maximum": "Максимальное значение",
"form.attribute.item.requiredField.description":
"Вы не сможете создать запись если это поле останенься пустым",
"form.attribute.item.uniqueField.description":
"Вы не сможете создать запись если существует запись с аналогичным содержанием",
"form.attribute.item.defineRelation.fieldName": "Название поля",
"form.attribute.item.customColumnName": "Настраиваемые названия столбца",
"form.attribute.item.customColumnName.description":
"Это удобно иметь возможность переименовывать название столбцов для настройки ответов от API.",
"form.attribute.item.number.type": "Числовой формат",
"form.attribute.item.number.type.integer": "integer (ex: 10)",
"form.attribute.item.number.type.float": "float (ex: 3.33333333)",
"form.attribute.item.number.type.decimal": "decimal (ex: 2.22)",
"form.attribute.settings.default": "Стандартное значение",
"form.attribute.settings.default.checkboxLabel": "Установить значение — true",
"form.button.cancel": "Отменить",
"form.button.continue": "Продолжить",
"form.button.save": "Сохранить",
"form.contentType.item.connections": "Соединение",
"form.contentType.item.name": "Название",
"form.contentType.item.name.description": "Название Типов Данных должны быть уникальными: {link}",
"form.contentType.item.name.link.description": "Ознакомьтесь с нашей документацией",
"form.contentType.item.description": "Описание",
"form.contentType.item.description.placeholder": "Добавте ваше короткое описание...",
"form.contentType.item.collectionName": "Название коллекции",
"form.contentType.item.collectionName.inputDescription":
"Полезно, когда название вашего Типа Данных и название вашей таблицы различаются",
"menu.section.contentTypeBuilder.name.plural": "Типы Данных",
"menu.section.contentTypeBuilder.name.singular": "Тип Данных",
"menu.section.documentation.name": "Документация",
"menu.section.documentation.guide": "Прочтите больше о Типах Данных в нашем",
"menu.section.documentation.guideLink": "руководстве.",
"menu.section.documentation.tutorial": "Посмотрите наши",
"menu.section.documentation.tutorialLink": "обучающие видео.",
"modelPage.contentHeader.emptyDescription.description":
"Нет описания для этого Типа Данных",
"modelPage.contentType.list.title.plural": "поля",
"modelPage.contentType.list.title.singular": "поле",
"modelPage.contentType.list.title.including": "включает",
"modelPage.contentType.list.relationShipTitle.plural": "связи",
"modelPage.contentType.list.relationShipTitle.singular": "связь",
"modelPage.attribute.relationWith": "Связан с",
"noTableWarning.description": "Не забудте создать таблицу `{modelName}` в вашей базе данных",
"noTableWarning.infos": "Больше информации",
"notification.error.message": "Возникла ошибка",
"notification.info.contentType.creating.notSaved":
"Пожалуйста сохраните ваш текущий Тип Данных перед тем как создавать новый",
"notification.info.optimized": "Плагин оптимизирован с вашим localstorage",
"notification.success.message.contentType.edit": "Ваш Тип Данных обновлен",
"notification.success.message.contentType.create": "Ваш Тип Данных создан",
"notification.success.contentTypeDeleted": "Ваш Тип Данных удален",
"notification.info.enumeration": "Это поле в данный момент не редактируемо...😮",
"popUpForm.attributes.string.description": "Загаловки, названия, имена, перечень названий",
"popUpForm.attributes.text.description": "Описания, текстовые параграфы, статьи",
"popUpForm.attributes.boolean.description": "Yes или no, 1 или 0, true или false",
"popUpForm.attributes.number.description": "Все что является числом",
"popUpForm.attributes.date.description": "Дата события, рабочие часы",
"popUpForm.attributes.json.description": "Данные в JSON формате",
"popUpForm.attributes.media.description": "Картинки, видео, PDF и другие виды файлов",
"popUpForm.attributes.relation.description": "Связан с Типом Данных",
"popUpForm.attributes.email.description": "Пользовательский email...",
"popUpForm.attributes.password.description": "Пароль пользователя...",
"popUpForm.attributes.string.name": "String",
"popUpForm.attributes.text.name": "Text",
"popUpForm.attributes.boolean.name": "Boolean",
"popUpForm.attributes.date.name": "Date",
"popUpForm.attributes.json.name": "JSON",
"popUpForm.attributes.media.name": "Media",
"popUpForm.attributes.number.name": "Number",
"popUpForm.attributes.relation.name": "Relation",
"popUpForm.attributes.email.name": "Email",
"popUpForm.attributes.password.name": "Password",
"popUpForm.create": "Добавить новое",
"popUpForm.edit": "Отредактировать",
"popUpForm.field": "Поле",
"popUpForm.create.contentType.header.title": "Добавить новый Тип Данных",
"popUpForm.choose.attributes.header.title": "Добавить новое поле",
"popUpForm.edit.contentType.header.title": "Отредактировать Тип Данных",
"popUpForm.navContainer.relation": "Определить связь",
"popUpForm.navContainer.base": "Базовый настройки",
"popUpForm.navContainer.advanced": "Расширенные настройки",
"popUpRelation.title": "Связь",
"popUpWarning.button.cancel": "Отменить",
"popUpWarning.button.confirm": "Подтвердить",
"popUpWarning.title": "Пожалуйста подтвердите",
"popUpWarning.bodyMessage.contentType.delete":
"Вы уверены, что хотите удалить этот Тип Данных?",
"popUpWarning.bodyMessage.attribute.delete": "Вы уверены, что хотите удалить это поле?",
"table.contentType.title.plural": "Типы Данных доступны",
"table.contentType.title.singular": "Тип Данных доступен",
"table.contentType.head.name": "Название",
"table.contentType.head.description": "Описание",
"table.contentType.head.fields": "Поля",
"relation.oneToOne": "имеет один",
"relation.oneToMany": "принадлежит многим",
"relation.manyToOne": "имеет много",
"relation.manyToMany": "имеет и принадлежит многим",
"relation.attributeName.placeholder": "Пример: автор, категория, тег"
}
"popUpForm.attributes.string.name": "String",
"popUpForm.attributes.text.name": "Text",
"popUpForm.attributes.boolean.name": "Boolean",
"popUpForm.attributes.date.name": "Date",
"popUpForm.attributes.json.name": "JSON",
"popUpForm.attributes.media.name": "Media",
"popUpForm.attributes.number.name": "Number",
"popUpForm.attributes.relation.name": "Relation",
"popUpForm.attributes.email.name": "Email",
"popUpForm.attributes.password.name": "Password",
"popUpForm.attributes.enumeration.name": "Enumeration",
"popUpForm.create": "Добавить новое",
"popUpForm.edit": "Отредактировать",
"popUpForm.field": "Поле",
"popUpForm.create.contentType.header.title": "Добавить новый Тип Данных",
"popUpForm.choose.attributes.header.title": "Добавить новое поле",
"popUpForm.edit.contentType.header.title": "Отредактировать Тип Данных",
"popUpForm.navContainer.relation": "Определить связь",
"popUpForm.navContainer.base": "Базовый настройки",
"popUpForm.navContainer.advanced": "Расширенные настройки",
"popUpRelation.title": "Связь",
"popUpWarning.button.cancel": "Отменить",
"popUpWarning.button.confirm": "Подтвердить",
"popUpWarning.title": "Пожалуйста подтвердите",
"popUpWarning.bodyMessage.contentType.delete":
"Вы уверены, что хотите удалить этот Тип Данных?",
"popUpWarning.bodyMessage.attribute.delete": "Вы уверены, что хотите удалить это поле?",
"table.contentType.title.plural": "Типы Данных доступны",
"table.contentType.title.singular": "Тип Данных доступен",
"table.contentType.head.name": "Название",
"table.contentType.head.description": "Описание",
"table.contentType.head.fields": "Поля",
"relation.oneToOne": "имеет один",
"relation.oneToMany": "принадлежит многим",
"relation.manyToOne": "имеет много",
"relation.manyToMany": "имеет и принадлежит многим",
"relation.attributeName.placeholder": "Пример: автор, категория, тег"
}

View File

@ -52,6 +52,11 @@
"form.attribute.item.json.name": "İsim",
"form.attribute.item.boolean.name": "İsim",
"form.attribute.item.string.name": "İsim",
"form.attribute.item.enumeration.name": "İsim",
"form.attribute.item.enumeration.rules": "Values (separate them with a comma)",
"form.attribute.item.enumeration.placeholder": "Ex: morning,noon,evening",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
"form.attribute.item.appearance.name": "Görünüm",
"form.attribute.item.appearance.label": "WYSIWYG olarak görüntüle",
"form.attribute.item.appearance.description":
@ -114,11 +119,11 @@
"notification.error.message": "Bir hata oluştu.",
"notification.info.contentType.creating.notSaved":
"Lütfen yeni bir tane oluşturmadan önce mevcut İçerik Türünüzü kaydedin",
"notification.info.disable": "This field is not editable for the moment...😮",
"notification.info.optimized": "Bu eklenti, localStorage ile optimize edilmiştir",
"notification.success.message.contentType.edit": "İçerik Türünüz güncellendi",
"notification.success.message.contentType.create": "İçerik Türünüz oluşturuldu",
"notification.success.contentTypeDeleted": "İçerik Türü silindi",
"notification.info.enumeration": "This field is not editable for the moment...😮",
"popUpForm.attributes.string.description": "Başlıklar, adlar, paragraflar, isim listesi",
"popUpForm.attributes.text.description": "Tanımlar, metin paragrafları, makaleler ",
@ -130,7 +135,8 @@
"popUpForm.attributes.relation.description": "Bir İçerik Türünü Belirtiyor",
"popUpForm.attributes.email.description": "Kullanıcının e-postası...",
"popUpForm.attributes.password.description": "Kullanıcı şifresi...",
"popUpForm.attributes.enumeration.description": "List of choices",
"popUpForm.attributes.string.name": "String",
"popUpForm.attributes.text.name": "Yazı",
"popUpForm.attributes.boolean.name": "Mantıksal",
@ -141,6 +147,7 @@
"popUpForm.attributes.relation.name": "İlişki",
"popUpForm.attributes.email.name": "E-posta",
"popUpForm.attributes.password.name": "Parola",
"popUpForm.attributes.enumeration.name": "Enumeration",
"popUpForm.create": "Yeni ekle",
"popUpForm.edit": "Düzenle",
"popUpForm.field": "Alan",

View File

@ -52,6 +52,11 @@
"form.attribute.item.json.name": "Name",
"form.attribute.item.boolean.name": "Name",
"form.attribute.item.string.name": "Name",
"form.attribute.item.enumeration.name": "Name",
"form.attribute.item.enumeration.rules": "Values (separate them with a comma)",
"form.attribute.item.enumeration.placeholder": "Ex: morning,noon,evening",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
"form.attribute.item.appearance.name": "Appearance",
"form.attribute.item.appearance.label": "Display as a WYSIWYG",
"form.attribute.item.appearance.description":
@ -113,11 +118,11 @@
"notification.error.message": "发生错误",
"notification.info.contentType.creating.notSaved":
"在创建新Content Type之前请保存当前Content Type",
"notification.info.disable": "这个字段暂时不可编辑...😮",
"notification.info.optimized": "这个插件是用本地存储优化的",
"notification.success.message.contentType.edit": "你的Content Type已更新",
"notification.success.message.contentType.create": "你的Content Type已创建",
"notification.success.contentTypeDeleted": "这个Content Type已被删除",
"notification.info.enumeration": "这个字段暂时不可编辑...😮",
"popUpForm.attributes.string.description": "标题、名称、段落、名称列表",
"popUpForm.attributes.text.description": "描述、文本段落、文章",
@ -129,7 +134,8 @@
"popUpForm.attributes.relation.description": "引用其它 Content Type",
"popUpForm.attributes.email.description": "用户email...",
"popUpForm.attributes.password.description": "用户密码...",
"popUpForm.attributes.enumeration.description": "List of choices",
"popUpForm.attributes.string.name": "String",
"popUpForm.attributes.text.name": "Text",
"popUpForm.attributes.boolean.name": "Boolean",
@ -140,6 +146,7 @@
"popUpForm.attributes.relation.name": "Relation",
"popUpForm.attributes.email.name": "Email",
"popUpForm.attributes.password.name": "Password",
"popUpForm.attributes.enumeration.name": "Enumeration",
"popUpForm.create": "增加新的",
"popUpForm.edit": "编辑",
"popUpForm.field": "字段",

View File

@ -14,6 +14,7 @@
"attribute.email": "Email",
"attribute.password": "密碼",
"attribute.relation": "關聯其他結構",
"attribute.enumeration": "Enumeration",
"attribute.WYSIWYG": "Text (WYSIWYG)",
"contentType.temporaryDisplay": "(未儲存)",
@ -49,6 +50,11 @@
"form.attribute.item.json.name": "名稱",
"form.attribute.item.boolean.name": "名稱",
"form.attribute.item.string.name": "名稱",
"form.attribute.item.enumeration.name": "名稱",
"form.attribute.item.enumeration.rules": "Values (separate them with a comma)",
"form.attribute.item.enumeration.placeholder": "Ex: morning,noon,evening",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
"form.attribute.item.settings.name": "設定",
"form.attribute.item.requiredField": "必填欄位",
"form.attribute.item.uniqueField": "唯一欄位",
@ -105,6 +111,7 @@
"notification.error.message": "有錯誤發生了",
"notification.info.contentType.creating.notSaved": "建立新的資料結構前,請先儲存現在的。",
"notification.info.disable": "这个字段暂时不可编辑...😮",
"notification.info.optimized": "這個擴充功能使用您的 localstorage 來最佳化",
"notification.success.message.contentType.edit": "您的資料結構已更新",
"notification.success.message.contentType.create": "您的資料結構已建立",
@ -120,7 +127,8 @@
"popUpForm.attributes.relation.description": "關聯到一個資料結構",
"popUpForm.attributes.email.description": "使用者的 email...",
"popUpForm.attributes.password.description": "使用者密碼...",
"popUpForm.attributes.enumeration.description": "List of choices",
"popUpForm.attributes.string.name": "字串",
"popUpForm.attributes.text.name": "文字",
"popUpForm.attributes.boolean.name": "是/否",
@ -131,6 +139,7 @@
"popUpForm.attributes.relation.name": "關聯其他結構",
"popUpForm.attributes.email.name": "Email",
"popUpForm.attributes.password.name": "密碼",
"popUpForm.attributes.enumeration.name": "Enumeration",
"popUpForm.create": "增加新的",
"popUpForm.edit": "編輯",
"popUpForm.field": "欄位",

View File

@ -25,7 +25,7 @@
"glob": "^7.1.2",
"graphql": "^0.13.2",
"graphql-depth-limit": "^1.1.0",
"graphql-playground-middleware-koa": "^1.5.1",
"graphql-playground-middleware-koa": "^1.6.1",
"graphql-tools": "^2.23.1",
"graphql-type-json": "^0.2.0",
"pluralize": "^7.0.0",
@ -48,4 +48,4 @@
"npm": ">= 5.3.0"
},
"license": "MIT"
}
}