diff --git a/app/components/settings/General.jsx b/app/components/settings/General.jsx
index 6b598843..a6da1204 100644
--- a/app/components/settings/General.jsx
+++ b/app/components/settings/General.jsx
@@ -97,9 +97,9 @@ class General extends Component {
onChange={this.handleInputChange}
>
-
-
+
+
diff --git a/i18n/en/settings.json b/i18n/en/settings.json
index 3493dfb6..69cdd50f 100644
--- a/i18n/en/settings.json
+++ b/i18n/en/settings.json
@@ -45,6 +45,7 @@
"id": "Indonesian",
"it": "Italian",
"ja": "Japanese",
+ "ko": "Korean",
"lt": "Lithuanian",
"nl": "Dutch",
"ptBR": "Portuguese, Brazilian",
diff --git a/i18n/fr/common.json b/i18n/fr/common.json
deleted file mode 100644
index 50edceb7..00000000
--- a/i18n/fr/common.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "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
deleted file mode 100644
index 866b7b43..00000000
--- a/i18n/fr/contacts.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "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
deleted file mode 100644
index 4fa545c2..00000000
--- a/i18n/fr/dialog.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "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": {
- "title": "Devise invalide",
- "message": "Veuillez choisir une devise"
- },
- "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
deleted file mode 100644
index d56314a3..00000000
--- a/i18n/fr/form.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "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"
- },
- "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/invoices.json b/i18n/fr/invoices.json
deleted file mode 100644
index 14df954e..00000000
--- a/i18n/fr/invoices.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "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
deleted file mode 100644
index 00b3efe3..00000000
--- a/i18n/fr/messages.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "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
deleted file mode 100644
index 163f47b5..00000000
--- a/i18n/fr/preview.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "sidebar": {
- "template": "Modèle",
- "alignment": {
- "name": "Alignement",
- "top": "Haut",
- "middle": "Milieu",
- "bottom": "Bas"
- },
- "fontSize": "Taille du texte",
- "toggle": {
- "name": "Activer",
- "logo": "Logo",
- "symbol": "Symbole",
- "recipient": "Destinataire"
- },
- "accentColor": {
- "name": "Couleur secondaire",
- "useCustom": "Couleur personnalisée"
- },
- "actions": {
- "name": "Actions",
- "savePDF": "Exporter en PDF"
- }
- },
- "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
deleted file mode 100644
index 954b9988..00000000
--- a/i18n/fr/settings.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "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": "Dossier d'export PDF",
- "requiredFields": "Champs Requis",
- "sound": "Son",
- "mute": "Rendre 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": "Space & Virgule"
- },
- "openPDFReader": "Ouvrir le fichier PDF après l'export",
- "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",
- "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
deleted file mode 100644
index 62bbb9ef..00000000
--- a/i18n/fr/tour.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "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 5d5cf961..bcc53055 100644
--- a/i18n/i18n.js
+++ b/i18n/i18n.js
@@ -7,39 +7,34 @@ const isDev = require('electron-is-dev');
const moment = require('moment');
// Language Files
-import fr from './fr/index.js';
-import en from './en/index.js';
-import vi from './vi/index.js';
+import en from './en';
+import ko from './ko';
+import vi from './vi';
+import zhCN from './zh-CN';
i18n.use(reactI18nextModule).init({
lng: defaultLanguage,
fallbackLng: 'en',
debug: isDev,
- // ns: ['form', 'common', 'invoices'],
defaultNS: 'form',
resources: {
en,
- fr,
+ ko,
vi,
+ "zh-CN": zhCN
},
interpolation: {
function(value, format, lng) {
- if (format === 'uppercase') return value.toUpperCase();
if (value instanceof Date) return moment(value).format(format);
return value;
},
},
react: {
wait: false,
- bindI18n: 'languageChanged loaded',
- bindStore: 'added removed',
- nsMode: 'default',
+ bindI18n: false,
+ bindStore: false,
+ nsMode: false,
},
});
-// Keep the language on moment in sync with i18next
-i18n.on('languageChanged', lang => {
- moment.locale(lang);
-});
-
export default i18n;
diff --git a/i18n/ko/common.json b/i18n/ko/common.json
new file mode 100644
index 00000000..d01abad0
--- /dev/null
+++ b/i18n/ko/common.json
@@ -0,0 +1,16 @@
+{
+ "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
new file mode 100644
index 00000000..797d10dd
--- /dev/null
+++ b/i18n/ko/contacts.json
@@ -0,0 +1,9 @@
+{
+ "header": "모든 연락처",
+ "fields": {
+ "contact": "연락처",
+ "email": "이메일",
+ "phone": "휴대전화",
+ "actions": "작업"
+ }
+}
\ No newline at end of file
diff --git a/i18n/ko/dialog.json b/i18n/ko/dialog.json
new file mode 100644
index 00000000..fb8e699b
--- /dev/null
+++ b/i18n/ko/dialog.json
@@ -0,0 +1,89 @@
+{
+ "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
new file mode 100644
index 00000000..189c6a75
--- /dev/null
+++ b/i18n/ko/form.json
@@ -0,0 +1,46 @@
+{
+ "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/fr/index.js b/i18n/ko/index.js
similarity index 100%
rename from i18n/fr/index.js
rename to i18n/ko/index.js
diff --git a/i18n/ko/invoices.json b/i18n/ko/invoices.json
new file mode 100644
index 00000000..a1a2bbdc
--- /dev/null
+++ b/i18n/ko/invoices.json
@@ -0,0 +1,23 @@
+{
+ "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
new file mode 100644
index 00000000..83419055
--- /dev/null
+++ b/i18n/ko/messages.json
@@ -0,0 +1,16 @@
+{
+ "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
new file mode 100644
index 00000000..11e6cfb2
--- /dev/null
+++ b/i18n/ko/preview.json
@@ -0,0 +1,41 @@
+{
+ "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
new file mode 100644
index 00000000..e7e42d7a
--- /dev/null
+++ b/i18n/ko/settings.json
@@ -0,0 +1,63 @@
+{
+ "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
new file mode 100644
index 00000000..b5a9bf2b
--- /dev/null
+++ b/i18n/ko/tour.json
@@ -0,0 +1,29 @@
+{
+ "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/dialog.json b/i18n/vi/dialog.json
index 1387097f..b3e369bc 100644
--- a/i18n/vi/dialog.json
+++ b/i18n/vi/dialog.json
@@ -68,8 +68,10 @@
"message": "Hãy chọn một ngày"
},
"currency": {
- "title": "Đơn vị tiền không hợp lệ",
- "message": "Vui lòng chọn một loại tiền tệ"
+ "fraction": {
+ "title": "Phân số không hợp lệ",
+ "message": "Phân số thập phân phải bằng hoặc lớn hơn 0"
+ }
},
"discount": {
"title": "Khuyến mãi không hợp lệ",
diff --git a/i18n/vi/preview.json b/i18n/vi/preview.json
index f1714b9d..b1943f00 100644
--- a/i18n/vi/preview.json
+++ b/i18n/vi/preview.json
@@ -9,7 +9,7 @@
},
"fontSize": "Cỡ chữ",
"toggle": {
- "name": "Ẩn Hiện",
+ "name": "Bật\/tắt",
"logo": "Logo",
"symbol": "Biểu tượng",
"recipient": "Người nhận"
@@ -20,7 +20,8 @@
},
"actions": {
"name": "Tác vụ",
- "savePDF": "Xuất ra PDF"
+ "savePDF": "Xuất ra PDF",
+ "saveConfigs": "Lưu Tuỳ Chỉnh"
}
},
"common": {
diff --git a/i18n/vi/settings.json b/i18n/vi/settings.json
index c8039ca6..a4be78c3 100644
--- a/i18n/vi/settings.json
+++ b/i18n/vi/settings.json
@@ -27,10 +27,10 @@
"afterAmount": "Sau số tiền",
"beforeAmount": "Trước số tiền",
"fraction": "Phân số thập phân",
- "separator": "Dấu phân cách",
- "commaDot": "Phẩy & Chấm",
- "dotComma": "Chấm & Phẩy",
- "spaceDot": "Dấu cách & Chấm"
+ "separator": "Dấu ngăn cách",
+ "commaDot": "Dấu phẩy & chấm",
+ "dotComma": "Dấu chấm & phẩy",
+ "spaceDot": "Dấu cách và chấm"
},
"openPDFReader": "Mở file PDF sau khi xuất",
"language": {
@@ -38,23 +38,23 @@
"cs": "Tiếng Séc",
"da": "Tiếng Đan Mạch",
"de": "Tiếng Đức",
- "el": "Tiếng Hi Lạp",
+ "el": "Tiếng Hy Lạp",
"en": "Tiếng Anh",
- "esES": "Tiếng Tây Ban Nha",
+ "esES": "Spanish",
"fr": "Tiếng Pháp",
"id": "Tiếng Indonesia",
"it": "Tiếng Ý",
"ja": "Tiếng Nhật",
"lt": "Tiếng Lithuania",
"nl": "Tiếng Hà Lan",
- "ptBR": "Tiếng Bồ Đào Nha (Brazil)",
+ "ptBR": "Tiếng Bồ Đào Nha, Brazil",
"ptPT": "Tiếng Bồ Đào Nha",
"ru": "Tiếng Nga",
"th": "Tiếng Thái",
- "tl": "Tiếng Philippines",
+ "tl": "Tiếng Tagalog, Philippines",
"tr": "Tiếng Thổ Nhĩ Kỳ",
"vi": "Tiếng Việt",
- "zh-CN": "Tiếng Trung (Giản Thể)",
+ "zh-CN": "Tiếng Trung (Giản thể)",
"zh-TW": "Tiếng Trung (Phồn Thể)"
},
"other": "Khác"
diff --git a/i18n/zh-CN/common.json b/i18n/zh-CN/common.json
new file mode 100644
index 00000000..d40c07e2
--- /dev/null
+++ b/i18n/zh-CN/common.json
@@ -0,0 +1,16 @@
+{
+ "fields": {
+ "fullname": "完整姓名",
+ "company": "公司",
+ "address": "地址",
+ "email": "电子邮件",
+ "phone": "电话号码",
+ "website": "网站"
+ },
+ "save": "保存",
+ "amount": "金额",
+ "default": "默认",
+ "saveAsDefault": "保存为默认?",
+ "yes": "是",
+ "noThanks": "不,谢谢"
+}
\ No newline at end of file
diff --git a/i18n/zh-CN/contacts.json b/i18n/zh-CN/contacts.json
new file mode 100644
index 00000000..93284d08
--- /dev/null
+++ b/i18n/zh-CN/contacts.json
@@ -0,0 +1,9 @@
+{
+ "header": "所有联系人",
+ "fields": {
+ "contact": "联系人",
+ "email": "电子邮件",
+ "phone": "电话",
+ "actions": "操作"
+ }
+}
\ No newline at end of file
diff --git a/i18n/zh-CN/dialog.json b/i18n/zh-CN/dialog.json
new file mode 100644
index 00000000..3c141ee2
--- /dev/null
+++ b/i18n/zh-CN/dialog.json
@@ -0,0 +1,89 @@
+{
+ "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": "价格必须大于零"
+ },
+ "qtyZero": {
+ "title": "无效的数量",
+ "message": "数量必须大于零"
+ }
+ },
+ "dueDate": {
+ "title": "无效的截止日期",
+ "message": "请选择一个日期"
+ },
+ "currency": {
+ "fraction": {
+ "title": "无效的分数",
+ "message": "小数必须大于等于零"
+ }
+ },
+ "discount": {
+ "title": "无效的折扣",
+ "message": "打折比例必须大于零"
+ },
+ "tax": {
+ "title": "无效的税费",
+ "message": "税率必须大于零"
+ },
+ "note": {
+ "title": "无效的备注",
+ "message": "备注内容不能为空"
+ }
+ }
+}
\ No newline at end of file
diff --git a/i18n/zh-CN/form.json b/i18n/zh-CN/form.json
new file mode 100644
index 00000000..04e2d273
--- /dev/null
+++ b/i18n/zh-CN/form.json
@@ -0,0 +1,46 @@
+{
+ "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/zh-CN/index.js b/i18n/zh-CN/index.js
new file mode 100644
index 00000000..880d6014
--- /dev/null
+++ b/i18n/zh-CN/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/zh-CN/invoices.json b/i18n/zh-CN/invoices.json
new file mode 100644
index 00000000..1af782aa
--- /dev/null
+++ b/i18n/zh-CN/invoices.json
@@ -0,0 +1,23 @@
+{
+ "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/zh-CN/messages.json b/i18n/zh-CN/messages.json
new file mode 100644
index 00000000..9280c76b
--- /dev/null
+++ b/i18n/zh-CN/messages.json
@@ -0,0 +1,16 @@
+{
+ "noContact": "你还没有任何联系人",
+ "noInvoice": "你还没有创建过任何发票",
+ "invoice": {
+ "saved": "已成功保存发票",
+ "updated": "已成功更新发票",
+ "deleted": "已成功删除发票"
+ },
+ "contact": {
+ "saved": "已成功保存联系人",
+ "deleted": "已成功删除联系人"
+ },
+ "settings": {
+ "saved": "已成功保存所有的设置"
+ }
+}
\ No newline at end of file
diff --git a/i18n/zh-CN/preview.json b/i18n/zh-CN/preview.json
new file mode 100644
index 00000000..8128e0cc
--- /dev/null
+++ b/i18n/zh-CN/preview.json
@@ -0,0 +1,41 @@
+{
+ "sidebar": {
+ "template": "模板",
+ "alignment": {
+ "name": "对齐方式",
+ "top": "顶部",
+ "middle": "中部",
+ "bottom": "底部"
+ },
+ "fontSize": "字体大小",
+ "toggle": {
+ "name": "显示选项",
+ "logo": "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/zh-CN/settings.json b/i18n/zh-CN/settings.json
new file mode 100644
index 00000000..5e91c08b
--- /dev/null
+++ b/i18n/zh-CN/settings.json
@@ -0,0 +1,63 @@
+{
+ "header": "设置",
+ "tabs": {
+ "profile": "个人资料",
+ "invoice": "发票",
+ "general": "常规设置"
+ },
+ "fields": {
+ "logo": {
+ "name": "Logo",
+ "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": "捷克文",
+ "da": "丹麦文",
+ "de": "德语",
+ "el": "希腊文",
+ "en": "英语",
+ "esES": "西班牙文",
+ "fr": "法语",
+ "id": "印度尼西亚文",
+ "it": "意大利文",
+ "ja": "日文",
+ "ko": "朝鲜语",
+ "lt": "立陶宛文",
+ "nl": "荷兰文",
+ "ptBR": "葡萄牙文(巴西)",
+ "ptPT": "葡萄牙文",
+ "ru": "俄文",
+ "th": "泰文",
+ "tl": "他加禄文(菲律宾)",
+ "tr": "土耳其文",
+ "vi": "越南语",
+ "zh-CN": "中文(简体)",
+ "zh-TW": "中文(繁体)"
+ },
+ "other": "其他"
+ }
+}
\ No newline at end of file
diff --git a/i18n/zh-CN/tour.json b/i18n/zh-CN/tour.json
new file mode 100644
index 00000000..a1f8ec2a
--- /dev/null
+++ b/i18n/zh-CN/tour.json
@@ -0,0 +1,29 @@
+{
+ "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": "都好了~ 利用 Manta,简单 3 步就能创建精美的发票,正式使用前请记得更新公司 logo 和简介。"
+ }
+ }
+}
\ No newline at end of file
diff --git a/preview/components/sidebar/Language.jsx b/preview/components/sidebar/Language.jsx
index 843100f6..7d690cb9 100644
--- a/preview/components/sidebar/Language.jsx
+++ b/preview/components/sidebar/Language.jsx
@@ -11,8 +11,7 @@ function Language({ t, language, handleInputChange, UILang }) {