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';
|
||||
|
||||
export const VatReturnReceiptTypeBtnGroup = [
|
||||
{name: '전체', value: VatReturnReceiptType.ALL },
|
||||
{name: '영수', value: VatReturnReceiptType.RECEIPT },
|
||||
{name: '청구', value: VatReturnReceiptType.BILL }
|
||||
export const getVatReturnReceiptTypeBtnGroup = (t: TFunction) => [
|
||||
{name: t('transaction.constants.all'), value: VatReturnReceiptType.ALL },
|
||||
{name: t('vatReturn.receipt'), value: VatReturnReceiptType.RECEIPT },
|
||||
{name: t('vatReturn.bill'), value: VatReturnReceiptType.BILL }
|
||||
];
|
||||
|
||||
export const VatReturnTargetTypeBtnGroup = [
|
||||
{name: '전체', value: VatReturnTargetType.ALL },
|
||||
{name: '일반', value: VatReturnTargetType.GENERAL },
|
||||
{name: '차액정산', value: VatReturnTargetType.DIFFERENCE_COLLECTION },
|
||||
{name: '환급정산', value: VatReturnTargetType.REFUND_SETTLEMENT }
|
||||
export const getVatReturnTargetTypeBtnGroup = (t: TFunction) => [
|
||||
{name: t('transaction.constants.all'), value: VatReturnTargetType.ALL },
|
||||
{name: t('vatReturn.general'), value: VatReturnTargetType.GENERAL },
|
||||
{name: t('vatReturn.differenceSettlement'), value: VatReturnTargetType.DIFFERENCE_COLLECTION },
|
||||
{name: t('vatReturn.refundSettlement'), value: VatReturnTargetType.REFUND_SETTLEMENT }
|
||||
];
|
||||
|
||||
export const VatReturnTaxBtnGroups = [
|
||||
{name: '과세', value: VatReturnPayTax.TAX },
|
||||
{name: '면세', value: VatReturnPayTax.NOTAX },
|
||||
export const getVatReturnTaxBtnGroups = (t: TFunction) => [
|
||||
{name: t('vatReturn.taxable'), value: VatReturnPayTax.TAX },
|
||||
{name: t('vatReturn.taxExempt'), value: VatReturnPayTax.NOTAX },
|
||||
];
|
||||
@@ -1,11 +1,12 @@
|
||||
import { motion } from 'framer-motion';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { IMAGE_ROOT } from '@/shared/constants/common';
|
||||
import { VatReturnReceiptType, VatReturnTargetType } from '../../model/types';
|
||||
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant';
|
||||
import { FilterSelect } from '@/shared/ui/filter/select';
|
||||
import { useState } from 'react';
|
||||
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 { useStore } from '@/shared/model/store';
|
||||
import { FilterSelectMid } from '@/shared/ui/filter/select-mid';
|
||||
@@ -39,13 +40,14 @@ export const ListFilter = ({
|
||||
setReceiptType,
|
||||
setTargetType
|
||||
}: ListFilterProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const [filterMid, setFilterMid] = useState<string>(mid);
|
||||
const [filterStartMonth, setFilterStartMonth] = useState<string>(startMonth);
|
||||
const [filterEndMonth, setFilterEndMonth] = useState<string>(endMonth);
|
||||
const [filterReceiptType, setFIlterReceiptType] = useState<VatReturnReceiptType>(receiptType);
|
||||
const [filterTargetType, setFilterTargetType] = useState<VatReturnTargetType>(targetType);
|
||||
|
||||
|
||||
const midOptions = useStore.getState().UserStore.selectOptionsMids;
|
||||
|
||||
const onClickToClose = () => {
|
||||
@@ -73,51 +75,51 @@ export const ListFilter = ({
|
||||
>
|
||||
<div className="full-menu-container">
|
||||
<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">
|
||||
<button
|
||||
<button
|
||||
className="full-menu-close"
|
||||
onClick={ () => onClickToClose() }
|
||||
>
|
||||
<img
|
||||
<img
|
||||
src={ IMAGE_ROOT + '/ico_close.svg' }
|
||||
alt="닫기"
|
||||
alt={t('common.close')}
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="option-list pt-16">
|
||||
<FilterSelectMid
|
||||
title='가맹점'
|
||||
title={t('merchant.title')}
|
||||
selectSetter={ setMid }
|
||||
showType={ 'GID' }
|
||||
></FilterSelectMid>
|
||||
<FilterCalendarMonth
|
||||
title='발행월'
|
||||
title={t('vatReturn.issuanceMonth')}
|
||||
startMonth={ filterStartMonth }
|
||||
endMonth={ filterEndMonth }
|
||||
setStartMonth={ setFilterStartMonth }
|
||||
setEndMonth={ setFilterEndMonth }
|
||||
></FilterCalendarMonth>
|
||||
<FilterButtonGroups
|
||||
title='영수구분'
|
||||
title={t('vatReturn.receiptType')}
|
||||
activeValue={ filterReceiptType }
|
||||
btnGroups={ VatReturnReceiptTypeBtnGroup }
|
||||
btnGroups={ getVatReturnReceiptTypeBtnGroup(t) }
|
||||
setter={ setFIlterReceiptType }
|
||||
></FilterButtonGroups>
|
||||
<FilterButtonGroups
|
||||
title='발행대상'
|
||||
title={t('vatReturn.issueTarget')}
|
||||
activeValue={ filterTargetType }
|
||||
btnGroups={ VatReturnTargetTypeBtnGroup }
|
||||
btnGroups={ getVatReturnTargetTypeBtnGroup(t) }
|
||||
setter={ setFilterTargetType }
|
||||
></FilterButtonGroups>
|
||||
</div>
|
||||
<div className="apply-row">
|
||||
<button
|
||||
<button
|
||||
className="btn-50 btn-blue flex-1"
|
||||
onClick={ onClickToSetFilter }
|
||||
>적용</button>
|
||||
>{t('filter.apply')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
@@ -6,7 +6,7 @@ import { FilterSelect } from '@/shared/ui/filter/select';
|
||||
import { ReferenceRequestSuccess } from './reference-request-success';
|
||||
import { ReferenceRequestFail } from './reference-request-fail';
|
||||
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 { useStore } from '@/shared/model/store';
|
||||
import { useVatReturnReferenceRequestMutation } from '../api/use-vat-return-reference-request-mutation';
|
||||
@@ -41,7 +41,7 @@ export const ReferenceWrap = () => {
|
||||
vatReturnReferenceRequest(params).then((rs: VatReturnReferenceRequestResponse) => {
|
||||
setSuccessPageOn(true);
|
||||
}).catch((error) => {
|
||||
setErrorMsg("[9997] 키인가맹점이 아닙니다.<br/>NICEPAY로 문의하세요.");
|
||||
setErrorMsg(t('vatReturn.keyInMerchantError'));
|
||||
setFailPageOn(true);
|
||||
});
|
||||
};
|
||||
@@ -58,7 +58,7 @@ export const ReferenceWrap = () => {
|
||||
<FilterButtonGroups
|
||||
title={t('vatReturn.taxExemptionType')}
|
||||
activeValue={ payTax }
|
||||
btnGroups={ VatReturnTaxBtnGroups }
|
||||
btnGroups={ getVatReturnTaxBtnGroups(t) }
|
||||
setter={ setPayTax }
|
||||
addClassName='horizon'
|
||||
maxBtn={ 2 }
|
||||
|
||||
Reference in New Issue
Block a user