알림톡 상세 및 설정 페이지 다국어 지원 추가

알림톡 상세 페이지와 설정 페이지에 대한 다국어 지원을 추가했습니다.

변경사항:
- 상세 페이지: 페이지 타이틀, 거래 정보 레이블 다국어화
- 설정 페이지: 페이지 타이틀, 안내 문구, 폼 레이블, 서비스 종류, 버튼, 메시지 다국어화

번역 키 추가:
- detailTitle: 알림톡 발송 상세 / Alimtalk Send Detail
- transactionInfo: 거래 정보 / Transaction Information
- serviceName, sendKind, buyerName, paymentService, notificationDivision, sendDivision
- settingNotice1, settingNotice2: 설정 안내 문구
- merchant, sendToMerchant, sendToCustomer
- 서비스 종류: creditCardApproval, creditCardCancel, bankTransferApproval, bankTransferCancel, virtualAccountDepositRequest, virtualAccountDepositComplete, virtualAccountRefund
- saveSuccess, saveFailed, unknownError

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jay Sheen
2025-11-03 17:17:40 +09:00
parent 8ee78fb7b2
commit 6b4e963fe8
3 changed files with 51 additions and 26 deletions

View File

@@ -1056,6 +1056,7 @@
}, },
"alimtalk": { "alimtalk": {
"title": "Alimtalk Payment Notification", "title": "Alimtalk Payment Notification",
"detailTitle": "Alimtalk Send Detail",
"buyer": "Buyer", "buyer": "Buyer",
"depositRequest": "Deposit Request", "depositRequest": "Deposit Request",
"depositComplete": "Deposit Complete", "depositComplete": "Deposit Complete",
@@ -1065,7 +1066,29 @@
"notificationCategory": "Notification Category", "notificationCategory": "Notification Category",
"sendType": "Send Type", "sendType": "Send Type",
"sendCategory": "Send Category", "sendCategory": "Send Category",
"serviceSetting": "Service Settings" "serviceSetting": "Service Settings",
"transactionInfo": "Transaction Information",
"serviceName": "Service Name",
"sendKind": "Send Type",
"buyerName": "Buyer Name",
"paymentService": "Payment Service",
"notificationDivision": "Notification Division",
"sendDivision": "Send Division",
"settingNotice1": "You can set the recipients for Alimtalk notifications.",
"settingNotice2": "Please configure the recipients and types for Alimtalk notifications.",
"merchant": "Merchant",
"sendToMerchant": "Send to Merchant",
"sendToCustomer": "Send to Customer",
"creditCardApproval": "Credit Card (Approval)",
"creditCardCancel": "Credit Card (Cancel)",
"bankTransferApproval": "Bank Transfer (Approval)",
"bankTransferCancel": "Bank Transfer (Cancel)",
"virtualAccountDepositRequest": "Virtual Account (Deposit Request)",
"virtualAccountDepositComplete": "Virtual Account (Deposit Complete)",
"virtualAccountRefund": "Virtual Account (Refund)",
"saveSuccess": "Saved successfully.",
"saveFailed": "Save failed.",
"unknownError": "Unknown error"
}, },
"payout": { "payout": {
"title": "Payout", "title": "Payout",

View File

@@ -38,7 +38,7 @@ export const AlimtalkDetailPage = () => {
}); });
}; };
useSetHeaderTitle('알림톡 발송 상세'); useSetHeaderTitle(t('additionalService.alimtalk.detailTitle'));
useSetHeaderType(HeaderType.LeftArrow); useSetHeaderType(HeaderType.LeftArrow);
useSetFooterMode(false); useSetFooterMode(false);
useSetOnBack(() => { useSetOnBack(() => {
@@ -67,7 +67,7 @@ export const AlimtalkDetailPage = () => {
</div> </div>
<div className="detail-divider"></div> <div className="detail-divider"></div>
<div className="pay-detail"> <div className="pay-detail">
<div className="detail-title"> </div> <div className="detail-title">{t('additionalService.alimtalk.transactionInfo')}</div>
<ul className="kv-list"> <ul className="kv-list">
<li className="kv-row"> <li className="kv-row">
<span className="k">MID</span> <span className="k">MID</span>
@@ -78,27 +78,27 @@ export const AlimtalkDetailPage = () => {
<span className="v">{ detail?.tid }</span> <span className="v">{ detail?.tid }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"></span> <span className="k">{t('additionalService.alimtalk.serviceName')}</span>
<span className="v">{ detail?.extensionServiceName }</span> <span className="v">{ detail?.extensionServiceName }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"> </span> <span className="k">{t('additionalService.alimtalk.sendKind')}</span>
<span className="v">{ getAlimtalkSendTypeText(t)(detail?.sendType) }</span> <span className="v">{ getAlimtalkSendTypeText(t)(detail?.sendType) }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"></span> <span className="k">{t('additionalService.alimtalk.buyerName')}</span>
<span className="v">{detail?.receiverName }</span> <span className="v">{detail?.receiverName }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"></span> <span className="k">{t('additionalService.alimtalk.paymentService')}</span>
<span className="v">{ getAlimtalkServiceCodeText(t)(detail?.serviceCode) }</span> <span className="v">{ getAlimtalkServiceCodeText(t)(detail?.serviceCode) }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"></span> <span className="k">{t('additionalService.alimtalk.notificationDivision')}</span>
<span className="v">{ getAlimtalkAlimClText(t)(detail?.alimCl) }</span> <span className="v">{ getAlimtalkAlimClText(t)(detail?.alimCl) }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"></span> <span className="k">{t('additionalService.alimtalk.sendDivision')}</span>
<span className="v">{ getAlimtalkSendClTypeText(t)(detail?.sendCl) }</span> <span className="v">{ getAlimtalkSendClTypeText(t)(detail?.sendCl) }</span>
</li> </li>
</ul> </ul>

View File

@@ -23,8 +23,10 @@ import { useEffect, useState } from 'react';
import { AlimTalkSettingServiceRow } from '@/entities/additional-service/ui/alimtalk/setting-service-row'; import { AlimTalkSettingServiceRow } from '@/entities/additional-service/ui/alimtalk/setting-service-row';
import { useStore } from '@/shared/model/store'; import { useStore } from '@/shared/model/store';
import { snackBar } from '@/shared/lib'; import { snackBar } from '@/shared/lib';
import { useTranslation } from 'react-i18next';
export const AlimtalkSettingPage = () => { export const AlimtalkSettingPage = () => {
const { t } = useTranslation();
const { navigate } = useNavigate(); const { navigate } = useNavigate();
const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids; const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids;
const userMid = useStore.getState().UserStore.mid; const userMid = useStore.getState().UserStore.mid;
@@ -104,15 +106,15 @@ export const AlimtalkSettingPage = () => {
}; };
alimtalkSettingSave(params) alimtalkSettingSave(params)
.then((rs) => { .then((rs) => {
snackBar("저장을 성공하였습니다."); snackBar(t('additionalService.alimtalk.saveSuccess'));
}) })
.catch((error) => { .catch((error) => {
const failReason = error?.response?.data?.message || error?.message || "알 수 없는 오류"; const failReason = error?.response?.data?.message || error?.message || t('additionalService.alimtalk.unknownError');
snackBar(`[실패] ${failReason}`); snackBar(`[${t('common.failed')}] ${failReason}`);
}); });
}; };
useSetHeaderTitle('알림톡 결제통보'); useSetHeaderTitle(t('additionalService.alimtalk.title'));
useSetHeaderType(HeaderType.LeftArrow); useSetHeaderType(HeaderType.LeftArrow);
useSetFooterMode(false); useSetFooterMode(false);
useSetOnBack(() => { useSetOnBack(() => {
@@ -150,12 +152,12 @@ export const AlimtalkSettingPage = () => {
<div className="option-list"> <div className="option-list">
<div className="service-settings"> <div className="service-settings">
<div className="service-notice"> <div className="service-notice">
<div> .</div> <div>{t('additionalService.alimtalk.settingNotice1')}</div>
<div> .</div> <div>{t('additionalService.alimtalk.settingNotice2')}</div>
</div> </div>
<div className="service-merchant"> <div className="service-merchant">
<div className="service-title"></div> <div className="service-title">{t('additionalService.alimtalk.merchant')}</div>
<div className="service-select"> <div className="service-select">
<select <select
value={mid} value={mid}
@@ -175,56 +177,56 @@ export const AlimtalkSettingPage = () => {
<div className="service-section"> <div className="service-section">
<div className="service-row align-right"> <div className="service-row align-right">
<span> </span> <span>{t('additionalService.alimtalk.sendToMerchant')}</span>
<span> </span> <span>{t('additionalService.alimtalk.sendToCustomer')}</span>
</div> </div>
</div> </div>
<div className="service-section"> <div className="service-section">
<AlimTalkSettingServiceRow <AlimTalkSettingServiceRow
title='신용카드(승인)' title={t('additionalService.alimtalk.creditCardApproval')}
merchantFlag={merchantCardApprovalFlag} merchantFlag={merchantCardApprovalFlag}
userFlag={userCardApprovalFlag} userFlag={userCardApprovalFlag}
setMerchantFlag={setMerchantCardApprovalFlag} setMerchantFlag={setMerchantCardApprovalFlag}
setUserFlag={setUserCardApprovalFlag} setUserFlag={setUserCardApprovalFlag}
></AlimTalkSettingServiceRow> ></AlimTalkSettingServiceRow>
<AlimTalkSettingServiceRow <AlimTalkSettingServiceRow
title='신용카드(취소)' title={t('additionalService.alimtalk.creditCardCancel')}
merchantFlag={merchantCardCancelFlag} merchantFlag={merchantCardCancelFlag}
userFlag={userCardCancelFlag} userFlag={userCardCancelFlag}
setMerchantFlag={setMerchantCardCancelFlag} setMerchantFlag={setMerchantCardCancelFlag}
setUserFlag={setUserCardCancelFlag} setUserFlag={setUserCardCancelFlag}
></AlimTalkSettingServiceRow> ></AlimTalkSettingServiceRow>
<AlimTalkSettingServiceRow <AlimTalkSettingServiceRow
title='계좌이체(승인)' title={t('additionalService.alimtalk.bankTransferApproval')}
merchantFlag={merchantBankApprovalFlag} merchantFlag={merchantBankApprovalFlag}
userFlag={userBankApprovalFlag} userFlag={userBankApprovalFlag}
setMerchantFlag={setMerchantBankApprovalFlag} setMerchantFlag={setMerchantBankApprovalFlag}
setUserFlag={setUserBankApprovalFlag} setUserFlag={setUserBankApprovalFlag}
></AlimTalkSettingServiceRow> ></AlimTalkSettingServiceRow>
<AlimTalkSettingServiceRow <AlimTalkSettingServiceRow
title='계좌이체(취소)' title={t('additionalService.alimtalk.bankTransferCancel')}
merchantFlag={merchantBankCancelFlag} merchantFlag={merchantBankCancelFlag}
userFlag={userBankCancelFlag} userFlag={userBankCancelFlag}
setMerchantFlag={setMerchantBankCancelFlag} setMerchantFlag={setMerchantBankCancelFlag}
setUserFlag={setUserBankCancelFlag} setUserFlag={setUserBankCancelFlag}
></AlimTalkSettingServiceRow> ></AlimTalkSettingServiceRow>
<AlimTalkSettingServiceRow <AlimTalkSettingServiceRow
title='가상계좌(입금요청)' title={t('additionalService.alimtalk.virtualAccountDepositRequest')}
merchantFlag={merchantVirtureAccountDepositRequestFlag} merchantFlag={merchantVirtureAccountDepositRequestFlag}
userFlag={userVirtureAccountDepositRequestFlag} userFlag={userVirtureAccountDepositRequestFlag}
setMerchantFlag={setMerchantVirtureAccountDepositRequestFlag} setMerchantFlag={setMerchantVirtureAccountDepositRequestFlag}
setUserFlag={setUserVirtureAccountDepositRequestFlag} setUserFlag={setUserVirtureAccountDepositRequestFlag}
></AlimTalkSettingServiceRow> ></AlimTalkSettingServiceRow>
<AlimTalkSettingServiceRow <AlimTalkSettingServiceRow
title='가상계좌(입금완료)' title={t('additionalService.alimtalk.virtualAccountDepositComplete')}
merchantFlag={merchantVirtureAccountDepositCompleteFlag} merchantFlag={merchantVirtureAccountDepositCompleteFlag}
userFlag={userVirtureAccountDepositCompleteFlag} userFlag={userVirtureAccountDepositCompleteFlag}
setMerchantFlag={setMerchantVirtureAccountDepositCompleteFlag} setMerchantFlag={setMerchantVirtureAccountDepositCompleteFlag}
setUserFlag={setUserVirtureAccountDepositCompleteFlag} setUserFlag={setUserVirtureAccountDepositCompleteFlag}
></AlimTalkSettingServiceRow> ></AlimTalkSettingServiceRow>
<AlimTalkSettingServiceRow <AlimTalkSettingServiceRow
title='가상계좌(환불)' title={t('additionalService.alimtalk.virtualAccountRefund')}
merchantFlag={merchantVirtureAccountRefundFlag} merchantFlag={merchantVirtureAccountRefundFlag}
userFlag={userVirtureAccountRefundFlag} userFlag={userVirtureAccountRefundFlag}
setMerchantFlag={setMerchantVirtureAccountRefundFlag} setMerchantFlag={setMerchantVirtureAccountRefundFlag}
@@ -237,7 +239,7 @@ export const AlimtalkSettingPage = () => {
<button <button
className="btn-50 btn-blue flex-1" className="btn-50 btn-blue flex-1"
onClick={() => onClickToSave()} onClick={() => onClickToSave()}
></button> >{t('common.save')}</button>
</div> </div>
</div> </div>
</div> </div>