From 609dd1b394d67e528da45fa1b779bf08dada595a Mon Sep 17 00:00:00 2001 From: Broc Gailit Date: Mon, 18 Jun 2018 09:41:31 -0700 Subject: [PATCH 01/30] Implement sorting for SelectMany in Frontend --- .../admin/src/components/SelectMany/index.js | 78 ++++++++++++++++--- .../src/components/SelectMany/styles.scss | 22 ++++++ .../package.json | 1 + 3 files changed, 92 insertions(+), 9 deletions(-) diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js index 02d7d13cfc..c8c79b4dc2 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js @@ -6,15 +6,53 @@ import React from 'react'; import Select from 'react-select'; +import {SortableContainer, SortableElement, SortableHandle, arrayMove} from 'react-sortable-hoc'; + import PropTypes from 'prop-types'; -import 'react-select/dist/react-select.css'; + import { cloneDeep, isArray, isNull, isUndefined, get, findIndex, includes } from 'lodash'; +import IcoContainer from 'components/IcoContainer'; +import Ico from 'components/Ico'; + import request from 'utils/request'; import templateObject from 'utils/templateObject'; +import 'react-select/dist/react-select.css'; import styles from './styles.scss'; +const DragHandle = SortableHandle(() => ); + +const SortableItem = SortableElement(({idx, onRemove, value}) => { + const icons = [ + { + icoType: 'trash', + onClick: () => onRemove(idx), + }, + ]; + return ( +
  • + + + {value} + + + + +
  • + ); +}); + +const SortableList = SortableContainer(({items, onRemove}) => { + return ( + + ); +}); + class SelectMany extends React.Component { // eslint-disable-line react/prefer-stateless-function constructor(props) { @@ -92,13 +130,12 @@ class SelectMany extends React.Component { }; handleChange = value => { - const filteredValue = value.filter( - (data, index) => findIndex(value, o => o.value.id === data.value.id) === index - ); + const values = get(this.props.record, this.props.relation.alias); + const target = { name: `record.${this.props.relation.alias}`, type: 'select', - value: filteredValue, + value: [...values, value], }; this.props.setRecordAttribute({ target }); @@ -121,6 +158,26 @@ class SelectMany extends React.Component { } } + handleSortEnd = ({oldIndex, newIndex}) => { + const values = get(this.props.record, this.props.relation.alias); + const target = { + name: `record.${this.props.relation.alias}`, + type: 'select', + value: arrayMove(values, oldIndex, newIndex), + }; + this.props.setRecordAttribute({ target }); + }; + + handleRemove = (index) => { + const values = get(this.props.record, this.props.relation.alias); + const target = { + name: `record.${this.props.relation.alias}`, + type: 'select', + value: values.filter( (item, idx) => idx !== index), + }; + this.props.setRecordAttribute({ target }); + } + render() { const description = this.props.relation.description ? (

    {this.props.relation.description}

    @@ -128,7 +185,7 @@ class SelectMany extends React.Component { '' ); - const value = get(this.props.record, this.props.relation.alias); + const value = get(this.props.record, this.props.relation.alias) || []; /* eslint-disable jsx-a11y/label-has-for */ return (
    @@ -140,9 +197,9 @@ class SelectMany extends React.Component { id={this.props.relation.alias} isLoading={this.state.isLoading} onMenuScrollToBottom={this.handleBottomScroll} - onInputChange={this.handleInputChange} - multi - value={ + /> + { @@ -158,6 +215,9 @@ class SelectMany extends React.Component { } }) } + onSortEnd={this.handleSortEnd} + onRemove={this.handleRemove} + useDragHandle />
    ); diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss index c752aabc81..f89e4b7d45 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss @@ -25,3 +25,25 @@ } } } + +.sortableList { + + padding-left: 0 !important; + list-style: none !important; + +} + +.sortableListItem { + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + > span { + display: flex; + overflow: hidden; + span { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } +} \ No newline at end of file diff --git a/packages/strapi-plugin-content-manager/package.json b/packages/strapi-plugin-content-manager/package.json index f41b7111a5..91d34299cb 100755 --- a/packages/strapi-plugin-content-manager/package.json +++ b/packages/strapi-plugin-content-manager/package.json @@ -23,6 +23,7 @@ }, "devDependencies": { "react-select": "^1.0.0-rc.5", + "react-sortable-hoc": "^0.8.3", "strapi-helper-plugin": "3.0.0-alpha.12.5" }, "author": { From 0f556b5aca61c9e00801baabf0b92e5af8482050 Mon Sep 17 00:00:00 2001 From: Broc Gailit Date: Tue, 19 Jun 2018 08:47:28 -0700 Subject: [PATCH 02/30] Use empty array as default value in handleChange Fixes TypeError (null conversion) --- .../admin/src/components/SelectMany/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js index c8c79b4dc2..36ce4ff9dc 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js @@ -130,7 +130,7 @@ class SelectMany extends React.Component { }; handleChange = value => { - const values = get(this.props.record, this.props.relation.alias); + const values = get(this.props.record, this.props.relation.alias) || []; const target = { name: `record.${this.props.relation.alias}`, From a97ed480a1c2296c6aad5ad8b9101e3ffb640033 Mon Sep 17 00:00:00 2001 From: Marianelli Michele Date: Tue, 24 Jul 2018 15:10:18 +0200 Subject: [PATCH 03/30] Update it.json --- packages/strapi-admin/admin/src/translations/it.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/strapi-admin/admin/src/translations/it.json b/packages/strapi-admin/admin/src/translations/it.json index 0b5d31579e..b2fbabb75f 100644 --- a/packages/strapi-admin/admin/src/translations/it.json +++ b/packages/strapi-admin/admin/src/translations/it.json @@ -89,6 +89,7 @@ "components.popUpWarning.title": "Per favore conferma", "components.popUpWarning.message": "Sei sicuro di volerlo cancellare?", "components.Input.error.validation.email": "Non è un'email", + "components.Input.error.validation.json" : "Formato JSON non corrispondente", "components.Input.error.validation.required": "Valore obbligatorio.", "components.Input.error.validation.regex": "Questo valore non coincide con il regex.", "components.Input.error.validation.max": "Valore troppo alto.", @@ -119,18 +120,21 @@ "HomePage.notification.newsLetter.success": "Iscritto con successo alla newsletter", "notification.error": "Si è verificato un errore", "notification.error.layout": "Non è stato possibile recuperare il layout", + "request.error.model.unknown" : "Questo modello non esiste", "Users & Permissions": "Utenti & Permessi", "Content Manager": "Gestione Contenuti", "Content Type Builder": "Generatore di Tipo Contenuti", "Settings Manager": "Gestione Impostazioni", "Email": "Email", + "Files Upload" : "Caricamento Files", "Password": "Password", "Username": "Username", "Provider": "Provider", "ResetPasswordToken": "Reimposta Token Password", "Role": "Ruolo", + "Roles & Permissions" : "Ruoli e Permessi", "New entry": "Nuovo elemento", "request.error.model.unknow": "Questo modello non esiste", "Users": "Utenti", "Analytics": "Analytics" -} \ No newline at end of file +} From 62ebbacb0ec5be56185c64a1cf67f028e3ad751a Mon Sep 17 00:00:00 2001 From: Marianelli Michele Date: Tue, 24 Jul 2018 16:07:52 +0200 Subject: [PATCH 04/30] Another update of it.json --- .../admin/src/translations/it.json | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/it.json b/packages/strapi-plugin-content-manager/admin/src/translations/it.json index dff27611c5..eae07212b5 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/it.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/it.json @@ -14,16 +14,27 @@ "containers.List.pluginHeaderDescription.singular": "{label} voce trovati", "components.LimitSelect.itemsPerPage": "Elementi per pagina", "containers.List.errorFetchRecords": "Errore", + "containers.SettingPage.addField" : "Aggiungi un nuovo campo", + "containers.SettingPage.attributes" : "Attributi", + "containers.SettingPage.attributes.description" : "Definisci l'ordine degli attributi", + "containers.SettingPage.listSettings.title" : "Lista - Impostazioni", + "containers.SettingPage.listSettings.description" : "Configura le opzioni per questo Tipo di Contenuto", + "containers.SettingPage.pluginHeaderDescription" : "Configura le impostazioni specifiche per questo Tipo di Contenuto", + "containers.SettingsPage.pluginHeaderDescription" : "Configura le impostazioni di default per tutti i tuoi Tipi di Contenuto", + "containers.SettingsPage.Block.generalSettings.description" : "Configura le opzioni di default per i Tipi di Contenuto", + "containers.SettingsPage.Block.generalSettings.title" : "Generali", + "containers.SettingsPage.Block.contentType.title" : "Tipi di Contenuto", + "containers.SettingsPage.Block.contentType.description" : "Configura le impostazioni specifiche", "components.AddFilterCTA.add": "Filtri", "components.AddFilterCTA.hide": "Filtri", + "components.DraggableAttr.edit" : "Clicca per modificare", "components.FilterOptions.button.apply": "Applica", "components.FiltersPickWrapper.PluginHeader.actions.apply": "Applica", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Cancella tutto", "components.FiltersPickWrapper.PluginHeader.description": "Impostare le condizioni da applicare per filtrare le voci", "components.FiltersPickWrapper.PluginHeader.title.filter": "Filtri", "components.FiltersPickWrapper.hide": "Nascondi", - "components.FilterOptions.FILTER_TYPES.=": "si", "components.FilterOptions.FILTER_TYPES._ne": "non è", "components.FilterOptions.FILTER_TYPES._lt": "è inferiore", @@ -59,6 +70,7 @@ "error.model.fetch": "Si è verificato un errore durante il caricamento dei modelli di configurazione.", "error.validation.required": "Questo valore è richiesto.", "error.validation.regex": "Il valore non corrisponde alla regex.", + "error.validation.json" : "Non è un JSON", "error.validation.max": "Il valore è troppo alto.", "error.validation.min": "Il valore è troppo basso.", "error.validation.maxLength": "Il valore è troppo lungo.", @@ -69,7 +81,19 @@ "error.attribute.sameKeyAndName": "Non può essere uguale", "error.validation.minSupMax": "Non può essere superiore", + "form.Input.label.inputDescription" : "Questo valore sovrascrive l'etichetta mostrata nell'intestazione della tabella", + "form.Input.label" : "Etichetta", + "form.Input.search" : "Abilita ricerca", + "form.Input.search.field" : "Abilita la ricerca su questo campo", + "form.Input.filters" : "Abilita filtri", + "form.Input.sort.field" : "Abilita ordinamento su questo campo", + "form.Input.bulkActions" : "Abilita caricamento", + "form.Input.pageEntries" : "Righe per pagina", + "form.Input.pageEntries.inputDescription" : "Attenzione: Puoi sovrascrivere questo valore nella pagina delle impostazioni del Tipo di Contenuto", + "form.Input.defaultSort" : "Attributo di ordinamento di default", + "notification.error.relationship.fetch": "Si è verificato un errore durante il rapporto di recupero.", + "notification.info.SettingPage.disableSort" : "E' necessario un attributo con l'ordinamento abilitato", "success.record.delete": "Eliminato", "success.record.save": "Salvato", @@ -80,5 +104,8 @@ "popUpWarning.button.confirm": "Conferma", "popUpWarning.title": "Si prega di confermare", "popUpWarning.bodyMessage.contentType.delete": "Sei sicuro di voler cancellare questa voce?", - "popUpWarning.bodyMessage.contentType.delete.all": "Sei sicuro di voler eliminare queste voci?" -} \ No newline at end of file + "popUpWarning.bodyMessage.contentType.delete.all": "Sei sicuro di voler eliminare queste voci?", + "popUpWarning.warning.cancelAllSettings" : "Sei sicuro di voler cancellare le tue modifiche?", + "popUpWarning.warning.updateAllSettings" : "Questa operazione modificherà tutte le tue impostazioni" + +} From 7aba6ff4b7f046fad4518485c3bae63548c9e25a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20ERSOY?= Date: Tue, 24 Jul 2018 17:22:32 +0300 Subject: [PATCH 05/30] #1628 Missing translations --- .../admin/src/translations/tr.json | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/tr.json b/packages/strapi-plugin-content-manager/admin/src/translations/tr.json index f818897df8..062e76a33a 100755 --- a/packages/strapi-plugin-content-manager/admin/src/translations/tr.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/tr.json @@ -15,15 +15,31 @@ "components.LimitSelect.itemsPerPage": "Sayfa başı", "containers.List.errorFetchRecords": "Hata", + "containers.SettingPage.addField": "Yeni alan ekle", + "containers.SettingPage.attributes": "Nitelik alanları", + "containers.SettingPage.attributes.description": "Niteliklerin sırasını tanımlayın", + + "containers.SettingPage.listSettings.title": "Liste — Ayarlar", + "containers.SettingPage.listSettings.description": "Bu içerik türü için seçenekleri yapılandırın", + "containers.SettingPage.pluginHeaderDescription": "Bu İçerik Türü için belirli ayarları yapılandırın", + "containers.SettingsPage.pluginHeaderDescription": "Tüm İçerik türleriniz için varsayılan ayarları yapılandırın", + "containers.SettingsPage.Block.generalSettings.description": "İçerik Türleriniz için varsayılan seçenekleri yapılandırın", + "containers.SettingsPage.Block.generalSettings.title": "Genel", + "containers.SettingsPage.Block.contentType.title": "İçerik Türleri", + "containers.SettingsPage.Block.contentType.description": "Belirli ayarları yapılandırın", + "components.AddFilterCTA.add": "Filtreler", "components.AddFilterCTA.hide": "Filtreler", - "components.FilterOptions.button.apply": "Uygula", + + "components.DraggableAttr.edit": "Düzenlemek için tıklayın", + "components.FiltersPickWrapper.PluginHeader.actions.apply": "Uygula", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Hepsini temizle", "components.FiltersPickWrapper.PluginHeader.description": "Filtrelemek için uygulanacak şartları ayarlayın", "components.FiltersPickWrapper.PluginHeader.title.filter": "Filtreler", "components.FiltersPickWrapper.hide": "Gizle", + "components.FilterOptions.button.apply": "Uygula", "components.FilterOptions.FILTER_TYPES.=": "eşit", "components.FilterOptions.FILTER_TYPES._ne": "eşit değil", "components.FilterOptions.FILTER_TYPES._lt": "daha düşük", @@ -68,8 +84,21 @@ "error.attribute.key.taken": "Bu değer zaten var.", "error.attribute.sameKeyAndName": "Eşit olamaz", "error.validation.minSupMax": "Üstü olamaz", + "error.validation.json": "This is not a JSON", + + "form.Input.label.inputDescription": "Bu değer, tablonun başında görüntülenen etiketi geçersiz kılar", + "form.Input.label": "Etiket", + "form.Input.search": "Aramayı etkinleştir", + "form.Input.search.field": "Bu alanda aramayı etkinleştir", + "form.Input.filters": "Filtreleri etkinleştir", + "form.Input.sort.field": "Bu alana göre sıralamayı etkinleştir", + "form.Input.bulkActions": "Toplu işlemleri etkinleştir", + "form.Input.pageEntries": "Sayfa başına kayıtlar", + "form.Input.pageEntries.inputDescription": "Not: Bu değeri İçerik Türü ayarları sayfasında geçersiz kılabilirsiniz..", + "form.Input.defaultSort": "Varsayılan sıralama özelliği", "notification.error.relationship.fetch": "İlişki getirme sırasında bir hata oluştu.", + "notification.info.SettingPage.disableSort": "Sıralamaya izin verilen tek bir özelliğe sahip olmanız gerekir", "success.record.delete": "Silindi", "success.record.save": "Kaydedildi", @@ -80,5 +109,7 @@ "popUpWarning.button.confirm": "Onayla", "popUpWarning.title": "Lütfen onaylayın", "popUpWarning.bodyMessage.contentType.delete": "Bu kaydı silmek istediğinizden emin misiniz?", - "popUpWarning.bodyMessage.contentType.delete.all": "Bu kayıtları silmek istediğinizden emin misiniz?" + "popUpWarning.bodyMessage.contentType.delete.all": "Bu kayıtları silmek istediğinizden emin misiniz?", + "popUpWarning.warning.cancelAllSettings": "Değişikliklerinizi iptal etmek istediğinizden emin misiniz?", + "popUpWarning.warning.updateAllSettings": "Bu bütün ayarlarınızı değiştirecektir" } From d9dadd3d7609dfa190ac84edf17a841f61a0f10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20ERSOY?= Date: Tue, 24 Jul 2018 17:27:56 +0300 Subject: [PATCH 06/30] #1628 Missing translations --- packages/strapi-admin/admin/src/translations/tr.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/strapi-admin/admin/src/translations/tr.json b/packages/strapi-admin/admin/src/translations/tr.json index 6d54e48144..0bc2bd7af5 100755 --- a/packages/strapi-admin/admin/src/translations/tr.json +++ b/packages/strapi-admin/admin/src/translations/tr.json @@ -122,10 +122,11 @@ "components.Input.error.attribute.sameKeyAndName": "Eşit olamaz", "components.Input.error.validation.minSupMax": "Üstü olamaz", "components.Input.error.custom-error": "{errorMessage} ", + "components.Input.error.validation.json": "Bu JSON biçimi ile eşleşmiyor", "components.ListRow.empty": "Gösterilecek veri bulunmamaktadır.", - "components.Wysiwyg.collapse": "Collapse", + "components.Wysiwyg.collapse": "Daralt", "components.Wysiwyg.selectOptions.title": "Başlık ekle", "components.Wysiwyg.selectOptions.H1": "H1 başlık", "components.Wysiwyg.selectOptions.H2": "H2 başlık", @@ -143,11 +144,13 @@ "HomePage.notification.newsLetter.success": "Bültene başarıyla abone olundu", "notification.error": "Bir hata oluştu", - "notification.error.layout": "Couldn't retrieve the layout", + "notification.error.layout": "Düzen alınamadı", "Users & Permissions": "Kullanıcılar & İzinler", "Content Manager": "İçerik Yönetimi", "Content Type Builder": "İçerik Türü Oluşturucusu", + "Files Upload": "Dosya yükleme", + "Roles & Permissions": "Roller & İzinler", "Settings Manager": "Yönetici Ayarları", "Email": "E-posta", "Password": "Şifre", From 0f4e1912be916a6fa2d0176a5c936a5b5dc2c5c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20ERSOY?= Date: Tue, 24 Jul 2018 17:35:08 +0300 Subject: [PATCH 07/30] =?UTF-8?q?#1628=20Missing=20translations=20?= =?UTF-8?q?=F0=9F=87=B9=F0=9F=87=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/src/translations/tr.json | 7 ++-- .../admin/src/translations/tr.json | 35 +++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/packages/strapi-admin/admin/src/translations/tr.json b/packages/strapi-admin/admin/src/translations/tr.json index 6d54e48144..0bc2bd7af5 100755 --- a/packages/strapi-admin/admin/src/translations/tr.json +++ b/packages/strapi-admin/admin/src/translations/tr.json @@ -122,10 +122,11 @@ "components.Input.error.attribute.sameKeyAndName": "Eşit olamaz", "components.Input.error.validation.minSupMax": "Üstü olamaz", "components.Input.error.custom-error": "{errorMessage} ", + "components.Input.error.validation.json": "Bu JSON biçimi ile eşleşmiyor", "components.ListRow.empty": "Gösterilecek veri bulunmamaktadır.", - "components.Wysiwyg.collapse": "Collapse", + "components.Wysiwyg.collapse": "Daralt", "components.Wysiwyg.selectOptions.title": "Başlık ekle", "components.Wysiwyg.selectOptions.H1": "H1 başlık", "components.Wysiwyg.selectOptions.H2": "H2 başlık", @@ -143,11 +144,13 @@ "HomePage.notification.newsLetter.success": "Bültene başarıyla abone olundu", "notification.error": "Bir hata oluştu", - "notification.error.layout": "Couldn't retrieve the layout", + "notification.error.layout": "Düzen alınamadı", "Users & Permissions": "Kullanıcılar & İzinler", "Content Manager": "İçerik Yönetimi", "Content Type Builder": "İçerik Türü Oluşturucusu", + "Files Upload": "Dosya yükleme", + "Roles & Permissions": "Roller & İzinler", "Settings Manager": "Yönetici Ayarları", "Email": "E-posta", "Password": "Şifre", diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/tr.json b/packages/strapi-plugin-content-manager/admin/src/translations/tr.json index f818897df8..1ed9dfbc0c 100755 --- a/packages/strapi-plugin-content-manager/admin/src/translations/tr.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/tr.json @@ -15,15 +15,31 @@ "components.LimitSelect.itemsPerPage": "Sayfa başı", "containers.List.errorFetchRecords": "Hata", + "containers.SettingPage.addField": "Yeni alan ekle", + "containers.SettingPage.attributes": "Nitelik alanları", + "containers.SettingPage.attributes.description": "Niteliklerin sırasını tanımlayın", + + "containers.SettingPage.listSettings.title": "Liste — Ayarlar", + "containers.SettingPage.listSettings.description": "Bu içerik türü için seçenekleri yapılandırın", + "containers.SettingPage.pluginHeaderDescription": "Bu İçerik Türü için belirli ayarları yapılandırın", + "containers.SettingsPage.pluginHeaderDescription": "Tüm İçerik türleriniz için varsayılan ayarları yapılandırın", + "containers.SettingsPage.Block.generalSettings.description": "İçerik Türleriniz için varsayılan seçenekleri yapılandırın", + "containers.SettingsPage.Block.generalSettings.title": "Genel", + "containers.SettingsPage.Block.contentType.title": "İçerik Türleri", + "containers.SettingsPage.Block.contentType.description": "Belirli ayarları yapılandırın", + "components.AddFilterCTA.add": "Filtreler", "components.AddFilterCTA.hide": "Filtreler", - "components.FilterOptions.button.apply": "Uygula", + + "components.DraggableAttr.edit": "Düzenlemek için tıklayın", + "components.FiltersPickWrapper.PluginHeader.actions.apply": "Uygula", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Hepsini temizle", "components.FiltersPickWrapper.PluginHeader.description": "Filtrelemek için uygulanacak şartları ayarlayın", "components.FiltersPickWrapper.PluginHeader.title.filter": "Filtreler", "components.FiltersPickWrapper.hide": "Gizle", + "components.FilterOptions.button.apply": "Uygula", "components.FilterOptions.FILTER_TYPES.=": "eşit", "components.FilterOptions.FILTER_TYPES._ne": "eşit değil", "components.FilterOptions.FILTER_TYPES._lt": "daha düşük", @@ -68,8 +84,21 @@ "error.attribute.key.taken": "Bu değer zaten var.", "error.attribute.sameKeyAndName": "Eşit olamaz", "error.validation.minSupMax": "Üstü olamaz", + "error.validation.json": "Bu JSON biçimi ile eşleşmiyor", + + "form.Input.label.inputDescription": "Bu değer, tablonun başında görüntülenen etiketi geçersiz kılar", + "form.Input.label": "Etiket", + "form.Input.search": "Aramayı etkinleştir", + "form.Input.search.field": "Bu alanda aramayı etkinleştir", + "form.Input.filters": "Filtreleri etkinleştir", + "form.Input.sort.field": "Bu alana göre sıralamayı etkinleştir", + "form.Input.bulkActions": "Toplu işlemleri etkinleştir", + "form.Input.pageEntries": "Sayfa başına kayıtlar", + "form.Input.pageEntries.inputDescription": "Not: Bu değeri İçerik Türü ayarları sayfasında geçersiz kılabilirsiniz..", + "form.Input.defaultSort": "Varsayılan sıralama özelliği", "notification.error.relationship.fetch": "İlişki getirme sırasında bir hata oluştu.", + "notification.info.SettingPage.disableSort": "Sıralamaya izin verilen tek bir özelliğe sahip olmanız gerekir", "success.record.delete": "Silindi", "success.record.save": "Kaydedildi", @@ -80,5 +109,7 @@ "popUpWarning.button.confirm": "Onayla", "popUpWarning.title": "Lütfen onaylayın", "popUpWarning.bodyMessage.contentType.delete": "Bu kaydı silmek istediğinizden emin misiniz?", - "popUpWarning.bodyMessage.contentType.delete.all": "Bu kayıtları silmek istediğinizden emin misiniz?" + "popUpWarning.bodyMessage.contentType.delete.all": "Bu kayıtları silmek istediğinizden emin misiniz?", + "popUpWarning.warning.cancelAllSettings": "Değişikliklerinizi iptal etmek istediğinizden emin misiniz?", + "popUpWarning.warning.updateAllSettings": "Bu bütün ayarlarınızı değiştirecektir" } From 033219560a149bca6d47bede73d54788ece6816f Mon Sep 17 00:00:00 2001 From: bardaq Date: Wed, 25 Jul 2018 10:14:55 +0300 Subject: [PATCH 08/30] =?UTF-8?q?Add=20missing=20translation=20keys=20in?= =?UTF-8?q?=20RU=20language=20=F0=9F=87=B7=F0=9F=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/src/translations/ru.json | 7 +++ .../admin/src/translations/ru.json | 51 +++++++++++++++++++ .../admin/src/translations/ru.json | 2 + .../admin/src/translations/ru.json | 9 +++- .../admin/src/translations/ru.json | 2 + 5 files changed, 70 insertions(+), 1 deletion(-) diff --git a/packages/strapi-admin/admin/src/translations/ru.json b/packages/strapi-admin/admin/src/translations/ru.json index b479e2f0d1..6178832419 100644 --- a/packages/strapi-admin/admin/src/translations/ru.json +++ b/packages/strapi-admin/admin/src/translations/ru.json @@ -17,10 +17,13 @@ "app.components.HomePage.welcomeBlock.content": "Мы рады, что вы вступили в сообщество. Нам необходима обратная связь для развития проекта, поэтому не стесняйтесь писать нам\u0020", "app.components.HomePage.welcomeBlock.content.issues": "проблема.", "app.components.HomePage.welcomeBlock.content.raise": "\u0020или поднять\u0020", + "app.components.HomePage.welcome.again": "Добро пожаловать", + "app.components.HomePage.welcomeBlock.content.again": "Надеемся у вы делаете успехи в вашем проекте... Следите с последними новостями о Strapi. Мы стараемся изо всех сил, чтобы улучшить продукт основываясь на ваших пожеланиях.", "app.components.HomePage.createBlock.content.first": "\u0020", "app.components.HomePage.createBlock.content.second": "\u0020плагин поможет вам создать структуру ваших данных. Если вы новичок, мы настоятельно рекомендуем вам следить за нашими\u0020", "app.components.HomePage.createBlock.content.tutorial": "\u0020руководство.", "app.components.HomePage.button.quickStart": "ОЗНАКОМТЕСЬ С РУКОВОДСТВОМ ПО БЫСТРОМУ СТАРТУ", + "app.components.HomePage.button.blog": "СМОТРИТЕ БОЛЬШЕ В БЛОГЕ", "app.components.HomePage.support": "ПОДДЕРЖИТЕ НАС", "app.components.HomePage.support.content": "Купите футболку, это поможет нам продолжать работу над проектом, чтобы предоставить вам наилучшее из возможных решений!", "app.components.HomePage.support.link": "ЗАКАЗАТЬ НАШУ ФУТБОЛКУ СЕЙЧАС", @@ -113,6 +116,7 @@ "components.Input.error.validation.min": "Слишком маленькое.", "components.Input.error.validation.maxLength": "Слишком длинное.", "components.Input.error.validation.minLength": "Слишком короткое.", + "components.Input.error.validation.json": "Не соответствует JSON формату", "components.Input.error.contentTypeName.taken": "Это название уже существует", "components.Input.error.attribute.taken": "Поле с таким названием уже существует", "components.Input.error.attribute.key.taken": "Это значение уже существует", @@ -136,6 +140,8 @@ "components.WysiwygBottomControls.uploadFiles": "Перетащите файлы в эту область, добавляйте из буфер обмена или {browse}.", "components.WysiwygBottomControls.uploadFiles.browse": "выделите их", "components.WysiwygBottomControls.fullscreen": "Развернуть", + "Files Upload": "Загрузка файлов", + "HomePage.notification.newsLetter.success": "Успешная подписка на рассылку новостей", @@ -143,6 +149,7 @@ "notification.error.layout": "Не удалось получить макет", "Users & Permissions": "Пользователи & Доступы", + "Roles & Permissions": "Роли и доступы", "Content Manager": "Редактор контента", "Content Type Builder": "Конструктор Типов Контента", "Settings Manager": "Менеджер Настроек", diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/ru.json b/packages/strapi-plugin-content-manager/admin/src/translations/ru.json index 8faadca003..df62758472 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/ru.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/ru.json @@ -14,6 +14,57 @@ "containers.List.pluginHeaderDescription.singular": "{label} запись найдена", "components.LimitSelect.itemsPerPage": "Элементов на странице", "containers.List.errorFetchRecords": "Ошибка", + "containers.SettingPage.addField": "Добавить новое поле", + "containers.SettingPage.attributes": "Поля атрибутов", + "containers.SettingPage.attributes.description": "Определить порядок атребутов", + "containers.SettingPage.listSettings.title": "Список — Настройки", + "containers.SettingPage.listSettings.description": "Указать порядок атрибутов", + "containers.SettingPage.listSettings.title": "Список — Настройки", + "containers.SettingPage.pluginHeaderDescription": "Отдельные настройки для этого Типа Данных", + "containers.SettingsPage.pluginHeaderDescription": "Настройте параметры по умолчанию для всех Типов Данных", + "containers.SettingsPage.Block.generalSettings.description": "Настройте опции по умолчанию для ваших Типов Данных", + "containers.SettingsPage.Block.generalSettings.title": "Общее", + "containers.SettingsPage.Block.contentType.title": "Типы данных", + "containers.SettingsPage.Block.contentType.description": "Настроить отдельные параметры", + "components.AddFilterCTA.add": "Фильтры", + "components.AddFilterCTA.hide": "Фильтры", + "components.DraggableAttr.edit": "Нажмите чтобы редактировать", + "components.FiltersPickWrapper.PluginHeader.actions.apply": "Применить", + "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Очистить все", + "components.FiltersPickWrapper.PluginHeader.description": "Укажите условия для фильтрации записей", + "components.FiltersPickWrapper.PluginHeader.title.filter": "Фильтры", + "components.FiltersPickWrapper.hide": "Скрыть", + "components.FilterOptions.button.apply": "Применить", + "components.FilterOptions.FILTER_TYPES.=": "равно", + "components.FilterOptions.FILTER_TYPES._ne": "не равно", + "components.FilterOptions.FILTER_TYPES._lt": "меньше чем", + "components.FilterOptions.FILTER_TYPES._lte": "меньше или равно чем", + "components.FilterOptions.FILTER_TYPES._gt": "больше чем", + "components.FilterOptions.FILTER_TYPES._gte": "равно или больше чем", + "components.FilterOptions.FILTER_TYPES._contains": "содержит", + "components.FilterOptions.FILTER_TYPES._containss": "содержит (с учетом регистра)", + "components.Search.placeholder": "Поиск записей...", + "components.TableDelete.entries.plural": "{число} записей выбрано", + "components.TableDelete.entries.singular": "{число} записей выделено", + "components.TableDelete.delete": "Удалить все", + "components.TableEmpty.withFilters": "Нет {Тип данных} с примененными фильтрами...", + "components.TableEmpty.withoutFilter": "Нет {Тип данных}...", + "components.TableEmpty.withSearch": "Нет {Тип данных} согласно поиску ({поиск})", + "error.validation.json": "Это не JSON", + "form.Input.label.inputDescription": "Это знчение переопределит метку, в заголовке таблицы", + "form.Input.label": "Метка", + "form.Input.search": "Применить поиск", + "form.Input.search.field": "Применить поиск по этому полю", + "form.Input.filters": "Применить фильтры", + "form.Input.sort.field": "Применить сортировку по этому полю", + "form.Input.bulkActions": "Применить массовые действия", + "form.Input.pageEntries": "Записей на страницу", + "form.Input.pageEntries.inputDescription": "Заметка: вы можете переопределить это значение на странице настроек Типа Данных", + "form.Input.defaultSort": "Сортировка по умолчанию", + "notification.info.SettingPage.disableSort": "У вас должен быть один атрибут с разрешенной сортировкой", + "popUpWarning.bodyMessage.contentType.delete.all": "Вы уверенны, что хотите удалить эти записи?", + "popUpWarning.warning.cancelAllSettings": "Вы уверенны, что хотите отменить ваши модификации?", + "popUpWarning.warning.updateAllSettings": "Это изменит все ваши настройки", "EditRelations.title": "Связанные данные", diff --git a/packages/strapi-plugin-content-type-builder/admin/src/translations/ru.json b/packages/strapi-plugin-content-type-builder/admin/src/translations/ru.json index 0b11ae4008..aef503c112 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/translations/ru.json +++ b/packages/strapi-plugin-content-type-builder/admin/src/translations/ru.json @@ -42,6 +42,7 @@ "error.attribute.taken": "Поле с таким названием уже существует", "error.attribute.key.taken": "Это значение уже существует", "error.attribute.sameKeyAndName": "Не может быть одинаковым", + "error.attribute.forbidden": "Такое имя атрибута зарезервировано", "error.validation.minSupMax": "Не может быть выше", "form.attribute.item.textarea.name": "Название", @@ -175,6 +176,7 @@ "table.contentType.head.description": "Описание", "table.contentType.head.fields": "Поля", + "relation.oneWay": "один принадлежит", "relation.oneToOne": "имеет один", "relation.oneToMany": "принадлежит многим", "relation.manyToOne": "имеет много", diff --git a/packages/strapi-plugin-email/admin/src/translations/ru.json b/packages/strapi-plugin-email/admin/src/translations/ru.json index b2d52f90f8..8733143ea1 100644 --- a/packages/strapi-plugin-email/admin/src/translations/ru.json +++ b/packages/strapi-plugin-email/admin/src/translations/ru.json @@ -1,5 +1,12 @@ { "plugin.description.short": "Отсылка почты.", - "plugin.description.long": "Отсылка почты." + "plugin.description.long": "Отсылка почты.", + "ConfigPage.title": "Email - Настройки", + "ConfigPage.description": "Настройка плагина email", + "EditForm.Input.number.label": "Максимально допустимый размер (в МБ)", + "EditForm.Input.select.label": "Провайдеры", + "EditForm.Input.select.inputDescription": "Письма могут быть отправлены стандартным провайдером (Sendmail), или внешними провайдерами", + "EditForm.Input.toggle.label": "Активировать отправку писем", + "notification.config.success": "Настройки успешно обновлены" } \ No newline at end of file diff --git a/packages/strapi-plugin-settings-manager/admin/src/translations/ru.json b/packages/strapi-plugin-settings-manager/admin/src/translations/ru.json index f731174184..88519ec44c 100644 --- a/packages/strapi-plugin-settings-manager/admin/src/translations/ru.json +++ b/packages/strapi-plugin-settings-manager/admin/src/translations/ru.json @@ -35,6 +35,8 @@ "form.database.item.provider.postgres": "PostgresSQL", "form.database.item.provider.mysql": "MySQL", "form.database.item.provider.redis": "Redis", + "form.database.item.ssl": "SSL", + "form.database.item.authenticationDatabase": "База данных аутентификации", "form.application.name": "Приложение", "form.application.description": "Зайдайте настройки вашего приложения.", From 1cf5dac2a6d7910a36cf42049fd1c2e2227803f0 Mon Sep 17 00:00:00 2001 From: Alberto Maturano Date: Mon, 23 Jul 2018 17:29:11 -0500 Subject: [PATCH 09/30] Improve spanish translation - Fix minor errors and improve translation after review it in context (comments from PR #1566) - Missing ES translations (issue #1621) - Normalize tone using a formal style --- .../admin/src/translations/es.json | 22 +- packages/strapi-generate-api/package.json | 2 +- .../strapi-generate-controller/package.json | 2 +- packages/strapi-generate-model/package.json | 2 +- packages/strapi-generate-new/package.json | 2 +- packages/strapi-generate-plugin/package.json | 2 +- packages/strapi-generate-policy/package.json | 2 +- packages/strapi-generate-service/package.json | 2 +- packages/strapi-hook-bookshelf/package.json | 2 +- packages/strapi-hook-ejs/package.json | 2 +- .../admin/src/translations/es.json | 238 +++++++----------- .../admin/src/translations/es.json | 4 +- .../admin/src/translations/es.json | 10 +- 13 files changed, 124 insertions(+), 168 deletions(-) diff --git a/packages/strapi-admin/admin/src/translations/es.json b/packages/strapi-admin/admin/src/translations/es.json index 2fe777f5a2..6da3497017 100644 --- a/packages/strapi-admin/admin/src/translations/es.json +++ b/packages/strapi-admin/admin/src/translations/es.json @@ -8,23 +8,23 @@ "app.components.DownloadInfo.download": "Descarga en curso...", "app.components.DownloadInfo.text": "Esto puede tardar un minuto. Gracias por su paciencia.", - "app.components.HomePage.welcome": "Bienvenidos a bordo!", + "app.components.HomePage.welcome": "¡Bienvenido a bordo!", "app.components.HomePage.welcome.again": "Bienvenido ", "app.components.HomePage.cta": "CONFIRMAR", "app.components.HomePage.community": "Encuentra la comunidad en la web", "app.components.HomePage.newsLetter": "Suscríbase al boletín de noticias para ponerse en contacto con Strapi", "app.components.HomePage.community.content": "Discutir con los miembros del equipo, colaboradores y desarrolladores en diferentes canales.", "app.components.HomePage.create": "Crea tu primer Tipo de Contenido", - "app.components.HomePage.welcomeBlock.content": "Estamos felices de tenerlo como miembro de la comunidad. Estamos constantemente en busca de comentarios así que no dude en enviarnos DM en\u0020", + "app.components.HomePage.welcomeBlock.content": "Estamos felices de tenerlo como miembro de la comunidad. Estamos constantemente en busca de comentarios así que no dude en enviarnos un DM en\u0020", "app.components.HomePage.welcomeBlock.content.again": "Esperamos que estés progresando en tu proyecto.... Siéntase libre de leer las últimas novedades sobre Strapi. Estamos dando lo mejor de nosotros mismos para mejorar el producto basándonos en sus comentarios.", - "app.components.HomePage.welcomeBlock.content.issues": "temas.", - "app.components.HomePage.welcomeBlock.content.raise": "\u0020o plantear\u0020", + "app.components.HomePage.welcomeBlock.content.issues": "problema.", + "app.components.HomePage.welcomeBlock.content.raise": "\u0020o reportar cualquier\u0020", "app.components.HomePage.createBlock.content.first": "El\u0020", - "app.components.HomePage.createBlock.content.second": "\u0020le ayudará a definir la estructura de datos de sus modelos. Si eres nuevo aquí, te recomendamos encarecidamente que sigas nuestros\u0020", - "app.components.HomePage.createBlock.content.tutorial": "\u0020tutorial.", + "app.components.HomePage.createBlock.content.second": "\u0020le ayudará a definir la estructura de datos de sus modelos. Si eres nuevo aquí, te recomendamos encarecidamente que sigas nuestro\u0020", + "app.components.HomePage.createBlock.content.tutorial": "\u0020", "app.components.HomePage.button.quickStart": "INICIAR EL TUTORIAL DE INICIO RÁPIDO", "app.components.HomePage.button.blog": "VER MÁS EN EL BLOG", - "app.components.HomePage.support": "APOYANOS", + "app.components.HomePage.support": "APÓYANOS", "app.components.HomePage.support.content": "¡Al comprar la camiseta, nos permitirá continuar nuestro trabajo en el proyecto para darle la mejor experiencia posible!", "app.components.HomePage.support.link": "CONSIGUE TU CAMISETA AHORA", @@ -43,8 +43,8 @@ "app.components.ImgPreview.hint": "Arrastre y suelte el archivo en esta área o {browse} para cargar un archivo.", "app.components.ImgPreview.hint.browse": "buscar", - "app.components.InstallPluginPage.helmet": "Mercado - Plugins", - "app.components.InstallPluginPage.title": "Mercado - Plugins", + "app.components.InstallPluginPage.helmet": "Tienda - Plugins", + "app.components.InstallPluginPage.title": "Tienda - Plugins", "app.components.InstallPluginPage.description": "Extienda su aplicación sin esfuerzo.", "app.components.InstallPluginPage.plugin.support-us.description": "¡Apóyanos comprando la camiseta Strapi. Eso nos permitirá seguir trabajando en el proyecto y tratar de darle la mejor experiencia posible!", "app.components.InstallPluginPage.InputSearch.label": " ", @@ -60,7 +60,7 @@ "app.components.LeftMenuFooter.poweredBy": "Potenciado por ", "app.components.LeftMenuLinkContainer.configuration": "Configuraciones", "app.components.LeftMenuLinkContainer.general": "General", - "app.components.LeftMenuLinkContainer.installNewPlugin": "Plaza de mercado", + "app.components.LeftMenuLinkContainer.installNewPlugin": "Tienda", "app.components.LeftMenuLinkContainer.listPlugins": "Plugins", "app.components.LeftMenuLinkContainer.noPluginsInstalled": "No hay plugins instalados todavía", "app.components.LeftMenuLinkContainer.plugins": "Plugins", @@ -149,6 +149,8 @@ "Users & Permissions": "Usuarios y permisos", "Content Manager": "Gestor de Contenidos", "Content Type Builder": "Constructor de Tipos de Contenido", + "Files Upload": "Carga de archivos", + "Roles & Permissions": "Roles y Permisos", "Settings Manager": "Gestor de ajustes", "Email": "Email", "Password": "Contraseña", diff --git a/packages/strapi-generate-api/package.json b/packages/strapi-generate-api/package.json index 554c31f102..0165d8de30 100755 --- a/packages/strapi-generate-api/package.json +++ b/packages/strapi-generate-api/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate-controller/package.json b/packages/strapi-generate-controller/package.json index 1d9f4854b7..69c6bd8b0b 100755 --- a/packages/strapi-generate-controller/package.json +++ b/packages/strapi-generate-controller/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate-model/package.json b/packages/strapi-generate-model/package.json index e6b4636ee1..bda41f5638 100755 --- a/packages/strapi-generate-model/package.json +++ b/packages/strapi-generate-model/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate-new/package.json b/packages/strapi-generate-new/package.json index 5fb0fb93fe..0b62c02b5a 100755 --- a/packages/strapi-generate-new/package.json +++ b/packages/strapi-generate-new/package.json @@ -49,4 +49,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate-plugin/package.json b/packages/strapi-generate-plugin/package.json index 5d7d1673bc..c160e95aaa 100755 --- a/packages/strapi-generate-plugin/package.json +++ b/packages/strapi-generate-plugin/package.json @@ -44,4 +44,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate-policy/package.json b/packages/strapi-generate-policy/package.json index 4063ad2c9a..1f9c05b192 100755 --- a/packages/strapi-generate-policy/package.json +++ b/packages/strapi-generate-policy/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate-service/package.json b/packages/strapi-generate-service/package.json index 9a12c7c0ba..c18b80e770 100755 --- a/packages/strapi-generate-service/package.json +++ b/packages/strapi-generate-service/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-hook-bookshelf/package.json b/packages/strapi-hook-bookshelf/package.json index 620b3a9bd1..74d13abfb5 100755 --- a/packages/strapi-hook-bookshelf/package.json +++ b/packages/strapi-hook-bookshelf/package.json @@ -55,4 +55,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-hook-ejs/package.json b/packages/strapi-hook-ejs/package.json index d0c3e04a5a..6c0e110886 100755 --- a/packages/strapi-hook-ejs/package.json +++ b/packages/strapi-hook-ejs/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/es.json b/packages/strapi-plugin-content-manager/admin/src/translations/es.json index 6df940e6ca..a35861d259 100755 --- a/packages/strapi-plugin-content-manager/admin/src/translations/es.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/es.json @@ -1,162 +1,116 @@ { - "app.components.Button.save": "Guardar", - "app.components.Button.cancel": "Cancelar", + "plugin.description.short": "Ver, editar y eliminar información de su base de datos de manera rápida.", + "plugin.description.long": "Ver, editar y eliminar información de su base de datos de manera rápida.", + "containers.Home.pluginHeaderTitle": "Gestor de Contenido", + "containers.Home.introduction": "Para editar sus registros vaya al link en específico en el menu de la izquierda. Este plugin no tiene una manera de editar configuraciones y aún esta en continuo desarrollo.", + "containers.Home.pluginHeaderDescription": "Gestiona sus registros en una bella y poderoza interfaz.", + "containers.Edit.submit": "Guardar", + "containers.Edit.editing": "Editando...", + "containers.Edit.delete": "Eliminar", + "containers.Edit.reset": "Reiniciar", + "containers.Edit.returnList": "Regresar a la lista", + "containers.List.addAnEntry": "Agregar nuevo {entity}", + "containers.List.pluginHeaderDescription": "{label} registros encontrados", + "containers.List.pluginHeaderDescription.singular": "{label} registro encontrado", + "components.LimitSelect.itemsPerPage": "registros por página", + "containers.List.errorFetchRecords": "Error", - "app.components.ComingSoonPage.comingSoon": "Próximamente", - "app.components.ComingSoonPage.featuresNotAvailable": "Esta característica está aún en desarrollo.", + "containers.SettingPage.addField": "Agregar nuevo campo", + "containers.SettingPage.attributes": "Campos de atributos", + "containers.SettingPage.attributes.description": "Defina el orden de sus atributos", - "app.components.DownloadInfo.download": "Descarga en curso....", - "app.components.DownloadInfo.text": "Esto puede tardar un minuto. Gracias por su paciencia.", + "containers.SettingPage.listSettings.title": "Lista — Configuraciones", + "containers.SettingPage.listSettings.description": "Configura las opciones para este tipo de contenido", + "containers.SettingPage.pluginHeaderDescription": "Configura las opciones específicas para este Tipo de Contenido", + "containers.SettingsPage.pluginHeaderDescription": "Configura las opciones por defecto para todos sus Tipos de Contenido", + "containers.SettingsPage.Block.generalSettings.description": "Configura las opciones por defecto para sus Tipos de Contenido", + "containers.SettingsPage.Block.generalSettings.title": "General", + "containers.SettingsPage.Block.contentType.title": "Tipos de Contenido", + "containers.SettingsPage.Block.contentType.description": "Configuraciones específicas", - "app.components.HomePage.welcome": "Bienvenido a bordo!", - "app.components.HomePage.welcome.again": "Bienvenido ", - "app.components.HomePage.cta": "CONFIRMAR", - "app.components.HomePage.community": "Encuentra la comunidad en la web", - "app.components.HomePage.newsLetter": "Suscríbase al boletín de noticias para ponerse en contacto con Strapi", - "app.components.HomePage.community.content": "Discuta con los miembros del equipo, colaboradores y desarrolladores en diferentes canales.", - "app.components.HomePage.create": "Crea tu primer tipo de contenido", - "app.components.HomePage.welcomeBlock.content": "Estamos felices de tenerlo como miembro de la comunidad. Estamos constantemente en busca de comentarios así que no dude en enviarnos DM a\u0020", - "app.components.HomePage.welcomeBlock.content.again": "Esperamos que estés progresando en tu proyecto.... Siéntase libre de leer las últimas novedades sobre Strapi. Estamos dando lo mejor de nosotros mismos para mejorar el producto basándonos en sus comentarios.", - "app.components.HomePage.welcomeBlock.content.issues": "problema.", - "app.components.HomePage.welcomeBlock.content.raise": "\u0020o plantear\u0020", - "app.components.HomePage.createBlock.content.first": "El\u0020", - "app.components.HomePage.createBlock.content.second": "\u0020plugin le ayudará a definir la estructura de datos de sus modelos. Si eres nuevo aquí, te recomendamos encarecidamente que sigas nuestro\u0020", - "app.components.HomePage.createBlock.content.tutorial": "\u0020tutorial.", - "app.components.HomePage.button.quickStart": "INICIAR EL TUTORIAL DE INICIO RÁPIDO", - "app.components.HomePage.button.blog": "VER MÁS EN EL BLOG", - "app.components.HomePage.support": "APOYANOS", - "app.components.HomePage.support.content": "Al comprar la camiseta, nos permitirá continuar nuestro trabajo en el proyecto para darle la mejor experiencia posible!", - "app.components.HomePage.support.link": "CONSIGUE TU CAMISETA AHORA", + "components.AddFilterCTA.add": "Filtros", + "components.AddFilterCTA.hide": "Filtros", - "app.components.BlockLink.documentation": "Lea la documentación", - "app.components.BlockLink.documentation.content": "Descubra los conceptos, guías de referencia y tutoriales.", - "app.components.BlockLink.code": "Ejemplos de código", - "app.components.BlockLink.code.content": "Aprenda probando proyectos reales desarrollados por la comunidad.", + "components.DraggableAttr.edit": "Click para editar", - "app.components.InputFile.newFile": "Añadir nuevo archivo", - "app.components.InputFileDetails.open": "Abrir en una nueva pestaña", - "app.components.InputFileDetails.remove": "Eliminar este archivo", - "app.components.InputFileDetails.originalName": "Nombre original:", - "app.components.InputFileDetails.size": "Tamaño:", + "components.FiltersPickWrapper.PluginHeader.actions.apply": "Aplicar", + "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Limpiar todo", + "components.FiltersPickWrapper.PluginHeader.description": "Establece las condiciones a aplicar para filtrar registros", + "components.FiltersPickWrapper.PluginHeader.title.filter": "Filtros", + "components.FiltersPickWrapper.hide": "Ocultar", - "app.components.ImgPreview.hint": "Arrastre y suelte el archivo en esta área o {Buscar} para cargar un archivo.", - "app.components.ImgPreview.hint.browse": "buscar", + "components.FilterOptions.button.apply": "Aplicar", + "components.FilterOptions.FILTER_TYPES.=": "es", + "components.FilterOptions.FILTER_TYPES._ne": "no es", + "components.FilterOptions.FILTER_TYPES._lt": "es menor que", + "components.FilterOptions.FILTER_TYPES._lte": "es menor o igual que", + "components.FilterOptions.FILTER_TYPES._gt": "es mayor que", + "components.FilterOptions.FILTER_TYPES._gte": "es mayor o igual que", + "components.FilterOptions.FILTER_TYPES._contains": "contiene", + "components.FilterOptions.FILTER_TYPES._containss": "contiene (distinguiendo mayúsculas y minúsculas)", - "app.components.InstallPluginPage.helmet": "Mercado - Plugins", - "app.components.InstallPluginPage.title": "Mercado - Plugins", - "app.components.InstallPluginPage.description": "Extienda su aplicación sin esfuerzo.", - "app.components.InstallPluginPage.plugin.support-us.description": "Apóyanos comprando la camiseta Strapi. Eso nos permitirá seguir trabajando en el proyecto y tratar de darle la mejor experiencia posible!", - "app.components.InstallPluginPage.InputSearch.label": " ", - "app.components.InstallPluginPage.InputSearch.placeholder": "Buscar un plugin... (ej: autenticación)", - "app.components.InstallPluginPopup.downloads": "descargar", - "app.components.InstallPluginPopup.navLink.description": "Descripción", - "app.components.InstallPluginPopup.navLink.screenshots": "Capturas de pantalla", - "app.components.InstallPluginPopup.navLink.avis": "aviso", - "app.components.InstallPluginPopup.navLink.faq": "preguntas frecuentes", - "app.components.InstallPluginPopup.navLink.changelog": "changelog", - "app.components.InstallPluginPopup.noDescription": "No hay descripción disponible", + "components.Search.placeholder": "Buscar un registro...", - "app.components.LeftMenuFooter.poweredBy": "Potenciado por ", - "app.components.LeftMenuLinkContainer.configuration": "Configuraciones", - "app.components.LeftMenuLinkContainer.general": "General", - "app.components.LeftMenuLinkContainer.installNewPlugin": "Marketplace", - "app.components.LeftMenuLinkContainer.listPlugins": "Mercado", - "app.components.LeftMenuLinkContainer.noPluginsInstalled": "No hay plugins instalados todavía", - "app.components.LeftMenuLinkContainer.plugins": "Plugins", + "components.TableDelete.entries.plural": "{number} registros seleccionados", + "components.TableDelete.entries.singular": "{number} registro seleccionado", + "components.TableDelete.delete": "Eliminar todo", - "app.components.ListPluginsPage.helmet.title": "Lista de plugins", - "app.components.ListPluginsPage.title": "Plugins", - "app.components.ListPluginsPage.description": "Lista de los plugins instalados en el proyecto.", - "app.components.listPluginsPage.deletePlugin.error": "Se ha producido un error al desinstalar el plugin", - "app.components.listPlugins.title.singular": "{number} plugin está instalado", - "app.components.listPlugins.title.plural": "{número} plugins están instalados", - "app.components.listPlugins.title.none": "No hay plugins instalados", - "app.components.listPlugins.button": "Añadir nuevo plugin", - "app.components.NotFoundPage.description": "No encontrado", - "app.components.NotFoundPage.back": "Volver a la página de inicio", + "components.TableEmpty.withFilters": "No hay {contentType} con los filtros aplicados...", + "components.TableEmpty.withoutFilter": "No hay {contentType}...", + "components.TableEmpty.withSearch": "No hay {contentType} que coincida con la búsqueda ({search})...", - "app.components.Official": "Oficial", + "EditRelations.title": "Datos relacionados", - "app.components.PluginCard.compatible": "Compatible con su aplicación", - "app.components.PluginCard.compatibleCommunity": "Compatible con la comunidad", - "app.components.PluginCard.Button.label.download": "Descargar", - "app.components.PluginCard.Button.label.install": "Ya está instalado", - "app.components.PluginCard.Button.label.support": "Apóyenos", - "app.components.PluginCard.price.free": "Gratuito", - "app.components.PluginCard.more-details": "Más detalles", + "emptyAttributes.title": "Aún no hay campos", + "emptyAttributes.description": "Agregue su primer campo a su Tipo de Contenido", + "emptyAttributes.button": "Ir al creador de Tipos de Contenido", - "app.utils.placeholder.defaultMessage": "\u0020", - "app.utils.SelectOption.defaultMessage": "\u0020", - "app.utils.defaultMessage": "\u0020", + "error.schema.generation": "Ocurrió un error durante la generación de esquema.", + "error.records.count": "Ocurrió un error durante la consulta del número de registros.", + "error.records.fetch": "Ocurrió un error durante la consulta de registros.", + "error.record.fetch": "Ocurrió un error durante la consulta del registro.", + "error.record.create": "Ocurrió un error durante la creación del registro.", + "error.record.update": "Ocurrió un error durante la actualización del registro.", + "error.record.delete": "Ocurrió un error durante la eliminación del registro.", + "error.model.fetch": "Ocurrió un error durante la consulta de configuración de modelos.", + "error.validation.required": "Este dato es requerido.", + "error.validation.regex": "El valor no cumple la expresión regular.", + "error.validation.max": "El valor es muy alto.", + "error.validation.min": "El valor es muy bajo.", + "error.validation.maxLength": "El valor es muy largo.", + "error.validation.minLength": "El valor es muy corto.", + "error.contentTypeName.taken": "Este nombre ya existe", + "error.attribute.taken": "Este campo ya existe", + "error.attribute.key.taken": "Este valor ya existe", + "error.attribute.sameKeyAndName": "No pueden ser iguales", + "error.validation.minSupMax": "No puede ser superior", + "error.validation.json": "Este no es un JSON", - "components.AutoReloadBlocker.header": "La función de reload es necesaria para este plugin.", - "components.AutoReloadBlocker.description": "Abra el siguiente archivo y habilite la función.", + "form.Input.label.inputDescription": "Este valor sobrescribe la etiqueta mostrada en la cabecera de la tabla", + "form.Input.label": "Etiqueta", + "form.Input.search": "Habilitar la búsqueda", + "form.Input.search.field": "Habilitar la búsqueda para este campo", + "form.Input.filters": "Habilitar filtros", + "form.Input.sort.field": "Habilitar ordenado para este campo", + "form.Input.bulkActions": "Habilitar acciones en bloque", + "form.Input.pageEntries": "Registros por página", + "form.Input.pageEntries.inputDescription": "Nota: Puede sobrescribir este valor en la página de configuraciones para Tipo de Contenido.", + "form.Input.defaultSort": "Atributo para ordenar por defecto", - "components.ErrorBoundary.title": "Algo salió mal...", + "notification.error.relationship.fetch": "Ocurrió un error durante la consulta de la relación.", + "notification.info.SettingPage.disableSort": "Necesita tener un habilidato el ordenado en un atributo", - "components.OverlayBlocker.title": "Esperando el reinicio...", - "components.OverlayBlocker.description": "Está utilizando una función que necesita que el servidor se reinicie. Por favor, espere hasta que el servidor esté listo.", + "success.record.delete": "Eliminado", + "success.record.save": "Guardado", - "components.PageFooter.select": "entradas por página", + "pageNotFound": "Página no encontrada", - "components.ProductionBlocker.header": "Este plugin sólo está disponible en desarrollo.", - "components.ProductionBlocker.description": "Por razones de seguridad tenemos que desactivar este plugin en otros entornos.", - - "components.popUpWarning.button.cancel": "Cancelar", - "components.popUpWarning.button.confirm": "Confirmar", - "components.popUpWarning.title": "Por favor, confirme", - "components.popUpWarning.message": "¿Estás seguro de que quieres borrar esto?", - - "components.Input.error.validation.email": "Esto no es un email", - "components.Input.error.validation.required": "Este valor es obligatorio.", - "components.Input.error.validation.regex": "El valor no coincide con el valor de regex.", - "components.Input.error.validation.max": "El valor es demasiado alto.", - "components.Input.error.validation.min": "El valor es demasiado bajo.", - "components.Input.error.validation.maxLength": "El valor es demasiado largo.", - "components.Input.error.validation.minLength": "El valor es demasiado corto.", - "components.Input.error.contentTypeName.taken": "Este nombre ya existe", - "components.Input.error.attribute.taken": "Este nombre de campo ya existe", - "components.Input.error.attribute.key.taken": "Este valor ya existe", - "components.Input.error.attribute.sameKeyAndName": "No puede ser igual", - "components.Input.error.validation.minSupMax": "No puede ser superior", - "components.Input.error.custom-error": "{errorMessage} ", - "components.Input.error.validation.json": "Esto no coincide con el formato JSON", - - "components.ListRow.empty": "No hay datos que mostrar.", - - "components.Wysiwyg.collapse": "Colapso", - "components.Wysiwyg.selectOptions.title": "Añadir un título", - "components.Wysiwyg.selectOptions.H1": "Título H1", - "components.Wysiwyg.selectOptions.H2": "Título H2", - "components.Wysiwyg.selectOptions.H3": "Título H3", - "components.Wysiwyg.selectOptions.H4": "Título H4", - "components.Wysiwyg.selectOptions.H5": "Título H5", - "components.Wysiwyg.selectOptions.H6": "Título H6", - "components.Wysiwyg.ToggleMode.markdown": "Pasar a markdown", - "components.Wysiwyg.ToggleMode.preview": "Cambiar a previsualización", - "components.WysiwygBottomControls.charactersIndicators": "caracteres", - "components.WysiwygBottomControls.uploadFiles": "Arrastre y suelte archivos, péguelos desde el portapapeles o {buscar}.", - "components.WysiwygBottomControls.uploadFiles.browse": "seleccionarlos", - "components.WysiwygBottomControls.fullscreen": "Expandir", - - "HomePage.notification.newsLetter.success": "Suscribirse con éxito al boletín de noticias", - - "notification.error": "Se ha producido un error", - "notification.error.layout": "No se pudo recuperar el diseño", - - "Users & Permissions": "Usuarios y permisos", - "Content Manager": "Gestión de Contenidos", - "Content Type Builder": "Constructor de Tipos de Contenido", - "Settings Manager": "Gestion de Ajustes", - "Email": "Email", - "Password": "Contraseña", - "Username": "Nombre de Usuario", - "Provider": "Proveedor", - "ResetPasswordToken": "Restablecer Token de Contraseña", - "Role": "Papel", - "New entry": "Entrada nueva", - "request.error.model.unknown": "Este modelo no existe", - "Users": "Usuarios", - "Analytics": "Analytics" + "popUpWarning.button.cancel": "Cancelar", + "popUpWarning.button.confirm": "Confirmar", + "popUpWarning.title": "Favor de confirmar", + "popUpWarning.bodyMessage.contentType.delete": "¿Está seguro de querer eliminar este registro?", + "popUpWarning.bodyMessage.contentType.delete.all": "¿Está seguro de querer eliminar estos registros?", + "popUpWarning.warning.cancelAllSettings": "¿Está seguro de querer cancelar sus cambios?", + "popUpWarning.warning.updateAllSettings": "Esto modificará todas sus configuraciones" } diff --git a/packages/strapi-plugin-settings-manager/admin/src/translations/es.json b/packages/strapi-plugin-settings-manager/admin/src/translations/es.json index db17c37b2d..7c8ce57dbe 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/translations/es.json +++ b/packages/strapi-plugin-settings-manager/admin/src/translations/es.json @@ -52,8 +52,8 @@ "form.advanced.item.prefix": "API de prefijos", "form.request.name": "Solicitud", - "formulario.de.solicitud.de.descripción": "Configure los ajustes de su solicitud", - "formulario.para.solicitar.item.parser": "Parser", + "form.request.description": "Configure los ajustes de su solicitud.", + "form.request.item.parser": "Parser", "form.request.item.parser.multipart": "Parser Multiparte", "form.request.item.prefix": "Prefijo", "form.request.item.prefix.prefix": "Prefijo", diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/es.json b/packages/strapi-plugin-users-permissions/admin/src/translations/es.json index 9fbac51100..1279d42b23 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/translations/es.json +++ b/packages/strapi-plugin-users-permissions/admin/src/translations/es.json @@ -1,6 +1,6 @@ { - "Auth.form.button.register-success": "Enviar de nuevo", - "Auth.form.button.forgot-password.success": "Enviar de nuevo", + "Auth.form.button.register-success": "Enviar nuevamente", + "Auth.form.button.forgot-password.success": "Enviar nuevamente", "Auth.form.button.forgot-password": "Enviar Email", "Auth.form.button.reset-password": "Cambiar contraseña", "Auth.form.button.login": "Iniciar sesión", @@ -59,7 +59,7 @@ "EditForm.inputSelect.label.role": "Rol predeterminado para usuarios autenticados", "EditForm.inputSelect.description.role": "Adjuntará el nuevo usuario autenticado al rol seleccionado.", "EditForm.inputSelect.subscriptions.label": "Gestionar cuotas de suscripción", - "EditForm.inputSelect.subscriptions.description": "Limite el número de suscripciones por IP por hora.", + "EditForm.inputSelect.subscriptions.description": "Limite el número de suscripciones de IP por hora.", "EditForm.inputSelect.durations.label": "Duración", "EditForm.inputSelect.durations.description": "Número de horas durante las cuales el usuario no puede suscribirse.", @@ -121,7 +121,7 @@ "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.title": "Permisiones", + "Plugins.header.title": "Permisos", "Plugins.header.description": "Sólo las acciones vinculadas a una ruta se enumeran a continuación.", "Policies.InputSelect.empty": "Ninguno", @@ -139,7 +139,7 @@ "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 {provider} Proveedor", + "PopUpForm.header.edit.providers": "Editar Proveedor {provider}", "PopUpForm.inputSelect.providers.label": "Elija el proveedor", "PopUpForm.Email.options.from.name.label": "Nombre del remitente", "PopUpForm.Email.options.from.email.label": "Email del remitente", From 0796dd48760a9899c20271fe648ba85e8154b838 Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Thu, 26 Jul 2018 13:21:41 +0200 Subject: [PATCH 10/30] Add > DE translation keys > strapi-admin --- .../admin/src/translations/de.json | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/strapi-admin/admin/src/translations/de.json b/packages/strapi-admin/admin/src/translations/de.json index 42893def0c..0abe11523d 100644 --- a/packages/strapi-admin/admin/src/translations/de.json +++ b/packages/strapi-admin/admin/src/translations/de.json @@ -1,4 +1,12 @@ { + "app.components.Button.save": "Speichern", + "app.components.Button.cancel": "Abbrechen", + + "app.components.BlockLink.documentation": "Lesen Sie die Dokumentation", + "app.components.BlockLink.documentation.content": "Entdecken Sie die Konzepte, Referenzanleitungen und Tutorials.", + "app.components.BlockLink.code": "Code Beispiele", + "app.components.BlockLink.code.content": "Lernen Sie durch das Testen realer Projekte, die die Community entwickelt haben.", + "app.components.ComingSoonPage.comingSoon": "Bald verfügbar", "app.components.ComingSoonPage.featuresNotAvailable": "Dieses Feature ist derzeit noch in aktiver Entwicklung.", @@ -6,6 +14,7 @@ "app.components.DownloadInfo.text": "Dies könnte kurz dauern. Danke für deine Geduld.", "app.components.HomePage.welcome": "Willkommen an Bord!", + "app.components.HomePage.welcome.again": "Willkommen", "app.components.HomePage.create": "Erstelle deinen ersten Content-Typ", "app.components.HomePage.welcomeBlock.content": "Wir freuen uns, dich als Mitglied der Community zu haben. Wir sind offen für Feedback, senden uns einfach eine direkt Nachricht an\u0020", "app.components.HomePage.welcomeBlock.content.issues": "Fehler", @@ -13,6 +22,16 @@ "app.components.HomePage.createBlock.content.first": "Das\u0020", "app.components.HomePage.createBlock.content.second": "\u0020Plugin wird dir helfen, die Datenstruktur deiner Modelle zu definieren. Wenn du neu hier bist, empfehlen wir dir unsere\u0020", "app.components.HomePage.createBlock.content.tutorial": "\u0020Anleitung.", + "app.components.HomePage.welcomeBlock.content.again": "Wir hoffen, Sie machen Fortschritte bei Ihrem Projekt.... Lesen Sie das Neueste über Strapi. Wir geben unser Bestes, um das Produkt auf der Grundlage Ihres Feedbacks zu verbessern.", + "app.components.HomePage.cta": "BESTÄTIGEN", + "app.components.HomePage.community": "Finden Sie die Community im Web", + "app.components.HomePage.community.content": "Diskutieren Sie mit Teammitgliedern, Mitwirkenden und Entwicklern auf verschiedenen Kanälen.", + "app.components.HomePage.newsLetter": "Abonnieren Sie den Newsletter, um sich über Strapi zu informieren.", + "app.components.HomePage.button.quickStart" : "STARTEN SIE DAS QUICK-START-TUTORIAL", + "app.components.HomePage.button.blog": "MEHR DAZU IM BLOG", + "app.components.HomePage.support": "UNTERSTÜTZEN SIE UNS", + "app.components.HomePage.support.content": "Durch den Kauf des T-Shirts können wir unsere Arbeit am Projekt fortsetzen, um Ihnen das bestmögliche Erlebnis zu bieten!", + "app.components.HomePage.support.link": "HOLEN SIE SICH JETZT IHR T-SHIRT", "app.components.InputFile.newFile": "Neue Datei hinzufügen", "app.components.InputFileDetails.open": "In einem neuen Tab öffnen", @@ -69,6 +88,8 @@ "app.utils.placeholder.defaultMessage": "\u0020", "app.utils.SelectOption.defaultMessage": "\u0020", + "app.utils.defaultMessage": "", + "components.AutoReloadBlocker.header": "Dieses Plugin benötigt das Neuladen-Feature.", "components.AutoReloadBlocker.description": "Öffne die folgende Datei und aktiviere das Feature.", @@ -78,6 +99,8 @@ "components.OverlayBlocker.title": "Auf Neustart warten...", "components.OverlayBlocker.description": "Du verwendest ein Feature, das einen Neustart des Servers erfordert. Bitte warte, bis der Server wieder gestartet wurde.", + "components.PageFooter.select": "Einträge pro Seite", + "components.ProductionBlocker.header": "Dieses Plugin ist nur in der Entwicklungsumgebung verfügbar.", "components.ProductionBlocker.description": "Aus Sicherheitsgründen müssen wir dieses Plugin in anderen Umgebungen deaktivieren.", @@ -93,6 +116,7 @@ "components.Input.error.validation.min": "Dieser Wert ist zu niedrig.", "components.Input.error.validation.maxLength": "Dieser Wert ist zu lang.", "components.Input.error.validation.minLength": "Dieser Wert ist zu kurz.", + "components.Input.error.validation.json": "Dies entspricht nicht dem JSON-Format.", "components.Input.error.contentTypeName.taken": "Dieser Name existiert bereits", "components.Input.error.attribute.taken": "Dieser Feldname ist bereits vergeben", "components.Input.error.attribute.key.taken": "Dieser Wert existiert bereits", @@ -117,18 +141,26 @@ "components.WysiwygBottomControls.uploadFiles.browse": "selecting them", "components.WysiwygBottomControls.fullscreen": "Expand", - "notification.error": "Ein Fehler ist aufgetreten", + "HomePage.notification.newsLetter.success": "Newsletter erfolgreich abonniert", + "notification.error": "Ein Fehler ist aufgetreten", + "notification.error.layout": "Das Layout konnte nicht abgerufen werden.", + + "Analytics": "Analytics", "Auth & Permissions": "Authentifizierung & Berechtigungen", "Content Manager": "Content-Manager", "Content Type Builder": "Content-Typ-Manager", + "Files Upload": "Dateien hochladen", "Settings Manager": "Einstellungs-Manager", "Email": "E-Mail", "Password": "Passwort", + "Users": "Benutzer", "Username": "Benutzername", + "Users & Permissions": "Benutzer & Berechtigungen", "Provider": "Methode", "ResetPasswordToken": "Passwort-Token zurücksetzen", "Role": "Rolle", + "Roles & Permissions" : "Rollen & Berechtigungen", "New entry": "Neuer Eintrag", "request.error.model.unknown": "Dieses Schema existiert nicht" } From 25e32a5459c0e846254599d6a3917068e88ff00d Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Thu, 26 Jul 2018 15:28:51 +0200 Subject: [PATCH 11/30] Add > DE translation keys > strapi-plugin-content-manager --- .../admin/src/translations/de.json | 58 ++++++++++++++++++- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/de.json b/packages/strapi-plugin-content-manager/admin/src/translations/de.json index 7d004c8b2c..0b877f4d7c 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/de.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/de.json @@ -1,6 +1,7 @@ { "plugin.description.short": "Greife blitzschnell auf alle Daten in der Datenbank zu und manipuliere sie.", "plugin.description.long": "Greife blitzschnell auf alle Daten in der Datenbank zu und manipuliere sie.", + "containers.Home.pluginHeaderTitle": "Inhalts-Manager", "containers.Home.introduction": "Um deine Einträge zu verwalten, klicke auf den entsprechenden Link im Menü links. Dieses Plugin ist noch in aktiver Entwicklung und seine Einstellungen können nicht optimal angepasst werden.", "containers.Home.pluginHeaderDescription": "Verwalte deine Einträge mithilfe eines mächtigen und wunderschönen Interfaces.", @@ -14,12 +15,57 @@ "containers.List.pluginHeaderDescription.singular": "{label} Eintrag gefunden", "components.LimitSelect.itemsPerPage": "Einträge pro Seite", "containers.List.errorFetchRecords": "Fehler", + "containers.SettingPage.addField": "Neues Feld hinzufügen", + "containers.SettingPage.attributes": "Attribut Felder", + "containers.SettingPage.attributes.description": "Reihenfolge der Attribute festlegen", + "containers.SettingPage.listSettings.title": "Liste - Einstellungen", + "containers.SettingPage.listSettings.description": "Konfigurieren Sie die Optionen für diesen Inhaltstyp.", + "containers.SettingPage.pluginHeaderDescription": "Konfigurieren Sie die spezifischen Einstellungen für diesen Inhaltstyp.", + "containers.SettingsPage.Block.generalSettings.description": "Konfigurieren Sie die Standardoptionen für Ihre Inhaltstypen.", + "containers.SettingsPage.Block.generalSettings.title" : "Allgemeines", + "containers.SettingsPage.Block.contentType.title": "Inhaltstypen", + "containers.SettingsPage.Block.contentType.description": "Konfigurieren Sie die spezifischen Einstellungen", + + "components.AddFilterCTA.add": "Filter", + "components.AddFilterCTA.hide": "Filter", + "components.DraggableAttr.edit": "Klicken Sie zum Bearbeiten", + "components.FiltersPickWrapper.PluginHeader.actions.apply": "Anwenden", + "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Alle löschen", + "components.FiltersPickWrapper.PluginHeader.description": "Legen Sie die Bedingungen fest, unter denen die Einträge gefiltert werden sollen.", + "components.FiltersPickWrapper.PluginHeader.title.filter": "Filter", + "components.FiltersPickWrapper.hide": "Ausblenden", + "components.FilterOptions.button.apply": "Anwenden", + "components.FilterOptions.FILTER_TYPES.=": "ist", + "components.FilterOptions.FILTER_TYPES._ne": "ist nicht", + "components.FilterOptions.FILTER_TYPES._lt": "ist kleiner als", + "components.FilterOptions.FILTER_TYPES._lte": "ist kleiner oder gleich als", + "components.FilterOptions.FILTER_TYPES._gt": "ist größer als", + "components.FilterOptions.FILTER_TYPES._gte": "ist größer oder gleich als", + "components.FilterOptions.FILTER_TYPES._contains": "enthält", + "components.FilterOptions.FILTER_TYPES._containss": "enthält (Groß-/Kleinschreibung beachten)", + "components.Search.placeholder": "Suche nach einem Eintrag....", + "components.TableDelete.entries.plural": "{number} ausgewählte Einträge", + "components.TableDelete.entries.singular": "{number} ausgewählter Eintrag", + "components.TableDelete.delete": "Alle löschen", + "components.TableEmpty.withFilters": "Es gibt keinen {contentType} mit den verwendeten Filtern...", + "components.TableEmpty.withoutFilter": "Es gibt keinen {contentType}...", + "components.TableEmpty.withSearch": "Es gibt keinen {contentType}, der der Suche entspricht ({search})...", + + "form.Input.label": "Label", + "form.Input.search": "Suche aktivieren", + "form.Input.search.field": "Suche in diesem Feld aktivieren", + "form.Input.filters": "Filter aktivieren", + "form.Input.sort.field": "Sortierung in diesem Feld aktivieren", + "form.Input.bulkActions": "Bulk-Bearbeitung aktivieren", + "form.Input.pageEntries": "Einträge pro Seite", + "form.Input.pageEntries.inputDescription": "Hinweis: Sie können diesen Wert auf der Inhaltstypen Einstellungsseite überschreiben.", + "form.Input.defaultSort": "Standard-Sortierattribut", "EditRelations.title": "Relationale Daten", "emptyAttributes.title": "Es gibt noch keine Felder", - "emptyAttributes.description": "Füge deinem Content-Typen das erste Feld hinzu", - "emptyAttributes.button": "Den Content-Typ-Generator öffnen", + "emptyAttributes.description": "Füge deinem Inhaltstypen das erste Feld hinzu", + "emptyAttributes.button": "Den Inhaltstyp-Generator öffnen", "error.schema.generation": "Bei der Generierung des Schemas ist ein Fehler aufgetreten.", "error.records.count": "Beim Abruf von count records ist ein Fehler aufgetreten.", @@ -35,6 +81,7 @@ "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.validation.json": "Dies ist kein JSON", "error.contentTypeName.taken": "Dieser Name existiert bereits", "error.attribute.taken": "Dieser Feldname ist bereits vergeben", "error.attribute.key.taken": "Dieser Wert existiert bereits", @@ -42,6 +89,7 @@ "error.validation.minSupMax": "Darf nicht höher sein", "notification.error.relationship.fetch": "Beim Abruf von Beziehungen ist ein Fehler aufgetreten.", + "notification.info.SettingPage.disableSort": "Sie müssen ein Attribut mit aktivierter Sortierung haben.", "success.record.delete": "Gelöscht", "success.record.save": "Gespeichert", @@ -51,5 +99,9 @@ "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.contentType.delete": "Bist du sicher, dass du diesen Inhaltstyp löschen willst?", + "popUpWarning.bodyMessage.contentType.delete.all": "Sind Sie sicher, dass Sie diese Einträge löschen wollen?", + "popUpWarning.warning.cancelAllSettings": "Sind Sie sicher, dass Sie Ihre Änderungen rückgängig machen wollen?", + "popUpWarning.warning.updateAllSettings": "Dadurch werden alle Ihre Einstellungen geändert." + } From c2b34db19e8c8ae605f0652237ec8b842e645c80 Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Thu, 26 Jul 2018 16:34:36 +0200 Subject: [PATCH 12/30] Add > DE translation keys > strapi-plugin-content-type-builder --- .../admin/src/translations/de.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json b/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json index 2448f153fa..cb603715c7 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json +++ b/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json @@ -42,6 +42,7 @@ "error.attribute.key.taken": "Dieser Wert existiert bereits", "error.attribute.sameKeyAndName": "Darf nicht gleich sein", "error.validation.minSupMax": "Darf nicht höher sein", + "error.attribute.forbidden": "Dieser Attributname ist reserviert", "form.attribute.item.textarea.name": "Name", "form.attribute.item.number.name": "Name", @@ -72,6 +73,9 @@ "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.item.appearance.name": "Aussehen", + "form.attribute.item.appearance.label": "Als WYSIWYG anzeigen", + "form.attribute.item.appearance.description": "Andernfalls ist der Wert über ein einfaches Textfeld editierbar", "form.attribute.settings.default": "Standardwert", "form.attribute.settings.default.checkboxLabel": "Set to true", @@ -115,6 +119,8 @@ "notification.success.message.contentType.create": "Der Content-Typ wurde angelegt", "notification.success.contentTypeDeleted": "Der Content-Typ wurde gelöscht", + "relation.oneWay": "hat eine", + "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", From f0b8b411e64428dcd73c4b74cec7f76b84bb7140 Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Thu, 26 Jul 2018 16:38:33 +0200 Subject: [PATCH 13/30] Add > DE translation keys > strapi-plugin-email --- .../strapi-plugin-email/admin/src/translations/de.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/strapi-plugin-email/admin/src/translations/de.json b/packages/strapi-plugin-email/admin/src/translations/de.json index 9b1be4bf5e..e7519e0639 100755 --- a/packages/strapi-plugin-email/admin/src/translations/de.json +++ b/packages/strapi-plugin-email/admin/src/translations/de.json @@ -1,4 +1,14 @@ { + "ConfigPage.title": "E-Mail - Einstellungen", + "ConfigPage.description": "E-Mail-Plugin konfigurieren", + + "EditForm.Input.number.label": "Maximal zulässige Größe (in MB)", + "EditForm.Input.select.label": "Anbieter", + "EditForm.Input.select.inputDescription": "E-Mails können mit dem Standardanbieter (Sendmail) oder einem externen Anbieter versendet werden", + "EditForm.Input.toggle.label": "E-Mail-Versand aktivieren", + + "notification.config.success": "Die Einstellungen wurden aktualisiert", + "plugin.description.short": "Zum Versand von E-Mails.", "plugin.description.long": "Zum Versand von E-Mails." } From 792040a95908c8962db74181246ba2133bbdcfc7 Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Thu, 26 Jul 2018 16:40:25 +0200 Subject: [PATCH 14/30] Add > DE translation keys > strapi-plugin-settings-manager --- .../admin/src/translations/de.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/strapi-plugin-settings-manager/admin/src/translations/de.json b/packages/strapi-plugin-settings-manager/admin/src/translations/de.json index eb5a4f20fb..2b40f141dc 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/translations/de.json +++ b/packages/strapi-plugin-settings-manager/admin/src/translations/de.json @@ -112,6 +112,7 @@ "form.language.choose": "Wähle eine Sprache:", "request.error.database.exist": "Diese Verbindung gibt es bereits", + "request.error.database.unknow": "Keine solche Verbindung", "request.error.type.string": "Ein Text ist erforderlich.", "request.error.type.number": "Eine Nummer ist erforderlich.", "request.error.type.boolean": "Ein Boolean ist erforderlich.", From f2963b4eabd8b0e6d11949539d75e50744b3e772 Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Thu, 26 Jul 2018 16:42:02 +0200 Subject: [PATCH 15/30] Add > DE translation keys > strapi-plugin-upload --- packages/strapi-plugin-upload/admin/src/translations/de.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/strapi-plugin-upload/admin/src/translations/de.json b/packages/strapi-plugin-upload/admin/src/translations/de.json index 60e21c6cf5..d4eba8acd6 100644 --- a/packages/strapi-plugin-upload/admin/src/translations/de.json +++ b/packages/strapi-plugin-upload/admin/src/translations/de.json @@ -28,8 +28,10 @@ "PluginInputFile.text": "Ziehe eine Datei hierher oder {link} eine Datei zum hochladen aus", "PluginInputFile.link": "wähle", + "PluginInputFile.loading": "Ihre Dateien werden hochgeladen...", "notification.delete.success": "Die Datei wurde gelöscht", "notification.dropFile.success": "Ihre Datei wurde hochgeladen", - "notification.dropFiles.success": "{number} Dateien wurden hochgeladen" + "notification.dropFiles.success": "{number} Dateien wurden hochgeladen", + "notification.config.success": "Die Einstellungen wurden aktualisiert" } From 757875245c1b0a9ad42492d6cb6d5586a02a814e Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Thu, 26 Jul 2018 16:44:54 +0200 Subject: [PATCH 16/30] Add > DE translation keys > strapi-plugin-users-permissions --- .../admin/src/translations/de.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/de.json b/packages/strapi-plugin-users-permissions/admin/src/translations/de.json index 26cc5fa1cf..12e2c4becf 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/translations/de.json +++ b/packages/strapi-plugin-users-permissions/admin/src/translations/de.json @@ -28,6 +28,7 @@ "Auth.form.register.username.placeholder": "John Doe", "Auth.form.register.password.label": "Passwort", "Auth.form.register.confirmPassword.label": "Passwort-Bestätigung", + "Auth.form.register.news.label": "Halten Sie mich auf dem Laufenden über die neuen Funktionen und kommenden Verbesserungen.", "Auth.form.register-success.email.label": "Eine E-Mail wurde erfolgreich verschickt an", "Auth.form.register-success.email.placeholder": "mysuperemail@gmail.com", From f998c5cf960b468b98aabee604a60b9f86971ffc Mon Sep 17 00:00:00 2001 From: Marianelli Michele Date: Fri, 27 Jul 2018 11:05:57 +0200 Subject: [PATCH 17/30] Plugin users permission admin - ITA --- .../admin/src/translations/it.json | 145 +++++++++++++++++- 1 file changed, 144 insertions(+), 1 deletion(-) diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/it.json b/packages/strapi-plugin-users-permissions/admin/src/translations/it.json index 9e26dfeeb6..9ce4cc3902 100644 --- a/packages/strapi-plugin-users-permissions/admin/src/translations/it.json +++ b/packages/strapi-plugin-users-permissions/admin/src/translations/it.json @@ -1 +1,144 @@ -{} \ No newline at end of file +{ + "Auth.form.button.register-success" : "Invia di nuovo", + "Auth.form.button.forgot-password.success" : "Invia di nuovo", + "Auth.form.button.forgot-password" : "Invia Email", + "Auth.form.button.reset-password" : "Cambia password", + "Auth.form.button.login" : "Accedi", + "Auth.form.button.register" : "Inizia adesso", + "Auth.form.error.noAdminAccess" : "Non puoi accedere al pannello di amministrazione.", + "Auth.form.forgot-password.email.label" : "Inserisci la tua email", + "Auth.form.forgot-password.email.label.success" : "Email inviata correttamente", + "Auth.form.forgot-password.email.placeholder" : "mysuperemail@gmail.com", + "Auth.header.register.description" : "Per terminare l'installazione e mettere in sicurezza la tua applicazione è necessario creare il primo utente (root admin) inserendo le informazioni necessarie di seguito riportate", + "Auth.form.header.login" : "strapi", + "Auth.form.header.forgot-password" : "strapi", + "Auth.form.header.register" : "Benvenuto!", + "Auth.form.header.register-success" : "strapi", + "Auth.form.login.password.label" : "Password", + "Auth.form.login.rememberMe.label" : "Ricordati di me", + "Auth.form.login.username.label" : "Username", + "Auth.form.login.username.placeholder" : "John Doe", + "Auth.form.register.email.label" : "Email", + "Auth.form.register.email.placeholder" : "johndoe@gmail.com", + "Auth.form.register.username.label" : "Username", + "Auth.form.register.username.placeholder" : "John Doe", + "Auth.form.register.password.label" : "Password", + "Auth.form.register.confirmPassword.label" : "Password di conferma", + "Auth.form.register.news.label" : "Tienimi aggiornato su nuove funzionalità e futuri miglioramenti", + "Auth.form.register-success.email.label" : "Email inviata con successo a", + "Auth.form.register-success.email.placeholder" : "mysuperemail@gmail.com", + "Auth.form.error.email.provide" : "Per favore fornisci il tuo username o la tua password", + "Auth.form.error.email.invalid" : "Questa email non è valida.", + "Auth.form.error.password.provide" : "Per favore fornisci la tua password", + "Auth.form.error.invalid" : "Identificatore o password non valida.", + "Auth.form.error.password.local" : "Questo utente non ha mai impostato una password locale, accedi gentilmente tramite il provider usato durante la creazione dell'account", + "Auth.form.error.password.format" : "La tua password non può contenere il simbolo $ per più di tre volte.", + "Auth.form.error.user.not-exist" : "Questa email non esiste.", + "Auth.form.error.code.provide" : "Codice fornito non corretto.", + "Auth.form.error.password.matching" : "La password non corrisponde.", + "Auth.form.error.params.provide" : "I parametri forniti non sono corretti.", + "Auth.form.error.username.taken" : "Username in uso", + "Auth.form.error.email.taken" : "Email in uso", + "Auth.link.forgot-password" : "Password dimenticata?", + "Auth.link.ready" : "Sei pronto per accedere?", + "BoundRoute.title" : "Percorso vincolato a", + "components.Input.error.password.noMatch" : "La password non corrisponde", + "Controller.input.label" : "{label}", + "Controller.selectAll" : "Seleziona tutto", + "EditForm.inputSelect.label.role" : "Ruolo di default per gli utenti autenticati", + "EditForm.inputSelect.description.role" : "Questa operazione associerà i nuovi utenti autenticati al ruolo selezionato.", + "EditForm.inputSelect.subscriptions.label" : "Gestisci le sottoscrizioni di quota", + "EditForm.inputSelect.subscriptions.description" : "Limita il numero di sottoscrizioni per IP per ora.", + "EditForm.inputSelect.durations.label" : "Durata", + "EditForm.inputSelect.durations.description" : "Numero di ore in cui l'utente non può registrarsi", + "EditForm.inputToggle.label.email" : "Un account per indirizzo email", + "EditForm.inputToggle.label.sign-up" : "Abilita iscrizioni", + "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.", + "EditPage.cancel" : "Cancella", + "EditPage.submit" : "Salva", + "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.title" : "{name}", + "EditPage.header.title.create" : "Crea un nuovo ruolo", + "EditPage.header.description" : "{description}", + "EditPage.header.description.create" : "Crea", + "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", + "eaderNav.link.advancedSettings" : "Impostazioni avanzate", + "HeaderNav.link.emailTemplates" : "Template delle Email", + "HeaderNav.link.providers" : "Providers", + "HeaderNav.link.roles" : "Ruoli e permessi", + "HomePage.header.title" : "Ruoli e permessi", + "HomePage.header.description" : "Definisci i ruoli e i permessi per i tuoi utenti.", + "InputSearch.placeholder" : "Cerca un utente", + "List.button.roles" : "Aggiungi un ruolo", + "List.button.providers" : "Aggiungi un nuovo Provider", + "List.title.emailTemplates.singular" : "{number} template per le email disponibile", + "List.title.emailTemplates.plural" : "{number} template per le email disponibili", + "List.title.providers.disabled.singular" : "{number} disabilitato", + "List.title.providers.disabled.plural" : "{number} sono disabilitati", + "List.title.providers.enabled.singular" : "{number} provider è abilitato e", + "List.title.providers.enabled.plural" : "{number} providers sono disponibili e", + "List.title.roles.singular" : "{number} ruolo disponibile", + "List.title.roles.plural" : "{number} ruoli disponibili", + "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", + "plugin.description.short" : "Proteggi le tue API con un processo completo di autenticazione basato su JWT", + "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.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.title" : "Permessi", + "Plugins.header.description" : "Solo le azioni guidate da un percorso sono elencate sotto.", + "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", + "Email.template.validation_email" : "Validazione dell'indirizzo Email", + "Email.template.reset_password" : "Reset password", + "Email.template.success_register" : "Registrazione avvenuta", + "Auth.advanced.allow_register" : "Registrazione consentita", + "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} Provider", + "PopUpForm.inputSelect.providers.label" : "Scegli il provider", + "PopUpForm.Email.options.from.name.label" : "Nome del mittente", + "PopUpForm.Email.options.from.email.label" : "Email del mittente", + "PopUpForm.Email.options.response_email.label" : "Email di risposta", + "PopUpForm.Email.options.object.label" : "Soggetto", + "PopUpForm.Email.options.message.label" : "Messaggio", + "PopUpForm.Email.validation_email.options.object.placeholder" : "Conferma gentilmente il tuo indirizzo email per %APP_NAME%", + "PopUpForm.Email.reset_password.options.object.placeholder" : "Conferma gentilmente il tuo indirizzo email per %APP_NAME%", + "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.reset_password.options.message.placeholder" : "Clicca su questo link per validare il tuo account", + "PopUpForm.Email.success_register.options.message.placeholder" : "Clicca su questo link per validare il tuo account", + "PopUpForm.Email.options.from.email.placeholder" : "johndoe@gmail.com", + "PopUpForm.Email.options.response_email.placeholder" : "johndoe@gmail.com", + "PopUpForm.Email.options.from.name.placeholder" : "John Doe", + "PopUpForm.Providers.enabled.label" : "Abilita", + "PopUpForm.Providers.enabled.description" : "Se disabilitato, gli utenti non potranno usare questo provider.", + "opUpForm.Providers.key.label" : "Client ID", + "PopUpForm.Providers.key.placeholder" : "TEXT", + "PopUpForm.Providers.secret.label" : "Client Secret", + "PopUpForm.Providers.secret.placeholder" : "TEXT", + "PopUpForm.Providers.redirectURL.front-end.label" : "L'URL di redirect per la tua app di front-end", + "PopUpForm.Providers.facebook.providerConfig.redirectURL" : "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Facebook", + "PopUpForm.Providers.google.providerConfig.redirectURL" : "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Google", + "PopUpForm.Providers.github.providerConfig.redirectURL" : "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Github", + "PopUpForm.Providers.linkedin2.providerConfig.redirectURL" : "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Linkdin", + "PopUpForm.Providers.twitter.providerConfig.redirectURL" : "L'URL di redirect per aggiungere la tua configurazione dell'applicazione Twitter", + "PopUpForm.Providers.callback.placeholder" : "TEXT", + "PopUpForm.Email.email_templates.inputDescription" : "Se non sai bene come usare le variabili, {link}", + "PopUpForm.Email.link.documentation" : "controlla la documentazione" +} From f10064e06cacc02c21698470e91d3647fbdf58f4 Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Fri, 27 Jul 2018 17:05:44 +0200 Subject: [PATCH 18/30] Change > DE translation keys > use familiar form --- .../admin/src/translations/de.json | 20 ++++++++--------- .../admin/src/translations/de.json | 22 +++++++++---------- .../admin/src/translations/de.json | 4 ++-- .../admin/src/translations/de.json | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/strapi-admin/admin/src/translations/de.json b/packages/strapi-admin/admin/src/translations/de.json index 0abe11523d..27ed37b908 100644 --- a/packages/strapi-admin/admin/src/translations/de.json +++ b/packages/strapi-admin/admin/src/translations/de.json @@ -2,10 +2,10 @@ "app.components.Button.save": "Speichern", "app.components.Button.cancel": "Abbrechen", - "app.components.BlockLink.documentation": "Lesen Sie die Dokumentation", - "app.components.BlockLink.documentation.content": "Entdecken Sie die Konzepte, Referenzanleitungen und Tutorials.", + "app.components.BlockLink.documentation": "Lese die Dokumentation", + "app.components.BlockLink.documentation.content": "Entdecke die Konzepte, Referenzanleitungen und Tutorials.", "app.components.BlockLink.code": "Code Beispiele", - "app.components.BlockLink.code.content": "Lernen Sie durch das Testen realer Projekte, die die Community entwickelt haben.", + "app.components.BlockLink.code.content": "Lerne durch das Testen realer Projekte, die die Community entwickelt haben.", "app.components.ComingSoonPage.comingSoon": "Bald verfügbar", "app.components.ComingSoonPage.featuresNotAvailable": "Dieses Feature ist derzeit noch in aktiver Entwicklung.", @@ -22,16 +22,16 @@ "app.components.HomePage.createBlock.content.first": "Das\u0020", "app.components.HomePage.createBlock.content.second": "\u0020Plugin wird dir helfen, die Datenstruktur deiner Modelle zu definieren. Wenn du neu hier bist, empfehlen wir dir unsere\u0020", "app.components.HomePage.createBlock.content.tutorial": "\u0020Anleitung.", - "app.components.HomePage.welcomeBlock.content.again": "Wir hoffen, Sie machen Fortschritte bei Ihrem Projekt.... Lesen Sie das Neueste über Strapi. Wir geben unser Bestes, um das Produkt auf der Grundlage Ihres Feedbacks zu verbessern.", + "app.components.HomePage.welcomeBlock.content.again": "Wir hoffen, dass du Fortschritte bei deinem Projekt machst.... Lese das Neueste über Strapi. Wir geben unser Bestes, um das Produkt auf der Grundlage deines Feedbacks zu verbessern.", "app.components.HomePage.cta": "BESTÄTIGEN", - "app.components.HomePage.community": "Finden Sie die Community im Web", - "app.components.HomePage.community.content": "Diskutieren Sie mit Teammitgliedern, Mitwirkenden und Entwicklern auf verschiedenen Kanälen.", - "app.components.HomePage.newsLetter": "Abonnieren Sie den Newsletter, um sich über Strapi zu informieren.", - "app.components.HomePage.button.quickStart" : "STARTEN SIE DAS QUICK-START-TUTORIAL", + "app.components.HomePage.community": "Finde die Community im Web", + "app.components.HomePage.community.content": "Diskutiere mit Teammitgliedern, Mitwirkenden und Entwicklern auf verschiedenen Kanälen.", + "app.components.HomePage.newsLetter": "Abonniere den Newsletter, um sich über Strapi zu informieren.", + "app.components.HomePage.button.quickStart" : "STARTE DAS QUICK-START-TUTORIAL", "app.components.HomePage.button.blog": "MEHR DAZU IM BLOG", - "app.components.HomePage.support": "UNTERSTÜTZEN SIE UNS", + "app.components.HomePage.support": "UNTERSTÜTZE UNS", "app.components.HomePage.support.content": "Durch den Kauf des T-Shirts können wir unsere Arbeit am Projekt fortsetzen, um Ihnen das bestmögliche Erlebnis zu bieten!", - "app.components.HomePage.support.link": "HOLEN SIE SICH JETZT IHR T-SHIRT", + "app.components.HomePage.support.link": "HOLE DIR JETZT DEIN T-SHIRT", "app.components.InputFile.newFile": "Neue Datei hinzufügen", "app.components.InputFileDetails.open": "In einem neuen Tab öffnen", diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/de.json b/packages/strapi-plugin-content-manager/admin/src/translations/de.json index 0b877f4d7c..b6d2774346 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/de.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/de.json @@ -19,19 +19,19 @@ "containers.SettingPage.attributes": "Attribut Felder", "containers.SettingPage.attributes.description": "Reihenfolge der Attribute festlegen", "containers.SettingPage.listSettings.title": "Liste - Einstellungen", - "containers.SettingPage.listSettings.description": "Konfigurieren Sie die Optionen für diesen Inhaltstyp.", - "containers.SettingPage.pluginHeaderDescription": "Konfigurieren Sie die spezifischen Einstellungen für diesen Inhaltstyp.", - "containers.SettingsPage.Block.generalSettings.description": "Konfigurieren Sie die Standardoptionen für Ihre Inhaltstypen.", + "containers.SettingPage.listSettings.description": "Konfiguriere die Optionen für diesen Inhaltstyp.", + "containers.SettingPage.pluginHeaderDescription": "Konfiguriere die spezifischen Einstellungen für diesen Inhaltstyp.", + "containers.SettingsPage.Block.generalSettings.description": "Konfiguriere die Standardoptionen für deine Inhaltstypen.", "containers.SettingsPage.Block.generalSettings.title" : "Allgemeines", "containers.SettingsPage.Block.contentType.title": "Inhaltstypen", - "containers.SettingsPage.Block.contentType.description": "Konfigurieren Sie die spezifischen Einstellungen", + "containers.SettingsPage.Block.contentType.description": "Konfiguriere die spezifischen Einstellungen", "components.AddFilterCTA.add": "Filter", "components.AddFilterCTA.hide": "Filter", - "components.DraggableAttr.edit": "Klicken Sie zum Bearbeiten", + "components.DraggableAttr.edit": "Klicken zum Bearbeiten", "components.FiltersPickWrapper.PluginHeader.actions.apply": "Anwenden", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Alle löschen", - "components.FiltersPickWrapper.PluginHeader.description": "Legen Sie die Bedingungen fest, unter denen die Einträge gefiltert werden sollen.", + "components.FiltersPickWrapper.PluginHeader.description": "Lege die Bedingungen fest, unter denen die Einträge gefiltert werden sollen.", "components.FiltersPickWrapper.PluginHeader.title.filter": "Filter", "components.FiltersPickWrapper.hide": "Ausblenden", "components.FilterOptions.button.apply": "Anwenden", @@ -58,7 +58,7 @@ "form.Input.sort.field": "Sortierung in diesem Feld aktivieren", "form.Input.bulkActions": "Bulk-Bearbeitung aktivieren", "form.Input.pageEntries": "Einträge pro Seite", - "form.Input.pageEntries.inputDescription": "Hinweis: Sie können diesen Wert auf der Inhaltstypen Einstellungsseite überschreiben.", + "form.Input.pageEntries.inputDescription": "Hinweis: Du kannst diesen Wert auf der Inhaltstypen Einstellungsseite überschreiben.", "form.Input.defaultSort": "Standard-Sortierattribut", "EditRelations.title": "Relationale Daten", @@ -89,7 +89,7 @@ "error.validation.minSupMax": "Darf nicht höher sein", "notification.error.relationship.fetch": "Beim Abruf von Beziehungen ist ein Fehler aufgetreten.", - "notification.info.SettingPage.disableSort": "Sie müssen ein Attribut mit aktivierter Sortierung haben.", + "notification.info.SettingPage.disableSort": "Du musst ein Attribut mit aktivierter Sortierung haben.", "success.record.delete": "Gelöscht", "success.record.save": "Gespeichert", @@ -100,8 +100,8 @@ "popUpWarning.button.confirm": "Bestätigen", "popUpWarning.title": "Bitte bestätigen", "popUpWarning.bodyMessage.contentType.delete": "Bist du sicher, dass du diesen Inhaltstyp löschen willst?", - "popUpWarning.bodyMessage.contentType.delete.all": "Sind Sie sicher, dass Sie diese Einträge löschen wollen?", - "popUpWarning.warning.cancelAllSettings": "Sind Sie sicher, dass Sie Ihre Änderungen rückgängig machen wollen?", - "popUpWarning.warning.updateAllSettings": "Dadurch werden alle Ihre Einstellungen geändert." + "popUpWarning.bodyMessage.contentType.delete.all": "Bist du sicher, dass du diese Einträge löschen willst?", + "popUpWarning.warning.cancelAllSettings": "Bist du sicher, dass du deine Änderungen rückgängig machen willst?", + "popUpWarning.warning.updateAllSettings": "Dadurch werden alle deine Einstellungen geändert." } diff --git a/packages/strapi-plugin-upload/admin/src/translations/de.json b/packages/strapi-plugin-upload/admin/src/translations/de.json index d4eba8acd6..e0b03b6caa 100644 --- a/packages/strapi-plugin-upload/admin/src/translations/de.json +++ b/packages/strapi-plugin-upload/admin/src/translations/de.json @@ -28,10 +28,10 @@ "PluginInputFile.text": "Ziehe eine Datei hierher oder {link} eine Datei zum hochladen aus", "PluginInputFile.link": "wähle", - "PluginInputFile.loading": "Ihre Dateien werden hochgeladen...", + "PluginInputFile.loading": "Deine Dateien werden hochgeladen...", "notification.delete.success": "Die Datei wurde gelöscht", - "notification.dropFile.success": "Ihre Datei wurde hochgeladen", + "notification.dropFile.success": "Deine Datei wurde hochgeladen", "notification.dropFiles.success": "{number} Dateien wurden hochgeladen", "notification.config.success": "Die Einstellungen wurden aktualisiert" } diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/de.json b/packages/strapi-plugin-users-permissions/admin/src/translations/de.json index 12e2c4becf..60ed4e4b33 100755 --- a/packages/strapi-plugin-users-permissions/admin/src/translations/de.json +++ b/packages/strapi-plugin-users-permissions/admin/src/translations/de.json @@ -28,7 +28,7 @@ "Auth.form.register.username.placeholder": "John Doe", "Auth.form.register.password.label": "Passwort", "Auth.form.register.confirmPassword.label": "Passwort-Bestätigung", - "Auth.form.register.news.label": "Halten Sie mich auf dem Laufenden über die neuen Funktionen und kommenden Verbesserungen.", + "Auth.form.register.news.label": "Haltet mich auf dem Laufenden über die neuen Funktionen und kommenden Verbesserungen.", "Auth.form.register-success.email.label": "Eine E-Mail wurde erfolgreich verschickt an", "Auth.form.register-success.email.placeholder": "mysuperemail@gmail.com", From 3bc0742abe6f711a3fa5b034845e1055473089f3 Mon Sep 17 00:00:00 2001 From: Basile Bong Date: Fri, 27 Jul 2018 17:13:35 +0200 Subject: [PATCH 19/30] Change > DE translation keys > use Inhaltstyp instead of Content-Typ --- .../admin/src/translations/de.json | 4 +- .../admin/src/translations/de.json | 50 +++++++++---------- .../admin/src/translations/de.json | 2 +- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/strapi-admin/admin/src/translations/de.json b/packages/strapi-admin/admin/src/translations/de.json index 27ed37b908..dffa3c4271 100644 --- a/packages/strapi-admin/admin/src/translations/de.json +++ b/packages/strapi-admin/admin/src/translations/de.json @@ -15,7 +15,7 @@ "app.components.HomePage.welcome": "Willkommen an Bord!", "app.components.HomePage.welcome.again": "Willkommen", - "app.components.HomePage.create": "Erstelle deinen ersten Content-Typ", + "app.components.HomePage.create": "Erstelle deinen ersten Inhaltstyp", "app.components.HomePage.welcomeBlock.content": "Wir freuen uns, dich als Mitglied der Community zu haben. Wir sind offen für Feedback, senden uns einfach eine direkt Nachricht an\u0020", "app.components.HomePage.welcomeBlock.content.issues": "Fehler", "app.components.HomePage.welcomeBlock.content.raise": "\u0020oder erhöhen\u0020", @@ -149,7 +149,7 @@ "Analytics": "Analytics", "Auth & Permissions": "Authentifizierung & Berechtigungen", "Content Manager": "Content-Manager", - "Content Type Builder": "Content-Typ-Manager", + "Content Type Builder": "Inhaltstyp-Manager", "Files Upload": "Dateien hochladen", "Settings Manager": "Einstellungs-Manager", "Email": "E-Mail", diff --git a/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json b/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json index cb603715c7..01573a4ada 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json +++ b/packages/strapi-plugin-content-type-builder/admin/src/translations/de.json @@ -19,16 +19,16 @@ "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.contentTypeBuilder.name": "Inhaltstypen", + "home.contentTypeBuilder.description": "Verwalte deine Inhaltstypen.", + "home.emptyContentType.title": "Es sind keine Inhaltstypen verfügbar", + "home.emptyContentType.description": "Lege deinen ersten Inhaltstyp 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.description": "Füge deinem Inhaltstypen das erste Feld hinzu", - "button.contentType.create": "Lege einen Content-Typ an", - "button.contentType.add": "Neuer Content-Typ", + "button.contentType.create": "Lege einen Inhaltstyp an", + "button.contentType.add": "Neuer Inhaltstyp", "button.attributes.add": "Neues Feld", "error.validation.required": "Dieser Wert ist erforderlich.", @@ -53,7 +53,7 @@ "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.rules": "Werte (trenne 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", @@ -85,22 +85,22 @@ "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.description": "Der Name des Inhaltstyps 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.description.placeholder": "Beschreibe deinen Inhaltstyp", "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.collectionName.inputDescription": "Nützlich, wenn Inhaltstyp und Datenbankname unterschiedlich sind", - "menu.section.contentTypeBuilder.name.plural": "Content-Typen", - "menu.section.contentTypeBuilder.name.singular": "Content-Typ", + "menu.section.contentTypeBuilder.name.plural": "Inhaltstypen", + "menu.section.contentTypeBuilder.name.singular": "Inhaltstyp", "menu.section.documentation.name": "Dokumentation", - "menu.section.documentation.guide": "Mehr über Content-Typen findest du in unserer", + "menu.section.documentation.guide": "Mehr über Inhaltstypen 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.contentHeader.emptyDescription.description": "Dieser Inhaltstyp hat keine Beschreibung", "modelPage.contentType.list.title.plural": "Felder", "modelPage.contentType.list.title.singular": "Feld", "modelPage.contentType.list.title.including": "schließt ein", @@ -112,12 +112,12 @@ "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.contentType.creating.notSaved": "Bitte speichere zuerst diesen Inhaltstyp 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", + "notification.success.message.contentType.edit": "Der Inhaltstyp wurde aktualisiert", + "notification.success.message.contentType.create": "Der Inhaltstyp wurde angelegt", + "notification.success.contentTypeDeleted": "Der Inhaltstyp wurde gelöscht", "relation.oneWay": "hat eine", @@ -128,7 +128,7 @@ "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.relation.description": "Bezieht sich auf einen Inhaltstyp", "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", @@ -147,9 +147,9 @@ "popUpForm.create": "Neu", "popUpForm.edit": "Bearbeiten", "popUpForm.field": "Feld", - "popUpForm.create.contentType.header.title": "Neuer Content-Typ", + "popUpForm.create.contentType.header.title": "Neuer Inhaltstyp", "popUpForm.choose.attributes.header.title": "Neues Feld hinzufügen", - "popUpForm.edit.contentType.header.title": "Content-Typen bearbeiten", + "popUpForm.edit.contentType.header.title": "Inhaltstypen bearbeiten", "popUpForm.navContainer.relation": "Beziehung definieren", "popUpForm.navContainer.base": "Grundeinstellungen", @@ -160,12 +160,12 @@ "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.contentType.delete": "Bist du sicher, dass du diesen Inhaltstyp 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.title.plural": "Inhaltstypen sind verfügbar", + "table.contentType.title.singular": "Inhaltstyp ist verfügbar", "table.contentType.head.name": "Name", "table.contentType.head.description": "Beschreibung", "table.contentType.head.fields": "Felder", diff --git a/packages/strapi-plugin-settings-manager/admin/src/translations/de.json b/packages/strapi-plugin-settings-manager/admin/src/translations/de.json index 2b40f141dc..8128d30e42 100755 --- a/packages/strapi-plugin-settings-manager/admin/src/translations/de.json +++ b/packages/strapi-plugin-settings-manager/admin/src/translations/de.json @@ -142,7 +142,7 @@ "list.databases.title.plural": "Verbindungen in dieser Umgebung", "popUpWarning.title": "Bitte bestätigen", - "popUpWarning.databases.danger.message": "Es gibt noch hiermit verbundene Content-Typen. Durch das Löschen könntest du deine Anwendung beschädigen. Sei vorsichtig...", + "popUpWarning.databases.danger.message": "Es gibt noch hiermit verbundene Inhaltstypen. Durch das Löschen könntest du deine Anwendung beschädigen. Sei vorsichtig...", "popUpWarning.danger.ok.message": "Ich stimme zu", "popUpWarning.databases.delete.message": "Bist du sicher, dass du diese Datenbank löschen möchtest?", "popUpWarning.languages.delete.message": "Bist du sicher, dass du diese Sprache entfernen möchtest?", From 721a14e3bf3dbd85cce8aeadb31ec31df473f5cd Mon Sep 17 00:00:00 2001 From: Joao Bueno Date: Sat, 28 Jul 2018 16:15:45 -0300 Subject: [PATCH 20/30] Translation keys missing in PT-BR language - Resolves #1625 --- .../admin/src/translations/pt-BR.json | 2 ++ .../admin/src/translations/pt-BR.json | 28 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/strapi-admin/admin/src/translations/pt-BR.json b/packages/strapi-admin/admin/src/translations/pt-BR.json index e441d3b2e8..641d549341 100644 --- a/packages/strapi-admin/admin/src/translations/pt-BR.json +++ b/packages/strapi-admin/admin/src/translations/pt-BR.json @@ -149,6 +149,8 @@ "Users & Permissions": "Usuários & Permissões", "Content Manager": "Gestão de conteúdo", "Content Type Builder": "Construtor de Conteúdo", + "Files Upload": "Enviar arquivos", + "Roles & Permissions": "Papéis e permissões", "Settings Manager": "Gerenciador de configurações", "Email": "E-mail", "Password": "Senha", diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json b/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json index 9650973ed7..5b82cf01c0 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json @@ -15,8 +15,21 @@ "components.LimitSelect.itemsPerPage": "Registros por página", "containers.List.errorFetchRecords": "Erro", + "containers.SettingPage.addField": "Adicionar campo", + "containers.SettingPage.attributes": "Atributos", + "containers.SettingPage.attributes.description": "Define a ordem dos atributos", + + "containers.SettingPage.listSettings.title": "Lista — Configurações", + "containers.SettingPage.listSettings.description": "Configure as opções para este Tipo de Conteúdo", + "containers.SettingPage.pluginHeaderDescription": "Defina as configurações específicas para este Tipo de Conteúdo", + "containers.SettingsPage.pluginHeaderDescription": "Configure as opções padrões para todos os seus Tipos de Conteúdo", + "containers.SettingsPage.Block.generalSettings.description": "Configure as opções padrões para seu Tipo de Conteúdo", + "containers.SettingsPage.Block.generalSettings.title": "Geral", + "containers.SettingsPage.Block.contentType.title": "Tipos de Conteúdo", + "containers.SettingsPage.Block.contentType.description": "Defina as configurações específicas", "components.AddFilterCTA.add": "Filtros", "components.AddFilterCTA.hide": "Filtros", + "components.DraggableAttr.edit": "Clique para editar", "components.FilterOptions.button.apply": "Aplicar", "components.FiltersPickWrapper.PluginHeader.actions.apply": "Aplicar", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Limpar tudo", @@ -70,8 +83,19 @@ "error.attribute.sameKeyAndName": "Não pode ser igual", "error.validation.minSupMax": "Não pode ser superior", "error.validation.json": "Isto não corresponde com o formato JSON", + "form.Input.label.inputDescription": "Este valor substitui o rótulo apresentado no cabeçalho da tabela", + "form.Input.label": "Rótulo", + "form.Input.search": "Habilitar busca", + "form.Input.search.field": "Habilitar busca neste campo", + "form.Input.filters": "Habilitar filtros", + "form.Input.sort.field": "Habilitar ordenação neste campo", + "form.Input.bulkActions": "Habilitar ações em lote", + "form.Input.pageEntries": "Entradas por página", + "form.Input.pageEntries.inputDescription": "Nota: Você pode substituir este valor na página de configurações do Tipo de Conteúdo.", + "form.Input.defaultSort": "Atributo de ordenação padrão", "notification.error.relationship.fetch": "Ocorreu um erro durante a busca da relação.", + "notification.info.SettingPage.disableSort": "Você precisa de um atributo com permissão de ordenação", "success.record.delete": "Removido", "success.record.save": "Salvo", @@ -82,5 +106,7 @@ "popUpWarning.button.confirm": "Confirmar", "popUpWarning.title": "Por favor, confirme", "popUpWarning.bodyMessage.contentType.delete": "Tem a certeza de que deseja remover este registro?", - "popUpWarning.bodyMessage.contentType.delete.all": "Tem a certeza de que deseja remover estes registros?" + "popUpWarning.bodyMessage.contentType.delete.all": "Tem a certeza de que deseja remover estes registros?", + "popUpWarning.warning.cancelAllSettings": "Você tem certeza de que deseja cancelar suas modificações?", + "popUpWarning.warning.updateAllSettings": "Isto irá modificar todas as suas configurações" } \ No newline at end of file From 9dd8706d0956287a669c968f020b5133c962ad3c Mon Sep 17 00:00:00 2001 From: Joao Bueno Date: Sat, 28 Jul 2018 16:19:48 -0300 Subject: [PATCH 21/30] Translation keys missing in PT-BR language (final cut) - Resolves #1625 --- .../admin/src/translations/pt-BR.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json b/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json index 5b82cf01c0..1f4abbb86e 100644 --- a/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/pt-BR.json @@ -27,9 +27,12 @@ "containers.SettingsPage.Block.generalSettings.title": "Geral", "containers.SettingsPage.Block.contentType.title": "Tipos de Conteúdo", "containers.SettingsPage.Block.contentType.description": "Defina as configurações específicas", + "components.AddFilterCTA.add": "Filtros", "components.AddFilterCTA.hide": "Filtros", + "components.DraggableAttr.edit": "Clique para editar", + "components.FilterOptions.button.apply": "Aplicar", "components.FiltersPickWrapper.PluginHeader.actions.apply": "Aplicar", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Limpar tudo", @@ -83,6 +86,7 @@ "error.attribute.sameKeyAndName": "Não pode ser igual", "error.validation.minSupMax": "Não pode ser superior", "error.validation.json": "Isto não corresponde com o formato JSON", + "form.Input.label.inputDescription": "Este valor substitui o rótulo apresentado no cabeçalho da tabela", "form.Input.label": "Rótulo", "form.Input.search": "Habilitar busca", From d8e5d0403b359de546b63defd950c2e1a9e43efc Mon Sep 17 00:00:00 2001 From: Aurelsicoko Date: Mon, 30 Jul 2018 16:33:50 +0200 Subject: [PATCH 22/30] Update design, behavior and add link for selectMany --- .../admin/src/assets/images/icon_grab.svg | 34 ++++++ .../admin/src/assets/images/icon_remove.svg | 19 ++++ .../src/components/EditRelations/index.js | 6 +- .../src/components/EditRelations/styles.scss | 12 +-- .../admin/src/components/SelectMany/index.js | 54 +++++----- .../src/components/SelectMany/styles.scss | 101 +++++++++++++++++- .../admin/src/containers/EditPage/index.js | 77 ++++++++----- .../admin/src/containers/ListPage/index.js | 5 +- .../admin/src/containers/ListPage/utils.js | 9 ++ .../package.json | 2 +- .../config/policies/permissions.js | 2 + .../middlewares/users-permissions/index.js | 8 ++ .../models/User.settings.json | 4 + 13 files changed, 257 insertions(+), 76 deletions(-) create mode 100644 packages/strapi-plugin-content-manager/admin/src/assets/images/icon_grab.svg create mode 100644 packages/strapi-plugin-content-manager/admin/src/assets/images/icon_remove.svg diff --git a/packages/strapi-plugin-content-manager/admin/src/assets/images/icon_grab.svg b/packages/strapi-plugin-content-manager/admin/src/assets/images/icon_grab.svg new file mode 100644 index 0000000000..da187b6f13 --- /dev/null +++ b/packages/strapi-plugin-content-manager/admin/src/assets/images/icon_grab.svg @@ -0,0 +1,34 @@ + + + + Icon grab + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/strapi-plugin-content-manager/admin/src/assets/images/icon_remove.svg b/packages/strapi-plugin-content-manager/admin/src/assets/images/icon_remove.svg new file mode 100644 index 0000000000..594f147935 --- /dev/null +++ b/packages/strapi-plugin-content-manager/admin/src/assets/images/icon_remove.svg @@ -0,0 +1,19 @@ + + + + Icon remove + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js index 96bf90c636..14b002eac0 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js @@ -5,7 +5,6 @@ */ import React from 'react'; -import { FormattedMessage } from 'react-intl'; import PropTypes from 'prop-types'; import { get, map } from 'lodash'; @@ -26,9 +25,6 @@ const filterRelationsUpload = (data) => Object.keys(data).reduce((acc, current) function EditRelations(props) { return (
    - - {(message) =>

    {message}

    } -
    {map(filterRelationsUpload(props.schema.relations), (relation, key) => { if (relation.nature.toLowerCase().includes('morph') && relation[key]) return ''; @@ -43,6 +39,7 @@ function EditRelations(props) { schema={props.schema} setRecordAttribute={props.changeData} location={props.location} + onRedirect={props.onRedirect} /> ); })} @@ -59,6 +56,7 @@ EditRelations.propTypes = { changeData: PropTypes.func.isRequired, currentModelName: PropTypes.string.isRequired, location: PropTypes.object.isRequired, + onRedirect: PropTypes.func.isRequired, record: PropTypes.object, schema: PropTypes.object, }; diff --git a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss index 7c0056c788..efa65641f8 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss +++ b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss @@ -1,13 +1,3 @@ .editFormRelations { /* stylelint-disable */ - h3{ - height: 41px; - margin: 0 -25px 14px; - padding: 0 25px; - background: #F3F3F3; - line-height: 41px; - border-radius: 2px 2px 0 0; - letter-spacing: 0.03rem; - font-size: 1.3rem; - font-weight: bold; - } + padding: 19px 0 20px; } diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js index 36ce4ff9dc..13c7572c5f 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js @@ -6,48 +6,41 @@ import React from 'react'; import Select from 'react-select'; -import {SortableContainer, SortableElement, SortableHandle, arrayMove} from 'react-sortable-hoc'; - +import { SortableContainer, SortableElement, arrayMove } from 'react-sortable-hoc'; import PropTypes from 'prop-types'; - import { cloneDeep, isArray, isNull, isUndefined, get, findIndex, includes } from 'lodash'; -import IcoContainer from 'components/IcoContainer'; -import Ico from 'components/Ico'; - +// Utils. import request from 'utils/request'; import templateObject from 'utils/templateObject'; +// CSS. import 'react-select/dist/react-select.css'; + +// Icons. +import IconRemove from '../../assets/images/icon_remove.svg'; + import styles from './styles.scss'; -const DragHandle = SortableHandle(() => ); - -const SortableItem = SortableElement(({idx, onRemove, value}) => { - const icons = [ - { - icoType: 'trash', - onClick: () => onRemove(idx), - }, - ]; +const SortableItem = SortableElement(({idx, onRemove, item, onClick}) => { return (
  • - - - {value} - - - - +
    +
    + onClick(item)}>{item.label} +
    +
    + Remove Icon onRemove(idx)} /> +
  • ); }); -const SortableList = SortableContainer(({items, onRemove}) => { +const SortableList = SortableContainer(({items, onRemove, onClick}) => { return (
      {items.map((item, index) => ( - + ))}
    ); @@ -178,6 +171,15 @@ class SelectMany extends React.Component { this.props.setRecordAttribute({ target }); } + // Redirect to the edit page + handleClick = (item = {}) => { + this.props.onRedirect({ + model: this.props.relation.collection || this.props.relation.model, + id: item.value.id || item.value._id, + source: this.props.relation.plugin, + }); + } + render() { const description = this.props.relation.description ? (

    {this.props.relation.description}

    @@ -217,7 +219,8 @@ class SelectMany extends React.Component { } onSortEnd={this.handleSortEnd} onRemove={this.handleRemove} - useDragHandle + distance={1} + onClick={this.handleClick} />
    ); @@ -226,6 +229,7 @@ class SelectMany extends React.Component { } SelectMany.propTypes = { + onRedirect: PropTypes.func.isRequired, record: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired, relation: PropTypes.object.isRequired, setRecordAttribute: PropTypes.func.isRequired, diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss index f89e4b7d45..5d87d5133d 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss @@ -7,7 +7,7 @@ } label + div{ - margin: 5px 0 26px; + margin: 3px 0 26px; &:focus{ outline: none; @@ -27,7 +27,7 @@ } .sortableList { - + margin-top: -21px; padding-left: 0 !important; list-style: none !important; @@ -36,14 +36,105 @@ .sortableListItem { display: flex; flex-wrap: nowrap; + align-content: center; justify-content: space-between; - > span { - display: flex; - overflow: hidden; + height: 27px; + + + &:hover{ + cursor: pointer; + + } + + &:active{ + .dragHandle{ + cursor: pointer; + + > span { + background: #AED4FB; + } + } + } + + .dragHandle{ + outline: none; + text-decoration: none; + margin-top: -1px; + + > span { + vertical-align: middle; + position: relative; + display: inline-block; + width: 6px; + height: 1px; + padding: 0px !important; + background: #B3B5B9; + overflow: visible !important; + transition: background .25s ease-out; + + &:before, &:after{ + content: ''; + display: inline-block; + width: 6px; + height: 1px; + background: inherit; + } + + &:before{ + position: absolute; + top: -2px; + left: 0; + } + + &:after{ + position: absolute; + bottom: -2px; + left: 0; + } + } + + } + + > div { span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } + + &:first-of-type{ + display: flex; + align-items: center; + transition: color .25s ease-out; + + &:hover{ + .dragHandle{ + > span { + background: #007EFF; + } + } + + color: #007EFF; + } + + span { + &:last-of-type{ + padding-left: 10px; + } + } + } + + &:last-of-type{ + display: inline-block; + height: 100%; + line-height: 27px; + text-align: right; + padding-right: 0px; + + img{ + display: inline-block; + height: 14px; + } + } } } \ No newline at end of file diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js index 798ea607e6..af9afc1fa0 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js @@ -32,6 +32,7 @@ import injectSaga from 'utils/injectSaga'; import getQueryParameters from 'utils/getQueryParameters'; import { bindLayout } from 'utils/bindLayout'; import inputValidations from 'utils/inputsValidations'; +import { generateRedirectURI } from 'containers/ListPage/utils'; import { checkFormValidity } from 'utils/formValidations'; @@ -54,35 +55,15 @@ import styles from './styles.scss'; export class EditPage extends React.Component { componentDidMount() { - this.props.initModelProps(this.getModelName(), this.isCreating(), this.getSource(), this.getModelAttributes()); - - if (!this.isCreating()) { - const mainField = get(this.getModel(), 'info.mainField') || this.getModel().primaryKey; - this.props.getData(this.props.match.params.id, this.getSource(), mainField); - } else { - this.props.getLayout(this.getSource()); - } - - // Get all relations made with the upload plugin - const fileRelations = Object.keys(get(this.getSchema(), 'relations', {})).reduce((acc, current) => { - const association = get(this.getSchema(), ['relations', current], {}); - - if (association.plugin === 'upload' && association[association.type] === 'file') { - const relation = { - name: current, - multiple: association.nature === 'manyToManyMorph', - }; - - acc.push(relation); - } - return acc; - }, []); - - // Update the reducer so we can use it to create the appropriate FormData in the saga - this.props.setFileRelations(fileRelations); + this.initComponent(this.props); } componentDidUpdate(prevProps) { + if (prevProps.location.pathname !== this.props.location.pathname) { + this.props.resetProps(); + this.initComponent(this.props); + } + if (prevProps.editPage.submitSuccess !== this.props.editPage.submitSuccess) { if (!isEmpty(this.props.location.search) && includes(this.props.location.search, '?redirectUrl')) { const redirectUrl = this.props.location.search.split('?redirectUrl=')[1]; @@ -165,6 +146,38 @@ export class EditPage extends React.Component { */ getSource = () => getQueryParameters(this.props.location.search, 'source'); + /** + * Initialize component + */ + initComponent = (props) => { + this.props.initModelProps(this.getModelName(), this.isCreating(), this.getSource(), this.getModelAttributes()); + + if (!this.isCreating()) { + const mainField = get(this.getModel(), 'info.mainField') || this.getModel().primaryKey; + this.props.getData(props.match.params.id, this.getSource(), mainField); + } else { + this.props.getLayout(this.getSource()); + } + + // Get all relations made with the upload plugin + const fileRelations = Object.keys(get(this.getSchema(), 'relations', {})).reduce((acc, current) => { + const association = get(this.getSchema(), ['relations', current], {}); + + if (association.plugin === 'upload' && association[association.type] === 'file') { + const relation = { + name: current, + multiple: association.nature === 'manyToManyMorph', + }; + + acc.push(relation); + } + return acc; + }, []); + + // Update the reducer so we can use it to create the appropriate FormData in the saga + this.props.setFileRelations(fileRelations); + } + handleBlur = ({ target }) => { const defaultValue = get(this.getModelAttribute(target.name), 'default'); @@ -209,6 +222,15 @@ export class EditPage extends React.Component { this.props.changeData({ target }); } + handleRedirect = ({ model, id, source = 'content-manager'}) => { + const pathname = `${this.props.match.path.replace(':slug', model).replace(':id', id)}`; + + this.props.history.push({ + pathname, + search: `?source=${source}&redirectURI=${generateRedirectURI({ model, search: `?source=${source}` })}`, + }); + } + handleSubmit = (e) => { e.preventDefault(); const formErrors = checkFormValidity(this.generateFormFromRecord(), this.props.editPage.formValidations); @@ -267,7 +289,7 @@ export class EditPage extends React.Component { render() { const { editPage } = this.props; - + console.log(this.props); return (
    @@ -309,6 +331,7 @@ export class EditPage extends React.Component { changeData={this.props.changeData} record={editPage.record} schema={this.getSchema()} + onRedirect={this.handleRedirect} /> )}
    diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js index 07d392eb55..5d1d14d0b1 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/index.js @@ -62,6 +62,7 @@ import { generateFiltersFromSearch, generateSearchFromFilters, generateSearchFromParams, + generateRedirectURI, } from './utils'; import styles from './styles.scss'; @@ -157,9 +158,7 @@ export class ListPage extends React.Component { * Generate the redirect URI when editing an entry * @type {String} */ - generateRedirectURI = () => ( - `?redirectUrl=/plugins/content-manager/${this.getCurrentModelName().toLowerCase()}${this.generateSearch()}` - ); + generateRedirectURI = generateRedirectURI.bind(this); generateSearch = () => { const { diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/utils.js b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/utils.js index 67346e92bb..6ce34da080 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/utils.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/ListPage/utils.js @@ -50,8 +50,17 @@ const generateSearchFromParams = params => return acc; }, ''); + /** +* Generate the redirect URI when editing an entry +* @type {String} +*/ +const generateRedirectURI = function ({ model, search } = {}) { + return `?redirectUrl=/plugins/content-manager/${(model || this.getCurrentModelName()).toLowerCase()}${(search || this.generateSearch())}`; +}; + export { generateFiltersFromSearch, generateSearchFromFilters, generateSearchFromParams, + generateRedirectURI, }; diff --git a/packages/strapi-plugin-content-manager/package.json b/packages/strapi-plugin-content-manager/package.json index 64957c1b93..b215588a7b 100755 --- a/packages/strapi-plugin-content-manager/package.json +++ b/packages/strapi-plugin-content-manager/package.json @@ -24,7 +24,7 @@ "devDependencies": { "react-select": "^1.0.0-rc.5", "react-sortable-hoc": "^0.8.3", - "strapi-helper-plugin": "3.0.0-alpha.12.5" + "strapi-helper-plugin": "3.0.0-alpha.12.6" }, "author": { "name": "Strapi team", diff --git a/packages/strapi-plugin-users-permissions/config/policies/permissions.js b/packages/strapi-plugin-users-permissions/config/policies/permissions.js index 3407b5ee41..4750be2291 100644 --- a/packages/strapi-plugin-users-permissions/config/policies/permissions.js +++ b/packages/strapi-plugin-users-permissions/config/policies/permissions.js @@ -1,6 +1,8 @@ module.exports = async (ctx, next) => { let role; + console.log("ljqskljdkls"); + if (ctx.request && ctx.request.header && ctx.request.header.authorization) { try { const { _id, id } = await strapi.plugins['users-permissions'].services.jwt.getToken(ctx); diff --git a/packages/strapi-plugin-users-permissions/middlewares/users-permissions/index.js b/packages/strapi-plugin-users-permissions/middlewares/users-permissions/index.js index 7e9d41dd19..03da8be28b 100644 --- a/packages/strapi-plugin-users-permissions/middlewares/users-permissions/index.js +++ b/packages/strapi-plugin-users-permissions/middlewares/users-permissions/index.js @@ -14,6 +14,14 @@ module.exports = strapi => { }, initialize: function(cb) { + console.log(); + _.forEach(strapi.admin.config.routes, value => { + if (_.get(value.config, 'policies')) { + value.config.policies.unshift('plugins.users-permissions.permissions'); + } + }); + + _.forEach(strapi.config.routes, value => { if (_.get(value.config, 'policies')) { value.config.policies.unshift('plugins.users-permissions.permissions'); diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json index da72db76e3..3299fa48f4 100644 --- a/packages/strapi-plugin-users-permissions/models/User.settings.json +++ b/packages/strapi-plugin-users-permissions/models/User.settings.json @@ -38,6 +38,10 @@ "via": "users", "plugin": "users-permissions", "configurable": false + }, + "products": { + "collection": "product", + "via": "users" } } } \ No newline at end of file From 8386003e4710217a50daba7dc5c15701176b2fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20GEORGET?= Date: Tue, 31 Jul 2018 14:15:53 +0200 Subject: [PATCH 23/30] Update permissions.js --- .../config/policies/permissions.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/strapi-plugin-users-permissions/config/policies/permissions.js b/packages/strapi-plugin-users-permissions/config/policies/permissions.js index 4750be2291..3407b5ee41 100644 --- a/packages/strapi-plugin-users-permissions/config/policies/permissions.js +++ b/packages/strapi-plugin-users-permissions/config/policies/permissions.js @@ -1,8 +1,6 @@ module.exports = async (ctx, next) => { let role; - console.log("ljqskljdkls"); - if (ctx.request && ctx.request.header && ctx.request.header.authorization) { try { const { _id, id } = await strapi.plugins['users-permissions'].services.jwt.getToken(ctx); From 065792bea6309a4ab8a70eee663e5dd999f28130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20GEORGET?= Date: Tue, 31 Jul 2018 14:16:27 +0200 Subject: [PATCH 24/30] Update User.settings.json --- .../models/User.settings.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json index 3299fa48f4..99479b1cba 100644 --- a/packages/strapi-plugin-users-permissions/models/User.settings.json +++ b/packages/strapi-plugin-users-permissions/models/User.settings.json @@ -38,10 +38,6 @@ "via": "users", "plugin": "users-permissions", "configurable": false - }, - "products": { - "collection": "product", - "via": "users" } } -} \ No newline at end of file +} From 120f515e5e62706e78d9b5d383eb1b4ebfd711fa Mon Sep 17 00:00:00 2001 From: Aurelsicoko Date: Tue, 31 Jul 2018 16:57:16 +0200 Subject: [PATCH 25/30] Better design many-to-many and add jump link --- packages/strapi-email-amazon-ses/package.json | 4 +- packages/strapi-email-mailgun/package.json | 2 +- packages/strapi-email-sendgrid/package.json | 2 +- packages/strapi-email-sendmail/package.json | 2 +- packages/strapi-generate-admin/package.json | 2 +- packages/strapi-generate/package.json | 2 +- packages/strapi-helper-plugin/package.json | 2 +- packages/strapi-hook-knex/package.json | 2 +- packages/strapi-hook-mongoose/package.json | 2 +- packages/strapi-hook-redis/package.json | 2 +- packages/strapi-lint/package.json | 2 +- packages/strapi-middleware-views/package.json | 2 +- .../src/components/EditRelations/styles.scss | 2 +- .../admin/src/components/SelectMany/index.js | 36 +++++++++++---- .../src/components/SelectMany/styles.scss | 45 +++++++++++++++++-- .../admin/src/components/SelectOne/index.js | 28 +++++++++++- .../src/components/SelectOne/styles.scss | 20 ++++++++- .../admin/src/containers/EditPage/index.js | 24 +++++++--- .../admin/src/translations/en.json | 3 ++ .../admin/src/translations/fr.json | 3 ++ .../config/layout.json | 10 ++++- packages/strapi-plugin-graphql/package.json | 2 +- .../models/User.settings.json | 10 ++++- packages/strapi-upload-aws-s3/package.json | 2 +- .../strapi-upload-cloudinary/package.json | 2 +- packages/strapi-upload-local/package.json | 2 +- packages/strapi-upload-rackspace/package.json | 2 +- packages/strapi-utils/package.json | 2 +- packages/strapi/package.json | 2 +- 29 files changed, 178 insertions(+), 43 deletions(-) diff --git a/packages/strapi-email-amazon-ses/package.json b/packages/strapi-email-amazon-ses/package.json index 74c181aa1c..1c58d73fa1 100644 --- a/packages/strapi-email-amazon-ses/package.json +++ b/packages/strapi-email-amazon-ses/package.json @@ -1,6 +1,6 @@ { "name": "strapi-email-amazon-ses", - "version": "3.0.0-alpha.13", + "version": "3.0.0-alpha.13.0.1", "description": "Amazon SES provider for strapi email", "homepage": "http://strapi.io", "keywords": [ @@ -42,4 +42,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-email-mailgun/package.json b/packages/strapi-email-mailgun/package.json index 965da84429..c59e63d4ab 100644 --- a/packages/strapi-email-mailgun/package.json +++ b/packages/strapi-email-mailgun/package.json @@ -42,4 +42,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-email-sendgrid/package.json b/packages/strapi-email-sendgrid/package.json index b48fca45ca..c9f50abcee 100644 --- a/packages/strapi-email-sendgrid/package.json +++ b/packages/strapi-email-sendgrid/package.json @@ -42,4 +42,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-email-sendmail/package.json b/packages/strapi-email-sendmail/package.json index 10ae86a7bf..fa046d68f2 100644 --- a/packages/strapi-email-sendmail/package.json +++ b/packages/strapi-email-sendmail/package.json @@ -41,4 +41,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate-admin/package.json b/packages/strapi-generate-admin/package.json index 310ebd1133..eb031e75d9 100755 --- a/packages/strapi-generate-admin/package.json +++ b/packages/strapi-generate-admin/package.json @@ -42,4 +42,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-generate/package.json b/packages/strapi-generate/package.json index 6b7b2256d8..ecdd5c347e 100755 --- a/packages/strapi-generate/package.json +++ b/packages/strapi-generate/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-helper-plugin/package.json b/packages/strapi-helper-plugin/package.json index 3ecea9c62b..3a0519748f 100755 --- a/packages/strapi-helper-plugin/package.json +++ b/packages/strapi-helper-plugin/package.json @@ -115,4 +115,4 @@ "webpack-hot-middleware": "^2.18.2", "whatwg-fetch": "^2.0.3" } -} +} \ No newline at end of file diff --git a/packages/strapi-hook-knex/package.json b/packages/strapi-hook-knex/package.json index fabc2d9d20..c327e2f0bd 100755 --- a/packages/strapi-hook-knex/package.json +++ b/packages/strapi-hook-knex/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.0.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-hook-mongoose/package.json b/packages/strapi-hook-mongoose/package.json index d823b8028d..e6855a3f8d 100755 --- a/packages/strapi-hook-mongoose/package.json +++ b/packages/strapi-hook-mongoose/package.json @@ -45,4 +45,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-hook-redis/package.json b/packages/strapi-hook-redis/package.json index dece5c74e3..dc332efa68 100755 --- a/packages/strapi-hook-redis/package.json +++ b/packages/strapi-hook-redis/package.json @@ -44,4 +44,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-lint/package.json b/packages/strapi-lint/package.json index 1500b98b5e..2eb9b99121 100644 --- a/packages/strapi-lint/package.json +++ b/packages/strapi-lint/package.json @@ -41,4 +41,4 @@ "babel-eslint": "^8.2.3", "prettier": "^1.12.1" } -} +} \ No newline at end of file diff --git a/packages/strapi-middleware-views/package.json b/packages/strapi-middleware-views/package.json index f1fdf961bf..7021e73eab 100755 --- a/packages/strapi-middleware-views/package.json +++ b/packages/strapi-middleware-views/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss index efa65641f8..2f601dab3d 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss +++ b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/styles.scss @@ -1,3 +1,3 @@ .editFormRelations { /* stylelint-disable */ - padding: 19px 0 20px; + padding-top: 19px; } diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js index 13c7572c5f..8d9f445add 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js @@ -6,8 +6,10 @@ import React from 'react'; import Select from 'react-select'; +import { FormattedMessage } from 'react-intl'; import { SortableContainer, SortableElement, arrayMove } from 'react-sortable-hoc'; import PropTypes from 'prop-types'; +import cn from 'classnames'; import { cloneDeep, isArray, isNull, isUndefined, get, findIndex, includes } from 'lodash'; // Utils. @@ -27,7 +29,18 @@ const SortableItem = SortableElement(({idx, onRemove, item, onClick}) => {
  • - onClick(item)}>{item.label} + + {title => ( + onClick(item)} + title={title} + > + {item.label} + + )} + +
    Remove Icon onRemove(idx)} /> @@ -37,12 +50,17 @@ const SortableItem = SortableElement(({idx, onRemove, item, onClick}) => { }); const SortableList = SortableContainer(({items, onRemove, onClick}) => { + const shadowList = (items.length > 4 ?
    : ''); + return ( -
      - {items.map((item, index) => ( - - ))} -
    +
    +
      + {items.map((item, index) => ( + + ))} +
    + {shadowList} +
    ); }); @@ -188,10 +206,11 @@ class SelectMany extends React.Component { ); const value = get(this.props.record, this.props.relation.alias) || []; + /* eslint-disable jsx-a11y/label-has-for */ return ( -
    - +
    4 && styles.selectManyUpdate}`}> + {description} +
    ); /* eslint-disable jsx-a11y/label-has-for */ @@ -147,6 +172,7 @@ class SelectOne extends React.Component { // eslint-disable-line react/prefer-st } SelectOne.propTypes = { + onRedirect: PropTypes.func.isRequired, record: PropTypes.oneOfType([ PropTypes.object, PropTypes.bool, diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectOne/styles.scss b/packages/strapi-plugin-content-manager/admin/src/components/SelectOne/styles.scss index 50e042031d..b66078d990 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectOne/styles.scss +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectOne/styles.scss @@ -1,4 +1,6 @@ .selectOne { /* stylelint-disable */ + position: relative; + label{ font-size: 1.3rem; font-weight: 500; @@ -6,7 +8,7 @@ margin-top: 3px; } - label + div{ + nav + div{ height: 34px; margin: 3px 0 26px; @@ -28,3 +30,19 @@ } } } + +.headline{ + display: flex; + justify-content: space-between; + + a{ + color: #007EFF !important; + font-size: 1.3rem; + padding-top: 3px; + + &:hover{ + text-decoration: underline !important; + cursor: pointer; + } + } +} diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js index 06587a8f8e..0851e94bcc 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js @@ -226,12 +226,24 @@ export class EditPage extends React.Component { } handleRedirect = ({ model, id, source = 'content-manager'}) => { - const pathname = `${this.props.match.path.replace(':slug', model).replace(':id', id)}`; - - this.props.history.push({ - pathname, - search: `?source=${source}&redirectURI=${generateRedirectURI({ model, search: `?source=${source}` })}`, - }); + /* eslint-disable */ + switch (model) { + case 'permission': + case 'role': + case 'file': + // Exclude special models which are handled by plugins. + if (source !== 'content-manager') { + break; + } + default: + const pathname = `${this.props.match.path.replace(':slug', model).replace(':id', id)}`; + + this.props.history.push({ + pathname, + search: `?source=${source}&redirectURI=${generateRedirectURI({ model, search: `?source=${source}` })}`, + }); + } + /* eslint-enable */ } handleSubmit = (e) => { diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/en.json b/packages/strapi-plugin-content-manager/admin/src/translations/en.json index 7f96cbbd48..d30cd4ac77 100755 --- a/packages/strapi-plugin-content-manager/admin/src/translations/en.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/en.json @@ -9,6 +9,9 @@ "containers.Edit.delete": "Delete", "containers.Edit.reset": "Reset", "containers.Edit.returnList": "Return to list", + "containers.Edit.addAnItem": "Add an item...", + "containers.Edit.clickToJump": "Click to jump to the entry", + "containers.Edit.seeDetails": "Details", "containers.List.addAnEntry": "Add New {entity}", "containers.List.pluginHeaderDescription": "{label} entries found", "containers.List.pluginHeaderDescription.singular": "{label} entry found", diff --git a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json index 8546d06e92..41be4f2e67 100755 --- a/packages/strapi-plugin-content-manager/admin/src/translations/fr.json +++ b/packages/strapi-plugin-content-manager/admin/src/translations/fr.json @@ -9,6 +9,9 @@ "containers.Edit.delete": "Supprimer", "containers.Edit.reset": "Annuler", "containers.Edit.returnList": "Retourner à la liste", + "containers.Edit.addAnItem": "Ajouter un élément...", + "containers.Edit.clickToJump": "Cliquer pour voir l'entrée", + "containers.Edit.seeDetails": "Détails", "containers.List.addAnEntry": "Ajouter {entity}", "containers.List.pluginHeaderDescription": "{label} entrées trouvées", "containers.List.pluginHeaderDescription.singular": "{label} entrée trouvée", diff --git a/packages/strapi-plugin-content-manager/config/layout.json b/packages/strapi-plugin-content-manager/config/layout.json index 9e26dfeeb6..bbbdee435c 100644 --- a/packages/strapi-plugin-content-manager/config/layout.json +++ b/packages/strapi-plugin-content-manager/config/layout.json @@ -1 +1,9 @@ -{} \ No newline at end of file +{ + "product": { + "attributes": { + "name": { + "appearance": "" + } + } + } +} \ No newline at end of file diff --git a/packages/strapi-plugin-graphql/package.json b/packages/strapi-plugin-graphql/package.json index 361dd4a40d..482d315d9f 100644 --- a/packages/strapi-plugin-graphql/package.json +++ b/packages/strapi-plugin-graphql/package.json @@ -49,4 +49,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json index 99479b1cba..8afb212f1d 100644 --- a/packages/strapi-plugin-users-permissions/models/User.settings.json +++ b/packages/strapi-plugin-users-permissions/models/User.settings.json @@ -38,6 +38,14 @@ "via": "users", "plugin": "users-permissions", "configurable": false + }, + "products": { + "collection": "product", + "via": "users" + }, + "product": { + "model": "product", + "via": "creator" } } -} +} \ No newline at end of file diff --git a/packages/strapi-upload-aws-s3/package.json b/packages/strapi-upload-aws-s3/package.json index 2296da7660..2888b061bf 100644 --- a/packages/strapi-upload-aws-s3/package.json +++ b/packages/strapi-upload-aws-s3/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-upload-cloudinary/package.json b/packages/strapi-upload-cloudinary/package.json index 7cf5eff3f2..5c92874574 100644 --- a/packages/strapi-upload-cloudinary/package.json +++ b/packages/strapi-upload-cloudinary/package.json @@ -43,4 +43,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-upload-local/package.json b/packages/strapi-upload-local/package.json index 153f0a7c03..979b53e868 100644 --- a/packages/strapi-upload-local/package.json +++ b/packages/strapi-upload-local/package.json @@ -39,4 +39,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-upload-rackspace/package.json b/packages/strapi-upload-rackspace/package.json index 173b67a7ea..a0e60d2516 100644 --- a/packages/strapi-upload-rackspace/package.json +++ b/packages/strapi-upload-rackspace/package.json @@ -13,4 +13,4 @@ "pkgcloud": "^1.5.0", "streamifier": "^0.1.1" } -} +} \ No newline at end of file diff --git a/packages/strapi-utils/package.json b/packages/strapi-utils/package.json index 50b33deb51..0c4a7ef156 100755 --- a/packages/strapi-utils/package.json +++ b/packages/strapi-utils/package.json @@ -49,4 +49,4 @@ "npm": ">= 5.3.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi/package.json b/packages/strapi/package.json index df76357a9b..2d7645d505 100755 --- a/packages/strapi/package.json +++ b/packages/strapi/package.json @@ -91,4 +91,4 @@ }, "preferGlobal": true, "license": "MIT" -} +} \ No newline at end of file From 85c9ccd7ef024403a5d16422772da47c84b73c98 Mon Sep 17 00:00:00 2001 From: Jim LAURIE Date: Wed, 1 Aug 2018 09:53:11 +0200 Subject: [PATCH 26/30] Clean layout file --- .../strapi-plugin-content-manager/config/layout.json | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/strapi-plugin-content-manager/config/layout.json b/packages/strapi-plugin-content-manager/config/layout.json index bbbdee435c..0967ef424b 100644 --- a/packages/strapi-plugin-content-manager/config/layout.json +++ b/packages/strapi-plugin-content-manager/config/layout.json @@ -1,9 +1 @@ -{ - "product": { - "attributes": { - "name": { - "appearance": "" - } - } - } -} \ No newline at end of file +{} From 57d5a6afd983da75f210e41a8f7932fe1807f39d Mon Sep 17 00:00:00 2001 From: Jim LAURIE Date: Wed, 1 Aug 2018 09:53:30 +0200 Subject: [PATCH 27/30] Remove relations --- .../models/User.settings.json | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json index 8afb212f1d..99479b1cba 100644 --- a/packages/strapi-plugin-users-permissions/models/User.settings.json +++ b/packages/strapi-plugin-users-permissions/models/User.settings.json @@ -38,14 +38,6 @@ "via": "users", "plugin": "users-permissions", "configurable": false - }, - "products": { - "collection": "product", - "via": "users" - }, - "product": { - "model": "product", - "via": "creator" } } -} \ No newline at end of file +} From eb2fd6574d386fe84da7d8a59ce79b0d5cfd53de Mon Sep 17 00:00:00 2001 From: Aurelsicoko Date: Wed, 1 Aug 2018 13:58:57 +0200 Subject: [PATCH 28/30] Force unique value in selectMany component --- .../admin/src/components/SelectMany/index.js | 50 ++++++++++++++----- packages/strapi/bin/strapi-start.js | 3 +- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js index 8d9f445add..800cd53895 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/index.js @@ -10,7 +10,7 @@ import { FormattedMessage } from 'react-intl'; import { SortableContainer, SortableElement, arrayMove } from 'react-sortable-hoc'; import PropTypes from 'prop-types'; import cn from 'classnames'; -import { cloneDeep, isArray, isNull, isUndefined, get, findIndex, includes } from 'lodash'; +import { cloneDeep, isArray, isNull, isUndefined, get, findIndex, includes, isEmpty } from 'lodash'; // Utils. import request from 'utils/request'; @@ -64,23 +64,29 @@ const SortableList = SortableContainer(({items, onRemove, onClick}) => { ); }); -class SelectMany extends React.Component { - // eslint-disable-line react/prefer-stateless-function - constructor(props) { - super(props); - - this.state = { - isLoading: true, - options: [], - toSkip: 0, - }; - } +class SelectMany extends React.PureComponent { + state = { + isLoading: true, + options: [], + toSkip: 0, + }; componentDidMount() { this.getOptions(''); } componentDidUpdate(prevProps, prevState) { + if (isEmpty(prevProps.record) && !isEmpty(this.props.record)) { + const values = (get(this.props.record, this.props.relation.alias) || []) + .map(el => (el.id || el._id)); + + const options = this.state.options.filter(el => { + return !values.includes(el.value.id || el.value._id); + }); + + this.state.options = options; + } + if (prevState.toSkip !== this.state.toSkip) { this.getOptions(''); } @@ -146,9 +152,18 @@ class SelectMany extends React.Component { const target = { name: `record.${this.props.relation.alias}`, type: 'select', - value: [...values, value], + value: [...values, value.value], }; + // Remove new added value from available option; + this.state.options = this.state.options.filter(el => { + if (el.value._id || el.value.id === value.value.id || value.value._id) { + return false; + } + + return true; + }); + this.props.setRecordAttribute({ target }); }; @@ -176,6 +191,7 @@ class SelectMany extends React.Component { type: 'select', value: arrayMove(values, oldIndex, newIndex), }; + this.props.setRecordAttribute({ target }); }; @@ -186,6 +202,14 @@ class SelectMany extends React.Component { type: 'select', value: values.filter( (item, idx) => idx !== index), }; + + // Add removed value from available option; + this.state.options.push({ + value: values[index], + label: templateObject({ mainField: this.props.relation.displayedAttribute }, values[index]) + .mainField, + }); + this.props.setRecordAttribute({ target }); } diff --git a/packages/strapi/bin/strapi-start.js b/packages/strapi/bin/strapi-start.js index 9f109f43c7..1979a36b59 100755 --- a/packages/strapi/bin/strapi-start.js +++ b/packages/strapi/bin/strapi-start.js @@ -66,7 +66,8 @@ module.exports = function(appPath = '') { }; const setFilesToWatch = (src) => { - var files = fs.readdirSync(src); + let files = _.includes(src, '/admin') || _.includes(src, 'components') ? [] : fs.readdirSync(src); + _.forEach(files, file => { if ( _.startsWith(file, '.') || From bbab1d47deb5e3749a9f6d44deaccccb41875dbd Mon Sep 17 00:00:00 2001 From: Aurelsicoko Date: Wed, 1 Aug 2018 14:46:11 +0200 Subject: [PATCH 29/30] Hide CSS glitch in relational selectMany input --- .../admin/src/components/SelectMany/styles.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss index bb078c3e92..9a113e33d7 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss +++ b/packages/strapi-plugin-content-manager/admin/src/components/SelectMany/styles.scss @@ -1,6 +1,7 @@ .selectMany { /* stylelint-disable */ padding-bottom: 19px; margin-bottom: 0px; + overflow-x: hidden; label{ font-size: 1.3rem; From 6a4a07428ad80fb81c536a96eec6abf0f1377ba9 Mon Sep 17 00:00:00 2001 From: Aurelsicoko Date: Thu, 2 Aug 2018 15:27:30 +0200 Subject: [PATCH 30/30] Split component and put logic into the reducer --- .../src/components/EditRelations/index.js | 27 +++- .../src/components/SelectMany/SortableItem.js | 48 ++++++++ .../src/components/SelectMany/SortableList.js | 36 ++++++ .../admin/src/components/SelectMany/index.js | 115 ++++-------------- .../src/components/SelectMany/styles.scss | 12 +- .../admin/src/containers/EditPage/actions.js | 28 +++++ .../src/containers/EditPage/constants.js | 3 + .../admin/src/containers/EditPage/index.js | 28 +++++ .../admin/src/containers/EditPage/reducer.js | 33 ++++- .../models/User.settings.json | 8 ++ 10 files changed, 236 insertions(+), 102 deletions(-) create mode 100644 packages/strapi-plugin-content-manager/admin/src/components/SelectMany/SortableItem.js create mode 100644 packages/strapi-plugin-content-manager/admin/src/components/SelectMany/SortableList.js diff --git a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js index 14b002eac0..5387d0cee2 100644 --- a/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/components/EditRelations/index.js @@ -28,18 +28,33 @@ function EditRelations(props) { {map(filterRelationsUpload(props.schema.relations), (relation, key) => { if (relation.nature.toLowerCase().includes('morph') && relation[key]) return ''; - const Select = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'].includes(relation.nature) ? SelectOne : SelectMany; - + if(['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'].includes(relation.nature)) { + return ( + + ); + } + return ( - } /> ul { - margin: -21px -20px 0; + margin: 4px -20px 0; padding: 0 20px !important; list-style: none !important; overflow: scroll; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/actions.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/actions.js index bb6f62d9ef..84f1eb179d 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/actions.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/actions.js @@ -8,6 +8,7 @@ import { get } from 'lodash'; import { getValidationsFromForm } from 'utils/formValidations'; import { + ADD_RELATION_ITEM, CHANGE_DATA, GET_DATA, GET_DATA_SUCCEEDED, @@ -15,15 +16,25 @@ import { GET_LAYOUT_SUCCEEDED, INIT_MODEL_PROPS, ON_CANCEL, + REMOVE_RELATION_ITEM, RESET_PROPS, SET_FILE_RELATIONS, SET_LOADER, SET_FORM_ERRORS, + SORT_RELATIONS, SUBMIT, SUBMIT_SUCCESS, UNSET_LOADER, } from './constants'; +export function addRelationItem({ key, value }) { + return { + type: ADD_RELATION_ITEM, + key, + value, + }; +} + export function changeData({ target }) { return { type: CHANGE_DATA, @@ -92,6 +103,14 @@ export function onCancel() { }; } +export function removeRelationItem({ key, index }) { + return { + type: REMOVE_RELATION_ITEM, + key, + index, + }; +} + export function resetProps() { return { type: RESET_PROPS, @@ -118,6 +137,15 @@ export function setLoader() { }; } +export function sortRelations({ key, oldIndex, newIndex }) { + return { + type: SORT_RELATIONS, + key, + oldIndex, + newIndex, + }; +} + export function submit() { return { type: SUBMIT, diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/constants.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/constants.js index 20184feecd..75ee7a6ea0 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/constants.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/constants.js @@ -4,6 +4,7 @@ * */ +export const ADD_RELATION_ITEM = 'ContentManager/EditPage/ADD_RELATION_ITEM'; export const CHANGE_DATA = 'ContentManager/EditPage/CHANGE_DATA'; export const GET_DATA = 'ContentManager/EditPage/GET_DATA'; export const GET_DATA_SUCCEEDED = 'ContentManager/EditPage/GET_DATA_SUCCEEDED'; @@ -11,10 +12,12 @@ export const GET_LAYOUT = 'ContentManager/EditPage/GET_LAYOUT'; export const GET_LAYOUT_SUCCEEDED = 'ContentManager/EditPage/GET_LAYOUT_SUCCEEDED'; export const INIT_MODEL_PROPS = 'ContentManager/EditPage/INIT_MODEL_PROPS'; export const ON_CANCEL = 'ContentManager/EditPage/ON_CANCEL'; +export const REMOVE_RELATION_ITEM = 'ContentManager/EditPage/REMOVE_RELATION_ITEM'; export const RESET_PROPS = 'ContentManager/EditPage/RESET_PROPS'; export const SET_FILE_RELATIONS = 'ContentManager/EditPage/SET_FILE_RELATIONS'; export const SET_LOADER = 'ContentManager/EditPage/SET_LOADER'; export const SET_FORM_ERRORS = 'ContentManager/EditPage/SET_FORM_ERRORS'; +export const SORT_RELATIONS = 'ContentManager/EditPage/SORT_RELATIONS'; export const SUBMIT = 'ContentManager/EditPage/SUBMIT'; export const SUBMIT_SUCCESS = 'ContentManager/EditPage/SUBMIT_SUCCESS'; export const UNSET_LOADER = 'ContentManager/EditPage/UNSET_LOADER'; diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js index 0851e94bcc..c7dd6655fa 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/index.js @@ -38,14 +38,17 @@ import { generateRedirectURI } from 'containers/ListPage/utils'; import { checkFormValidity } from 'utils/formValidations'; import { + addRelationItem, changeData, getData, getLayout, initModelProps, onCancel, + removeRelationItem, resetProps, setFileRelations, setFormErrors, + sortRelations, submit, } from './actions'; @@ -181,6 +184,13 @@ export class EditPage extends React.Component { this.props.setFileRelations(fileRelations); } + handleAddRelationItem = ({ key, value }) => { + this.props.addRelationItem({ + key, + value, + }); + } + handleBlur = ({ target }) => { const defaultValue = get(this.getModelAttribute(target.name), 'default'); @@ -246,6 +256,15 @@ export class EditPage extends React.Component { /* eslint-enable */ } + handleRemoveRelationItem = ({ key, index }) => { + this.props.removeRelationItem({ key, index }); + } + + handleSortRelations = ({ key, oldIndex, newIndex }) => { + console.log(key, oldIndex, newIndex); + this.props.sortRelations({ key, oldIndex, newIndex }); + } + handleSubmit = (e) => { e.preventDefault(); const formErrors = checkFormValidity(this.generateFormFromRecord(), this.props.editPage.formValidations); @@ -364,7 +383,10 @@ export class EditPage extends React.Component { changeData={this.props.changeData} record={editPage.record} schema={this.getSchema()} + onAddRelationalItem={this.handleAddRelationItem} onRedirect={this.handleRedirect} + onRemoveRelationItem={this.handleRemoveRelationItem} + onSort={this.handleSortRelations} /> )}
    @@ -387,6 +409,7 @@ EditPage.defaultProps = { }; EditPage.propTypes = { + addRelationItem: PropTypes.func.isRequired, changeData: PropTypes.func.isRequired, editPage: PropTypes.object.isRequired, getData: PropTypes.func.isRequired, @@ -396,24 +419,29 @@ EditPage.propTypes = { location: PropTypes.object.isRequired, match: PropTypes.object.isRequired, onCancel: PropTypes.func.isRequired, + removeRelationItem: PropTypes.func.isRequired, resetProps: PropTypes.func.isRequired, schema: PropTypes.object, setFileRelations: PropTypes.func.isRequired, setFormErrors: PropTypes.func.isRequired, + sortRelations: PropTypes.func.isRequired, submit: PropTypes.func.isRequired, }; function mapDispatchToProps(dispatch) { return bindActionCreators( { + addRelationItem, changeData, getData, getLayout, initModelProps, onCancel, + removeRelationItem, resetProps, setFileRelations, setFormErrors, + sortRelations, submit, }, dispatch, diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js index a31d78605d..cb198b494f 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/EditPage/reducer.js @@ -6,15 +6,18 @@ import { fromJS, Map, List } from 'immutable'; import { + ADD_RELATION_ITEM, CHANGE_DATA, GET_DATA_SUCCEEDED, GET_LAYOUT_SUCCEEDED, INIT_MODEL_PROPS, ON_CANCEL, + REMOVE_RELATION_ITEM, RESET_PROPS, SET_FILE_RELATIONS, SET_FORM_ERRORS, SET_LOADER, + SORT_RELATIONS, SUBMIT_SUCCESS, UNSET_LOADER, } from './constants'; @@ -31,7 +34,7 @@ const initialState = fromJS({ layout: fromJS({}), modelName: '', pluginHeaderTitle: 'New Entry', - record: Map({}), + record: fromJS({}), resetProps: false, showLoader: false, source: 'content-manager', @@ -40,15 +43,21 @@ const initialState = fromJS({ function editPageReducer(state = initialState, action) { switch (action.type) { + case ADD_RELATION_ITEM: + return state + .updateIn(['record', action.key], (list) => { + return list + .push(action.value); + }); case CHANGE_DATA: return state.updateIn(action.keys, () => action.value); case GET_DATA_SUCCEEDED: return state .update('id', () => action.id) .update('isLoading', () => false) - .update('initialRecord', () => Map(action.data)) + .update('initialRecord', () => fromJS(action.data)) .update('pluginHeaderTitle', () => action.pluginHeaderTitle) - .update('record', () => Map(action.data)); + .update('record', () => fromJS(action.data)); case GET_LAYOUT_SUCCEEDED: return state .update('isLoading', () => false) @@ -58,7 +67,7 @@ function editPageReducer(state = initialState, action) { .update('formValidations', () => List(action.formValidations)) .update('isCreating', () => action.isCreating) .update('modelName', () => action.modelName) - .update('record', () => Map(action.record)) + .update('record', () => fromJS(action.record)) .update('source', () => action.source); case ON_CANCEL: return state @@ -66,6 +75,12 @@ function editPageReducer(state = initialState, action) { .update('formErrors', () => List([])) .update('record', () => state.get('initialRecord')) .update('resetProps', (v) => v = !v); + case REMOVE_RELATION_ITEM: + return state + .updateIn(['record', action.key], (list) => { + return list + .delete(action.index); + }); case RESET_PROPS: return initialState.update('layout', () => state.get('layout')); case SET_FILE_RELATIONS: @@ -77,6 +92,16 @@ function editPageReducer(state = initialState, action) { case SET_LOADER: return state .update('showLoader', () => true); + case SORT_RELATIONS: { + const item = state.getIn(['record', action.key, action.oldIndex]); + + return state + .updateIn(['record', action.key], (list) => { + return list + .delete(action.oldIndex) + .insert(action.newIndex, item); + }); + } case SUBMIT_SUCCESS: return state.update('submitSuccess', (v) => v = !v); case UNSET_LOADER: diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json index 99479b1cba..07ae35aa9d 100644 --- a/packages/strapi-plugin-users-permissions/models/User.settings.json +++ b/packages/strapi-plugin-users-permissions/models/User.settings.json @@ -38,6 +38,14 @@ "via": "users", "plugin": "users-permissions", "configurable": false + }, + "products": { + "via": "users", + "collection": "product" + }, + "product": { + "via": "creator", + "model": "product" } } }