Add comprehensive i18n localization to transaction UI components
- Localize 23 transaction UI component files - Add 150+ translation keys to ko.json and en.json - Organized translations under transaction namespace: * transaction.bottomSheet - Bottom sheet modals * transaction.sections - Section titles * transaction.fields - Field labels (90+ keys) * transaction.cancel - Cancellation flows * transaction.handWrittenIssuance - Manual issuance forms * transaction.list - List actions Updated files: - Bottom sheets: escrow-mail-resend, cash-receipt-purpose-update - Sections: billing-info, part-cancel-info, detail-info, issue-info, escrow-info, important-info, payment-info, transaction-info, settlement-info, merchant-info, amount-info, cancel-bank-group, cancel-password-group - Lists: list-item, billing-list, cash-receipt-list - Cancel flows: all-cancel, part-cancel, prevent-bond - Issuance: hand-written-issuance-step1, hand-written-issuance-step2 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@ import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
||||
import { useSetOnBack } from '@/widgets/sub-layout/use-sub-layout';
|
||||
import { CashReceiptPurposeType } from '../model/types';
|
||||
import { PatternFormat } from 'react-number-format';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export interface CashReceiptHandWrittenIssuanceStep1Props {
|
||||
businessNumber?: string;
|
||||
@@ -38,19 +39,20 @@ export const CashReceiptHandWrittenIssuanceStep1 = ({
|
||||
setEmail,
|
||||
setPhoneNumber
|
||||
}: CashReceiptHandWrittenIssuanceStep1Props) => {
|
||||
const { t } = useTranslation();
|
||||
const { navigate } = useNavigate();
|
||||
|
||||
|
||||
useSetOnBack(() => {
|
||||
navigate(PATHS.transaction.cashReceipt.list);
|
||||
});
|
||||
return (
|
||||
<>
|
||||
<h2 className="issue-title">발행 정보 입력</h2>
|
||||
<h2 className="issue-title">{t('transaction.handWrittenIssuance.step1Title')}</h2>
|
||||
<div className="issue-form">
|
||||
<div className="issue-row">
|
||||
<div className="issue-label">사업자 번호</div>
|
||||
<div className="issue-label">{t('transaction.handWrittenIssuance.businessNumber')}</div>
|
||||
<div className="issue-field">
|
||||
<input
|
||||
<input
|
||||
className="error"
|
||||
type="text"
|
||||
value={ businessNumber }
|
||||
@@ -60,49 +62,49 @@ export const CashReceiptHandWrittenIssuanceStep1 = ({
|
||||
</div>
|
||||
|
||||
<div className="issue-row">
|
||||
<div className="issue-label">용도</div>
|
||||
<div className="issue-label">{t('transaction.fields.purpose')}</div>
|
||||
<div className="issue-field">
|
||||
<div className="seg-buttons">
|
||||
<button
|
||||
className={ `btn-40 ${(purposeType === CashReceiptPurposeType.INCOME_DEDUCTION)? 'btn-blue': 'btn-white'}` }
|
||||
type="button"
|
||||
onClick={ () => setPurposeType(CashReceiptPurposeType.INCOME_DEDUCTION) }
|
||||
>소득공제</button>
|
||||
>{t('transaction.handWrittenIssuance.incomeDeduction')}</button>
|
||||
<button
|
||||
className={ `btn-40 ${(purposeType === CashReceiptPurposeType.EXPENSE_PROOF)? 'btn-blue': 'btn-white'}` }
|
||||
type="button"
|
||||
onClick={ () => setPurposeType(CashReceiptPurposeType.EXPENSE_PROOF) }
|
||||
>지출증빙</button>
|
||||
>{t('transaction.handWrittenIssuance.expenseProof')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="issue-row">
|
||||
<div className="issue-label">상품명</div>
|
||||
<div className="issue-label">{t('transaction.fields.productName')}</div>
|
||||
<div className="issue-field">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="상품명"
|
||||
<input
|
||||
type="text"
|
||||
placeholder={t('transaction.handWrittenIssuance.productNamePlaceholder')}
|
||||
value={ productName }
|
||||
onChange={ (e: ChangeEvent<HTMLInputElement>) => setProductName(e.target.value) }
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="issue-row">
|
||||
<div className="issue-label">구매자</div>
|
||||
<div className="issue-label">{t('transaction.fields.buyer')}</div>
|
||||
<div className="issue-field">
|
||||
<input
|
||||
type="text"
|
||||
placeholder="구매자명"
|
||||
<input
|
||||
type="text"
|
||||
placeholder={t('transaction.handWrittenIssuance.buyerNamePlaceholder')}
|
||||
value={ buyerName }
|
||||
onChange={ (e: ChangeEvent<HTMLInputElement>) => setBuyerName(e.target.value) }
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="issue-row">
|
||||
<div className="issue-label">발행번호</div>
|
||||
<div className="issue-label">{t('transaction.fields.issueNumber')}</div>
|
||||
<div className="issue-field">
|
||||
<PatternFormat
|
||||
placeholder="사업자번호 OR 휴대폰번호"
|
||||
placeholder={t('transaction.handWrittenIssuance.issueNumberPlaceholder')}
|
||||
value={ issueNumber }
|
||||
valueIsNumericString
|
||||
format="###########"
|
||||
@@ -111,21 +113,21 @@ export const CashReceiptHandWrittenIssuanceStep1 = ({
|
||||
</div>
|
||||
</div>
|
||||
<div className="issue-row">
|
||||
<div className="issue-label">이메일 주소</div>
|
||||
<div className="issue-label">{t('account.emailAddress')}</div>
|
||||
<div className="issue-field">
|
||||
<input
|
||||
type="email"
|
||||
placeholder="TEST123@nicepay.com"
|
||||
placeholder={t('transaction.handWrittenIssuance.emailPlaceholder')}
|
||||
value={ email }
|
||||
onChange={ (e: ChangeEvent<HTMLInputElement>) => setEmail(e.target.value) }
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="issue-row">
|
||||
<div className="issue-label">전화번호</div>
|
||||
<div className="issue-label">{t('account.phoneNumber')}</div>
|
||||
<div className="issue-field">
|
||||
<PatternFormat
|
||||
placeholder="01012345678"
|
||||
placeholder={t('transaction.handWrittenIssuance.phoneNumberPlaceholder')}
|
||||
value={ phoneNumber }
|
||||
valueIsNumericString
|
||||
format="###########"
|
||||
|
||||
Reference in New Issue
Block a user