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 }) {