Pull enhancement/sortable-input because master is too buggy with my modifications

This commit is contained in:
soupette 2018-08-02 15:51:10 +02:00
commit ccb4fe0270
45 changed files with 1202 additions and 317 deletions

View File

@ -1,4 +1,12 @@
{ {
"app.components.Button.save": "Speichern",
"app.components.Button.cancel": "Abbrechen",
"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": "Lerne durch das Testen realer Projekte, die die Community entwickelt haben.",
"app.components.ComingSoonPage.comingSoon": "Bald verfügbar", "app.components.ComingSoonPage.comingSoon": "Bald verfügbar",
"app.components.ComingSoonPage.featuresNotAvailable": "Dieses Feature ist derzeit noch in aktiver Entwicklung.", "app.components.ComingSoonPage.featuresNotAvailable": "Dieses Feature ist derzeit noch in aktiver Entwicklung.",
@ -6,13 +14,24 @@
"app.components.DownloadInfo.text": "Dies könnte kurz dauern. Danke für deine Geduld.", "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": "Willkommen an Bord!",
"app.components.HomePage.create": "Erstelle deinen ersten Content-Typ", "app.components.HomePage.welcome.again": "Willkommen",
"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": "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.issues": "Fehler",
"app.components.HomePage.welcomeBlock.content.raise": "\u0020oder erhöhen\u0020", "app.components.HomePage.welcomeBlock.content.raise": "\u0020oder erhöhen\u0020",
"app.components.HomePage.createBlock.content.first": "Das\u0020", "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.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.createBlock.content.tutorial": "\u0020Anleitung.",
"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": "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Ü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": "HOLE DIR JETZT DEIN T-SHIRT",
"app.components.InputFile.newFile": "Neue Datei hinzufügen", "app.components.InputFile.newFile": "Neue Datei hinzufügen",
"app.components.InputFileDetails.open": "In einem neuen Tab öffnen", "app.components.InputFileDetails.open": "In einem neuen Tab öffnen",
@ -69,6 +88,8 @@
"app.utils.placeholder.defaultMessage": "\u0020", "app.utils.placeholder.defaultMessage": "\u0020",
"app.utils.SelectOption.defaultMessage": "\u0020", "app.utils.SelectOption.defaultMessage": "\u0020",
"app.utils.defaultMessage": "",
"components.AutoReloadBlocker.header": "Dieses Plugin benötigt das Neuladen-Feature.", "components.AutoReloadBlocker.header": "Dieses Plugin benötigt das Neuladen-Feature.",
"components.AutoReloadBlocker.description": "Öffne die folgende Datei und aktiviere das Feature.", "components.AutoReloadBlocker.description": "Öffne die folgende Datei und aktiviere das Feature.",
@ -78,6 +99,8 @@
"components.OverlayBlocker.title": "Auf Neustart warten...", "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.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.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.", "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.min": "Dieser Wert ist zu niedrig.",
"components.Input.error.validation.maxLength": "Dieser Wert ist zu lang.", "components.Input.error.validation.maxLength": "Dieser Wert ist zu lang.",
"components.Input.error.validation.minLength": "Dieser Wert ist zu kurz.", "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.contentTypeName.taken": "Dieser Name existiert bereits",
"components.Input.error.attribute.taken": "Dieser Feldname ist bereits vergeben", "components.Input.error.attribute.taken": "Dieser Feldname ist bereits vergeben",
"components.Input.error.attribute.key.taken": "Dieser Wert existiert bereits", "components.Input.error.attribute.key.taken": "Dieser Wert existiert bereits",
@ -117,18 +141,26 @@
"components.WysiwygBottomControls.uploadFiles.browse": "selecting them", "components.WysiwygBottomControls.uploadFiles.browse": "selecting them",
"components.WysiwygBottomControls.fullscreen": "Expand", "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", "Auth & Permissions": "Authentifizierung & Berechtigungen",
"Content Manager": "Content-Manager", "Content Manager": "Content-Manager",
"Content Type Builder": "Content-Typ-Manager", "Content Type Builder": "Inhaltstyp-Manager",
"Files Upload": "Dateien hochladen",
"Settings Manager": "Einstellungs-Manager", "Settings Manager": "Einstellungs-Manager",
"Email": "E-Mail", "Email": "E-Mail",
"Password": "Passwort", "Password": "Passwort",
"Users": "Benutzer",
"Username": "Benutzername", "Username": "Benutzername",
"Users & Permissions": "Benutzer & Berechtigungen",
"Provider": "Methode", "Provider": "Methode",
"ResetPasswordToken": "Passwort-Token zurücksetzen", "ResetPasswordToken": "Passwort-Token zurücksetzen",
"Role": "Rolle", "Role": "Rolle",
"Roles & Permissions" : "Rollen & Berechtigungen",
"New entry": "Neuer Eintrag", "New entry": "Neuer Eintrag",
"request.error.model.unknown": "Dieses Schema existiert nicht" "request.error.model.unknown": "Dieses Schema existiert nicht"
} }

View File

@ -8,23 +8,23 @@
"app.components.DownloadInfo.download": "Descarga en curso...", "app.components.DownloadInfo.download": "Descarga en curso...",
"app.components.DownloadInfo.text": "Esto puede tardar un minuto. Gracias por su paciencia.", "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.welcome.again": "Bienvenido ",
"app.components.HomePage.cta": "CONFIRMAR", "app.components.HomePage.cta": "CONFIRMAR",
"app.components.HomePage.community": "Encuentra la comunidad en la web", "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.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.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.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.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.issues": "problema.",
"app.components.HomePage.welcomeBlock.content.raise": "\u0020o plantear\u0020", "app.components.HomePage.welcomeBlock.content.raise": "\u0020o reportar cualquier\u0020",
"app.components.HomePage.createBlock.content.first": "El\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.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": "\u0020tutorial.", "app.components.HomePage.createBlock.content.tutorial": "\u0020",
"app.components.HomePage.button.quickStart": "INICIAR EL TUTORIAL DE INICIO RÁPIDO", "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.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.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", "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": "Arrastre y suelte el archivo en esta área o {browse} para cargar un archivo.",
"app.components.ImgPreview.hint.browse": "buscar", "app.components.ImgPreview.hint.browse": "buscar",
"app.components.InstallPluginPage.helmet": "Mercado - Plugins", "app.components.InstallPluginPage.helmet": "Tienda - Plugins",
"app.components.InstallPluginPage.title": "Mercado - Plugins", "app.components.InstallPluginPage.title": "Tienda - Plugins",
"app.components.InstallPluginPage.description": "Extienda su aplicación sin esfuerzo.", "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.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.label": " ",
@ -60,7 +60,7 @@
"app.components.LeftMenuFooter.poweredBy": "Potenciado por ", "app.components.LeftMenuFooter.poweredBy": "Potenciado por ",
"app.components.LeftMenuLinkContainer.configuration": "Configuraciones", "app.components.LeftMenuLinkContainer.configuration": "Configuraciones",
"app.components.LeftMenuLinkContainer.general": "General", "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.listPlugins": "Plugins",
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "No hay plugins instalados todavía", "app.components.LeftMenuLinkContainer.noPluginsInstalled": "No hay plugins instalados todavía",
"app.components.LeftMenuLinkContainer.plugins": "Plugins", "app.components.LeftMenuLinkContainer.plugins": "Plugins",
@ -149,6 +149,8 @@
"Users & Permissions": "Usuarios y permisos", "Users & Permissions": "Usuarios y permisos",
"Content Manager": "Gestor de Contenidos", "Content Manager": "Gestor de Contenidos",
"Content Type Builder": "Constructor de Tipos de Contenido", "Content Type Builder": "Constructor de Tipos de Contenido",
"Files Upload": "Carga de archivos",
"Roles & Permissions": "Roles y Permisos",
"Settings Manager": "Gestor de ajustes", "Settings Manager": "Gestor de ajustes",
"Email": "Email", "Email": "Email",
"Password": "Contraseña", "Password": "Contraseña",

View File

@ -89,6 +89,7 @@
"components.popUpWarning.title": "Per favore conferma", "components.popUpWarning.title": "Per favore conferma",
"components.popUpWarning.message": "Sei sicuro di volerlo cancellare?", "components.popUpWarning.message": "Sei sicuro di volerlo cancellare?",
"components.Input.error.validation.email": "Non è un'email", "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.required": "Valore obbligatorio.",
"components.Input.error.validation.regex": "Questo valore non coincide con il regex.", "components.Input.error.validation.regex": "Questo valore non coincide con il regex.",
"components.Input.error.validation.max": "Valore troppo alto.", "components.Input.error.validation.max": "Valore troppo alto.",
@ -119,18 +120,21 @@
"HomePage.notification.newsLetter.success": "Iscritto con successo alla newsletter", "HomePage.notification.newsLetter.success": "Iscritto con successo alla newsletter",
"notification.error": "Si è verificato un errore", "notification.error": "Si è verificato un errore",
"notification.error.layout": "Non è stato possibile recuperare il layout", "notification.error.layout": "Non è stato possibile recuperare il layout",
"request.error.model.unknown" : "Questo modello non esiste",
"Users & Permissions": "Utenti & Permessi", "Users & Permissions": "Utenti & Permessi",
"Content Manager": "Gestione Contenuti", "Content Manager": "Gestione Contenuti",
"Content Type Builder": "Generatore di Tipo Contenuti", "Content Type Builder": "Generatore di Tipo Contenuti",
"Settings Manager": "Gestione Impostazioni", "Settings Manager": "Gestione Impostazioni",
"Email": "Email", "Email": "Email",
"Files Upload" : "Caricamento Files",
"Password": "Password", "Password": "Password",
"Username": "Username", "Username": "Username",
"Provider": "Provider", "Provider": "Provider",
"ResetPasswordToken": "Reimposta Token Password", "ResetPasswordToken": "Reimposta Token Password",
"Role": "Ruolo", "Role": "Ruolo",
"Roles & Permissions" : "Ruoli e Permessi",
"New entry": "Nuovo elemento", "New entry": "Nuovo elemento",
"request.error.model.unknow": "Questo modello non esiste", "request.error.model.unknow": "Questo modello non esiste",
"Users": "Utenti", "Users": "Utenti",
"Analytics": "Analytics" "Analytics": "Analytics"
} }

View File

@ -149,6 +149,8 @@
"Users & Permissions": "Usuários & Permissões", "Users & Permissions": "Usuários & Permissões",
"Content Manager": "Gestão de conteúdo", "Content Manager": "Gestão de conteúdo",
"Content Type Builder": "Construtor 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", "Settings Manager": "Gerenciador de configurações",
"Email": "E-mail", "Email": "E-mail",
"Password": "Senha", "Password": "Senha",

View File

@ -17,10 +17,13 @@
"app.components.HomePage.welcomeBlock.content": "Мы рады, что вы вступили в сообщество. Нам необходима обратная связь для развития проекта, поэтому не стесняйтесь писать нам\u0020", "app.components.HomePage.welcomeBlock.content": "Мы рады, что вы вступили в сообщество. Нам необходима обратная связь для развития проекта, поэтому не стесняйтесь писать нам\u0020",
"app.components.HomePage.welcomeBlock.content.issues": "проблема.", "app.components.HomePage.welcomeBlock.content.issues": "проблема.",
"app.components.HomePage.welcomeBlock.content.raise": "\u0020или поднять\u0020", "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.first": "\u0020",
"app.components.HomePage.createBlock.content.second": "\u0020плагин поможет вам создать структуру ваших данных. Если вы новичок, мы настоятельно рекомендуем вам следить за нашими\u0020", "app.components.HomePage.createBlock.content.second": "\u0020плагин поможет вам создать структуру ваших данных. Если вы новичок, мы настоятельно рекомендуем вам следить за нашими\u0020",
"app.components.HomePage.createBlock.content.tutorial": "\u0020руководство.", "app.components.HomePage.createBlock.content.tutorial": "\u0020руководство.",
"app.components.HomePage.button.quickStart": "ОЗНАКОМТЕСЬ С РУКОВОДСТВОМ ПО БЫСТРОМУ СТАРТУ", "app.components.HomePage.button.quickStart": "ОЗНАКОМТЕСЬ С РУКОВОДСТВОМ ПО БЫСТРОМУ СТАРТУ",
"app.components.HomePage.button.blog": "СМОТРИТЕ БОЛЬШЕ В БЛОГЕ",
"app.components.HomePage.support": "ПОДДЕРЖИТЕ НАС", "app.components.HomePage.support": "ПОДДЕРЖИТЕ НАС",
"app.components.HomePage.support.content": "Купите футболку, это поможет нам продолжать работу над проектом, чтобы предоставить вам наилучшее из возможных решений!", "app.components.HomePage.support.content": "Купите футболку, это поможет нам продолжать работу над проектом, чтобы предоставить вам наилучшее из возможных решений!",
"app.components.HomePage.support.link": "ЗАКАЗАТЬ НАШУ ФУТБОЛКУ СЕЙЧАС", "app.components.HomePage.support.link": "ЗАКАЗАТЬ НАШУ ФУТБОЛКУ СЕЙЧАС",
@ -113,6 +116,7 @@
"components.Input.error.validation.min": "Слишком маленькое.", "components.Input.error.validation.min": "Слишком маленькое.",
"components.Input.error.validation.maxLength": "Слишком длинное.", "components.Input.error.validation.maxLength": "Слишком длинное.",
"components.Input.error.validation.minLength": "Слишком короткое.", "components.Input.error.validation.minLength": "Слишком короткое.",
"components.Input.error.validation.json": "Не соответствует JSON формату",
"components.Input.error.contentTypeName.taken": "Это название уже существует", "components.Input.error.contentTypeName.taken": "Это название уже существует",
"components.Input.error.attribute.taken": "Поле с таким названием уже существует", "components.Input.error.attribute.taken": "Поле с таким названием уже существует",
"components.Input.error.attribute.key.taken": "Это значение уже существует", "components.Input.error.attribute.key.taken": "Это значение уже существует",
@ -136,6 +140,8 @@
"components.WysiwygBottomControls.uploadFiles": "Перетащите файлы в эту область, добавляйте из буфер обмена или {browse}.", "components.WysiwygBottomControls.uploadFiles": "Перетащите файлы в эту область, добавляйте из буфер обмена или {browse}.",
"components.WysiwygBottomControls.uploadFiles.browse": "выделите их", "components.WysiwygBottomControls.uploadFiles.browse": "выделите их",
"components.WysiwygBottomControls.fullscreen": "Развернуть", "components.WysiwygBottomControls.fullscreen": "Развернуть",
"Files Upload": "Загрузка файлов",
"HomePage.notification.newsLetter.success": "Успешная подписка на рассылку новостей", "HomePage.notification.newsLetter.success": "Успешная подписка на рассылку новостей",
@ -143,6 +149,7 @@
"notification.error.layout": "Не удалось получить макет", "notification.error.layout": "Не удалось получить макет",
"Users & Permissions": "Пользователи & Доступы", "Users & Permissions": "Пользователи & Доступы",
"Roles & Permissions": "Роли и доступы",
"Content Manager": "Редактор контента", "Content Manager": "Редактор контента",
"Content Type Builder": "Конструктор Типов Контента", "Content Type Builder": "Конструктор Типов Контента",
"Settings Manager": "Менеджер Настроек", "Settings Manager": "Менеджер Настроек",

View File

@ -122,10 +122,11 @@
"components.Input.error.attribute.sameKeyAndName": "Eşit olamaz", "components.Input.error.attribute.sameKeyAndName": "Eşit olamaz",
"components.Input.error.validation.minSupMax": "Üstü olamaz", "components.Input.error.validation.minSupMax": "Üstü olamaz",
"components.Input.error.custom-error": "{errorMessage} ", "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.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.title": "Başlık ekle",
"components.Wysiwyg.selectOptions.H1": "H1 başlık", "components.Wysiwyg.selectOptions.H1": "H1 başlık",
"components.Wysiwyg.selectOptions.H2": "H2 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", "HomePage.notification.newsLetter.success": "Bültene başarıyla abone olundu",
"notification.error": "Bir hata oluştu", "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", "Users & Permissions": "Kullanıcılar & İzinler",
"Content Manager": "İçerik Yönetimi", "Content Manager": "İçerik Yönetimi",
"Content Type Builder": "İçerik Türü Oluşturucusu", "Content Type Builder": "İçerik Türü Oluşturucusu",
"Files Upload": "Dosya yükleme",
"Roles & Permissions": "Roller & İzinler",
"Settings Manager": "Yönetici Ayarları", "Settings Manager": "Yönetici Ayarları",
"Email": "E-posta", "Email": "E-posta",
"Password": "Şifre", "Password": "Şifre",

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="8px" height="8px" viewBox="0 0 8 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
<title>Icon grab</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Pages" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Content-Manager---Settings-view---Single" transform="translate(-335.000000, -698.000000)" fill="#B3B5B9">
<g id="Container" transform="translate(261.000000, 84.000000)">
<g id="Forms" transform="translate(3.000000, 77.000000)">
<g id="Settings">
<g id="Attributes" transform="translate(4.000000, 456.000000)">
<g id="Order-attributes" transform="translate(0.000000, 23.000000)">
<g id="Link" transform="translate(0.000000, 19.000000)">
<g id="Icon-grab" transform="translate(67.000000, 39.000000)">
<rect id="Rectangle-4" x="0" y="0" width="2" height="2"></rect>
<rect id="Rectangle-4" x="3" y="0" width="2" height="2"></rect>
<rect id="Rectangle-4" x="6" y="0" width="2" height="2"></rect>
<rect id="Rectangle-4" x="0" y="3" width="2" height="2"></rect>
<rect id="Rectangle-4" x="3" y="3" width="2" height="2"></rect>
<rect id="Rectangle-4" x="6" y="3" width="2" height="2"></rect>
<rect id="Rectangle-4" x="0" y="6" width="2" height="2"></rect>
<rect id="Rectangle-4" x="3" y="6" width="2" height="2"></rect>
<rect id="Rectangle-4" x="6" y="6" width="2" height="2"></rect>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
<title>Icon remove</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Pages" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Content-Manager---List-view" transform="translate(-279.000000, -165.000000)">
<g id="Container" transform="translate(234.000000, 0.000000)">
<g id="Add-filters" transform="translate(0.000000, 60.000000)">
<g id="Icon-remove" transform="translate(45.000000, 105.000000)">
<rect id="Rectangle-12" stroke="#E3E9F3" x="0.5" y="0.5" width="19" height="19" rx="9.5"></rect>
<path d="M6,10 L14,10" id="Line-4" stroke="#007EFF" stroke-width="2" stroke-linecap="round"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -5,7 +5,6 @@
*/ */
import React from 'react'; import React from 'react';
import { FormattedMessage } from 'react-intl';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { get } from 'lodash'; import { get } from 'lodash';
@ -18,22 +17,36 @@ import styles from './styles.scss';
function EditRelations(props) { function EditRelations(props) {
return ( return (
<div className={styles.editFormRelations}> <div className={styles.editFormRelations}>
<FormattedMessage id="content-manager.EditRelations.title">
{(message) => <h3>{message}</h3>}
</FormattedMessage>
{props.displayedRelations.map(relationName => { {props.displayedRelations.map(relationName => {
const relation = get(props.schema, ['relations', relationName], {}); const relation = get(props.schema, ['relations', relationName], {});
const Select = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'].includes(relation.nature) ? SelectOne : SelectMany;
if(['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'].includes(relation.nature)) {
return (
<SelectOne
currentModelName={props.currentModelName}
key={relationName}
record={props.record}
relation={relation}
schema={props.schema}
setRecordAttribute={props.changeData}
location={props.location}
onRedirect={props.onRedirect}
/>
);
}
return ( return (
<Select <SelectMany
currentModelName={props.currentModelName} currentModelName={props.currentModelName}
key={relationName} key={relationName}
record={props.record} record={props.record}
relation={relation} relation={relation}
schema={props.schema} schema={props.schema}
setRecordAttribute={props.changeData}
location={props.location} location={props.location}
onAddRelationalItem={props.onAddRelationalItem}
onRedirect={props.onRedirect}
onRemoveRelationItem={props.onRemoveRelationItem}
onSort={props.onSort}
/> />
); );
})} })}
@ -48,10 +61,13 @@ EditRelations.defaultProps = {
}; };
EditRelations.propTypes = { EditRelations.propTypes = {
changeData: PropTypes.func.isRequired,
currentModelName: PropTypes.string.isRequired, currentModelName: PropTypes.string.isRequired,
displayedRelations: PropTypes.array, displayedRelations: PropTypes.array,
location: PropTypes.object.isRequired, location: PropTypes.object.isRequired,
onAddRelationalItem: PropTypes.func.isRequired,
onRedirect: PropTypes.func.isRequired,
onRemoveRelationItem: PropTypes.func.isRequired,
onSort: PropTypes.func.isRequired,
record: PropTypes.object, record: PropTypes.object,
schema: PropTypes.object, schema: PropTypes.object,
}; };

View File

@ -1,13 +1,3 @@
.editFormRelations { /* stylelint-disable */ .editFormRelations { /* stylelint-disable */
h3{ padding-top: 19px;
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;
}
} }

View File

@ -0,0 +1,48 @@
/**
*
* SortableItem
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { SortableElement } from 'react-sortable-hoc';
// Icons.
import IconRemove from '../../assets/images/icon_remove.svg';
// CSS.
import styles from './styles.scss';
const SortableItem = SortableElement(({ item, onClick, onRemove, sortIndex }) => {
return (
<li className={styles.sortableListItem}>
<div>
<div className={styles.dragHandle}><span></span></div>
<FormattedMessage id='content-manager.containers.Edit.clickToJump'>
{title => (
<span
className='sortable-item--value'
onClick={() => onClick(item)}
title={title}
>
{item.label}
</span>
)}
</FormattedMessage>
</div>
<div className={styles.sortableListItemActions}>
<img src={IconRemove} alt="Remove Icon" onClick={() => onRemove(sortIndex)} />
</div>
</li>
);
});
SortableItem.propTypes = {
item: PropTypes.object.isRequired,
onClick: PropTypes.func.isRequired,
onRemove: PropTypes.func.isRequired,
sortIndex: PropTypes.number.isRequired,
};
export default SortableItem;

View File

@ -0,0 +1,36 @@
/**
*
* SortableList
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import cn from 'classnames';
import { SortableContainer } from 'react-sortable-hoc';
import SortableItem from './SortableItem';
// CSS.
import styles from './styles.scss';
const SortableList = SortableContainer(({ items, onClick, onRemove }) => {
const shadowList = (items.length > 4 ? <div className={styles.sortableListLong}></div> : '');
return (
<div className={cn(styles.sortableList)}>
<ul>
{items.map((item, index) => (
<SortableItem key={`item-${index}`} index={index} sortIndex={index} item={item} onRemove={onRemove} onClick={onClick} />
))}
</ul>
{shadowList}
</div>
);
});
SortableList.propTypes = {
items: PropTypes.array.isRequired,
onClick: PropTypes.func.isRequired,
onRemove: PropTypes.func.isRequired,
};
export default SortableList;

View File

@ -6,32 +6,44 @@
import React from 'react'; import React from 'react';
import Select from 'react-select'; import Select from 'react-select';
import { FormattedMessage } from 'react-intl';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import 'react-select/dist/react-select.css'; import { cloneDeep, isArray, isNull, isUndefined, get, findIndex, isEmpty } from 'lodash';
import { cloneDeep, isArray, isNull, isUndefined, get, findIndex, includes } from 'lodash';
// Utils.
import request from 'utils/request'; import request from 'utils/request';
import templateObject from 'utils/templateObject'; import templateObject from 'utils/templateObject';
// CSS.
import 'react-select/dist/react-select.css';
// Component.
import SortableList from './SortableList';
// CSS.
import styles from './styles.scss'; import styles from './styles.scss';
class SelectMany extends React.Component { class SelectMany extends React.PureComponent {
// eslint-disable-line react/prefer-stateless-function state = {
constructor(props) { isLoading: true,
super(props); options: [],
toSkip: 0,
this.state = { };
isLoading: true,
options: [],
toSkip: 0,
};
}
componentDidMount() { componentDidMount() {
this.getOptions(''); this.getOptions('');
} }
componentDidUpdate(prevProps, prevState) { 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) { if (prevState.toSkip !== this.state.toSkip) {
this.getOptions(''); this.getOptions('');
} }
@ -92,16 +104,15 @@ class SelectMany extends React.Component {
}; };
handleChange = value => { handleChange = value => {
const filteredValue = value.filter( // Remove new added value from available option;
(data, index) => findIndex(value, o => o.value.id === data.value.id) === index this.state.options = this.state.options.filter(el =>
!((el.value._id || el.value.id) === (value.value.id || value.value._id))
); );
const target = {
name: `record.${this.props.relation.alias}`,
type: 'select',
value: filteredValue,
};
this.props.setRecordAttribute({ target }); this.props.onAddRelationalItem({
key: this.props.relation.alias,
value: value.value,
});
}; };
handleBottomScroll = () => { handleBottomScroll = () => {
@ -112,35 +123,64 @@ class SelectMany extends React.Component {
}); });
} }
handleInputChange = (value) => { handleSortEnd = ({ oldIndex, newIndex }) => {
const clonedOptions = this.state.options; this.props.onSort({
const filteredValues = clonedOptions.filter(data => includes(data.label, value)); key: this.props.relation.alias,
oldIndex,
newIndex,
});
};
if (filteredValues.length === 0) { handleRemove = (index) => {
return this.getOptions(value); const values = get(this.props.record, this.props.relation.alias);
}
// 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.onRemoveRelationItem({
key: this.props.relation.alias,
index,
});
}
// 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() { render() {
const description = this.props.relation.description ? ( const description = this.props.relation.description ? (
<p>{this.props.relation.description}</p> <p>{this.props.relation.description}</p>
) : ''; ) : (
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 */ /* eslint-disable jsx-a11y/label-has-for */
return ( return (
<div className={`form-group ${styles.selectMany}`}> <div className={`form-group ${styles.selectMany} ${value.length > 4 && styles.selectManyUpdate}`}>
<label htmlFor={this.props.relation.alias}>{this.props.relation.label}</label> <label htmlFor={this.props.relation.alias}>{this.props.relation.alias} <span>({value.length})</span></label>
{description}
<Select <Select
onChange={this.handleChange} className={`${styles.select}`}
options={this.state.options}
id={this.props.relation.alias} id={this.props.relation.alias}
isLoading={this.state.isLoading} isLoading={this.state.isLoading}
onChange={this.handleChange}
onMenuScrollToBottom={this.handleBottomScroll} onMenuScrollToBottom={this.handleBottomScroll}
onInputChange={this.handleInputChange} options={this.state.options}
onSelectResetsInput={false} placeholder={<FormattedMessage id='content-manager.containers.Edit.addAnItem' />}
multi />
value={ <SortableList
items={
isNull(value) || isUndefined(value) || value.size === 0 isNull(value) || isUndefined(value) || value.size === 0
? null ? null
: value.map(item => { : value.map(item => {
@ -157,6 +197,10 @@ class SelectMany extends React.Component {
} }
}) })
} }
onSortEnd={this.handleSortEnd}
onRemove={this.handleRemove}
distance={1}
onClick={this.handleClick}
/> />
{description} {description}
</div> </div>
@ -166,9 +210,12 @@ class SelectMany extends React.Component {
} }
SelectMany.propTypes = { SelectMany.propTypes = {
onAddRelationalItem: PropTypes.func.isRequired,
onRedirect: PropTypes.func.isRequired,
onRemoveRelationItem: PropTypes.func.isRequired,
onSort: PropTypes.func.isRequired,
record: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired, record: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired,
relation: PropTypes.object.isRequired, relation: PropTypes.object.isRequired,
setRecordAttribute: PropTypes.func.isRequired,
}; };
export default SelectMany; export default SelectMany;

View File

@ -1,13 +1,21 @@
.selectMany { /* stylelint-disable */ .selectMany { /* stylelint-disable */
padding-bottom: 19px;
margin-bottom: 0px;
label{ label{
font-size: 1.3rem; font-size: 1.3rem;
font-weight: 500; font-weight: 500;
text-transform: capitalize; text-transform: capitalize;
margin-top: 3px; margin-top: 3px;
> span {
font-weight: 400;
font-size: 1.2rem;
}
} }
label + div{ label + div{
margin: 5px 0 26px; margin: 3px 0 26px;
&:focus{ &:focus{
outline: none; outline: none;
@ -25,3 +33,150 @@
} }
} }
} }
.selectManyUpdate{
padding-bottom: 15px !important;
}
.select{
margin-bottom: 0px !important;
}
.sortableList {
overflow: hidden;
max-height: 116px;
> ul {
margin: 4px -20px 0;
padding: 0 20px !important;
list-style: none !important;
overflow: scroll;
max-height: 110px;
}
}
.sortableListLong {
position: relative;
display: inline-block;
width: 100%;
height: 0px;
&:after {
position: absolute;
top: -15px;
left: -5px;
content: '';
display: inline-block;
width: calc(100% + 10px);
height: 1px;
margin-bottom: -25px;
box-shadow: 0px -2px 4px 0px rgba(227, 233, 243, .5);
}
}
.sortableListItem {
display: flex;
flex-wrap: nowrap;
align-content: center;
justify-content: space-between;
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;
}
}
}
}

View File

@ -6,6 +6,7 @@
import React from 'react'; import React from 'react';
import Select from 'react-select'; import Select from 'react-select';
import { FormattedMessage } from 'react-intl';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import 'react-select/dist/react-select.css'; import 'react-select/dist/react-select.css';
import { cloneDeep, map, includes, isArray, isNull, isUndefined, isFunction, get, findIndex } from 'lodash'; import { cloneDeep, map, includes, isArray, isNull, isUndefined, isFunction, get, findIndex } from 'lodash';
@ -106,6 +107,15 @@ class SelectOne extends React.Component { // eslint-disable-line react/prefer-st
}); });
} }
// 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,
});
}
handleInputChange = (value) => { handleInputChange = (value) => {
const clonedOptions = this.state.options; const clonedOptions = this.state.options;
const filteredValues = clonedOptions.filter(data => includes(data.label, value)); const filteredValues = clonedOptions.filter(data => includes(data.label, value));
@ -121,11 +131,25 @@ class SelectOne extends React.Component { // eslint-disable-line react/prefer-st
: ''; : '';
const value = get(this.props.record, this.props.relation.alias); const value = get(this.props.record, this.props.relation.alias);
const excludeModel = ['role', 'permission', 'file'].includes(this.props.relation.model || this.props.relation.collection); // Temporary.
const entryLink = (isNull(value) || isUndefined(value) || excludeModel ?
'' :
(
<FormattedMessage id='content-manager.containers.Edit.clickToJump'>
{title => (
<a onClick={() => this.handleClick({value})} title={title}><FormattedMessage id='content-manager.containers.Edit.seeDetails' /></a>
)}
</FormattedMessage>
)
);
/* eslint-disable jsx-a11y/label-has-for */ /* eslint-disable jsx-a11y/label-has-for */
return ( return (
<div className={`form-group ${styles.selectOne}`}> <div className={`form-group ${styles.selectOne}`}>
<label htmlFor={this.props.relation.alias}>{this.props.relation.alias}</label> <nav className={styles.headline}>
<label htmlFor={this.props.relation.alias}>{this.props.relation.alias}</label>
{entryLink}
</nav>
{description} {description}
<Select <Select
onChange={this.handleChange} onChange={this.handleChange}
@ -140,6 +164,7 @@ class SelectOne extends React.Component { // eslint-disable-line react/prefer-st
label: templateObject({ mainField: this.props.relation.displayedAttribute }, isFunction(value.toJS) ? value.toJS() : value).mainField || (isFunction(value.toJS) ? get(value.toJS(), 'id') : get(value, 'id')), label: templateObject({ mainField: this.props.relation.displayedAttribute }, isFunction(value.toJS) ? value.toJS() : value).mainField || (isFunction(value.toJS) ? get(value.toJS(), 'id') : get(value, 'id')),
}} }}
/> />
</div> </div>
); );
/* eslint-disable jsx-a11y/label-has-for */ /* eslint-disable jsx-a11y/label-has-for */
@ -147,6 +172,7 @@ class SelectOne extends React.Component { // eslint-disable-line react/prefer-st
} }
SelectOne.propTypes = { SelectOne.propTypes = {
onRedirect: PropTypes.func.isRequired,
record: PropTypes.oneOfType([ record: PropTypes.oneOfType([
PropTypes.object, PropTypes.object,
PropTypes.bool, PropTypes.bool,

View File

@ -1,4 +1,6 @@
.selectOne { /* stylelint-disable */ .selectOne { /* stylelint-disable */
position: relative;
label{ label{
font-size: 1.3rem; font-size: 1.3rem;
font-weight: 500; font-weight: 500;
@ -6,7 +8,7 @@
margin-top: 3px; margin-top: 3px;
} }
label + div{ nav + div{
height: 34px; height: 34px;
margin: 3px 0 26px; 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;
}
}
}

View File

@ -8,20 +8,31 @@ import { get } from 'lodash';
import { getValidationsFromForm } from 'utils/formValidations'; import { getValidationsFromForm } from 'utils/formValidations';
import { import {
ADD_RELATION_ITEM,
CHANGE_DATA, CHANGE_DATA,
GET_DATA, GET_DATA,
GET_DATA_SUCCEEDED, GET_DATA_SUCCEEDED,
INIT_MODEL_PROPS, INIT_MODEL_PROPS,
ON_CANCEL, ON_CANCEL,
REMOVE_RELATION_ITEM,
RESET_PROPS, RESET_PROPS,
SET_FILE_RELATIONS, SET_FILE_RELATIONS,
SET_LOADER, SET_LOADER,
SET_FORM_ERRORS, SET_FORM_ERRORS,
SORT_RELATIONS,
SUBMIT, SUBMIT,
SUBMIT_SUCCESS, SUBMIT_SUCCESS,
UNSET_LOADER, UNSET_LOADER,
} from './constants'; } from './constants';
export function addRelationItem({ key, value }) {
return {
type: ADD_RELATION_ITEM,
key,
value,
};
}
export function changeData({ target }) { export function changeData({ target }) {
return { return {
type: CHANGE_DATA, type: CHANGE_DATA,
@ -76,6 +87,14 @@ export function onCancel() {
}; };
} }
export function removeRelationItem({ key, index }) {
return {
type: REMOVE_RELATION_ITEM,
key,
index,
};
}
export function resetProps() { export function resetProps() {
return { return {
type: RESET_PROPS, type: RESET_PROPS,
@ -102,6 +121,15 @@ export function setLoader() {
}; };
} }
export function sortRelations({ key, oldIndex, newIndex }) {
return {
type: SORT_RELATIONS,
key,
oldIndex,
newIndex,
};
}
export function submit() { export function submit() {
return { return {
type: SUBMIT, type: SUBMIT,

View File

@ -4,15 +4,18 @@
* *
*/ */
export const ADD_RELATION_ITEM = 'ContentManager/EditPage/ADD_RELATION_ITEM';
export const CHANGE_DATA = 'ContentManager/EditPage/CHANGE_DATA'; export const CHANGE_DATA = 'ContentManager/EditPage/CHANGE_DATA';
export const GET_DATA = 'ContentManager/EditPage/GET_DATA'; export const GET_DATA = 'ContentManager/EditPage/GET_DATA';
export const GET_DATA_SUCCEEDED = 'ContentManager/EditPage/GET_DATA_SUCCEEDED'; export const GET_DATA_SUCCEEDED = 'ContentManager/EditPage/GET_DATA_SUCCEEDED';
export const INIT_MODEL_PROPS = 'ContentManager/EditPage/INIT_MODEL_PROPS'; export const INIT_MODEL_PROPS = 'ContentManager/EditPage/INIT_MODEL_PROPS';
export const ON_CANCEL = 'ContentManager/EditPage/ON_CANCEL'; 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 RESET_PROPS = 'ContentManager/EditPage/RESET_PROPS';
export const SET_FILE_RELATIONS = 'ContentManager/EditPage/SET_FILE_RELATIONS'; export const SET_FILE_RELATIONS = 'ContentManager/EditPage/SET_FILE_RELATIONS';
export const SET_LOADER = 'ContentManager/EditPage/SET_LOADER'; export const SET_LOADER = 'ContentManager/EditPage/SET_LOADER';
export const SET_FORM_ERRORS = 'ContentManager/EditPage/SET_FORM_ERRORS'; 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 = 'ContentManager/EditPage/SUBMIT';
export const SUBMIT_SUCCESS = 'ContentManager/EditPage/SUBMIT_SUCCESS'; export const SUBMIT_SUCCESS = 'ContentManager/EditPage/SUBMIT_SUCCESS';
export const UNSET_LOADER = 'ContentManager/EditPage/UNSET_LOADER'; export const UNSET_LOADER = 'ContentManager/EditPage/UNSET_LOADER';

View File

@ -30,15 +30,19 @@ import injectSaga from 'utils/injectSaga';
import getQueryParameters from 'utils/getQueryParameters'; import getQueryParameters from 'utils/getQueryParameters';
import { bindLayout } from 'utils/bindLayout'; import { bindLayout } from 'utils/bindLayout';
import inputValidations from 'utils/inputsValidations'; import inputValidations from 'utils/inputsValidations';
import { generateRedirectURI } from 'containers/ListPage/utils';
import { checkFormValidity } from 'utils/formValidations'; import { checkFormValidity } from 'utils/formValidations';
import { import {
addRelationItem,
changeData, changeData,
getData, getData,
initModelProps, initModelProps,
onCancel, onCancel,
removeRelationItem,
resetProps, resetProps,
setFileRelations, setFileRelations,
setFormErrors, setFormErrors,
sortRelations,
submit, submit,
} from './actions'; } from './actions';
import reducer from './reducer'; import reducer from './reducer';
@ -50,33 +54,15 @@ export class EditPage extends React.Component {
state = { showWarning: false }; state = { showWarning: false };
componentDidMount() { componentDidMount() {
this.props.initModelProps(this.getModelName(), this.isCreating(), this.getSource(), this.getModelAttributes()); this.initComponent(this.props);
if (!this.isCreating()) {
const mainField = get(this.getModel(), 'info.mainField') || this.getModel().primaryKey;
this.props.getData(this.props.match.params.id, this.getSource(), mainField);
}
// 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);
} }
componentDidUpdate(prevProps) { 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 (prevProps.editPage.submitSuccess !== this.props.editPage.submitSuccess) {
if (!isEmpty(this.props.location.search) && includes(this.props.location.search, '?redirectUrl')) { if (!isEmpty(this.props.location.search) && includes(this.props.location.search, '?redirectUrl')) {
const redirectUrl = this.props.location.search.split('?redirectUrl=')[1]; const redirectUrl = this.props.location.search.split('?redirectUrl=')[1];
@ -167,6 +153,43 @@ export class EditPage extends React.Component {
*/ */
getSource = () => getQueryParameters(this.props.location.search, 'source'); 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);
}
// 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);
}
handleAddRelationItem = ({ key, value }) => {
this.props.addRelationItem({
key,
value,
});
}
handleBlur = ({ target }) => { handleBlur = ({ target }) => {
const defaultValue = get(this.getModelAttribute(target.name), 'default'); const defaultValue = get(this.getModelAttribute(target.name), 'default');
@ -218,6 +241,36 @@ export class EditPage extends React.Component {
handleGoBack = () => this.props.history.goBack(); handleGoBack = () => this.props.history.goBack();
handleRedirect = ({ model, id, source = 'content-manager'}) => {
/* 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 */
}
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) => { handleSubmit = (e) => {
e.preventDefault(); e.preventDefault();
const formErrors = checkFormValidity(this.generateFormFromRecord(), this.props.editPage.formValidations); const formErrors = checkFormValidity(this.generateFormFromRecord(), this.props.editPage.formValidations);
@ -373,6 +426,10 @@ export class EditPage extends React.Component {
changeData={this.props.changeData} changeData={this.props.changeData}
record={editPage.record} record={editPage.record}
schema={this.getSchema()} schema={this.getSchema()}
onAddRelationalItem={this.handleAddRelationItem}
onRedirect={this.handleRedirect}
onRemoveRelationItem={this.handleRemoveRelationItem}
onSort={this.handleSortRelations}
/> />
)} )}
</div> </div>
@ -395,6 +452,7 @@ EditPage.defaultProps = {
}; };
EditPage.propTypes = { EditPage.propTypes = {
addRelationItem: PropTypes.func.isRequired,
changeData: PropTypes.func.isRequired, changeData: PropTypes.func.isRequired,
editPage: PropTypes.object.isRequired, editPage: PropTypes.object.isRequired,
getData: PropTypes.func.isRequired, getData: PropTypes.func.isRequired,
@ -403,23 +461,28 @@ EditPage.propTypes = {
location: PropTypes.object.isRequired, location: PropTypes.object.isRequired,
match: PropTypes.object.isRequired, match: PropTypes.object.isRequired,
onCancel: PropTypes.func.isRequired, onCancel: PropTypes.func.isRequired,
removeRelationItem: PropTypes.func.isRequired,
resetProps: PropTypes.func.isRequired, resetProps: PropTypes.func.isRequired,
schema: PropTypes.object, schema: PropTypes.object,
setFileRelations: PropTypes.func.isRequired, setFileRelations: PropTypes.func.isRequired,
setFormErrors: PropTypes.func.isRequired, setFormErrors: PropTypes.func.isRequired,
sortRelations: PropTypes.func.isRequired,
submit: PropTypes.func.isRequired, submit: PropTypes.func.isRequired,
}; };
function mapDispatchToProps(dispatch) { function mapDispatchToProps(dispatch) {
return bindActionCreators( return bindActionCreators(
{ {
addRelationItem,
changeData, changeData,
getData, getData,
initModelProps, initModelProps,
onCancel, onCancel,
removeRelationItem,
resetProps, resetProps,
setFileRelations, setFileRelations,
setFormErrors, setFormErrors,
sortRelations,
submit, submit,
}, },
dispatch, dispatch,

View File

@ -6,14 +6,17 @@
import { fromJS, Map, List } from 'immutable'; import { fromJS, Map, List } from 'immutable';
import { import {
ADD_RELATION_ITEM,
CHANGE_DATA, CHANGE_DATA,
GET_DATA_SUCCEEDED, GET_DATA_SUCCEEDED,
INIT_MODEL_PROPS, INIT_MODEL_PROPS,
ON_CANCEL, ON_CANCEL,
REMOVE_RELATION_ITEM,
RESET_PROPS, RESET_PROPS,
SET_FILE_RELATIONS, SET_FILE_RELATIONS,
SET_FORM_ERRORS, SET_FORM_ERRORS,
SET_LOADER, SET_LOADER,
SORT_RELATIONS,
SUBMIT_SUCCESS, SUBMIT_SUCCESS,
UNSET_LOADER, UNSET_LOADER,
} from './constants'; } from './constants';
@ -29,7 +32,7 @@ const initialState = fromJS({
isLoading: true, isLoading: true,
modelName: '', modelName: '',
pluginHeaderTitle: 'New Entry', pluginHeaderTitle: 'New Entry',
record: Map({}), record: fromJS({}),
resetProps: false, resetProps: false,
showLoader: false, showLoader: false,
source: 'content-manager', source: 'content-manager',
@ -38,21 +41,31 @@ const initialState = fromJS({
function editPageReducer(state = initialState, action) { function editPageReducer(state = initialState, action) {
switch (action.type) { switch (action.type) {
case ADD_RELATION_ITEM:
return state
.updateIn(['record', action.key], (list) => {
if (List.isList(list)) {
return list.push(action.value);
}
return List([])
.push(action.value);
});
case CHANGE_DATA: case CHANGE_DATA:
return state.updateIn(action.keys, () => action.value); return state.updateIn(action.keys, () => action.value);
case GET_DATA_SUCCEEDED: case GET_DATA_SUCCEEDED:
return state return state
.update('id', () => action.id) .update('id', () => action.id)
.update('isLoading', () => false) .update('isLoading', () => false)
.update('initialRecord', () => Map(action.data)) .update('initialRecord', () => fromJS(action.data))
.update('pluginHeaderTitle', () => action.pluginHeaderTitle) .update('pluginHeaderTitle', () => action.pluginHeaderTitle)
.update('record', () => Map(action.data)); .update('record', () => fromJS(action.data));
case INIT_MODEL_PROPS: case INIT_MODEL_PROPS:
return state return state
.update('formValidations', () => List(action.formValidations)) .update('formValidations', () => List(action.formValidations))
.update('isCreating', () => action.isCreating) .update('isCreating', () => action.isCreating)
.update('modelName', () => action.modelName) .update('modelName', () => action.modelName)
.update('record', () => Map(action.record)) .update('record', () => fromJS(action.record))
.update('source', () => action.source); .update('source', () => action.source);
case ON_CANCEL: case ON_CANCEL:
return state return state
@ -60,6 +73,12 @@ function editPageReducer(state = initialState, action) {
.update('formErrors', () => List([])) .update('formErrors', () => List([]))
.update('record', () => state.get('initialRecord')) .update('record', () => state.get('initialRecord'))
.update('resetProps', (v) => v = !v); .update('resetProps', (v) => v = !v);
case REMOVE_RELATION_ITEM:
return state
.updateIn(['record', action.key], (list) => {
return list
.delete(action.index);
});
case RESET_PROPS: case RESET_PROPS:
return initialState; return initialState;
case SET_FILE_RELATIONS: case SET_FILE_RELATIONS:
@ -71,6 +90,16 @@ function editPageReducer(state = initialState, action) {
case SET_LOADER: case SET_LOADER:
return state return state
.update('showLoader', () => true); .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: case SUBMIT_SUCCESS:
return state.update('submitSuccess', (v) => v = !v); return state.update('submitSuccess', (v) => v = !v);
case UNSET_LOADER: case UNSET_LOADER:

View File

@ -62,6 +62,7 @@ import {
generateFiltersFromSearch, generateFiltersFromSearch,
generateSearchFromFilters, generateSearchFromFilters,
generateSearchFromParams, generateSearchFromParams,
generateRedirectURI,
} from './utils'; } from './utils';
import styles from './styles.scss'; import styles from './styles.scss';
@ -177,9 +178,7 @@ export class ListPage extends React.Component {
* Generate the redirect URI when editing an entry * Generate the redirect URI when editing an entry
* @type {String} * @type {String}
*/ */
generateRedirectURI = () => ( generateRedirectURI = generateRedirectURI.bind(this);
`?redirectUrl=/plugins/content-manager/${this.getCurrentModelName().toLowerCase()}${this.generateSearch()}`
);
generateSearch = () => { generateSearch = () => {
const { const {

View File

@ -50,8 +50,17 @@ const generateSearchFromParams = params =>
return acc; 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 { export {
generateFiltersFromSearch, generateFiltersFromSearch,
generateSearchFromFilters, generateSearchFromFilters,
generateSearchFromParams, generateSearchFromParams,
generateRedirectURI,
}; };

View File

@ -1,6 +1,7 @@
{ {
"plugin.description.short": "Greife blitzschnell auf alle Daten in der Datenbank zu und manipuliere sie.", "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.", "plugin.description.long": "Greife blitzschnell auf alle Daten in der Datenbank zu und manipuliere sie.",
"containers.Home.pluginHeaderTitle": "Inhalts-Manager", "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.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.", "containers.Home.pluginHeaderDescription": "Verwalte deine Einträge mithilfe eines mächtigen und wunderschönen Interfaces.",
@ -14,6 +15,51 @@
"containers.List.pluginHeaderDescription.singular": "{label} Eintrag gefunden", "containers.List.pluginHeaderDescription.singular": "{label} Eintrag gefunden",
"components.LimitSelect.itemsPerPage": "Einträge pro Seite", "components.LimitSelect.itemsPerPage": "Einträge pro Seite",
"containers.List.errorFetchRecords": "Fehler", "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": "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": "Konfiguriere die spezifischen Einstellungen",
"components.AddFilterCTA.add": "Filter",
"components.AddFilterCTA.hide": "Filter",
"components.DraggableAttr.edit": "Klicken zum Bearbeiten",
"components.FiltersPickWrapper.PluginHeader.actions.apply": "Anwenden",
"components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Alle löschen",
"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",
"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: Du kannst diesen Wert auf der Inhaltstypen Einstellungsseite überschreiben.",
"form.Input.defaultSort": "Standard-Sortierattribut",
"containers.SettingPage.relations": "Relational fields", "containers.SettingPage.relations": "Relational fields",
@ -23,8 +69,8 @@
"EditRelations.title": "Relationale Daten", "EditRelations.title": "Relationale Daten",
"emptyAttributes.title": "Es gibt noch keine Felder", "emptyAttributes.title": "Es gibt noch keine Felder",
"emptyAttributes.description": "Füge deinem Content-Typen das erste Feld hinzu", "emptyAttributes.description": "Füge deinem Inhaltstypen das erste Feld hinzu",
"emptyAttributes.button": "Den Content-Typ-Generator öffnen", "emptyAttributes.button": "Den Inhaltstyp-Generator öffnen",
"error.schema.generation": "Bei der Generierung des Schemas ist ein Fehler aufgetreten.", "error.schema.generation": "Bei der Generierung des Schemas ist ein Fehler aufgetreten.",
"error.records.count": "Beim Abruf von count records ist ein Fehler aufgetreten.", "error.records.count": "Beim Abruf von count records ist ein Fehler aufgetreten.",
@ -40,6 +86,7 @@
"error.validation.min": "Dieser Wert ist zu niedrig.", "error.validation.min": "Dieser Wert ist zu niedrig.",
"error.validation.maxLength": "Dieser Wert ist zu lang.", "error.validation.maxLength": "Dieser Wert ist zu lang.",
"error.validation.minLength": "Dieser Wert ist zu kurz.", "error.validation.minLength": "Dieser Wert ist zu kurz.",
"error.validation.json": "Dies ist kein JSON",
"error.contentTypeName.taken": "Dieser Name existiert bereits", "error.contentTypeName.taken": "Dieser Name existiert bereits",
"error.attribute.taken": "Dieser Feldname ist bereits vergeben", "error.attribute.taken": "Dieser Feldname ist bereits vergeben",
"error.attribute.key.taken": "Dieser Wert existiert bereits", "error.attribute.key.taken": "Dieser Wert existiert bereits",
@ -51,6 +98,7 @@
"form.Input.description.placeholder": "Please don't forget to fill the full URL!", "form.Input.description.placeholder": "Please don't forget to fill the full URL!",
"notification.error.relationship.fetch": "Beim Abruf von Beziehungen ist ein Fehler aufgetreten.", "notification.error.relationship.fetch": "Beim Abruf von Beziehungen ist ein Fehler aufgetreten.",
"notification.info.SettingPage.disableSort": "Du musst ein Attribut mit aktivierter Sortierung haben.",
"success.record.delete": "Gelöscht", "success.record.delete": "Gelöscht",
"success.record.save": "Gespeichert", "success.record.save": "Gespeichert",
@ -60,5 +108,9 @@
"popUpWarning.button.cancel": "Abbrechen", "popUpWarning.button.cancel": "Abbrechen",
"popUpWarning.button.confirm": "Bestätigen", "popUpWarning.button.confirm": "Bestätigen",
"popUpWarning.title": "Bitte 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": "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."
} }

View File

@ -9,6 +9,9 @@
"containers.Edit.delete": "Delete", "containers.Edit.delete": "Delete",
"containers.Edit.reset": "Reset", "containers.Edit.reset": "Reset",
"containers.Edit.returnList": "Return to list", "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.addAnEntry": "Add New {entity}",
"containers.List.pluginHeaderDescription": "{label} entries found", "containers.List.pluginHeaderDescription": "{label} entries found",
"containers.List.pluginHeaderDescription.singular": "{label} entry found", "containers.List.pluginHeaderDescription.singular": "{label} entry found",

View File

@ -1,162 +1,116 @@
{ {
"app.components.Button.save": "Guardar", "plugin.description.short": "Ver, editar y eliminar información de su base de datos de manera rápida.",
"app.components.Button.cancel": "Cancelar", "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", "containers.SettingPage.addField": "Agregar nuevo campo",
"app.components.ComingSoonPage.featuresNotAvailable": "Esta característica está aún en desarrollo.", "containers.SettingPage.attributes": "Campos de atributos",
"containers.SettingPage.attributes.description": "Defina el orden de sus atributos",
"app.components.DownloadInfo.download": "Descarga en curso....", "containers.SettingPage.listSettings.title": "Lista — Configuraciones",
"app.components.DownloadInfo.text": "Esto puede tardar un minuto. Gracias por su paciencia.", "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!", "components.AddFilterCTA.add": "Filtros",
"app.components.HomePage.welcome.again": "Bienvenido ", "components.AddFilterCTA.hide": "Filtros",
"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",
"app.components.BlockLink.documentation": "Lea la documentación", "components.DraggableAttr.edit": "Click para editar",
"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.",
"app.components.InputFile.newFile": "Añadir nuevo archivo", "components.FiltersPickWrapper.PluginHeader.actions.apply": "Aplicar",
"app.components.InputFileDetails.open": "Abrir en una nueva pestaña", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Limpiar todo",
"app.components.InputFileDetails.remove": "Eliminar este archivo", "components.FiltersPickWrapper.PluginHeader.description": "Establece las condiciones a aplicar para filtrar registros",
"app.components.InputFileDetails.originalName": "Nombre original:", "components.FiltersPickWrapper.PluginHeader.title.filter": "Filtros",
"app.components.InputFileDetails.size": "Tamaño:", "components.FiltersPickWrapper.hide": "Ocultar",
"app.components.ImgPreview.hint": "Arrastre y suelte el archivo en esta área o {Buscar} para cargar un archivo.", "components.FilterOptions.button.apply": "Aplicar",
"app.components.ImgPreview.hint.browse": "buscar", "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", "components.Search.placeholder": "Buscar un registro...",
"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",
"app.components.LeftMenuFooter.poweredBy": "Potenciado por ", "components.TableDelete.entries.plural": "{number} registros seleccionados",
"app.components.LeftMenuLinkContainer.configuration": "Configuraciones", "components.TableDelete.entries.singular": "{number} registro seleccionado",
"app.components.LeftMenuLinkContainer.general": "General", "components.TableDelete.delete": "Eliminar todo",
"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",
"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", "components.TableEmpty.withFilters": "No hay {contentType} con los filtros aplicados...",
"app.components.NotFoundPage.back": "Volver a la página de inicio", "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", "emptyAttributes.title": "Aún no hay campos",
"app.components.PluginCard.compatibleCommunity": "Compatible con la comunidad", "emptyAttributes.description": "Agregue su primer campo a su Tipo de Contenido",
"app.components.PluginCard.Button.label.download": "Descargar", "emptyAttributes.button": "Ir al creador de Tipos de Contenido",
"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",
"app.utils.placeholder.defaultMessage": "\u0020", "error.schema.generation": "Ocurrió un error durante la generación de esquema.",
"app.utils.SelectOption.defaultMessage": "\u0020", "error.records.count": "Ocurrió un error durante la consulta del número de registros.",
"app.utils.defaultMessage": "\u0020", "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.", "form.Input.label.inputDescription": "Este valor sobrescribe la etiqueta mostrada en la cabecera de la tabla",
"components.AutoReloadBlocker.description": "Abra el siguiente archivo y habilite la función.", "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...", "success.record.delete": "Eliminado",
"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.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.", "popUpWarning.button.cancel": "Cancelar",
"components.ProductionBlocker.description": "Por razones de seguridad tenemos que desactivar este plugin en otros entornos.", "popUpWarning.button.confirm": "Confirmar",
"popUpWarning.title": "Favor de confirmar",
"components.popUpWarning.button.cancel": "Cancelar", "popUpWarning.bodyMessage.contentType.delete": "¿Está seguro de querer eliminar este registro?",
"components.popUpWarning.button.confirm": "Confirmar", "popUpWarning.bodyMessage.contentType.delete.all": "¿Está seguro de querer eliminar estos registros?",
"components.popUpWarning.title": "Por favor, confirme", "popUpWarning.warning.cancelAllSettings": "¿Está seguro de querer cancelar sus cambios?",
"components.popUpWarning.message": "¿Estás seguro de que quieres borrar esto?", "popUpWarning.warning.updateAllSettings": "Esto modificará todas sus configuraciones"
"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"
} }

View File

@ -9,6 +9,9 @@
"containers.Edit.delete": "Supprimer", "containers.Edit.delete": "Supprimer",
"containers.Edit.reset": "Annuler", "containers.Edit.reset": "Annuler",
"containers.Edit.returnList": "Retourner à la liste", "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.addAnEntry": "Ajouter {entity}",
"containers.List.pluginHeaderDescription": "{label} entrées trouvées", "containers.List.pluginHeaderDescription": "{label} entrées trouvées",
"containers.List.pluginHeaderDescription.singular": "{label} entrée trouvée", "containers.List.pluginHeaderDescription.singular": "{label} entrée trouvée",

View File

@ -13,22 +13,28 @@
"containers.List.pluginHeaderDescription": "{label} voci non trovato", "containers.List.pluginHeaderDescription": "{label} voci non trovato",
"containers.List.pluginHeaderDescription.singular": "{label} voce trovati", "containers.List.pluginHeaderDescription.singular": "{label} voce trovati",
"components.LimitSelect.itemsPerPage": "Elementi per pagina", "components.LimitSelect.itemsPerPage": "Elementi per pagina",
"containers.List.errorFetchRecords": "Errore", "containers.List.errorFetchRecords": "Errore",
"containers.SettingPage.addField" : "Aggiungi un nuovo campo",
"containers.SettingPage.relations": "Relational fields", "containers.SettingPage.attributes" : "Attributi",
"containers.SettingPage.attributes.description" : "Definisci l'ordine degli attributi",
"containers.SettingPage.editSettings.description": "Drag & drop the fields to build the layout", "containers.SettingPage.listSettings.title" : "Lista - Impostazioni",
"containers.SettingPage.editSettings.title": "Edit - Settings", "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.add": "Filtri",
"components.AddFilterCTA.hide": "Filtri", "components.AddFilterCTA.hide": "Filtri",
"components.DraggableAttr.edit" : "Clicca per modificare",
"components.FilterOptions.button.apply": "Applica", "components.FilterOptions.button.apply": "Applica",
"components.FiltersPickWrapper.PluginHeader.actions.apply": "Applica", "components.FiltersPickWrapper.PluginHeader.actions.apply": "Applica",
"components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Cancella tutto", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Cancella tutto",
"components.FiltersPickWrapper.PluginHeader.description": "Impostare le condizioni da applicare per filtrare le voci", "components.FiltersPickWrapper.PluginHeader.description": "Impostare le condizioni da applicare per filtrare le voci",
"components.FiltersPickWrapper.PluginHeader.title.filter": "Filtri", "components.FiltersPickWrapper.PluginHeader.title.filter": "Filtri",
"components.FiltersPickWrapper.hide": "Nascondi", "components.FiltersPickWrapper.hide": "Nascondi",
"components.FilterOptions.FILTER_TYPES.=": "si", "components.FilterOptions.FILTER_TYPES.=": "si",
"components.FilterOptions.FILTER_TYPES._ne": "non è", "components.FilterOptions.FILTER_TYPES._ne": "non è",
"components.FilterOptions.FILTER_TYPES._lt": "è inferiore", "components.FilterOptions.FILTER_TYPES._lt": "è inferiore",
@ -64,6 +70,7 @@
"error.model.fetch": "Si è verificato un errore durante il caricamento dei modelli di configurazione.", "error.model.fetch": "Si è verificato un errore durante il caricamento dei modelli di configurazione.",
"error.validation.required": "Questo valore è richiesto.", "error.validation.required": "Questo valore è richiesto.",
"error.validation.regex": "Il valore non corrisponde alla regex.", "error.validation.regex": "Il valore non corrisponde alla regex.",
"error.validation.json" : "Non è un JSON",
"error.validation.max": "Il valore è troppo alto.", "error.validation.max": "Il valore è troppo alto.",
"error.validation.min": "Il valore è troppo basso.", "error.validation.min": "Il valore è troppo basso.",
"error.validation.maxLength": "Il valore è troppo lungo.", "error.validation.maxLength": "Il valore è troppo lungo.",
@ -78,7 +85,19 @@
"form.Input.description.placeholder": "Please don't forget to fill the full URL!", "form.Input.description.placeholder": "Please don't forget to fill the full URL!",
"form.Input.disabled": "Editable field", "form.Input.disabled": "Editable field",
"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.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.delete": "Eliminato",
"success.record.save": "Salvato", "success.record.save": "Salvato",
@ -89,5 +108,8 @@
"popUpWarning.button.confirm": "Conferma", "popUpWarning.button.confirm": "Conferma",
"popUpWarning.title": "Si prega di confermare", "popUpWarning.title": "Si prega di confermare",
"popUpWarning.bodyMessage.contentType.delete": "Sei sicuro di voler cancellare questa voce?", "popUpWarning.bodyMessage.contentType.delete": "Sei sicuro di voler cancellare questa voce?",
"popUpWarning.bodyMessage.contentType.delete.all": "Sei sicuro di voler eliminare queste voci?" "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"
}

View File

@ -20,8 +20,24 @@
"containers.SettingPage.editSettings.description": "Drag & drop the fields to build the layout", "containers.SettingPage.editSettings.description": "Drag & drop the fields to build the layout",
"containers.SettingPage.editSettings.title": "Edit - Settings", "containers.SettingPage.editSettings.title": "Edit - Settings",
"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.add": "Filtros",
"components.AddFilterCTA.hide": "Filtros", "components.AddFilterCTA.hide": "Filtros",
"components.DraggableAttr.edit": "Clique para editar",
"components.FilterOptions.button.apply": "Aplicar", "components.FilterOptions.button.apply": "Aplicar",
"components.FiltersPickWrapper.PluginHeader.actions.apply": "Aplicar", "components.FiltersPickWrapper.PluginHeader.actions.apply": "Aplicar",
"components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Limpar tudo", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Limpar tudo",
@ -76,11 +92,19 @@
"error.validation.minSupMax": "Não pode ser superior", "error.validation.minSupMax": "Não pode ser superior",
"error.validation.json": "Isto não corresponde com o formato JSON", "error.validation.json": "Isto não corresponde com o formato JSON",
"form.Input.description": "Description", "form.Input.label.inputDescription": "Este valor substitui o rótulo apresentado no cabeçalho da tabela",
"form.Input.description.placeholder": "Please don't forget to fill the full URL!", "form.Input.label": "Rótulo",
"form.Input.disabled": "Editable field", "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.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.delete": "Removido",
"success.record.save": "Salvo", "success.record.save": "Salvo",
@ -91,5 +115,7 @@
"popUpWarning.button.confirm": "Confirmar", "popUpWarning.button.confirm": "Confirmar",
"popUpWarning.title": "Por favor, confirme", "popUpWarning.title": "Por favor, confirme",
"popUpWarning.bodyMessage.contentType.delete": "Tem a certeza de que deseja remover este registro?", "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"
} }

View File

@ -14,11 +14,57 @@
"containers.List.pluginHeaderDescription.singular": "{label} запись найдена", "containers.List.pluginHeaderDescription.singular": "{label} запись найдена",
"components.LimitSelect.itemsPerPage": "Элементов на странице", "components.LimitSelect.itemsPerPage": "Элементов на странице",
"containers.List.errorFetchRecords": "Ошибка", "containers.List.errorFetchRecords": "Ошибка",
"containers.SettingPage.addField": "Добавить новое поле",
"containers.SettingPage.relations": "Relational fields", "containers.SettingPage.attributes": "Поля атрибутов",
"containers.SettingPage.attributes.description": "Определить порядок атребутов",
"containers.SettingPage.editSettings.description": "Drag & drop the fields to build the layout", "containers.SettingPage.listSettings.title": "Список — Настройки",
"containers.SettingPage.editSettings.title": "Edit - Settings", "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": "Связанные данные", "EditRelations.title": "Связанные данные",

View File

@ -15,20 +15,31 @@
"components.LimitSelect.itemsPerPage": "Sayfa başı", "components.LimitSelect.itemsPerPage": "Sayfa başı",
"containers.List.errorFetchRecords": "Hata", "containers.List.errorFetchRecords": "Hata",
"containers.SettingPage.relations": "Relational fields", "containers.SettingPage.addField": "Yeni alan ekle",
"containers.SettingPage.attributes": "Nitelik alanları",
"containers.SettingPage.attributes.description": "Niteliklerin sırasını tanımlayın",
"containers.SettingPage.editSettings.description": "Drag & drop the fields to build the layout", "containers.SettingPage.listSettings.title": "Liste — Ayarlar",
"containers.SettingPage.editSettings.title": "Edit - Settings", "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.add": "Filtreler",
"components.AddFilterCTA.hide": "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.apply": "Uygula",
"components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Hepsini temizle", "components.FiltersPickWrapper.PluginHeader.actions.clearAll": "Hepsini temizle",
"components.FiltersPickWrapper.PluginHeader.description": "Filtrelemek için uygulanacak şartları ayarlayın", "components.FiltersPickWrapper.PluginHeader.description": "Filtrelemek için uygulanacak şartları ayarlayın",
"components.FiltersPickWrapper.PluginHeader.title.filter": "Filtreler", "components.FiltersPickWrapper.PluginHeader.title.filter": "Filtreler",
"components.FiltersPickWrapper.hide": "Gizle", "components.FiltersPickWrapper.hide": "Gizle",
"components.FilterOptions.button.apply": "Uygula",
"components.FilterOptions.FILTER_TYPES.=": "eşit", "components.FilterOptions.FILTER_TYPES.=": "eşit",
"components.FilterOptions.FILTER_TYPES._ne": "eşit değil", "components.FilterOptions.FILTER_TYPES._ne": "eşit değil",
"components.FilterOptions.FILTER_TYPES._lt": "daha düşük", "components.FilterOptions.FILTER_TYPES._lt": "daha düşük",
@ -73,12 +84,25 @@
"error.attribute.key.taken": "Bu değer zaten var.", "error.attribute.key.taken": "Bu değer zaten var.",
"error.attribute.sameKeyAndName": "Eşit olamaz", "error.attribute.sameKeyAndName": "Eşit olamaz",
"error.validation.minSupMax": "Üstü 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",
"form.Input.description": "Description", "form.Input.description": "Description",
"form.Input.description.placeholder": "Please don't forget to fill the full URL!", "form.Input.description.placeholder": "Please don't forget to fill the full URL!",
"form.Input.disabled": "Editable field", "form.Input.disabled": "Editable field",
"notification.error.relationship.fetch": "İlişki getirme sırasında bir hata oluştu.", "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.delete": "Silindi",
"success.record.save": "Kaydedildi", "success.record.save": "Kaydedildi",
@ -89,5 +113,7 @@
"popUpWarning.button.confirm": "Onayla", "popUpWarning.button.confirm": "Onayla",
"popUpWarning.title": "Lütfen onaylayın", "popUpWarning.title": "Lütfen onaylayın",
"popUpWarning.bodyMessage.contentType.delete": "Bu kaydı silmek istediğinizden emin misiniz?", "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"
} }

View File

@ -27,6 +27,7 @@
"react-dnd": "^5.0.0", "react-dnd": "^5.0.0",
"react-dnd-html5-backend": "^5.0.1", "react-dnd-html5-backend": "^5.0.1",
"react-select": "^1.2.1", "react-select": "^1.2.1",
"react-sortable-hoc": "^0.8.3",
"showdown": "^1.8.6", "showdown": "^1.8.6",
"strapi-helper-plugin": "3.0.0-alpha.13.0.1" "strapi-helper-plugin": "3.0.0-alpha.13.0.1"
}, },

View File

@ -19,16 +19,16 @@
"contentType.temporaryDisplay": "(Nicht gespeichert)", "contentType.temporaryDisplay": "(Nicht gespeichert)",
"from": "aus", "from": "aus",
"home.contentTypeBuilder.name": "Content-Typen", "home.contentTypeBuilder.name": "Inhaltstypen",
"home.contentTypeBuilder.description": "Verwalte deine Content-Typen.", "home.contentTypeBuilder.description": "Verwalte deine Inhaltstypen.",
"home.emptyContentType.title": "Es sind keine Content-Typen verfügbar", "home.emptyContentType.title": "Es sind keine Inhaltstypen verfügbar",
"home.emptyContentType.description": "Lege deinen ersten Content-Typ an, Daten deiner API abrufen zu können.", "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.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.create": "Lege einen Inhaltstyp an",
"button.contentType.add": "Neuer Content-Typ", "button.contentType.add": "Neuer Inhaltstyp",
"button.attributes.add": "Neues Feld", "button.attributes.add": "Neues Feld",
"error.validation.required": "Dieser Wert ist erforderlich.", "error.validation.required": "Dieser Wert ist erforderlich.",
@ -42,6 +42,7 @@
"error.attribute.key.taken": "Dieser Wert existiert bereits", "error.attribute.key.taken": "Dieser Wert existiert bereits",
"error.attribute.sameKeyAndName": "Darf nicht gleich sein", "error.attribute.sameKeyAndName": "Darf nicht gleich sein",
"error.validation.minSupMax": "Darf nicht höher 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.textarea.name": "Name",
"form.attribute.item.number.name": "Name", "form.attribute.item.number.name": "Name",
@ -52,7 +53,7 @@
"form.attribute.item.boolean.name": "Name", "form.attribute.item.boolean.name": "Name",
"form.attribute.item.string.name": "Name", "form.attribute.item.string.name": "Name",
"form.attribute.item.enumeration.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.placeholder": "Ex: Morgen, Mittag, Abend",
"form.attribute.item.enumeration.graphql": "Name override for GraphQL", "form.attribute.item.enumeration.graphql": "Name override for GraphQL",
"form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL", "form.attribute.item.enumeration.graphql.description": "Allows you to override the default generated name for GraphQL",
@ -72,6 +73,9 @@
"form.attribute.item.number.type.integer": "integer (z.B.: 10)", "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.float": "float (z.B.: 3.33333333)",
"form.attribute.item.number.type.decimal": "decimal (z.B.: 2.22)", "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": "Standardwert",
"form.attribute.settings.default.checkboxLabel": "Set to true", "form.attribute.settings.default.checkboxLabel": "Set to true",
@ -81,22 +85,22 @@
"form.contentType.item.connections": "Verbindung", "form.contentType.item.connections": "Verbindung",
"form.contentType.item.name": "Name", "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.name.link.description": "Schau dir unsere Dokumentation an.",
"form.contentType.item.description": "Beschreibung", "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": "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.plural": "Inhaltstypen",
"menu.section.contentTypeBuilder.name.singular": "Content-Typ", "menu.section.contentTypeBuilder.name.singular": "Inhaltstyp",
"menu.section.documentation.name": "Dokumentation", "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.guideLink": "Anleitung.",
"menu.section.documentation.tutorial": "Schau dir unser", "menu.section.documentation.tutorial": "Schau dir unser",
"menu.section.documentation.tutorialLink": "Tutorial an.", "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.plural": "Felder",
"modelPage.contentType.list.title.singular": "Feld", "modelPage.contentType.list.title.singular": "Feld",
"modelPage.contentType.list.title.including": "schließt ein", "modelPage.contentType.list.title.including": "schließt ein",
@ -108,12 +112,14 @@
"noTableWarning.infos": "Mehr Informationen", "noTableWarning.infos": "Mehr Informationen",
"notification.error.message": "Ein Fehler ist aufgetreten", "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.disable": "Dieses Feld ist momentan nicht editierbar...😮",
"notification.info.optimized": "Dieses Plugin ist auf deinen localStorage optimiert", "notification.info.optimized": "Dieses Plugin ist auf deinen localStorage optimiert",
"notification.success.message.contentType.edit": "Der Content-Typ wurde aktualisiert", "notification.success.message.contentType.edit": "Der Inhaltstyp wurde aktualisiert",
"notification.success.message.contentType.create": "Der Content-Typ wurde angelegt", "notification.success.message.contentType.create": "Der Inhaltstyp wurde angelegt",
"notification.success.contentTypeDeleted": "Der Content-Typ wurde gelöscht", "notification.success.contentTypeDeleted": "Der Inhaltstyp wurde gelöscht",
"relation.oneWay": "hat eine",
"popUpForm.attributes.string.description": "Titel, Namen, Namenslisten", "popUpForm.attributes.string.description": "Titel, Namen, Namenslisten",
"popUpForm.attributes.text.description": "Beschreibungen, Paragraphen, Artikel", "popUpForm.attributes.text.description": "Beschreibungen, Paragraphen, Artikel",
@ -122,7 +128,7 @@
"popUpForm.attributes.date.description": "Event-Daten, Öffnungszeiten", "popUpForm.attributes.date.description": "Event-Daten, Öffnungszeiten",
"popUpForm.attributes.json.description": "Daten in JSON-Format", "popUpForm.attributes.json.description": "Daten in JSON-Format",
"popUpForm.attributes.media.description": "Bilder, Videos, PDFs und andere", "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.email.description": "E-Mail-Adressen von Benutzern",
"popUpForm.attributes.password.description": "Passwörter von Benutzers", "popUpForm.attributes.password.description": "Passwörter von Benutzers",
"popUpForm.attributes.enumeration.description": "Liste der Auswahlmöglichkeiten", "popUpForm.attributes.enumeration.description": "Liste der Auswahlmöglichkeiten",
@ -141,9 +147,9 @@
"popUpForm.create": "Neu", "popUpForm.create": "Neu",
"popUpForm.edit": "Bearbeiten", "popUpForm.edit": "Bearbeiten",
"popUpForm.field": "Feld", "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.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.relation": "Beziehung definieren",
"popUpForm.navContainer.base": "Grundeinstellungen", "popUpForm.navContainer.base": "Grundeinstellungen",
@ -154,12 +160,12 @@
"popUpWarning.button.cancel": "Abbrechen", "popUpWarning.button.cancel": "Abbrechen",
"popUpWarning.button.confirm": "Bestätigen", "popUpWarning.button.confirm": "Bestätigen",
"popUpWarning.title": "Bitte 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?", "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.plural": "Inhaltstypen sind verfügbar",
"table.contentType.title.singular": "Content-Typ ist verfügbar", "table.contentType.title.singular": "Inhaltstyp ist verfügbar",
"table.contentType.head.name": "Name", "table.contentType.head.name": "Name",
"table.contentType.head.description": "Beschreibung", "table.contentType.head.description": "Beschreibung",
"table.contentType.head.fields": "Felder", "table.contentType.head.fields": "Felder",

View File

@ -42,6 +42,7 @@
"error.attribute.taken": "Поле с таким названием уже существует", "error.attribute.taken": "Поле с таким названием уже существует",
"error.attribute.key.taken": "Это значение уже существует", "error.attribute.key.taken": "Это значение уже существует",
"error.attribute.sameKeyAndName": "Не может быть одинаковым", "error.attribute.sameKeyAndName": "Не может быть одинаковым",
"error.attribute.forbidden": "Такое имя атрибута зарезервировано",
"error.validation.minSupMax": "Не может быть выше", "error.validation.minSupMax": "Не может быть выше",
"form.attribute.item.textarea.name": "Название", "form.attribute.item.textarea.name": "Название",
@ -175,6 +176,7 @@
"table.contentType.head.description": "Описание", "table.contentType.head.description": "Описание",
"table.contentType.head.fields": "Поля", "table.contentType.head.fields": "Поля",
"relation.oneWay": "один принадлежит",
"relation.oneToOne": "имеет один", "relation.oneToOne": "имеет один",
"relation.oneToMany": "принадлежит многим", "relation.oneToMany": "принадлежит многим",
"relation.manyToOne": "имеет много", "relation.manyToOne": "имеет много",

View File

@ -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.short": "Zum Versand von E-Mails.",
"plugin.description.long": "Zum Versand von E-Mails." "plugin.description.long": "Zum Versand von E-Mails."
} }

View File

@ -1,5 +1,12 @@
{ {
"plugin.description.short": "Отсылка почты.", "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": "Настройки успешно обновлены"
} }

View File

@ -112,6 +112,7 @@
"form.language.choose": "Wähle eine Sprache:", "form.language.choose": "Wähle eine Sprache:",
"request.error.database.exist": "Diese Verbindung gibt es bereits", "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.string": "Ein Text ist erforderlich.",
"request.error.type.number": "Eine Nummer ist erforderlich.", "request.error.type.number": "Eine Nummer ist erforderlich.",
"request.error.type.boolean": "Ein Boolean ist erforderlich.", "request.error.type.boolean": "Ein Boolean ist erforderlich.",
@ -141,7 +142,7 @@
"list.databases.title.plural": "Verbindungen in dieser Umgebung", "list.databases.title.plural": "Verbindungen in dieser Umgebung",
"popUpWarning.title": "Bitte bestätigen", "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.danger.ok.message": "Ich stimme zu",
"popUpWarning.databases.delete.message": "Bist du sicher, dass du diese Datenbank löschen möchtest?", "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?", "popUpWarning.languages.delete.message": "Bist du sicher, dass du diese Sprache entfernen möchtest?",

View File

@ -52,8 +52,8 @@
"form.advanced.item.prefix": "API de prefijos", "form.advanced.item.prefix": "API de prefijos",
"form.request.name": "Solicitud", "form.request.name": "Solicitud",
"formulario.de.solicitud.de.descripción": "Configure los ajustes de su solicitud", "form.request.description": "Configure los ajustes de su solicitud.",
"formulario.para.solicitar.item.parser": "Parser", "form.request.item.parser": "Parser",
"form.request.item.parser.multipart": "Parser Multiparte", "form.request.item.parser.multipart": "Parser Multiparte",
"form.request.item.prefix": "Prefijo", "form.request.item.prefix": "Prefijo",
"form.request.item.prefix.prefix": "Prefijo", "form.request.item.prefix.prefix": "Prefijo",

View File

@ -35,6 +35,8 @@
"form.database.item.provider.postgres": "PostgresSQL", "form.database.item.provider.postgres": "PostgresSQL",
"form.database.item.provider.mysql": "MySQL", "form.database.item.provider.mysql": "MySQL",
"form.database.item.provider.redis": "Redis", "form.database.item.provider.redis": "Redis",
"form.database.item.ssl": "SSL",
"form.database.item.authenticationDatabase": "База данных аутентификации",
"form.application.name": "Приложение", "form.application.name": "Приложение",
"form.application.description": "Зайдайте настройки вашего приложения.", "form.application.description": "Зайдайте настройки вашего приложения.",

View File

@ -28,8 +28,10 @@
"PluginInputFile.text": "Ziehe eine Datei hierher oder {link} eine Datei zum hochladen aus", "PluginInputFile.text": "Ziehe eine Datei hierher oder {link} eine Datei zum hochladen aus",
"PluginInputFile.link": "wähle", "PluginInputFile.link": "wähle",
"PluginInputFile.loading": "Deine Dateien werden hochgeladen...",
"notification.delete.success": "Die Datei wurde gelöscht", "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.dropFiles.success": "{number} Dateien wurden hochgeladen",
"notification.config.success": "Die Einstellungen wurden aktualisiert"
} }

View File

@ -28,6 +28,7 @@
"Auth.form.register.username.placeholder": "John Doe", "Auth.form.register.username.placeholder": "John Doe",
"Auth.form.register.password.label": "Passwort", "Auth.form.register.password.label": "Passwort",
"Auth.form.register.confirmPassword.label": "Passwort-Bestätigung", "Auth.form.register.confirmPassword.label": "Passwort-Bestätigung",
"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.label": "Eine E-Mail wurde erfolgreich verschickt an",
"Auth.form.register-success.email.placeholder": "mysuperemail@gmail.com", "Auth.form.register-success.email.placeholder": "mysuperemail@gmail.com",

View File

@ -1,6 +1,6 @@
{ {
"Auth.form.button.register-success": "Enviar de nuevo", "Auth.form.button.register-success": "Enviar nuevamente",
"Auth.form.button.forgot-password.success": "Enviar de nuevo", "Auth.form.button.forgot-password.success": "Enviar nuevamente",
"Auth.form.button.forgot-password": "Enviar Email", "Auth.form.button.forgot-password": "Enviar Email",
"Auth.form.button.reset-password": "Cambiar contraseña", "Auth.form.button.reset-password": "Cambiar contraseña",
"Auth.form.button.login": "Iniciar sesión", "Auth.form.button.login": "Iniciar sesión",
@ -59,7 +59,7 @@
"EditForm.inputSelect.label.role": "Rol predeterminado para usuarios autenticados", "EditForm.inputSelect.label.role": "Rol predeterminado para usuarios autenticados",
"EditForm.inputSelect.description.role": "Adjuntará el nuevo usuario autenticado al rol seleccionado.", "EditForm.inputSelect.description.role": "Adjuntará el nuevo usuario autenticado al rol seleccionado.",
"EditForm.inputSelect.subscriptions.label": "Gestionar cuotas de suscripción", "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.label": "Duración",
"EditForm.inputSelect.durations.description": "Número de horas durante las cuales el usuario no puede suscribirse.", "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.application.description": "Defina todas las acciones permitidas de su proyecto.",
"Plugin.permissions.plugins.description": "Defina todas las acciones permitidas para el plugin {name}.", "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.", "Plugins.header.description": "Sólo las acciones vinculadas a una ruta se enumeran a continuación.",
"Policies.InputSelect.empty": "Ninguno", "Policies.InputSelect.empty": "Ninguno",
@ -139,7 +139,7 @@
"PopUpForm.button.save": "Guardar", "PopUpForm.button.save": "Guardar",
"PopUpForm.header.add.providers": "Añadir nuevo proveedor", "PopUpForm.header.add.providers": "Añadir nuevo proveedor",
"PopUpForm.header.edit.email-templates": "Editar Plantillas de Email", "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.inputSelect.providers.label": "Elija el proveedor",
"PopUpForm.Email.options.from.name.label": "Nombre del remitente", "PopUpForm.Email.options.from.name.label": "Nombre del remitente",
"PopUpForm.Email.options.from.email.label": "Email del remitente", "PopUpForm.Email.options.from.email.label": "Email del remitente",

View File

@ -1 +1,144 @@
{} {
"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"
}

View File

@ -14,6 +14,14 @@ module.exports = strapi => {
}, },
initialize: function(cb) { 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 => { _.forEach(strapi.config.routes, value => {
if (_.get(value.config, 'policies')) { if (_.get(value.config, 'policies')) {
value.config.policies.unshift('plugins.users-permissions.permissions'); value.config.policies.unshift('plugins.users-permissions.permissions');

View File

@ -27,8 +27,8 @@
"role": { "role": {
"model": "role", "model": "role",
"via": "users", "via": "users",
"plugin": "users-permissions" "plugin": "users-permissions",
"configurable": false
} }
}, }
"collectionName": "users-permissions_user" }
}

View File

@ -66,7 +66,7 @@ module.exports = function(appPath = '') {
}; };
const setFilesToWatch = (src) => { const setFilesToWatch = (src) => {
var files = _.includes(src, '/admin') || _.includes(src, 'components') ? [] : fs.readdirSync(src); let files = _.includes(src, '/admin') || _.includes(src, 'components') ? [] : fs.readdirSync(src);
_.forEach(files, file => { _.forEach(files, file => {
if ( if (