diff --git a/app/components/settings/General.jsx b/app/components/settings/General.jsx
index a6da1204..20b7a682 100644
--- a/app/components/settings/General.jsx
+++ b/app/components/settings/General.jsx
@@ -96,10 +96,12 @@ class General extends Component {
value={this.state.language}
onChange={this.handleInputChange}
>
-
-
-
-
+
+
+
+
+
+
diff --git a/i18n/de/common.json b/i18n/de/common.json
new file mode 100644
index 00000000..543fa82e
--- /dev/null
+++ b/i18n/de/common.json
@@ -0,0 +1,16 @@
+{
+ "fields": {
+ "fullname": "Vollständiger Name",
+ "company": "Firma",
+ "address": "Adresse",
+ "email": "E-Mail",
+ "phone": "Telefonnummer",
+ "website": "Webseite"
+ },
+ "save": "Speichern",
+ "amount": "Betrag",
+ "default": "Standard",
+ "saveAsDefault": "Als Standard speichern?",
+ "yes": "Ja",
+ "noThanks": "Nein, danke"
+}
\ No newline at end of file
diff --git a/i18n/de/contacts.json b/i18n/de/contacts.json
new file mode 100644
index 00000000..4b285e6c
--- /dev/null
+++ b/i18n/de/contacts.json
@@ -0,0 +1,9 @@
+{
+ "header": "Alle Kontakte",
+ "fields": {
+ "contact": "Kontakt",
+ "email": "E-Mail",
+ "phone": "Telefon",
+ "actions": "Aktionen"
+ }
+}
\ No newline at end of file
diff --git a/i18n/de/dialog.json b/i18n/de/dialog.json
new file mode 100644
index 00000000..06723ff7
--- /dev/null
+++ b/i18n/de/dialog.json
@@ -0,0 +1,89 @@
+{
+ "appUpdate": {
+ "available": {
+ "title": "Neues Update verfügbar",
+ "message": "Download im Hintergrund starten?"
+ },
+ "noUpdate": {
+ "title": "Keine neuen Updates verfügbar",
+ "message": "Ihre Version ist auf aktuellem Stand"
+ },
+ "error": {
+ "title": "Es ist ein Fehler aufgetreten"
+ },
+ "downloaded": {
+ "title": "Update heruntergeladen",
+ "message": "Wollen Sie die Applikation beenden und jetzt aktualisieren?",
+ "quitNow": "Jetzt beenden",
+ "later": "Später"
+ }
+ },
+ "noAccess": {
+ "title": "Keine Zugriffsberechtigung",
+ "message": "Bitte wählen Sie ein anderes Verzeichnis"
+ },
+ "errorBoundary": "Es ist ein Fehler aufgetreten",
+ "deleteInvoice": {
+ "title": "Diese Rechnung löschen?",
+ "message": "Die Rechnung wird endgültig gelöscht"
+ },
+ "deleteContact": {
+ "title": "Diesen Kontakt löschen?",
+ "message": "Der Kontakt wird endgültig gelöscht"
+ },
+ "fileTypeErr": {
+ "title": "Bitte wählen Sie eine andere Datei"
+ },
+ "validation": {
+ "recipient": {
+ "empty": {
+ "title": "Ungültiger Kontakt",
+ "message": "Kontakt darf nicht leer sein"
+ },
+ "requiredFields": {
+ "title": "Pflichtfelder",
+ "message": "Bitte füllen Sie alle Pflichtfelder aus"
+ },
+ "email": {
+ "title": "Ungültige E-Mail-Adresse",
+ "message": "Bitte wählen Sie eine andere E-Mail Adresse"
+ }
+ },
+ "rows": {
+ "emptyDescription": {
+ "title": "Ungültige Beschreibung",
+ "message": "Beschreibung darf nicht leer sein"
+ },
+ "priceZero": {
+ "title": "Ungültiger Preis",
+ "message": "Preis muss grösser als Null sein"
+ },
+ "qtyZero": {
+ "title": "Ungültige Menge",
+ "message": "Menge muss grösser als Null sein"
+ }
+ },
+ "dueDate": {
+ "title": "Ungültiges Fälligkeitsdatum",
+ "message": "Bitte wählen Sie ein Datum aus"
+ },
+ "currency": {
+ "fraction": {
+ "title": "Ungültige Teilung",
+ "message": "Nachkommestelle muss gleich oder grösser als Null sein"
+ }
+ },
+ "discount": {
+ "title": "Ungültiger Rabatt",
+ "message": "Der Rabatt muss grösser als Null sein"
+ },
+ "tax": {
+ "title": "Ungültiger Steuersatz",
+ "message": "Steuerbetrag muss grösser als Null sein"
+ },
+ "note": {
+ "title": "Ungültige Notiz",
+ "message": "Feld Notiz darf nicht leer sein"
+ }
+ }
+}
\ No newline at end of file
diff --git a/i18n/de/form.json b/i18n/de/form.json
new file mode 100644
index 00000000..e0e46859
--- /dev/null
+++ b/i18n/de/form.json
@@ -0,0 +1,69 @@
+{
+ "header": {
+ "new": "Neue Rechnung erstellen",
+ "edit": "Rechnung bearbeiten",
+ "btns": {
+ "clear": "Löschen",
+ "update": "Aktualisieren",
+ "saveAndPreview": "Speichern & Vorschau"
+ }
+ },
+ "settings": {
+ "name": "Formulareinstellungen",
+ "hint": "Umschalten um das Feld im Formular als benötigt darzustellen."
+ },
+ "fields": {
+ "items": {
+ "name": "Produkt / Service",
+ "description": "Beschreibung",
+ "price": "Preis",
+ "quantity": "Menge",
+ "add": "Neue Position hinzufügen"
+ },
+ "recipient": {
+ "name": "Empfänger",
+ "select": "Auswählen",
+ "add": "Neuen Empfänger hinzufügen"
+ },
+ "discount": {
+ "name": "Rabatt",
+ "percentage": "Prozent",
+ "flat": "Pauschal"
+ },
+ "dueDate": {
+ "name": "Fälligkeitsdatum",
+ "placeHolder": "Datum auswählen",
+ "paymentTerms": {
+ "name": "Zahlungsbedingung auswählen",
+ "net7": {
+ "label": "Netto sieben Tage",
+ "description": "Zahlung innerhalb von sieben Tagen ab Rechnungsdatum"
+ },
+ "net10": {
+ "label": "Netto zehn Tage",
+ "description": "Zahlung innerhalb von zehn Tagen ab Rechnungsdatum"
+ },
+ "net30": {
+ "label": "Netto 30 Tage",
+ "description": "Zahlung innerhalb von 30 Tagen ab Rechnungsdatum"
+ },
+ "net60": {
+ "label": "Netto 60 Tage",
+ "description": "Zahlung innerhalb von 60 Tagen ab Rechnungsdatum"
+ },
+ "net90": {
+ "label": "Netto 90 Tage",
+ "description": "Zahlung innerhalb von 90 Tagen ab Rechnungsdatum"
+ }
+ }
+ },
+ "tax": {
+ "name": "Steuer",
+ "id": "USt-ID",
+ "method": "Zahlungsmethode",
+ "reverse": "Umkehr der Steuerschuld"
+ },
+ "note": "Notiz",
+ "currency": "Währung"
+ }
+}
\ No newline at end of file
diff --git a/i18n/ko/index.js b/i18n/de/index.js
similarity index 100%
rename from i18n/ko/index.js
rename to i18n/de/index.js
diff --git a/i18n/de/invoices.json b/i18n/de/invoices.json
new file mode 100644
index 00000000..7cebcb91
--- /dev/null
+++ b/i18n/de/invoices.json
@@ -0,0 +1,23 @@
+{
+ "header": {
+ "name": "Alle Rechnungen"
+ },
+ "fields": {
+ "client": "Kunde",
+ "invoiceID": "Rechnungsnummer",
+ "createdDate": "Erstellt am",
+ "dueDate": "Fälligkeitsdatum",
+ "total": "Gesamtwert"
+ },
+ "status": {
+ "pending": "Ausstehend",
+ "paid": "Bezahlt",
+ "refunded": "Erstattet",
+ "cancelled": "Storniert"
+ },
+ "btns": {
+ "view": "Ansehen",
+ "edit": "Bearbeiten",
+ "markAsPaid": "Als bezahlt markieren"
+ }
+}
\ No newline at end of file
diff --git a/i18n/de/messages.json b/i18n/de/messages.json
new file mode 100644
index 00000000..650180c8
--- /dev/null
+++ b/i18n/de/messages.json
@@ -0,0 +1,16 @@
+{
+ "noContact": "Es wurde noch kein Kontakt angelegt",
+ "noInvoice": "Sie haben noch keine Rechnung erstellt",
+ "invoice": {
+ "saved": "Rechnung erfolgreich gespeichert",
+ "updated": "Rechnung wurde erfolgreich aktualisiert",
+ "deleted": "Rechnung wurde erfolgreich gelöscht"
+ },
+ "contact": {
+ "saved": "Kontakt erfolgreich gespeichert",
+ "deleted": "Kontakt erfolgreich gelöscht"
+ },
+ "settings": {
+ "saved": "Alle Einstellungen wurden erfolgreich gespeichert"
+ }
+}
\ No newline at end of file
diff --git a/i18n/de/preview.json b/i18n/de/preview.json
new file mode 100644
index 00000000..5619b693
--- /dev/null
+++ b/i18n/de/preview.json
@@ -0,0 +1,41 @@
+{
+ "sidebar": {
+ "template": "Vorlage",
+ "alignment": {
+ "name": "Ausrichtung",
+ "top": "Oben",
+ "middle": "Mitte",
+ "bottom": "Unten"
+ },
+ "fontSize": "Schriftgrösse",
+ "toggle": {
+ "name": "Umschalten",
+ "logo": "Logo",
+ "symbol": "Symbol",
+ "recipient": "Empfänger"
+ },
+ "accentColor": {
+ "name": "Akzentfarbe",
+ "useCustom": "Eigene Farbe verwenden"
+ },
+ "actions": {
+ "name": "Aktionen",
+ "savePDF": "Als PDF exportieren",
+ "saveConfigs": "Konfiguration speichern"
+ }
+ },
+ "common": {
+ "billedTo": "Rechnungsempfänger",
+ "chooseInvoiceToPreview": "Zur Vorschau bitte eine Rechnung auswählen",
+ "created": "Erstellt",
+ "due": "Fällig",
+ "invoice": "Rechnung",
+ "itemDescription": "Artikel-\/Leistungsbeschreibung",
+ "notice": "Hinweis",
+ "order": "Nr",
+ "price": "Preis",
+ "qty": "Menge",
+ "subtotal": "Zwischensumme",
+ "total": "Rechnungsbetrag"
+ }
+}
\ No newline at end of file
diff --git a/i18n/de/settings.json b/i18n/de/settings.json
new file mode 100644
index 00000000..1824e536
--- /dev/null
+++ b/i18n/de/settings.json
@@ -0,0 +1,63 @@
+{
+ "header": "Einstellungen",
+ "tabs": {
+ "profile": "Profil",
+ "invoice": "Rechnung",
+ "general": "Allgemein"
+ },
+ "fields": {
+ "logo": {
+ "name": "Logo",
+ "hint": "Akzeptiert PNG, JPG & SVG (empfohlen)"
+ },
+ "taxSettings": "Steuer-Einstellungen",
+ "template": "Vorlage",
+ "dateFormat": "Datumsformat",
+ "pdfExportDir": "Verzeichnis für PDF-Exporte",
+ "requiredFields": "Pflichtfelder",
+ "sound": "Ton",
+ "mute": "Lautlos",
+ "autoCheckUpdate": {
+ "name": "Automatisch nach Updates suchen",
+ "daily": "Täglich (empfohlen)",
+ "weekly": "Wöchentlich"
+ },
+ "currency": {
+ "placement": "Position des Währungssymbols",
+ "afterAmount": "Nach dem Betrag",
+ "beforeAmount": "Vor dem Betrag",
+ "fraction": "Nachkommastellen",
+ "separator": "Trennsymbol",
+ "commaDot": "Komma & Punkt",
+ "dotComma": "Punkt & Komma",
+ "spaceDot": "Leerschläge & Punkte"
+ },
+ "openPDFReader": "PDF nach Export öffnen",
+ "language": {
+ "name": "Sprache",
+ "cs": "Tschechisch",
+ "da": "Dänisch",
+ "de": "Deutsch",
+ "el": "Griechisch",
+ "en": "Englisch",
+ "esES": "Spanisch",
+ "fr": "Französisch",
+ "id": "Indonesisch",
+ "it": "Italienisch",
+ "ja": "Japanisch",
+ "ko": "Koreanisch",
+ "lt": "Littauisch",
+ "nl": "Niederländisch",
+ "ptBR": "Portugiesisch, Brasilianisch",
+ "ptPT": "Portugiesisch",
+ "ru": "Russisch",
+ "th": "Thailändisch",
+ "tl": "Tagalog, Philippinen",
+ "tr": "Türkisch",
+ "vi": "Vietnamesisch",
+ "zh-CN": "Chinesisch (Vereinfacht)",
+ "zh-TW": "Chinesisch (Traditionell)"
+ },
+ "other": "Andere"
+ }
+}
\ No newline at end of file
diff --git a/i18n/de/tour.json b/i18n/de/tour.json
new file mode 100644
index 00000000..67848e29
--- /dev/null
+++ b/i18n/de/tour.json
@@ -0,0 +1,29 @@
+{
+ "actions": {
+ "skip": "Überspringen",
+ "next": "Weiter",
+ "start": "Rechnungserstellung starten"
+ },
+ "slides": {
+ "welcome": {
+ "heading": "👋 Hallo!",
+ "description": "Vielen Dank, dass Sie mich ausprobieren. Lassen Sie mich Ihnen zeigen, wie Sie atemberaubende Rechnungen mit nur 3 einfachen Schritten erstellen"
+ },
+ "create": {
+ "heading": "Schritt 1. Erstellen",
+ "description": "Manta hat eine flexible Formularschnittstelle. Es hält die Dinge standardmässig einfach, aber Sie können immer zusätzliche Felder aktivieren/deaktivieren, jedes Mal wenn Sie es für notwendig erachten."
+ },
+ "preview": {
+ "heading": "Schritt 2. Anpassen",
+ "description": "Manta bietet professionelle Vorlagen, die individuell auf Ihr Unternehmen angepasst werden können."
+ },
+ "save": {
+ "heading": "Schritt 3. Speichern",
+ "description": "Wenn Sie mit dem Layout Ihrer Rechnung zufrieden sind, können Sie es für spätere Nutzungen als PDF speichern. Egal ob auf dem Postweg oder als E-Mail, mit Manta beeindrucken Sie Ihre Kunden!"
+ },
+ "success": {
+ "heading": "Fertig! ✋️",
+ "description": "Das war's! Mit Manta in 3 einfachen Schritten zu beeindruckenden Rechnungen. Vergessen Sie nicht, Ihr Unternehmensprofil und Ihr Logo zu aktualisieren, bevor Sie die Rechnung verwenden."
+ }
+ }
+}
\ No newline at end of file
diff --git a/i18n/fr/common.json b/i18n/fr/common.json
new file mode 100644
index 00000000..50edceb7
--- /dev/null
+++ b/i18n/fr/common.json
@@ -0,0 +1,16 @@
+{
+ "fields": {
+ "fullname": "Nom et prénom",
+ "company": "Société",
+ "address": "Adresse",
+ "email": "Email",
+ "phone": "N° de téléphone",
+ "website": "Site Internet"
+ },
+ "save": "Sauvegarder",
+ "amount": "Montant",
+ "default": "Valeurs par défaut",
+ "saveAsDefault": "Enregistrer comme valeurs par défaut ?",
+ "yes": "Oui",
+ "noThanks": "Non, merci"
+}
\ No newline at end of file
diff --git a/i18n/fr/contacts.json b/i18n/fr/contacts.json
new file mode 100644
index 00000000..866b7b43
--- /dev/null
+++ b/i18n/fr/contacts.json
@@ -0,0 +1,9 @@
+{
+ "header": "Tous les contacts",
+ "fields": {
+ "contact": "Contact",
+ "email": "Email",
+ "phone": "Téléphone",
+ "actions": "Actions"
+ }
+}
\ No newline at end of file
diff --git a/i18n/fr/dialog.json b/i18n/fr/dialog.json
new file mode 100644
index 00000000..3c4e180b
--- /dev/null
+++ b/i18n/fr/dialog.json
@@ -0,0 +1,89 @@
+{
+ "appUpdate": {
+ "available": {
+ "title": "Nouvelle mise à jour disponible",
+ "message": "Souhaitez-vous commencer le téléchargement de la mise à jour en arrière-plan ?"
+ },
+ "noUpdate": {
+ "title": "Aucune mise à jour disponible",
+ "message": "Vous utilisez la dernière version de l'application"
+ },
+ "error": {
+ "title": "Une erreur s'est produite"
+ },
+ "downloaded": {
+ "title": "Mise à jour téléchargée",
+ "message": "Souhaitez-vous quitter et mettre l'application à jour maintenant ?",
+ "quitNow": "Quitter maintenant",
+ "later": "Plus tard"
+ }
+ },
+ "noAccess": {
+ "title": "Aucune autorisation d’accès",
+ "message": "Veuillez choisir un autre répertoire"
+ },
+ "errorBoundary": "Une erreur s'est produite",
+ "deleteInvoice": {
+ "title": "Supprimer cette facture ?",
+ "message": "La facture sera supprimée définitivement"
+ },
+ "deleteContact": {
+ "title": "Supprimer ce contact ?",
+ "message": "Ce contact sera supprimé définitivement"
+ },
+ "fileTypeErr": {
+ "title": "Veuillez choisir un autre fichier"
+ },
+ "validation": {
+ "recipient": {
+ "empty": {
+ "title": "Contact invalide",
+ "message": "Contact ne peut pas être vide"
+ },
+ "requiredFields": {
+ "title": "Champs requis",
+ "message": "Merci de remplir tous les champs requis"
+ },
+ "email": {
+ "title": "Email invalide",
+ "message": "Veuillez choisir un autre email"
+ }
+ },
+ "rows": {
+ "emptyDescription": {
+ "title": "Description invalide",
+ "message": "La description ne peut pas être vide"
+ },
+ "priceZero": {
+ "title": "Prix invalide",
+ "message": "Le prix doit être supérieur à zéro"
+ },
+ "qtyZero": {
+ "title": "Quantité invalide",
+ "message": "La quantité doit être supérieure à zéro"
+ }
+ },
+ "dueDate": {
+ "title": "Échéance invalide",
+ "message": "Veuillez sélectionner une date"
+ },
+ "currency": {
+ "fraction": {
+ "title": "Fraction non valide",
+ "message": "La Fraction décimale doit être supérieure ou égale à zéro"
+ }
+ },
+ "discount": {
+ "title": "Remise invalide",
+ "message": "Le montant de la remise doit être supérieur à zéro"
+ },
+ "tax": {
+ "title": "Taxe invalide",
+ "message": "Le montant de la TVA doit être supérieur à zéro"
+ },
+ "note": {
+ "title": "Remarque non valide",
+ "message": "Le contenu des remarques ne peut pas être vide"
+ }
+ }
+}
\ No newline at end of file
diff --git a/i18n/fr/form.json b/i18n/fr/form.json
new file mode 100644
index 00000000..0b389087
--- /dev/null
+++ b/i18n/fr/form.json
@@ -0,0 +1,69 @@
+{
+ "header": {
+ "new": "Créer une nouvelle facture",
+ "edit": "Modifier la facture",
+ "btns": {
+ "clear": "Supprimer",
+ "update": "Mettre à jour",
+ "saveAndPreview": "Enregistrer et prévisualiser"
+ }
+ },
+ "settings": {
+ "name": "Paramètres du formulaire",
+ "hint": "Activer un champ pour le rendre disponible."
+ },
+ "fields": {
+ "items": {
+ "name": "Produit / Service",
+ "description": "Description",
+ "price": "Prix",
+ "quantity": "Quantité",
+ "add": "Ajouter un nouvel élément"
+ },
+ "recipient": {
+ "name": "Destinataire",
+ "select": "Sélectionner",
+ "add": "Créer un nouveau"
+ },
+ "discount": {
+ "name": "Remise ",
+ "percentage": "Pourcentage",
+ "flat": "Taux Fixe"
+ },
+ "dueDate": {
+ "name": "Échéance",
+ "placeHolder": "Choisir une date",
+ "paymentTerms": {
+ "name": "Sélectionner un term de paiement",
+ "net7": {
+ "label": "Net 7",
+ "description": "Paiement sept jours après la date de facturation"
+ },
+ "net10": {
+ "label": "Net 10",
+ "description": "Paiement dix jours après la date de facturation"
+ },
+ "net30": {
+ "label": "Net 30",
+ "description": "Paiement 30 jours après la date de facturation"
+ },
+ "net60": {
+ "label": "Net 60",
+ "description": "Paiement 60 jours après la date de facturation"
+ },
+ "net90": {
+ "label": "Net 90",
+ "description": "Paiement 90 jours après la date de facturation"
+ }
+ }
+ },
+ "tax": {
+ "name": "Taxe",
+ "id": "Numéro de TVA",
+ "method": "Méthode",
+ "reverse": "Autoliquidation"
+ },
+ "note": "Remarque",
+ "currency": "Devise"
+ }
+}
\ No newline at end of file
diff --git a/i18n/fr/index.js b/i18n/fr/index.js
new file mode 100644
index 00000000..880d6014
--- /dev/null
+++ b/i18n/fr/index.js
@@ -0,0 +1,21 @@
+import common from './common.json';
+import contacts from './contacts.json';
+import dialog from './dialog.json';
+import form from './form.json';
+import invoices from './invoices.json';
+import messages from './messages.json';
+import preview from './preview.json';
+import settings from './settings.json';
+import tour from './tour.json';
+
+export default {
+ common,
+ contacts,
+ dialog,
+ form,
+ invoices,
+ messages,
+ preview,
+ settings,
+ tour
+}
diff --git a/i18n/fr/invoices.json b/i18n/fr/invoices.json
new file mode 100644
index 00000000..14df954e
--- /dev/null
+++ b/i18n/fr/invoices.json
@@ -0,0 +1,23 @@
+{
+ "header": {
+ "name": "Toutes les factures"
+ },
+ "fields": {
+ "client": "Client",
+ "invoiceID": "Numero de la facture",
+ "createdDate": "Créée le",
+ "dueDate": "Échéance",
+ "total": "Valeur Totale"
+ },
+ "status": {
+ "pending": "En attente",
+ "paid": "Payée",
+ "refunded": "Remboursée",
+ "cancelled": "Annulée"
+ },
+ "btns": {
+ "view": "Visualiser",
+ "edit": "Modifier",
+ "markAsPaid": "Marquer comme payée"
+ }
+}
\ No newline at end of file
diff --git a/i18n/fr/messages.json b/i18n/fr/messages.json
new file mode 100644
index 00000000..00b3efe3
--- /dev/null
+++ b/i18n/fr/messages.json
@@ -0,0 +1,16 @@
+{
+ "noContact": "Vous n'avez pas encore de contact",
+ "noInvoice": "Vous n'avez pas créé de facture pour le moment",
+ "invoice": {
+ "saved": "Facture enregistrée avec succès",
+ "updated": "Facture mise à jour avec succès",
+ "deleted": "Facture supprimée avec succès"
+ },
+ "contact": {
+ "saved": "Contact enregistré avec succès",
+ "deleted": "Contact supprimé avec succès"
+ },
+ "settings": {
+ "saved": "Tous les paramètres ont été enregistrés avec succès"
+ }
+}
\ No newline at end of file
diff --git a/i18n/fr/preview.json b/i18n/fr/preview.json
new file mode 100644
index 00000000..3e3b5207
--- /dev/null
+++ b/i18n/fr/preview.json
@@ -0,0 +1,41 @@
+{
+ "sidebar": {
+ "template": "Modèle",
+ "alignment": {
+ "name": "Alignement",
+ "top": "Haut",
+ "middle": "Milieu",
+ "bottom": "Bas"
+ },
+ "fontSize": "Taille du texte",
+ "toggle": {
+ "name": "Basculer",
+ "logo": "Logo",
+ "symbol": "Symbole",
+ "recipient": "Destinataire"
+ },
+ "accentColor": {
+ "name": "Couleur secondaire",
+ "useCustom": "Couleur personnalisée"
+ },
+ "actions": {
+ "name": "Actions",
+ "savePDF": "Exporter en PDF",
+ "saveConfigs": "Sauvegarder"
+ }
+ },
+ "common": {
+ "billedTo": "Facturé à",
+ "chooseInvoiceToPreview": "Veuillez choisir une facture à visualiser",
+ "created": "Créé",
+ "due": "Échéance",
+ "invoice": "Facture",
+ "itemDescription": "Description de l'élement",
+ "notice": "Notice",
+ "order": "No",
+ "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
new file mode 100644
index 00000000..5df7dedf
--- /dev/null
+++ b/i18n/fr/settings.json
@@ -0,0 +1,63 @@
+{
+ "header": "Paramètres",
+ "tabs": {
+ "profile": "Profil",
+ "invoice": "Facture",
+ "general": "Général"
+ },
+ "fields": {
+ "logo": {
+ "name": "Logo",
+ "hint": "Accepte PNG, JPG & SVG (Recommandé)"
+ },
+ "taxSettings": "Paramètres des Taxes",
+ "template": "Modèle",
+ "dateFormat": "Format de la Date",
+ "pdfExportDir": "Emplacement de sauvegarde du dossier PDF",
+ "requiredFields": "Champs Requis",
+ "sound": "Son",
+ "mute": "Muet",
+ "autoCheckUpdate": {
+ "name": "Verification automatique des mises à jours",
+ "daily": "Tous les jours (recommandé)",
+ "weekly": "Toutes les semaines"
+ },
+ "currency": {
+ "placement": "Emplacement du signe",
+ "afterAmount": "Après le montant",
+ "beforeAmount": "Avant le montant",
+ "fraction": "Deux décimales",
+ "separator": "Séparateur",
+ "commaDot": "Virgule & Point",
+ "dotComma": "Point & Virgule",
+ "spaceDot": "Espace & Point"
+ },
+ "openPDFReader": "Ouvrir le fichier PDF après la sauvegarde",
+ "language": {
+ "name": "Langue",
+ "cs": "Tchèque",
+ "da": "Danois",
+ "de": "Allemand",
+ "el": "Grec",
+ "en": "Anglais",
+ "esES": "Espagnol",
+ "fr": "Français",
+ "id": "Indonésien",
+ "it": "Italien",
+ "ja": "Japonais",
+ "ko": "Coréen",
+ "lt": "Lituanien",
+ "nl": "Néerlandais",
+ "ptBR": "Portugais (Brésil)",
+ "ptPT": "Portugais",
+ "ru": "Russe",
+ "th": "Thaï",
+ "tl": "Tagalog, Philippines",
+ "tr": "Turc",
+ "vi": "Vietnamien",
+ "zh-CN": "Chinois (Simplifié)",
+ "zh-TW": "Chinois (Traditionnel)"
+ },
+ "other": "Autre"
+ }
+}
\ No newline at end of file
diff --git a/i18n/fr/tour.json b/i18n/fr/tour.json
new file mode 100644
index 00000000..62bbb9ef
--- /dev/null
+++ b/i18n/fr/tour.json
@@ -0,0 +1,29 @@
+{
+ "actions": {
+ "skip": "Passer",
+ "next": "Suivant",
+ "start": "Commencer la facturation"
+ },
+ "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"
+ },
+ "create": {
+ "heading": "Étape 1. Créer",
+ "description": "Manta a une interface de formulaire flexible. Il garde les choses simples par défaut, mais vous pouvez toujours activer/désactiver des champs supplémentaires à chaque fois que cela vous semble nécessaire."
+ },
+ "preview": {
+ "heading": "Étape 2. Personnaliser",
+ "description": "Manta est livré avec des modèles professionnels qui peuvent être personnalisés afin de correspondre au style de votre marque."
+ },
+ "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 Manta!"
+ },
+ "success": {
+ "heading": "Terminé !!! ✋️",
+ "description": "Et voilà les 3 étapes simples pour créer de superbes factures avec Manta.\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/i18n.js b/i18n/i18n.js
index bcc53055..037bf5b1 100644
--- a/i18n/i18n.js
+++ b/i18n/i18n.js
@@ -7,8 +7,10 @@ const isDev = require('electron-is-dev');
const moment = require('moment');
// Language Files
+import de from './de';
import en from './en';
-import ko from './ko';
+import fr from './fr';
+import id from './id';
import vi from './vi';
import zhCN from './zh-CN';
@@ -18,8 +20,10 @@ i18n.use(reactI18nextModule).init({
debug: isDev,
defaultNS: 'form',
resources: {
+ de,
en,
- ko,
+ fr,
+ id,
vi,
"zh-CN": zhCN
},
@@ -37,4 +41,8 @@ i18n.use(reactI18nextModule).init({
},
});
+i18n.on('languageChanged', currentLang => {
+ moment.locale(currentLang);
+});
+
export default i18n;
diff --git a/i18n/id/common.json b/i18n/id/common.json
new file mode 100644
index 00000000..8558d194
--- /dev/null
+++ b/i18n/id/common.json
@@ -0,0 +1,16 @@
+{
+ "fields": {
+ "fullname": "Nama Lengkap",
+ "company": "Perusahaan",
+ "address": "Alamat",
+ "email": "Email",
+ "phone": "Nomor Telepon",
+ "website": "Situs Web"
+ },
+ "save": "Simpan",
+ "amount": "Jumlah",
+ "default": "Standar",
+ "saveAsDefault": "Simpan sebagai Standar?",
+ "yes": "Ya",
+ "noThanks": "Tidak, terima kasih"
+}
\ No newline at end of file
diff --git a/i18n/id/contacts.json b/i18n/id/contacts.json
new file mode 100644
index 00000000..d20b49aa
--- /dev/null
+++ b/i18n/id/contacts.json
@@ -0,0 +1,9 @@
+{
+ "header": "Semua Kontak",
+ "fields": {
+ "contact": "Kontak",
+ "email": "Surel",
+ "phone": "Telepon",
+ "actions": "Tindakan"
+ }
+}
\ No newline at end of file
diff --git a/i18n/id/dialog.json b/i18n/id/dialog.json
new file mode 100644
index 00000000..a4c5b249
--- /dev/null
+++ b/i18n/id/dialog.json
@@ -0,0 +1,89 @@
+{
+ "appUpdate": {
+ "available": {
+ "title": "Pembaruan baru tersedia",
+ "message": "Apakah anda ingin mulai mengunduh pembaruan di latar belakang?"
+ },
+ "noUpdate": {
+ "title": "Tidak ada pembaruan yang tersedia",
+ "message": "Anda sedang menggunakan versi terbaru dari aplikasi"
+ },
+ "error": {
+ "title": "Sebuah kesalahan telah terjadi"
+ },
+ "downloaded": {
+ "title": "Pembaruan sudah diunduh",
+ "message": "Apakah anda ingin berhenti dan meningkatkan aplikasi sekarang?",
+ "quitNow": "Berhenti Sekarang",
+ "later": "Nanti"
+ }
+ },
+ "noAccess": {
+ "title": "Tidak ada izin mengakses",
+ "message": "Silahkan pilih petunjuk lainnya"
+ },
+ "errorBoundary": "Terjadi sebuah kesalahan",
+ "deleteInvoice": {
+ "title": "Hapus faktur ini?",
+ "message": "Faktur akan dihapus secara permanen dari basisdata"
+ },
+ "deleteContact": {
+ "title": "Hapus kontak ini?",
+ "message": "Kontak akan dihapus secara permanen dari basis data"
+ },
+ "fileTypeErr": {
+ "title": "Silahkan pilih berkas lain"
+ },
+ "validation": {
+ "recipient": {
+ "empty": {
+ "title": "Kontak tidak sah",
+ "message": "Kontak tidak boleh kosong"
+ },
+ "requiredFields": {
+ "title": "Bidang-bidang yang diperlukan",
+ "message": "Silahkan isi di semua kolom yang wajib diisi"
+ },
+ "email": {
+ "title": "Surel tidak sah",
+ "message": "Silahkan pilih surel lain"
+ }
+ },
+ "rows": {
+ "emptyDescription": {
+ "title": "Deskripsi tidak sah",
+ "message": "Deskripsi tidak boleh kosong"
+ },
+ "priceZero": {
+ "title": "Harga tidak sah",
+ "message": "Harga harus lebih besar daripada nol"
+ },
+ "qtyZero": {
+ "title": "Kuantitas tidak sah",
+ "message": "Kuantitas harus lebih besar daripada nol"
+ }
+ },
+ "dueDate": {
+ "title": "Batas tanggal akhir tidak sah",
+ "message": "Silahkan pilih sebuah tanggal"
+ },
+ "currency": {
+ "fraction": {
+ "title": "Pecahan tidak sah",
+ "message": "Pecahan desimal harus sama atau lebih besar dari nol"
+ }
+ },
+ "discount": {
+ "title": "Diskon tidak sah",
+ "message": "Jumlah diskon harus lebih besar daripada nol"
+ },
+ "tax": {
+ "title": "Pajak tidak sah",
+ "message": "Jumlah pajak harus lebih besar daripada nol"
+ },
+ "note": {
+ "title": "Catatan tidak sah",
+ "message": "Konten catatan tidak boleh kosong"
+ }
+ }
+}
\ No newline at end of file
diff --git a/i18n/id/form.json b/i18n/id/form.json
new file mode 100644
index 00000000..47f084cd
--- /dev/null
+++ b/i18n/id/form.json
@@ -0,0 +1,69 @@
+{
+ "header": {
+ "new": "Buat Sebuah Faktur Baru",
+ "edit": "Sunting Faktur",
+ "btns": {
+ "clear": "Bersihkan",
+ "update": "Pembaruan",
+ "saveAndPreview": "Simpan & Peninjauan"
+ }
+ },
+ "settings": {
+ "name": "Pengaturan Bentuk",
+ "hint": "Perhatikan setiap bidang untuk membuatnya diperlukan dalam bentuk."
+ },
+ "fields": {
+ "items": {
+ "name": "Produk/Layanan",
+ "description": "Deskripsi",
+ "price": "Harga",
+ "quantity": "Kuantitas",
+ "add": "Tambahkan sebuah Item Baru"
+ },
+ "recipient": {
+ "name": "Penerima",
+ "select": "Pilih",
+ "add": "Buat Baru"
+ },
+ "discount": {
+ "name": "Diskon",
+ "percentage": "Persentase",
+ "flat": "Tarif Tetap"
+ },
+ "dueDate": {
+ "name": "Batas Tanggal Terakhir",
+ "placeHolder": "Pilih sebuah tanggal kustom",
+ "paymentTerms": {
+ "name": "Pilih sebuah jangka waktu pembayaran",
+ "net7": {
+ "label": "Net 7",
+ "description": "Pembayaran tujuh hari setelah tanggal faktur"
+ },
+ "net10": {
+ "label": "Net 10",
+ "description": "Pembayaran 10 hari setelah tanggal faktur"
+ },
+ "net30": {
+ "label": "Net 30",
+ "description": "Pembayaran 30 hari setelah tanggal faktur"
+ },
+ "net60": {
+ "label": "Net 60",
+ "description": "Pembayaran 60 hari setelah tanggal faktur"
+ },
+ "net90": {
+ "label": "Net 90",
+ "description": "Pembayaran 90 hari setelah tanggal faktur"
+ }
+ }
+ },
+ "tax": {
+ "name": "Pajak",
+ "id": "ID Pajak",
+ "method": "Metode",
+ "reverse": "Biaya Cadangan"
+ },
+ "note": "Catatan",
+ "currency": "Mata Uang"
+ }
+}
\ No newline at end of file
diff --git a/i18n/id/index.js b/i18n/id/index.js
new file mode 100644
index 00000000..880d6014
--- /dev/null
+++ b/i18n/id/index.js
@@ -0,0 +1,21 @@
+import common from './common.json';
+import contacts from './contacts.json';
+import dialog from './dialog.json';
+import form from './form.json';
+import invoices from './invoices.json';
+import messages from './messages.json';
+import preview from './preview.json';
+import settings from './settings.json';
+import tour from './tour.json';
+
+export default {
+ common,
+ contacts,
+ dialog,
+ form,
+ invoices,
+ messages,
+ preview,
+ settings,
+ tour
+}
diff --git a/i18n/id/invoices.json b/i18n/id/invoices.json
new file mode 100644
index 00000000..d2302365
--- /dev/null
+++ b/i18n/id/invoices.json
@@ -0,0 +1,23 @@
+{
+ "header": {
+ "name": "Semua Faktur"
+ },
+ "fields": {
+ "client": "Klien",
+ "invoiceID": "ID Fraktur",
+ "createdDate": "Dibuat Pada",
+ "dueDate": "Batas Tanggal Terakhir",
+ "total": "Nilai Total"
+ },
+ "status": {
+ "pending": "Menunda",
+ "paid": "Dibayar",
+ "refunded": "Dana dikembalikan",
+ "cancelled": "Dibatalkan"
+ },
+ "btns": {
+ "view": "Melihat",
+ "edit": "Sunting",
+ "markAsPaid": "Tandai sebagai Dibayar"
+ }
+}
\ No newline at end of file
diff --git a/i18n/id/messages.json b/i18n/id/messages.json
new file mode 100644
index 00000000..1a6560b1
--- /dev/null
+++ b/i18n/id/messages.json
@@ -0,0 +1,16 @@
+{
+ "noContact": "Anda belum memiliki kontak apapun",
+ "noInvoice": "Anda belum membuat faktur apapun",
+ "invoice": {
+ "saved": "Faktur disimpan dengan sukses",
+ "updated": "Faktur diperbarui dengan sukses",
+ "deleted": "Faktur dihapus dengan sukses"
+ },
+ "contact": {
+ "saved": "Kontak disimpan dengan sukses",
+ "deleted": "Kontak dihapus dengan sukses"
+ },
+ "settings": {
+ "saved": "Semua pengaturan sudah disimpan dengan sukses"
+ }
+}
\ No newline at end of file
diff --git a/i18n/id/preview.json b/i18n/id/preview.json
new file mode 100644
index 00000000..d27109d6
--- /dev/null
+++ b/i18n/id/preview.json
@@ -0,0 +1,41 @@
+{
+ "sidebar": {
+ "template": "Template",
+ "alignment": {
+ "name": "Penjajaran",
+ "top": "Atas",
+ "middle": "Tengah",
+ "bottom": "Bawah"
+ },
+ "fontSize": "Ukuran Huruf",
+ "toggle": {
+ "name": "Tombol Alih",
+ "logo": "Logo",
+ "symbol": "Simbol",
+ "recipient": "Penerima"
+ },
+ "accentColor": {
+ "name": "Warna Aksen",
+ "useCustom": "Gunakan Custom"
+ },
+ "actions": {
+ "name": "Tindakan",
+ "savePDF": "Ekspor PDF",
+ "saveConfigs": "Simpan Konfigurasi"
+ }
+ },
+ "common": {
+ "billedTo": "Ditagih Ke",
+ "chooseInvoiceToPreview": "Silahkan pilih sebuah faktur untuk pratinjau",
+ "created": "Dibuat",
+ "due": "Batas Waktu",
+ "invoice": "Faktur",
+ "itemDescription": "Deskripsi Item",
+ "notice": "Pemberitahuan",
+ "order": "Tidak",
+ "price": "Harga",
+ "qty": "Kuantitas",
+ "subtotal": "Subtotal",
+ "total": "Total"
+ }
+}
\ No newline at end of file
diff --git a/i18n/id/settings.json b/i18n/id/settings.json
new file mode 100644
index 00000000..529c15ec
--- /dev/null
+++ b/i18n/id/settings.json
@@ -0,0 +1,63 @@
+{
+ "header": "Pengaturan",
+ "tabs": {
+ "profile": "Profil",
+ "invoice": "Faktur",
+ "general": "Umum"
+ },
+ "fields": {
+ "logo": {
+ "name": "Logo",
+ "hint": "Menerima PNG, JPG & SVG (Direkomendasikan)"
+ },
+ "taxSettings": "Pengaturan Pajak",
+ "template": "Templat",
+ "dateFormat": "Format Tanggal",
+ "pdfExportDir": "Direktori Ekspor PDF",
+ "requiredFields": "Bidang-bidang yang diperlukan",
+ "sound": "Suara",
+ "mute": "Senyap",
+ "autoCheckUpdate": {
+ "name": "Pemeriksaan Otomatis untuk Pembaruan",
+ "daily": "Setiap Hari (Direkomendasikan)",
+ "weekly": "Setiap Minggu"
+ },
+ "currency": {
+ "placement": "Tanda penempatan",
+ "afterAmount": "Setelah Jumlah",
+ "beforeAmount": "Sebelum Jumlah",
+ "fraction": "Pecahan Desimal",
+ "separator": "Pemisah",
+ "commaDot": "Koma & Titik",
+ "dotComma": "Titik & Koma",
+ "spaceDot": "Spasi & Titik"
+ },
+ "openPDFReader": "Buka PDF setelah Mengekspor",
+ "language": {
+ "name": "Bahasa",
+ "cs": "Ceko",
+ "da": "Denmark",
+ "de": "Jerman",
+ "el": "Yunani",
+ "en": "Inggris",
+ "esES": "Spanyol",
+ "fr": "Perancis",
+ "id": "Indonesia",
+ "it": "Italia",
+ "ja": "Jepang",
+ "ko": "Korea",
+ "lt": "Lithuania",
+ "nl": "Belanda",
+ "ptBR": "Portugis, Brazil",
+ "ptPT": "Portugis",
+ "ru": "Rusia",
+ "th": "Thailand",
+ "tl": "Tagalog, Filipina",
+ "tr": "Turki",
+ "vi": "Vietnam",
+ "zh-CN": "China (Disederhanakan)",
+ "zh-TW": "China (Tradisional)"
+ },
+ "other": "Lainnya"
+ }
+}
\ No newline at end of file
diff --git a/i18n/id/tour.json b/i18n/id/tour.json
new file mode 100644
index 00000000..6a63c496
--- /dev/null
+++ b/i18n/id/tour.json
@@ -0,0 +1,29 @@
+{
+ "actions": {
+ "skip": "Lewati",
+ "next": "Berikutnya",
+ "start": "Mulai Memfakturkan"
+ },
+ "slides": {
+ "welcome": {
+ "heading": "👋 Halo!",
+ "description": "Terima kasih sudah memberikan saya sebuah kesempatan. Mari saya tunjukkan kepada anda bagaimana cara membuat faktur yang menakjubkan dengan hanya 3 langkah sederhana"
+ },
+ "create": {
+ "heading": "Langkah 1. Membuat",
+ "description": "Manta memiliki sebuah bentuk antarmuka yang fleksibel. Ia membuat hal-hal menjadi sederhana secara default tapi anda dapat selalu menghidupkan/mematikan bidang tambahan kapanpun anda merasa perlu."
+ },
+ "preview": {
+ "heading": "Langkah 2. Menyesuaikan",
+ "description": "Manta hadir dengan tampilan template profesional yang dapat disesuaikan lebih lanjut sesuai dengan gaya merek anda."
+ },
+ "save": {
+ "heading": "Langkah 3. Menyimpan",
+ "description": "Setelah puas dengan penampilan faktur anda dapat menyimpannya sebagai PDF untuk digunakan nanti. Cetak atau emailkan ia, mari gunakan Manta untuk mengesankan klien anda sekarang!"
+ },
+ "success": {
+ "heading": "Selesai!!! ✋️",
+ "description": "Anda mendapatkannya, 3 langkah sederhana untuk membuat faktur yang menakjubkan dengan Manta. Ingat untuk memperbarui profil dan logo perusahaan sebelum benar-benar menggunakan faktur tersebut."
+ }
+ }
+}
\ No newline at end of file
diff --git a/i18n/ko/common.json b/i18n/ko/common.json
deleted file mode 100644
index d01abad0..00000000
--- a/i18n/ko/common.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "fields": {
- "fullname": "이름",
- "company": "회사",
- "address": "주소",
- "email": "이메일",
- "phone": "전화번호",
- "website": "웹사이트"
- },
- "save": "저장",
- "amount": "양",
- "default": "기본",
- "saveAsDefault": "기본 값으로 저장할까요?",
- "yes": "네",
- "noThanks": "아뇨, 괜찮아요"
-}
\ No newline at end of file
diff --git a/i18n/ko/contacts.json b/i18n/ko/contacts.json
deleted file mode 100644
index 797d10dd..00000000
--- a/i18n/ko/contacts.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "header": "모든 연락처",
- "fields": {
- "contact": "연락처",
- "email": "이메일",
- "phone": "휴대전화",
- "actions": "작업"
- }
-}
\ No newline at end of file
diff --git a/i18n/ko/dialog.json b/i18n/ko/dialog.json
deleted file mode 100644
index fb8e699b..00000000
--- a/i18n/ko/dialog.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "appUpdate": {
- "available": {
- "title": "새 업데이트가 있습니다",
- "message": "백그라운드에서 업데이트를 다운로드할까요?"
- },
- "noUpdate": {
- "title": "새 업데이트가 없습니다",
- "message": "최신 버전을 사용하고 있습니다"
- },
- "error": {
- "title": "오류가 발생했습니다"
- },
- "downloaded": {
- "title": "업데이트 다운로드 완료",
- "message": "프로그램을 종료하고 업그레이드할까요?",
- "quitNow": "지금 종료",
- "later": "나중에"
- }
- },
- "noAccess": {
- "title": "접근 권한이 없습니다",
- "message": "다른 경로를 선택해주세요"
- },
- "errorBoundary": "오류가 발생했습니다",
- "deleteInvoice": {
- "title": "이 송장을 삭제할까요?",
- "message": "송장이 영구적으로 제거됩니다"
- },
- "deleteContact": {
- "title": "이 연락처를 삭제할까요?",
- "message": "연락처가 영구적으로 제거됩니다"
- },
- "fileTypeErr": {
- "title": "다른 파일을 선택해주세요"
- },
- "validation": {
- "recipient": {
- "empty": {
- "title": "연락처 잘못됨",
- "message": "연락처는 필수 입력 항목입니다"
- },
- "requiredFields": {
- "title": "필수 입력 항목",
- "message": "필수 입력 항목을 모두 채워주세요"
- },
- "email": {
- "title": "이메일 잘못됨",
- "message": "다른 이메일을 선택해주세요."
- }
- },
- "rows": {
- "emptyDescription": {
- "title": "품명 잘못됨",
- "message": "품명은 필수 입력 항목입니다"
- },
- "priceZero": {
- "title": "가격 잘못됨",
- "message": "가격 값은 0보다 커야합니다"
- },
- "qtyZero": {
- "title": "수량 잘못됨",
- "message": "수량 값은 0보다 커야합니다"
- }
- },
- "dueDate": {
- "title": "기한 날짜 잘못됨",
- "message": "유효한 날짜를 선택해주세요"
- },
- "currency": {
- "fraction": {
- "title": "소수 잘못됨",
- "message": "소수 값은 0과 같거나 더 커야합니다"
- }
- },
- "discount": {
- "title": "할인 값 잘못됨",
- "message": "할인 값은 0보다 커야합니다"
- },
- "tax": {
- "title": "세금 값 잘못됨",
- "message": "세금 값은 0보다 커야합니다"
- },
- "note": {
- "title": "기타 사항 잘못됨",
- "message": "기타 사항은 필수 입력 항목입니다"
- }
- }
-}
\ No newline at end of file
diff --git a/i18n/ko/form.json b/i18n/ko/form.json
deleted file mode 100644
index 189c6a75..00000000
--- a/i18n/ko/form.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "header": {
- "new": "송장 만들기",
- "edit": "송장 수정하기",
- "btns": {
- "clear": "초기화",
- "update": "업데이트",
- "saveAndPreview": "저장하고 미리 보기"
- }
- },
- "settings": {
- "name": "양식 설정",
- "hint": "칸이 더 필요하신가요? 원하시는 칸을 켜고 끄세요."
- },
- "fields": {
- "items": {
- "name": "품목 / 서비스",
- "description": "품명",
- "price": "가격",
- "quantity": "수량",
- "add": "새 품목 추가"
- },
- "recipient": {
- "name": "받는 사람",
- "select": "연락처 중에서 선택",
- "add": "새로 작성"
- },
- "discount": {
- "name": "할인",
- "percentage": "퍼센트 비율",
- "flat": "고정 할인 요금"
- },
- "dueDate": {
- "name": "기한 날짜",
- "placeHolder": "날짜를 선택하세요"
- },
- "tax": {
- "name": "세금",
- "id": "납세자 번호",
- "method": "지불 방식",
- "reverse": "매입자 납부"
- },
- "note": "기타 사항",
- "currency": "통화"
- }
-}
\ No newline at end of file
diff --git a/i18n/ko/invoices.json b/i18n/ko/invoices.json
deleted file mode 100644
index a1a2bbdc..00000000
--- a/i18n/ko/invoices.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "header": {
- "name": "모든 송장"
- },
- "fields": {
- "client": "거래처",
- "invoiceID": "송장 번호",
- "createdDate": "생성일",
- "dueDate": "기한 날짜",
- "total": "총 가격"
- },
- "status": {
- "pending": "결제 대기 중",
- "paid": "결제 완료",
- "refunded": "환급",
- "cancelled": "취소"
- },
- "btns": {
- "view": "보기",
- "edit": "수정하기",
- "markAsPaid": "결제 완료로 표시"
- }
-}
\ No newline at end of file
diff --git a/i18n/ko/messages.json b/i18n/ko/messages.json
deleted file mode 100644
index 83419055..00000000
--- a/i18n/ko/messages.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "noContact": "아무런 연락처가 없습니다",
- "noInvoice": "아무런 송장이 없습니다",
- "invoice": {
- "saved": "송장이 성공적으로 저장되었습니다",
- "updated": "송장이 성공적으로 업데이트되었습니다",
- "deleted": "송장이 성공적으로 삭제되었습니다"
- },
- "contact": {
- "saved": "연락처가 성공적으로 저장되었습니다",
- "deleted": "연락처가 성공적으로 삭제되었습니다"
- },
- "settings": {
- "saved": "모든 설정이 성공적으로 저장되었습니다"
- }
-}
\ No newline at end of file
diff --git a/i18n/ko/preview.json b/i18n/ko/preview.json
deleted file mode 100644
index 11e6cfb2..00000000
--- a/i18n/ko/preview.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "sidebar": {
- "template": "템플릿",
- "alignment": {
- "name": "정렬",
- "top": "위",
- "middle": "중간",
- "bottom": "아래"
- },
- "fontSize": "글자 크기",
- "toggle": {
- "name": "표시 설정",
- "logo": "로고",
- "symbol": "화폐 기호",
- "recipient": "받는 사람"
- },
- "accentColor": {
- "name": "강조 색상",
- "useCustom": "직접 설정"
- },
- "actions": {
- "name": "작업",
- "savePDF": "PDF로 내보내기",
- "saveConfigs": "구성 저장"
- }
- },
- "common": {
- "billedTo": "청구지",
- "chooseInvoiceToPreview": "미리 보기 할 송장을 선택하세요",
- "created": "작성일",
- "due": "기한",
- "invoice": "송장",
- "itemDescription": "품목 설명",
- "notice": "기타 사항",
- "order": "주문 번호",
- "price": "가격",
- "qty": "수량",
- "subtotal": "상품 가격",
- "total": "합계"
- }
-}
\ No newline at end of file
diff --git a/i18n/ko/settings.json b/i18n/ko/settings.json
deleted file mode 100644
index e7e42d7a..00000000
--- a/i18n/ko/settings.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "header": "설정",
- "tabs": {
- "profile": "프로필",
- "invoice": "송장",
- "general": "일반"
- },
- "fields": {
- "logo": {
- "name": "로고",
- "hint": "PNG, JPG, SVG (권장) 형식"
- },
- "taxSettings": "세금 설정",
- "template": "템플릿",
- "dateFormat": "날짜 표시 형식",
- "pdfExportDir": "PDF 내보내기 경로",
- "requiredFields": "필수 입력 항목",
- "sound": "효과음",
- "mute": "음소거",
- "autoCheckUpdate": {
- "name": "자동 업데이트 확인",
- "daily": "매일 (권장)",
- "weekly": "매주"
- },
- "currency": {
- "placement": "기호 배치",
- "afterAmount": "합계 후",
- "beforeAmount": "합계 전",
- "fraction": "소수",
- "separator": "단위 구분 기호",
- "commaDot": "쉼표, 점",
- "dotComma": "점, 쉼표",
- "spaceDot": "공백, 점"
- },
- "openPDFReader": "PDF로 내보내고 열기",
- "language": {
- "name": "언어",
- "cs": "čeština (체코어)",
- "da": "dansk (덴마크어)",
- "de": "Deutsch (독일어)",
- "el": "ελληνικά (그리스어)",
- "en": "English (영어)",
- "esES": "español (스페인어)",
- "fr": "français (프랑스어)",
- "id": "Bahasa Indonesia (인도네시아어)",
- "it": "italiano (이탈리아어)",
- "ja": "日本語 (일본어)",
- "ko": "한국어",
- "lt": "lietuvių kalba (리투아니아어)",
- "nl": "Nederlands (네덜란드어)",
- "ptBR": "português (포르투갈어, 브라질)",
- "ptPT": "português (포르투갈어)",
- "ru": "Русский язык (러시아어)",
- "th": "ภาษาไทย (태국어)",
- "tl": "Tagalog (타갈로그어, 필리핀)",
- "tr": "Türkçe (터기어)",
- "vi": "tiếng việt (베트남어)",
- "zh-CN": "중국어 (간체)",
- "zh-TW": "중국어 (번체)"
- },
- "other": "기타"
- }
-}
\ No newline at end of file
diff --git a/i18n/ko/tour.json b/i18n/ko/tour.json
deleted file mode 100644
index b5a9bf2b..00000000
--- a/i18n/ko/tour.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "actions": {
- "skip": "건너뛰기",
- "next": "다음",
- "start": "당장 시작하겠소!"
- },
- "slides": {
- "welcome": {
- "heading": "👋 반가워요!",
- "description": "Manta를 이용해주셔서 감사합니다! 겨우 3가지의 과정만으로 훌륭한 송장을 만드는 방법을 보여 드리죠."
- },
- "create": {
- "heading": "하나. 만들기",
- "description": "Manta는 유연한 인터페이스를 가지고 있죠. 단순히 필요한 칸을 찾아서 원하시는 대로 켜고 끌 수도 있습니다."
- },
- "preview": {
- "heading": "둘. 구성하기",
- "description": "Manta에서 제공하는 멋진 템플릿을 이용해서 자신의 스타일에 맞춰 구성해보세요."
- },
- "save": {
- "heading": "셋. 저장하기",
- "description": "송장이 마음에 드신가요? 나중에 사용할 수 있도록 PDF 파일로 저장하실 수도 있답니다. 뽑아서, 메일로 보내면 끝. Manta로 고객에게 깊은 인상을 심어보세요!"
- },
- "success": {
- "heading": "끝!!! ✋️",
- "description": "단지 세 과정 밖에 없다니, 너무 간단하지 않은가요? 송장을 만들기 전에 꼭 회사 프로필과 로고를 업데이트하는 것, 잊지 마세요!"
- }
- }
-}
\ No newline at end of file
diff --git a/i18n/vi/form.json b/i18n/vi/form.json
index 088f65f8..48cb52d8 100644
--- a/i18n/vi/form.json
+++ b/i18n/vi/form.json
@@ -32,7 +32,30 @@
},
"dueDate": {
"name": "Hạn thanh toán",
- "placeHolder": "Chọn ngày"
+ "placeHolder": "Chọn ngày",
+ "paymentTerms": {
+ "name": "Chọn một hạn thanh toán",
+ "net7": {
+ "label": "Net 7",
+ "description": "Thanh toán sau 7 ngày hoá đơn được tạo"
+ },
+ "net10": {
+ "label": "Net 10",
+ "description": "Thanh toán sau 10 ngày hoá đơn được tạo"
+ },
+ "net30": {
+ "label": "Net 30",
+ "description": "Thanh toán sau 30 ngày hoá đơn được tạo"
+ },
+ "net60": {
+ "label": "Net 60",
+ "description": "Thanh toán sau 60 ngày hoá đơn được tạo"
+ },
+ "net90": {
+ "label": "Net 90",
+ "description": "Thanh toán sau 90 ngày hoá đơn được tạo"
+ }
+ }
},
"tax": {
"name": "Thuế",
diff --git a/i18n/vi/settings.json b/i18n/vi/settings.json
index a4be78c3..8d207394 100644
--- a/i18n/vi/settings.json
+++ b/i18n/vi/settings.json
@@ -45,6 +45,7 @@
"id": "Tiếng Indonesia",
"it": "Tiếng Ý",
"ja": "Tiếng Nhật",
+ "ko": "Tiếng Hàn Quốc",
"lt": "Tiếng Lithuania",
"nl": "Tiếng Hà Lan",
"ptBR": "Tiếng Bồ Đào Nha, Brazil",
diff --git a/i18n/zh-CN/form.json b/i18n/zh-CN/form.json
index 04e2d273..18a9428f 100644
--- a/i18n/zh-CN/form.json
+++ b/i18n/zh-CN/form.json
@@ -32,7 +32,30 @@
},
"dueDate": {
"name": "截止日期",
- "placeHolder": "选择一个日期"
+ "placeHolder": "选择一个日期",
+ "paymentTerms": {
+ "name": "选择付款时间的条款",
+ "net7": {
+ "label": "Net 7",
+ "description": "在开票日期后 7 天内付款"
+ },
+ "net10": {
+ "label": "Net 10",
+ "description": "在开票日期后 10 天内付款"
+ },
+ "net30": {
+ "label": "Net 30",
+ "description": "在开票日期后 30 天内付款"
+ },
+ "net60": {
+ "label": "Net 60",
+ "description": "在开票日期后 60 天内付款"
+ },
+ "net90": {
+ "label": "Net 90",
+ "description": "在开票日期后 90 天内付款"
+ }
+ }
},
"tax": {
"name": "税费",
diff --git a/preview/components/sidebar/Language.jsx b/preview/components/sidebar/Language.jsx
index 7d690cb9..3ea72bd7 100644
--- a/preview/components/sidebar/Language.jsx
+++ b/preview/components/sidebar/Language.jsx
@@ -10,10 +10,12 @@ function Language({ t, language, handleInputChange, UILang }) {
{t('settings:fields:language:name', { lng: UILang })}
);