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:
Jay Sheen
2025-10-30 17:54:43 +09:00
parent 5c5b2069f8
commit e60fe0f014
5 changed files with 53 additions and 32 deletions

View File

@@ -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 },
];

View File

@@ -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>

View File

@@ -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 }