diff --git a/i18n/fr/common.json b/i18n/fr/common.json index 50edceb..321523d 100644 --- a/i18n/fr/common.json +++ b/i18n/fr/common.json @@ -3,7 +3,7 @@ "fullname": "Nom et prénom", "company": "Société", "address": "Adresse", - "email": "Email", + "email": "E-mail", "phone": "N° de téléphone", "website": "Site Internet" }, @@ -12,5 +12,6 @@ "default": "Valeurs par défaut", "saveAsDefault": "Enregistrer comme valeurs par défaut ?", "yes": "Oui", - "noThanks": "Non, merci" -} \ No newline at end of file + "noThanks": "Non, merci", + "details": "Détails" +} diff --git a/i18n/fr/contacts.json b/i18n/fr/contacts.json index 866b7b4..af3a450 100644 --- a/i18n/fr/contacts.json +++ b/i18n/fr/contacts.json @@ -2,8 +2,8 @@ "header": "Tous les contacts", "fields": { "contact": "Contact", - "email": "Email", + "email": "E-mail", "phone": "Téléphone", "actions": "Actions" } -} \ No newline at end of file +} diff --git a/i18n/fr/dialog.json b/i18n/fr/dialog.json index ea4ec4e..aab1f92 100644 --- a/i18n/fr/dialog.json +++ b/i18n/fr/dialog.json @@ -9,7 +9,9 @@ "message": "Vous utilisez la dernière version de l'application" }, "error": { - "title": "Une erreur s'est produite" + "title": "Une erreur s'est produite", + "message": "Une erreur s'est produite lors de la mise à jour de l'application. Veuillez réessayer plus tard ou la télécharger manuellement.", + "OpenReleasePage": "Ouvrir la page de publication (Page realease sur GitHub)" }, "downloaded": { "title": "Mise à jour téléchargée", @@ -88,10 +90,14 @@ "note": { "title": "Remarque non valide", "message": "Le contenu des remarques ne peut pas être vide" + }, + "payment": { + "title": "Informations de paiement non valides", + "message": "Les informations de paiement ne peuvent pas être vides" } }, "events": { - "clickToCopy": "Click to copy", - "copied": "Copied!!" + "clickToCopy": "Cliquer pour copier", + "copied": "Copié !!" } -} \ No newline at end of file +} diff --git a/i18n/fr/form.json b/i18n/fr/form.json index 0b38908..2b8f76a 100644 --- a/i18n/fr/form.json +++ b/i18n/fr/form.json @@ -1,5 +1,6 @@ { "header": { + "contactEdit": "Modifier le contact", "new": "Créer une nouvelle facture", "edit": "Modifier la facture", "btns": { @@ -20,6 +21,12 @@ "quantity": "Quantité", "add": "Ajouter un nouvel élément" }, + "paymentItems": { + "name": "Prépaiements", + "description": "Description", + "value": "Valeur", + "add": "Ajouter un nouvel élément de prépaiement" + }, "recipient": { "name": "Destinataire", "select": "Sélectionner", @@ -30,6 +37,10 @@ "percentage": "Pourcentage", "flat": "Taux Fixe" }, + "createAtDate": { + "name": "Date de création", + "placeHolder": "Sélectionnez une date personnalisée" + }, "dueDate": { "name": "Échéance", "placeHolder": "Choisir une date", @@ -64,6 +75,11 @@ "reverse": "Autoliquidation" }, "note": "Remarque", - "currency": "Devise" + "currency": "Devise", + "payment": { + "name": "Paiement", + "details": "Informations sur le paiement", + "description": "Comptes bancaires, options de paiement numérique ou autres informations relatives au paiement" + } } } \ No newline at end of file diff --git a/i18n/fr/invoices.json b/i18n/fr/invoices.json index 14df954..911e6ce 100644 --- a/i18n/fr/invoices.json +++ b/i18n/fr/invoices.json @@ -4,10 +4,12 @@ }, "fields": { "client": "Client", - "invoiceID": "Numero de la facture", + "invoiceID": "ID de facture", "createdDate": "Créée le", "dueDate": "Échéance", - "total": "Valeur Totale" + "total": "Valeur Totale", + "prepaid": "Prépayé", + "remaining": "Solde restant" }, "status": { "pending": "En attente", @@ -20,4 +22,4 @@ "edit": "Modifier", "markAsPaid": "Marquer comme payée" } -} \ No newline at end of file +} diff --git a/i18n/fr/login.json b/i18n/fr/login.json index 402342b..bf064e7 100644 --- a/i18n/fr/login.json +++ b/i18n/fr/login.json @@ -1,4 +1,4 @@ { - "heading": "Login", - "description": "Please type your master password" + "heading": "S'identifier", + "description": "Merci de saisir votre mot de passe maître. Gardez-le en sécurité. Si vous le perdez, le système ne sera pas capable de récupérer les données." } \ No newline at end of file diff --git a/i18n/fr/messages.json b/i18n/fr/messages.json index 00b3efe..4b0597b 100644 --- a/i18n/fr/messages.json +++ b/i18n/fr/messages.json @@ -8,9 +8,14 @@ }, "contact": { "saved": "Contact enregistré avec succès", + "updated": "Contact mis à jour avec succès", "deleted": "Contact supprimé avec succès" }, "settings": { "saved": "Tous les paramètres ont été enregistrés avec succès" + }, + "login": { + "badSecret": "Je n'ai pas pu confirmer votre identité", + "success": "J'ai pu confirmer votre identité" } -} \ No newline at end of file +} diff --git a/i18n/fr/preview.json b/i18n/fr/preview.json index 3e3b520..4239413 100644 --- a/i18n/fr/preview.json +++ b/i18n/fr/preview.json @@ -8,6 +8,7 @@ "bottom": "Bas" }, "fontSize": "Taille du texte", + "logoSize": "Taille du logo", "toggle": { "name": "Basculer", "logo": "Logo", @@ -30,12 +31,13 @@ "created": "Créé", "due": "Échéance", "invoice": "Facture", + "quote": "Citation", "itemDescription": "Description de l'élement", "notice": "Notice", - "order": "No", + "order": "Non", "price": "Prix", "qty": "Quantité", "subtotal": "Sous-total", "total": "Total" } -} \ No newline at end of file +} diff --git a/i18n/fr/settings.json b/i18n/fr/settings.json index a0b96b7..0c366ea 100644 --- a/i18n/fr/settings.json +++ b/i18n/fr/settings.json @@ -11,11 +11,16 @@ "hint": "Accepte PNG, JPG & SVG (Recommandé)" }, "taxSettings": "Paramètres des Taxes", + "paymentSettings": "Configuration du paiement", "template": "Modèle", "dateFormat": "Format de la Date", "pdfExportDir": "Emplacement de sauvegarde du dossier PDF", "requiredFields": "Champs Requis", "sound": "Son", + "trayIcon": "Icône de barre de menu", + "sendMetricsAnon": "Envoyer des données d'analyses anonymes", + "openAtLogin": "Ouvrir à l'ouverture de session", + "quitAtClose": "Quitter à la fermeture", "mute": "Muet", "autoCheckUpdate": { "name": "Verification automatique des mises à jours", @@ -32,15 +37,16 @@ "dotComma": "Point & Virgule", "spaceDot": "Espace & Point" }, - "openPDFReader": "Ouvrir le fichier PDF après la sauvegarde", + "openPDFReader": "Ouvrir le fichier PDF après l'export", "language": { "name": "Langue", + "ar": "Arabe", "cs": "Tchèque", "da": "Danois", "de": "Allemand", "el": "Grec", "en": "Anglais", - "es-ES": "Espagnol", + "esES": "Espagnol", "fr": "Français", "id": "Indonésien", "it": "Italien", @@ -51,13 +57,25 @@ "ptBR": "Portugais (Brésil)", "ptPT": "Portugais", "ru": "Russe", + "sk": "Slovaque", "th": "Thaï", "tl": "Tagalog, Philippines", "tr": "Turc", + "ur-PK": "Ourdou (Pakistan)", "vi": "Vietnamien", "zh-CN": "Chinois (Simplifié)", "zh-TW": "Chinois (Traditionnel)", - "ro": "Romanian" + "sr": "Serbe (Cyrillique)", + "ro": "Roumain" + }, + "importExport": { + "name": "Import / Export", + "import": "Import", + "export": "Export", + "information": { + "label": "Note :", + "info": "L'opération d'exportation exportera vos contacts, vos factures chiffrées ainsi que les paramètres de chiffrement de base" + } }, "other": "Autre" } diff --git a/i18n/fr/statistics.json b/i18n/fr/statistics.json index 6fdba6f..1287d9a 100644 --- a/i18n/fr/statistics.json +++ b/i18n/fr/statistics.json @@ -1,9 +1,7 @@ - { - "header": "Statistics", + "header": "Statistiques", "legends": { - "date": "Dates", - "value": "Values" + "date": "Dates", + "value": "Valeurs" } - } - \ No newline at end of file +} \ No newline at end of file diff --git a/i18n/fr/tour.json b/i18n/fr/tour.json index fc6dbe4..d1b88c2 100644 --- a/i18n/fr/tour.json +++ b/i18n/fr/tour.json @@ -6,8 +6,8 @@ }, "slides": { "welcome": { - "heading": "👋 Salut !", - "description": "Merci de me donner une chance. Laissez-moi vous montrer comment créer de sublimes factures en seulement 3 étapes simples" + "heading": "👋 Bonjour !", + "description": "Merci de me donner une chance. Laissez-moi vous montrer comment créer de superbes factures en seulement 4 étapes simples" }, "create": { "heading": "Étape 1. Créer", @@ -17,13 +17,17 @@ "heading": "Étape 2. Personnaliser", "description": "Invoncify est livré avec des modèles professionnels qui peuvent être personnalisés afin de correspondre au style de votre marque." }, + "encryption": { + "heading": "Étape 3. Chiffrement", + "description": "Invoncify est doté d'un chiffrement de bout en bout qui protège vos informations et vous donne également la possibilité d'exporter ou d'importer vos données en toute sécurité." + }, "save": { "heading": "Étape 3. Sauvegarder", "description": "Une fois satisfait de l'apparence de la facture, vous pouvez l'enregistrer en PDF pour plus tard. Imprimez-la ou envoyez-la par email dès maintenant pour impressionner vos clients avec Invoncify!" }, "success": { "heading": "Terminé !!! ✋️", - "description": "Et voilà les 3 étapes simples pour créer de superbes factures avec Invoncify.\nN'oubliez pas de mettre à jour le profil de la société ainsi que son logo avant d'éditer de vraie factures." + "description": "Et voilà les 4 étapes simples pour créer de superbes factures avec Invoncify.\nN'oubliez pas de mettre à jour le profil de la société ainsi que son logo avant d'éditer de vraie factures." } } } \ No newline at end of file diff --git a/i18n/nl/dialog.json b/i18n/nl/dialog.json index ba22c0b..56592e6 100644 --- a/i18n/nl/dialog.json +++ b/i18n/nl/dialog.json @@ -9,7 +9,9 @@ "message": "U maakt al gebruik van de meest recente versie" }, "error": { - "title": "Er is een fout opgetreden" + "title": "Er is een fout opgetreden", + "message": "Er is een fout opgetreden bij het bijwerken van de app. Probeer het later opnieuw of download deze handmatig.", + "OpenReleasePage": "Open releasepagina" }, "downloaded": { "title": "Update gedownload", diff --git a/i18n/nl/settings.json b/i18n/nl/settings.json index c27a63e..186af7d 100644 --- a/i18n/nl/settings.json +++ b/i18n/nl/settings.json @@ -19,8 +19,8 @@ "sound": "Geluid", "trayIcon": "Menubalkitem", "sendMetricsAnon": "Stuur App Metrics Anoniem", - "openAtLogin": "Open at Login", - "quitAtClose": "Quit at Close", + "openAtLogin": "Openen bij aanmelden", + "quitAtClose": "Afsluiten bij sluiten", "mute": "Dempen", "autoCheckUpdate": { "name": "Check automatisch voor updates", @@ -46,7 +46,7 @@ "de": "Duits", "el": "Grieks", "en": "Engels", - "es-ES": "Spaans", + "esES": "Spaans", "fr": "Frans", "id": "Indonesisch", "it": "Italiaans", @@ -66,7 +66,6 @@ "zh-CN": "Chinees (vereenvoudigd)", "zh-TW": "Chinees (traditioneel)", "sr": "Servisch (Cyrillisch)", - "sr-CS": "Servisch (Latin)", "ro": "Roemeens" }, "importExport": { diff --git a/preview/templates/business/components/Main.jsx b/preview/templates/business/components/Main.jsx index fd7e6f9..95b153a 100644 --- a/preview/templates/business/components/Main.jsx +++ b/preview/templates/business/components/Main.jsx @@ -7,6 +7,7 @@ import { formatNumber } from '../../../../helpers/formatNumber'; import { getInvoiceValue } from '../../../../app/helpers/invoice'; import currencies from '../../../../libs/currencies.json'; +// Styles const InvoiceContent = styled.div` flex: 1; display: flex; @@ -84,6 +85,12 @@ const InvoiceDiscount = styled.tr` } `; +const InvoicePrepayment = styled.tr` + td:last-child { + color: #ec4757; + } +`; + const InvoiceTax = styled.tr` td:last-child { color: #ec476e; @@ -114,7 +121,7 @@ const Main = function ({ invoice, configs, t }) { // Set language const { language, accentColor, customAccentColor } = configs; // Others - const { tax, discount } = invoice; + const { tax, discount, prepayment } = invoice; const { code, placement, fraction, separator } = invoice.currency; // Set placement const currencyBefore = placement === 'before'; @@ -151,6 +158,21 @@ const Main = function ({ invoice, configs, t }) { )); + // Render Prepayment items + const prepaymentItemsComponents = invoice.paymentRows.map((row, index) => ( + + + + {row.description}{' '} + + + {currencyBefore ? currency : null}{' '} + {formatNumber(getInvoiceValue(invoice).prepayment, fraction, separator)}{' '} + {currencyBefore ? null : currency} + + + )); + return ( @@ -206,6 +228,7 @@ const Main = function ({ invoice, configs, t }) { )} + {prepaymentItemsComponents} {tax && (
@@ -243,7 +266,7 @@ const Main = function ({ invoice, configs, t }) { {currencyBefore ? currency : null}{' '} - {formatNumber(invoice.grandTotal, fraction, separator)}{' '} + {formatNumber(invoice.remaining, fraction, separator)}{' '} {currencyBefore ? null : currency}