정산 및 거래 페이지 다국어화 및 통화 표기 개선

- 정산 페이지 다국어화 (정산조회, 정산내역 상세)
- 거래 페이지 다국어화 (거래내역 조회, 거래 취소, 거래내역 상세)
- 정산 엔티티 컴포넌트 다국어화 (list-wrap, list-item, amount-info-wrap)
- 정산 탭 컴포넌트 다국어화 (정산달력, 정산내역)
- 홈 화면 통화 표기 개선 (한국어: 999,999원 / 영어: ₩999,999)
- 정산 및 거래 페이지 통화 표기 개선 (prefix/suffix 동적 처리)
- 요일 번역 기능 (월요일-일요일 → Monday-Sunday)
- 번역 키 추가: settlement, transaction 네임스페이스

🤖 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-29 17:38:20 +09:00
parent f4963143aa
commit aedf5d3d8f
14 changed files with 278 additions and 144 deletions

View File

@@ -5,19 +5,21 @@ import { SettlementTab } from '@/entities/settlement/ui/settlement-tab';
import { CalendarWrap } from '@/entities/settlement/ui/calandar-wrap';
import { SettlementTabKeys } from '@/entities/settlement/model/types';
import { HeaderType } from '@/entities/common/model/types';
import {
import {
useSetHeaderTitle,
useSetHeaderType,
useSetFooterMode,
useSetOnBack
} from '@/widgets/sub-layout/use-sub-layout';
import { useTranslation } from 'react-i18next';
export const CalendarPage = () => {
const { navigate } = useNavigate();
const { t } = useTranslation();
const [activeTab, setActiveTab] = useState<SettlementTabKeys>(SettlementTabKeys.Calendar);
useSetHeaderTitle('정산조회');
useSetHeaderTitle(t('settlement.title'));
useSetHeaderType(HeaderType.LeftArrow);
useSetFooterMode(false);
useSetOnBack(() => {

View File

@@ -18,7 +18,7 @@ import {
TransactionInfo
} from '@/entities/settlement/model/types';
import {
useSetOnBack,
useSetOnBack,
useSetHeaderTitle,
useSetHeaderType,
useSetFooterMode
@@ -27,9 +27,11 @@ import { useSettlementsHistoryDetailMutation } from '@/entities/settlement/api/u
import { useSettlementsTransactionDetailMutation } from '@/entities/settlement/api/use-settlements-transaction-detail-mutation';
import { NumericFormat } from 'react-number-format';
import moment from 'moment';
import { useTranslation } from 'react-i18next';
export const DetailPage = () => {
const { navigate } = useNavigate();
const { t, i18n } = useTranslation();
const location = useLocation();
const [amountInfo, setAmountInfo] = useState<AmountInfo>();
@@ -50,9 +52,9 @@ export const DetailPage = () => {
const approvalNumber = location.state.approvalNumber;
const periodType = location.state.periodType;
const tid = location.state.tid;
useSetHeaderTitle('정산내역 상세');
useSetHeaderTitle(t('settlement.detailTitle'));
useSetHeaderType(HeaderType.RightClose);
useSetOnBack(() => {
navigate(PATHS.settlement.list);
@@ -109,29 +111,33 @@ export const DetailPage = () => {
<div className="tab-pane sub active">
<div className="option-list">
<div className="txn-detail">
{ (periodType === SettlementPeriodType.SETTLEMENT_DATE) &&
{ (periodType === SettlementPeriodType.SETTLEMENT_DATE) &&
<div className="txn-num-group">
<div className="txn-amount">
<div className="value">
{i18n.language === 'en' && <span className="unit">{t('home.currencySymbol')}</span>}
<NumericFormat
value={ settlementAmount }
value={ settlementAmount }
thousandSeparator
displayType="text"
></NumericFormat><span className="unit"></span>
></NumericFormat>
{i18n.language !== 'en' && <span className="unit">{t('home.currencyWon')}</span>}
</div>
</div>
<div className="txn-date">{ moment(settlementDate).format('YYYY.MM.DD') }</div>
</div>
}
{ (periodType === SettlementPeriodType.TRANSACTION_DATE) &&
{ (periodType === SettlementPeriodType.TRANSACTION_DATE) &&
<div className="txn-num-group">
<div className="txn-amount">
<div className="value">
{i18n.language === 'en' && <span className="unit">{t('home.currencySymbol')}</span>}
<NumericFormat
value={ transactionAmount }
value={ transactionAmount }
thousandSeparator
displayType="text"
></NumericFormat><span className="unit"></span>
></NumericFormat>
{i18n.language !== 'en' && <span className="unit">{t('home.currencyWon')}</span>}
</div>
</div>
<div className="txn-date">{ merchantName }</div>

View File

@@ -7,15 +7,17 @@ import { ListWrap } from '@/entities/settlement/ui/list-wrap';
import { SettlementTabKeys } from '@/entities/settlement/model/types';
import { FooterItemActiveKey } from '@/entities/common/model/types';
import { HeaderType } from '@/entities/common/model/types';
import {
import {
useSetHeaderTitle,
useSetHeaderType,
useSetFooterMode,
useSetOnBack
} from '@/widgets/sub-layout/use-sub-layout';
import { useTranslation } from 'react-i18next';
export const ListPage = () => {
const { navigate } = useNavigate();
const { t } = useTranslation();
const location = useLocation();
const startDate: string | undefined = location?.state?.startDate;
@@ -23,7 +25,7 @@ export const ListPage = () => {
const [activeTab, setActiveTab] = useState<SettlementTabKeys>(SettlementTabKeys.List);
useSetHeaderTitle('정산조회');
useSetHeaderTitle(t('settlement.title'));
useSetHeaderType(HeaderType.LeftArrow);
useSetFooterMode(false);
useSetOnBack(() => {