From a26f736d6af56f2ce005d8982ed1d5044dc50351 Mon Sep 17 00:00:00 2001
From: Sebastian Castro <sebastian.castro@protonmail.com>
Date: Wed, 5 May 2021 15:37:55 +0200
Subject: [PATCH] i18n: form-builder

---
 assets/js/vendor/fr-FR.lang                   | 96 -------------------
 .../custom-fields/form-builder.html.twig      | 63 ++++++++++--
 translations/admin+intl-icu.fr.yaml           | 43 ++++++++-
 3 files changed, 93 insertions(+), 109 deletions(-)
 delete mode 100755 assets/js/vendor/fr-FR.lang

diff --git a/assets/js/vendor/fr-FR.lang b/assets/js/vendor/fr-FR.lang
deleted file mode 100755
index 4bea2e6c9..000000000
--- a/assets/js/vendor/fr-FR.lang
+++ /dev/null
@@ -1,96 +0,0 @@
-addOption = Ajouter une Option
-allFieldsRemoved = Tous les champs ont été supprimés.
-allowSelect = Autoriser la sélection
-autocomplete = Autocompletion
-button = Bouton
-cannotBeEmpty = Ce champ ne peut être vide
-checkboxGroup = Groupe de cases à cocher
-checkbox = Case à cocher
-checkboxes = Cases à cocher
-class = Classe
-clearAllMessage = Etes-vous sur de vouloir vider tous les champs?
-clear = Vider
-close = Fermer
-content = Contenu
-copy = Copier danss le presse-papier
-dateField = Champ Date
-description = Texte d'Aide
-descriptionField = Description
-devMode = Mode Developpeur
-editNames = Editer les Names
-editorTitle = Form Elements
-editXML = Editer le XML
-enableOther = Champ libre
-enableOtherMsg = Permettre à l'utilisateur de rajouter une option
-fieldDeleteWarning: faux
-fieldVars = Field Variables
-fieldNonEditable = Ce champ ne peut être éditer.
-fieldRemoveWarning = Etes-vous sur de vouloir supprimer ce champ?
-fileUpload = Upload de fichier
-formUpdated = Le Formulaire a été mis à jour
-getStarted = Glisser-poser un champ d ela liste de droite vers cette zone
-header = Titre
-hide = Cacher
-hidden = Champ de type Hidden
-label = Label
-labelEmpty = Le Label d'un champ ne peut etre vide
-limitRole = Visible uniquement par les admin
-mandatory = Obligatoire
-maxlength = Longueur max.
-minOptionMessage = Ce champ nécessite au moins 2 options
-name = Nom du champ
-no = Non
-number = Nombre
-off = Off
-on = On
-other = Autre
-option = Option
-optional = optionnel
-optionEmpty = Une valeur d'option est exigée
-paragraph = Paragraphe
-placeholder = Placeholder
-placeholder.value = Value
-placeholder.label = Label
-placeholder.text = Saisir du Texte
-placeholder.textarea = Saisir un Texte long
-placeholder.email = Saisir votre adresse email
-placeholder.placeholder = Placeholder
-placeholder.className = classes séparées par des espaces
-placeholder.password = Saisir votre mot de passe
-preview = Pré-visualisation
-radioGroup = Groupe de Boutons Radio
-radio = Bouton Radio
-removeMessage = Supprimer l'élément
-remove = &#215;
-required = Obligatoire
-richText = Editeur de texte
-roles = Accès
-save = Enregistrer
-selectOptions = Options
-select = Sélection
-selectColor =  Couleur de Sélection
-selectionsMessage = Autorise la sélection multiple
-size = Taille
-sizes = Tailles
-sizes.xs = Très Petit
-sizes.sm = Petit
-sizes.m = Defaut
-sizes.lg = Large
-style = Style
-styles = Styles
-styles.btn = Styles de Bouton
-styles.btn.default = Defaut
-styles.btn.danger = Danger
-styles.btn.info = Info
-styles.btn.primary = Primary
-styles.btn.success = Success
-styles.btn.warning = Warning
-subtype = Type
-text = Texte, Email, Téléphone, Url..
-textArea = Texte long
-toggle = Toggle
-value = Valeur
-warning = Attention!
-viewXML = </>
-viewJSON = { }
-yes = Oui
diff --git a/templates/admin/core_custom/custom-fields/form-builder.html.twig b/templates/admin/core_custom/custom-fields/form-builder.html.twig
index eec636c48..c28a1ea31 100755
--- a/templates/admin/core_custom/custom-fields/form-builder.html.twig
+++ b/templates/admin/core_custom/custom-fields/form-builder.html.twig
@@ -52,10 +52,10 @@
           label: labelAttr,
           separator: { label: '' }, // separate important attrs from others
           subtype: { label: 'Type', options: {
-              'text': t('js.form_builder.subtype.text'),
-              'tel': t('js.form_builder.subtype.tel'),
-              'email': t('js.form_builder.subtype.email'),
-              'url': t('js.form_builder.subtype.url')
+              'text': t('js.form_builder.subtype_options.text'),
+              'tel': t('js.form_builder.subtype_options.tel'),
+              'email': t('js.form_builder.subtype_options.email'),
+              'url': t('js.form_builder.subtype_options.url')
             },
           },
           search: searchAttrs,
@@ -67,8 +67,8 @@
           icon: iconAttr,
           label: labelAttr,
           subtype: { label: 'Type', options: {
-              'textarea': t('js.form_builder.subtype.textarea'),
-              'wysiwyg': t('js.form_builder.subtype.wysiwyg')
+              'textarea': t('js.form_builder.subtype_options.textarea'),
+              'wysiwyg': t('js.form_builder.subtype_options.wysiwyg')
             },
           },
           search: searchAttrs,
@@ -156,14 +156,58 @@
         fields: fields,
         templates: templates,
         i18n: {
-          locale: 'fr-FR',
-          location: '{{ asset("js/") }}'
+          // we pretend to use en local but in fact we overide all used translation keys with following
+          // preloaded attribute. So translations will be loaded according to gogocarto locale
+          locale: 'en-US',
+          preloaded: { 'en-US': {
+            // find all available keys at : https://github.com/kevinchappell/formBuilder-languages/blob/master/en-US.lang
+            addOption: t('js.form_builder.addOption'),
+            checkboxGroup: t('js.form_builder.checkboxGroup'),
+            checkbox: t('js.form_builder.checkbox'),
+            class: t('js.form_builder.class'),
+            close: t('js.form_builder.close'),
+            dateField: t('js.form_builder.dateField'),
+            description: t('js.form_builder.description'),
+            header: t('js.form_builder.header'),
+            limitRole: t('js.form_builder.limitRole'),
+            mandatory: t('js.form_builder.mandatory'),
+            maxlength: t('js.form_builder.maxlength'),
+            name: t('js.form_builder.name'),
+            number: t('js.form_builder.number'),
+            option: t('js.form_builder.option'),
+            optional: t('js.form_builder.optional'),
+            paragraph: t('js.form_builder.paragraph'),
+            placeholder: t('js.form_builder.placeholder'),
+            placeholder_value: t('js.form_builder.placeholder_value'),
+            placeholder_label: t('js.form_builder.placeholder_label'),
+            placeholder_text: t('js.form_builder.placeholder_text'),
+            placeholder_textarea: t('js.form_builder.placeholder_textarea'),
+            placeholder_email: t('js.form_builder.placeholder_email'),
+            placeholder_placeholder: t('js.form_builder.placeholder_placeholder'),
+            placeholder_className: t('js.form_builder.placeholder_className'),
+            placeholder_password: t('js.form_builder.placeholder_password'),
+            radioGroup: t('js.form_builder.radioGroup'),
+            radio: t('js.form_builder.radio'),
+            required: t('js.form_builder.required'),
+            richText: t('js.form_builder.richText'),
+            roles: t('js.form_builder.roles'),
+            selectOptions: t('js.form_builder.selectOptions'),
+            select: t('js.form_builder.select'),
+            subtype: t('js.form_builder.subtype'),
+            text: t('js.form_builder.text'),
+            textArea: t('js.form_builder.textArea'),
+            toggle: t('js.form_builder.toggle'),
+            value: t('js.form_builder.value'),
+            label: t('js.form_builder.label'),
+            optionLabelPlaceholder: t('js.form_builder.optionLabelPlaceholder'),
+            optionValuePlaceholder: t('js.form_builder.optionValuePlaceholder')
+          }}
         },
         disableFields: ['hidden', 'file', 'button', 'autocomplete', 'title', 'taxonomy', 'address', 'image'],
         controlOrder: ['text', 'email', 'images', 'textarea', 'checkbox', 'checkbox-group', 'radio-group', 'select', 'date', 'number', 'files', 'elements'],
         disabledAttrs: ['className', 'inline', 'toggle', 'description', 'other', 'multiple'],
         formData: {{ formData|json_encode|raw }},
-        roles: { 1: t('js.form_builder.roles.1') },
+        roles: { 1: t('js.form_builder.roles_admin') },
         typeUserAttrs: typeUserAttrs
       });
 
@@ -174,7 +218,6 @@
           });
           $('input[type="checkbox"][value="true"]').prop('checked', true);
         }, 0);
-
       });
       
       setInterval(function() {
diff --git a/translations/admin+intl-icu.fr.yaml b/translations/admin+intl-icu.fr.yaml
index cc63eaf09..e10130303 100755
--- a/translations/admin+intl-icu.fr.yaml
+++ b/translations/admin+intl-icu.fr.yaml
@@ -1373,9 +1373,46 @@ js: # Below keys are available to javascript
     reversedBy_placeholder: "Le nom d'un autre champ de type \"lien vers un autre élément\""
     multiple: "Plusieurs choix"
     propNameOptions: "Choisissez un champ existant ou entrez un nouveau champ"
-    roles:
-      1: "Administrateur"
-    subtype:
+    addOption: "Ajouter une Option"
+    checkboxGroup: "Groupe de cases à cocher"
+    checkbox: "Case à cocher"
+    class: "Classe"
+    close: "Fermer"
+    dateField: "Champ Date"
+    description: "Texte d'Aide"
+    header: "Titre"
+    limitRole: "Visible uniquement par les admin"
+    mandatory: "Obligatoire"
+    name: "Nom du champ"
+    number: "Nombre"
+    option: "Option"
+    optional: "optionnel"
+    paragraph: "Paragraphe"
+    placeholder: "Placeholder"
+    placeholder_value: "Value"
+    placeholder_label: "Label"
+    placeholder_text: "Saisir du Texte"
+    placeholder_textarea: "Saisir un Texte long"
+    placeholder_email: "Saisir votre adresse email"
+    placeholder_placeholder: "Placeholder"
+    placeholder_className: "classes séparées par des espaces"
+    placeholder_password: "Saisir votre mot de passe"
+    radioGroup: "Groupe de Boutons Radio"
+    radio: "Bouton Radio"
+    required: "Obligatoire"
+    richText: "Editeur de texte"
+    roles: "Accès"
+    selectOptions: "Options"
+    select: "Sélection"
+    subtype: "Type"
+    text: "Texte, Email, Téléphone, Url.."
+    textArea: "Texte long"
+    toggle: "Toggle"
+    value: "Valeur"
+    optionLabelPlaceholder: "Libellé"
+    optionValuePlaceholder: "Valeur"
+    roles_admin: "Administrateur"
+    subtype_options:
       text: "Texte"
       tel: "Téléphone"
       email: "Courriel"
-- 
GitLab