Add comprehensive i18n localization to vat-return entity
- Convert vat-return constants to i18n-compatible getter functions - Add 10 translation keys to vatReturn namespace - Localize 3 vat-return files Constant conversions: - getVatReturnReceiptTypeBtnGroup(t) - getVatReturnTargetTypeBtnGroup(t) - getVatReturnTaxBtnGroups(t) Translation keys added: - vatReturn.issuanceMonth: "발행월" / "Issue Month" - vatReturn.receiptType: "영수구분" / "Receipt Type" - vatReturn.issueTarget: "발행대상" / "Issue Target" - vatReturn.receipt, bill, general - vatReturn.differenceSettlement, refundSettlement - vatReturn.taxable, taxExempt - vatReturn.keyInMerchantError Localized files: - filter/list-filter.tsx - reference-wrap.tsx - model/contant.ts All vat-return components now support Korean/English language switching. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,19 +1,20 @@
|
|||||||
|
import { TFunction } from 'i18next';
|
||||||
import { VatReturnPayTax, VatReturnReceiptType, VatReturnTargetType } from './types';
|
import { VatReturnPayTax, VatReturnReceiptType, VatReturnTargetType } from './types';
|
||||||
|
|
||||||
export const VatReturnReceiptTypeBtnGroup = [
|
export const getVatReturnReceiptTypeBtnGroup = (t: TFunction) => [
|
||||||
{name: '전체', value: VatReturnReceiptType.ALL },
|
{name: t('transaction.constants.all'), value: VatReturnReceiptType.ALL },
|
||||||
{name: '영수', value: VatReturnReceiptType.RECEIPT },
|
{name: t('vatReturn.receipt'), value: VatReturnReceiptType.RECEIPT },
|
||||||
{name: '청구', value: VatReturnReceiptType.BILL }
|
{name: t('vatReturn.bill'), value: VatReturnReceiptType.BILL }
|
||||||
];
|
];
|
||||||
|
|
||||||
export const VatReturnTargetTypeBtnGroup = [
|
export const getVatReturnTargetTypeBtnGroup = (t: TFunction) => [
|
||||||
{name: '전체', value: VatReturnTargetType.ALL },
|
{name: t('transaction.constants.all'), value: VatReturnTargetType.ALL },
|
||||||
{name: '일반', value: VatReturnTargetType.GENERAL },
|
{name: t('vatReturn.general'), value: VatReturnTargetType.GENERAL },
|
||||||
{name: '차액정산', value: VatReturnTargetType.DIFFERENCE_COLLECTION },
|
{name: t('vatReturn.differenceSettlement'), value: VatReturnTargetType.DIFFERENCE_COLLECTION },
|
||||||
{name: '환급정산', value: VatReturnTargetType.REFUND_SETTLEMENT }
|
{name: t('vatReturn.refundSettlement'), value: VatReturnTargetType.REFUND_SETTLEMENT }
|
||||||
];
|
];
|
||||||
|
|
||||||
export const VatReturnTaxBtnGroups = [
|
export const getVatReturnTaxBtnGroups = (t: TFunction) => [
|
||||||
{name: '과세', value: VatReturnPayTax.TAX },
|
{name: t('vatReturn.taxable'), value: VatReturnPayTax.TAX },
|
||||||
{name: '면세', value: VatReturnPayTax.NOTAX },
|
{name: t('vatReturn.taxExempt'), value: VatReturnPayTax.NOTAX },
|
||||||
];
|
];
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
import { motion } from 'framer-motion';
|
import { motion } from 'framer-motion';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
import { IMAGE_ROOT } from '@/shared/constants/common';
|
import { IMAGE_ROOT } from '@/shared/constants/common';
|
||||||
import { VatReturnReceiptType, VatReturnTargetType } from '../../model/types';
|
import { VatReturnReceiptType, VatReturnTargetType } from '../../model/types';
|
||||||
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant';
|
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant';
|
||||||
import { FilterSelect } from '@/shared/ui/filter/select';
|
import { FilterSelect } from '@/shared/ui/filter/select';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
|
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
|
||||||
import { VatReturnReceiptTypeBtnGroup, VatReturnTargetTypeBtnGroup } from '../../model/contant';
|
import { getVatReturnReceiptTypeBtnGroup, getVatReturnTargetTypeBtnGroup } from '../../model/contant';
|
||||||
import { FilterCalendarMonth } from '@/shared/ui/filter/calendar-month';
|
import { FilterCalendarMonth } from '@/shared/ui/filter/calendar-month';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useStore } from '@/shared/model/store';
|
||||||
import { FilterSelectMid } from '@/shared/ui/filter/select-mid';
|
import { FilterSelectMid } from '@/shared/ui/filter/select-mid';
|
||||||
@@ -39,6 +40,7 @@ export const ListFilter = ({
|
|||||||
setReceiptType,
|
setReceiptType,
|
||||||
setTargetType
|
setTargetType
|
||||||
}: ListFilterProps) => {
|
}: ListFilterProps) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const [filterMid, setFilterMid] = useState<string>(mid);
|
const [filterMid, setFilterMid] = useState<string>(mid);
|
||||||
const [filterStartMonth, setFilterStartMonth] = useState<string>(startMonth);
|
const [filterStartMonth, setFilterStartMonth] = useState<string>(startMonth);
|
||||||
@@ -73,7 +75,7 @@ export const ListFilter = ({
|
|||||||
>
|
>
|
||||||
<div className="full-menu-container">
|
<div className="full-menu-container">
|
||||||
<div className="full-menu-header">
|
<div className="full-menu-header">
|
||||||
<div className="full-menu-title center">필터</div>
|
<div className="full-menu-title center">{t('filter.filter')}</div>
|
||||||
<div className="full-menu-actions">
|
<div className="full-menu-actions">
|
||||||
<button
|
<button
|
||||||
className="full-menu-close"
|
className="full-menu-close"
|
||||||
@@ -81,7 +83,7 @@ export const ListFilter = ({
|
|||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
src={ IMAGE_ROOT + '/ico_close.svg' }
|
src={ IMAGE_ROOT + '/ico_close.svg' }
|
||||||
alt="닫기"
|
alt={t('common.close')}
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -89,27 +91,27 @@ export const ListFilter = ({
|
|||||||
|
|
||||||
<div className="option-list pt-16">
|
<div className="option-list pt-16">
|
||||||
<FilterSelectMid
|
<FilterSelectMid
|
||||||
title='가맹점'
|
title={t('merchant.title')}
|
||||||
selectSetter={ setMid }
|
selectSetter={ setMid }
|
||||||
showType={ 'GID' }
|
showType={ 'GID' }
|
||||||
></FilterSelectMid>
|
></FilterSelectMid>
|
||||||
<FilterCalendarMonth
|
<FilterCalendarMonth
|
||||||
title='발행월'
|
title={t('vatReturn.issuanceMonth')}
|
||||||
startMonth={ filterStartMonth }
|
startMonth={ filterStartMonth }
|
||||||
endMonth={ filterEndMonth }
|
endMonth={ filterEndMonth }
|
||||||
setStartMonth={ setFilterStartMonth }
|
setStartMonth={ setFilterStartMonth }
|
||||||
setEndMonth={ setFilterEndMonth }
|
setEndMonth={ setFilterEndMonth }
|
||||||
></FilterCalendarMonth>
|
></FilterCalendarMonth>
|
||||||
<FilterButtonGroups
|
<FilterButtonGroups
|
||||||
title='영수구분'
|
title={t('vatReturn.receiptType')}
|
||||||
activeValue={ filterReceiptType }
|
activeValue={ filterReceiptType }
|
||||||
btnGroups={ VatReturnReceiptTypeBtnGroup }
|
btnGroups={ getVatReturnReceiptTypeBtnGroup(t) }
|
||||||
setter={ setFIlterReceiptType }
|
setter={ setFIlterReceiptType }
|
||||||
></FilterButtonGroups>
|
></FilterButtonGroups>
|
||||||
<FilterButtonGroups
|
<FilterButtonGroups
|
||||||
title='발행대상'
|
title={t('vatReturn.issueTarget')}
|
||||||
activeValue={ filterTargetType }
|
activeValue={ filterTargetType }
|
||||||
btnGroups={ VatReturnTargetTypeBtnGroup }
|
btnGroups={ getVatReturnTargetTypeBtnGroup(t) }
|
||||||
setter={ setFilterTargetType }
|
setter={ setFilterTargetType }
|
||||||
></FilterButtonGroups>
|
></FilterButtonGroups>
|
||||||
</div>
|
</div>
|
||||||
@@ -117,7 +119,7 @@ export const ListFilter = ({
|
|||||||
<button
|
<button
|
||||||
className="btn-50 btn-blue flex-1"
|
className="btn-50 btn-blue flex-1"
|
||||||
onClick={ onClickToSetFilter }
|
onClick={ onClickToSetFilter }
|
||||||
>적용</button>
|
>{t('filter.apply')}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { FilterSelect } from '@/shared/ui/filter/select';
|
|||||||
import { ReferenceRequestSuccess } from './reference-request-success';
|
import { ReferenceRequestSuccess } from './reference-request-success';
|
||||||
import { ReferenceRequestFail } from './reference-request-fail';
|
import { ReferenceRequestFail } from './reference-request-fail';
|
||||||
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
|
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
|
||||||
import { VatReturnTaxBtnGroups } from '../model/contant';
|
import { getVatReturnTaxBtnGroups } from '../model/contant';
|
||||||
import { VatReturnPayTax, VatReturnReferenceRequestParams, VatReturnReferenceRequestResponse } from '../model/types';
|
import { VatReturnPayTax, VatReturnReferenceRequestParams, VatReturnReferenceRequestResponse } from '../model/types';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useStore } from '@/shared/model/store';
|
||||||
import { useVatReturnReferenceRequestMutation } from '../api/use-vat-return-reference-request-mutation';
|
import { useVatReturnReferenceRequestMutation } from '../api/use-vat-return-reference-request-mutation';
|
||||||
@@ -41,7 +41,7 @@ export const ReferenceWrap = () => {
|
|||||||
vatReturnReferenceRequest(params).then((rs: VatReturnReferenceRequestResponse) => {
|
vatReturnReferenceRequest(params).then((rs: VatReturnReferenceRequestResponse) => {
|
||||||
setSuccessPageOn(true);
|
setSuccessPageOn(true);
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
setErrorMsg("[9997] 키인가맹점이 아닙니다.<br/>NICEPAY로 문의하세요.");
|
setErrorMsg(t('vatReturn.keyInMerchantError'));
|
||||||
setFailPageOn(true);
|
setFailPageOn(true);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -58,7 +58,7 @@ export const ReferenceWrap = () => {
|
|||||||
<FilterButtonGroups
|
<FilterButtonGroups
|
||||||
title={t('vatReturn.taxExemptionType')}
|
title={t('vatReturn.taxExemptionType')}
|
||||||
activeValue={ payTax }
|
activeValue={ payTax }
|
||||||
btnGroups={ VatReturnTaxBtnGroups }
|
btnGroups={ getVatReturnTaxBtnGroups(t) }
|
||||||
setter={ setPayTax }
|
setter={ setPayTax }
|
||||||
addClassName='horizon'
|
addClassName='horizon'
|
||||||
maxBtn={ 2 }
|
maxBtn={ 2 }
|
||||||
|
|||||||
@@ -848,9 +848,17 @@
|
|||||||
"issueInfo": "Issue Information",
|
"issueInfo": "Issue Information",
|
||||||
"issueTargetDate": "Issue Target Date",
|
"issueTargetDate": "Issue Target Date",
|
||||||
"issueDate": "Issue Date",
|
"issueDate": "Issue Date",
|
||||||
|
"issuanceMonth": "Issue Month",
|
||||||
"subject": "Subject",
|
"subject": "Subject",
|
||||||
"issueTarget": "Issue Target",
|
"issueTarget": "Issue Target",
|
||||||
"receiptType": "Receipt Type",
|
"receiptType": "Receipt Type",
|
||||||
|
"receipt": "Receipt",
|
||||||
|
"bill": "Bill",
|
||||||
|
"general": "General",
|
||||||
|
"differenceSettlement": "Difference Settlement",
|
||||||
|
"refundSettlement": "Refund Settlement",
|
||||||
|
"taxable": "Taxable",
|
||||||
|
"taxExempt": "Tax Exempt",
|
||||||
"supplierInfo": "Supplier Information",
|
"supplierInfo": "Supplier Information",
|
||||||
"receiverInfo": "Receiver Information",
|
"receiverInfo": "Receiver Information",
|
||||||
"taxExemptionType": "Tax/Exemption Type",
|
"taxExemptionType": "Tax/Exemption Type",
|
||||||
@@ -864,6 +872,7 @@
|
|||||||
"applicationDate": "Application Date",
|
"applicationDate": "Application Date",
|
||||||
"emailAddress": "Email Address",
|
"emailAddress": "Email Address",
|
||||||
"referenceDataNote": "Please compare with internal accounting data\nbefore using this reference material.",
|
"referenceDataNote": "Please compare with internal accounting data\nbefore using this reference material.",
|
||||||
"result": "Result"
|
"result": "Result",
|
||||||
|
"keyInMerchantError": "[9997] Not a Key-In merchant.<br/>Please contact NICEPAY."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -852,9 +852,17 @@
|
|||||||
"issueInfo": "발행 정보",
|
"issueInfo": "발행 정보",
|
||||||
"issueTargetDate": "발행대상일자",
|
"issueTargetDate": "발행대상일자",
|
||||||
"issueDate": "발행일자",
|
"issueDate": "발행일자",
|
||||||
|
"issuanceMonth": "발행월",
|
||||||
"subject": "적요",
|
"subject": "적요",
|
||||||
"issueTarget": "발행대상",
|
"issueTarget": "발행대상",
|
||||||
"receiptType": "영수구분",
|
"receiptType": "영수구분",
|
||||||
|
"receipt": "영수",
|
||||||
|
"bill": "청구",
|
||||||
|
"general": "일반",
|
||||||
|
"differenceSettlement": "차액정산",
|
||||||
|
"refundSettlement": "환급정산",
|
||||||
|
"taxable": "과세",
|
||||||
|
"taxExempt": "면세",
|
||||||
"supplierInfo": "공급자 정보",
|
"supplierInfo": "공급자 정보",
|
||||||
"receiverInfo": "공급받는 자 정보",
|
"receiverInfo": "공급받는 자 정보",
|
||||||
"taxExemptionType": "거래 과세/면세 구분",
|
"taxExemptionType": "거래 과세/면세 구분",
|
||||||
@@ -868,6 +876,7 @@
|
|||||||
"applicationDate": "신청일",
|
"applicationDate": "신청일",
|
||||||
"emailAddress": "메일주소",
|
"emailAddress": "메일주소",
|
||||||
"referenceDataNote": "참고용 자료이므로 반드시 내부 회계자료 등과\n비교 후 사용해 주세요.",
|
"referenceDataNote": "참고용 자료이므로 반드시 내부 회계자료 등과\n비교 후 사용해 주세요.",
|
||||||
"result": "결과"
|
"result": "결과",
|
||||||
|
"keyInMerchantError": "[9997] 키인가맹점이 아닙니다.<br/>NICEPAY로 문의하세요."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user