SkateSpots/src/i18n/ko/drift.ts
SkateSpots 9a5b706b1a i18n: close the drift — all 20 locales back to 100%
245 keys had accumulated in en/es only (trustUi, labOptions, cordnUi, socialUi,
walletUi, marketTerms, …), leaving every other locale at 97%. Backfilled 245x20 =
4,900 strings into src/i18n/<lang>/drift.ts and merged them through a new shared
src/i18n/deepMerge.ts — a shallow ...drift spread would clobber existing
namespaces, so index.ts deep-merges instead. Verified: check-i18n all 20 at 100%,
tsc + eslint clean.
2026-10-13 19:14:17 +07:00

331 lines
17 KiB
TypeScript

/**
* Korean (한국어) — drift fragment: the keys added after the main batches.
*
* These were the last keys missing from this locale (nav search, the first-run
* checklist, marketplace states/escrow copy, the clothing craft, the trust UI,
* the marketplace guidelines, the weather legend and the native Cordn/MLS chat).
* The default export is the nested dictionary; `index.ts` deep-merges it over
* the composed batch fragments (a shallow spread would replace a whole namespace
* and drop its sibling keys).
*
* Skate/brand vocabulary stays English or transliterated (Spot, Park, Crew,
* Stash, The Lab, Nostr, Lightning, sats, Cashu, MLS, Cordn, Staircase), matching
* the other batches.
*/
type Dict = { [key: string]: string | Dict };
const drift: Dict = {
nav: {
searchLanguages: '언어 검색...',
noLanguages: '언어를 찾을 수 없음',
},
mapPage: {
searchSuggestPlaces: '장소',
},
mapUi: {
firstRunTitle: '시작하기',
firstRunAddSpot: '첫 스팟 추가',
firstRunJoinCrew: '크루 참여',
firstRunStartCrew: '크루 시작',
firstRunWallet: '지갑 설정',
forecastDays: '{{count}}일 예보',
},
spotUi: {
forecastDays: '{{count}}일 예보',
},
marketUi: {
trades: {
stateRevoked: '취소됨',
stateVerifying: '확인 중',
},
loadFailed: '릴레이에 연결할 수 없습니다. 연결을 확인하고 다시 시도하세요.',
statusPending: '대기 중',
offers: {
closeDeal: '거래 종료',
loadFailed: '오퍼를 불러올 수 없습니다. 연결을 확인하고 다시 시도하세요.',
},
pay: {
nonSats: '이 오퍼의 가격은 {{currency}}입니다. 앱 내 결제는 sats만 지원합니다. 판매자와 직접 정산하세요.',
unsupported: '이 결제 코드(Cashu 요청)는 아직 지원되지 않습니다. 판매자에게 Lightning 인보이스나 주소를 요청하세요.',
},
escrowRequest: {
lockedNotSent: '자금이 에스크로에 잠겨 이 기기에 저장되었지만 요청이 전송되지 않았습니다. 리스팅을 다시 열어 재시도하세요. 다시 결제하지 마세요.',
mintLabel: '민트 (자금이 잠기는 곳)',
sellerMintHint: '판매자가 이 민트를 선호합니다. 여기 잠긴 자금이 가장 수령하기 쉽습니다.',
mintHint: '에스크로는 이 민트에 있습니다. 판매자가 여기서 수령하므로 둘 다 신뢰하는 민트를 고르세요.',
noMints: '사용 가능한 민트가 없습니다',
p2pkUnsupported: '이 민트는 P2PK(NUT-11) 지원을 알리지 않아 여기에 에스크로를 잠글 수 없습니다. 다른 민트를 선택하세요.',
},
},
labUi: {
offerClothing: '의류 제공',
tabClothing: '의류',
empty: {
clothingTitle: '아직 의류 디자이너가 없습니다',
clothingBody: '씬을 위한 맞춤 의류, 팀 키트, 의류를 가장 먼저 제공해 보세요.',
},
craftFields: {
sizing: '사이즈 범위',
samples: '샘플 / 시제품',
customization: '커스터마이징',
},
},
socialUi: {
coordinator: {
ourDefaultTitle: 'SkateSpots 코디네이터',
ourDefaultDesc: 'SkateSpots는 relay.skate-spots.org에서 코디네이터를 운영합니다. 기본으로 사용하거나 직접 운영하세요. 코디네이터는 암호문과 메타데이터만 보고 메시지는 절대 보지 않습니다.',
useOurs: 'SkateSpots 코디네이터 사용',
},
crewCoordinator: {
encryptedChat: '암호화 채팅',
privateChatName: '비공개 채팅',
privateChatDesc: '코디네이터를 통한 전방 비밀 그룹 채팅(MLS).',
privateChatDescFull: '비공개 채팅은 관리자가 한 번 만들고, 이후 멤버가 참여합니다.',
chatRowDesc: '크루의 모든 사람 — 각 멤버의 키로 봉인(NIP-17).',
openChat: '열기',
setUpChat: '설정',
joinChat: '참여',
checking: '확인 중…',
openInAnotherApp: '다른 앱에서 열기',
openInCordnWeb: 'Cordn(웹)',
openCordnGroup: '크루 채팅 열기',
copyForStaircase: 'Staircase용 복사',
},
dms: {
refresh: '새로고침',
crews: '크루',
crewFounder: '창립자',
crewMember: '멤버',
crewOpen: '열기',
crewSetUp: '설정',
},
form: {
cordnGroup: 'Cordn 그룹',
cordnGroupHint: '선택 사항: Staircase 또는 Cordn 웹의 그룹 링크를 붙여넣으세요. 그러면 크루가 우리 코디네이터에서 호스팅되는 실제 종단 간 MLS 채팅을 갖게 됩니다.',
},
},
settingsUi: {
settingsPage: {
trust: '신뢰',
trustSub: '출처와 표시',
},
},
walletUi: {
trust: {
mute: '뮤트',
muted: '뮤트됨',
mutedDesc: '상대방의 콘텐츠가 표시되지 않습니다.',
muteFailed: '뮤트하지 못했습니다. 다시 시도하세요.',
loginToMute: '뮤트하려면 로그인하세요.',
attributedNetwork: '당신의 네트워크에 있는 사람들로부터',
attributedProviderHouse: '커뮤니티 신뢰 제공자로부터',
attributedProviderCustom: '당신이 선택한 제공자로부터',
howItWorks: '신뢰가 작동하는 방식',
flaggedNoticeTitle: '신뢰하는 스케이터의 신고',
flaggedNoticeDesc: '주의하세요. 네트워크의 신뢰하는 사람들이 이 계정을 신고했습니다.',
flaggedReporterFollow: '팔로우 중인 {{count}}명',
flaggedReporterNetwork: '네트워크의 {{count}}명',
flaggedReporterOther: '기타 계정 {{count}}개',
flaggedReport: '신고',
flaggedDismiss: '닫기',
bucketVerified: '인증됨',
bucketUnknown: '알 수 없음',
bucketFlagged: '플래그됨',
bucketVerifiedDesc: '당신의 네트워크의 누군가가 이 계정을 보증합니다.',
bucketUnknownDesc: '아직 당신의 네트워크에서 아무도 이 계정을 보증하지 않았습니다.',
bucketFlaggedDesc: '신뢰하는 사람들이 이 계정을 신고했습니다.',
reportedByTrusted: '신뢰하는 {{count}}명이 신고함',
},
},
trustUi: {
alertsTitle: '네트워크 경고',
alertsDesc: '당신이 팔로우하며 신뢰하는 사람들이 신고하거나 뮤트한 계정.',
alertsEmpty: '경고가 없습니다. 팔로우하는 계정에 신뢰 신고가 있는지 확인합니다.',
alertsReported: '신뢰하는 {{count}}명이 신고함',
alertsMuted: '신뢰하는 {{count}}명이 뮤트함',
alertsIgnore: '무시',
alertsUnfollow: '언팔로우',
alertsLogin: '팔로우하는 계정의 경고를 보려면 로그인하세요.',
providerTitle: '제공자',
providerDesc: '점수는 당신이 선택한 제공자에서 나옵니다. 기본값은 커뮤니티 제공자입니다.',
useCommunity: '커뮤니티 제공자 사용',
setProvider: '제공자 설정',
customPubkeyPlaceholder: '제공자 npub 또는 16진수 pubkey',
customRelayPlaceholder: 'wss://relay.example.com',
invalidProvider: '유효한 npub 또는 64자리 16진수 pubkey, 그리고 wss:// 릴레이를 입력하세요.',
publishFailed: '제공자를 게시하지 못했습니다. 다시 시도하세요.',
providerSaved: '제공자가 업데이트되었습니다.',
loggedOutProvider: '제공자를 선택하려면 로그인하세요.',
showMarks: '신뢰 마크 표시',
showMarksDesc: '인증됨 및 알 수 없음 마크. 신고는 항상 표시됩니다.',
sourceLabel: '출처',
sourceHouse: '커뮤니티 신뢰 제공자',
sourceCustom: '당신의 제공자',
loggedOut: '자신의 신뢰 제공자를 선택하려면 로그인하세요.',
seoTitle: '신뢰가 작동하는 방식',
seoDescription: 'SkateSpots가 신뢰를 표시하는 방식: 세 가지 상태, 점수의 출처, 그리고 부재가 불신이 아닌 이유.',
title: '신뢰가 작동하는 방식',
intro: '여기서 신뢰는 판결이 아니라 신호입니다. 당신이 아는 사람, 또는 당신이 선택한 제공자에서 비롯됩니다. 우리는 사람을 전 세계적으로 순위를 매기지 않습니다.',
statesTitle: '세 가지 상태',
verifiedTitle: '인증됨',
verifiedDesc: '당신의 네트워크의 누군가가 이 계정을 보증합니다: 친구의 친구, 또는 당신이 선택한 제공자.',
unknownTitle: '알 수 없음',
unknownDesc: '아직 아무도 보증하지 않았습니다. 모든 새 계정은 여기서 시작합니다.',
flaggedTitle: '플래그됨',
flaggedDesc: '신뢰하는 사람들이 이 계정을 신고했습니다. 더 자세히 살펴보라는 경고이며, 무엇인가의 증거는 아닙니다.',
absenceTitle: '배지가 없다고 불신은 아니다',
absenceDesc: '대부분의 계정은 아무것도 표시하지 않습니다. 그것은 당신의 네트워크에서 아직 아무도 보증하지 않았다는 의미이며, 뭔가 잘못되었다는 의미가 아닙니다. 마크의 부재를 부정적으로 읽지 마세요.',
sourceTitle: '누가 계산하는가',
sourceDesc: '기본적으로 당신 자신의 네트워크를 사용합니다. Nostr(NIP-85)를 통해 서명된 점수를 게시하는 신뢰 제공자를 선택하거나 표시를 끌 수도 있습니다. 플래그됨은 항상 표시됩니다. 안전 신호이기 때문입니다.',
endorsementTitle: '존재는 보증이 아니다',
endorsementDesc: '인증 마크는 누군가 보증했다는 의미이며, 그 사람이 선하다는 의미가 아닙니다. 플래그는 신뢰하는 사람들이 신고했다는 의미이며, 유죄라는 의미가 아닙니다. 결정 전에 세부 정보를 확인하세요.',
povTitle: '보는 관점에 따라 다르다',
povDesc: '점수는 누가 보는지에 상대적입니다. 한 제공자나 한 사람의 순위는 다른 것과 비교할 수 없으며, 우리는 그것을 객관적 사실로 제시하지 않습니다.',
settingsCta: '설정에서 관리',
},
marketTerms: {
link: '마켓플레이스 가이드라인',
seoTitle: '마켓플레이스 가이드라인',
seoDescription: 'SkateSpots 기어 리스팅의 작동 방식: P2P, 구매자 주의, 그리고 규칙.',
title: '마켓플레이스 가이드라인',
intro: 'SkateSpots는 P2P 기어 게시판입니다. 상대방과 직접 거래합니다: 우리는 자금을 보관하지 않고, 물품을 발송하지 않으며, 분쟁을 해결하지 않습니다.',
howTitle: '작동 방식',
howBody: '기어를 등록하고, 판매자에게 비공개 메시지로 연락하고, 직접 정산하세요(현금, Lightning, 또는 교환). 장바구니나 결제는 없습니다.',
rulesTitle: '허용되지 않는 것',
rulesBody: '불법, 위험, 성인 콘텐츠는 금지되며, 마약, 무기, 위조품, 도난품도 금지됩니다. 리스팅은 스케이트 기어와 관련 물품으로 유지하세요.',
respectTitle: '존중하세요',
respectBody: '욕설, 괴롭힘, 위협, 증오는 금지됩니다. 모더레이터는 리스팅이나 계정을 숨길 수 있습니다.',
trustTitle: '신뢰는 지침이지 보증이 아니다',
trustBody: '인증 마크와 거래 평판은 네트워크의 신호이지 약속이 아닙니다. 거래 전에 직접 확인하세요.',
trustLink: '신뢰가 작동하는 방식',
privacyLink: '기기에서 나가는 것',
safetyTitle: '안전하게 거래하세요',
safetyBody: '직접 만남은 공공장소에서, 발송 거래에는 에스크로나 성의 보증금을 사용하고, 앱 밖으로 돈을 보내지 마세요.',
moderationTitle: '모더레이션은 부드럽고 되돌릴 수 있다',
moderationBody: '숨겨진 콘텐츠는 릴레이에 남아 복원될 수 있으며, 사람 사이의 분쟁은 당신이 해결할 몫입니다.',
},
labOptions: {
clothing: {
service: {
tees: '티셔츠',
hoodies: '후디 & 스웨트',
pants: '팬츠 & 쇼츠',
jackets: '재킷 & 아우터',
kits: '팀 키트 & 저지',
caps: '캡 & 비니',
socks: '양말',
accessories: '가방 & 액세서리',
footwear: '풋웨어 & 신발',
patches: '패치 & 아플리케',
griptape: '그립테이프 & 데크 의류',
onepiece: '원오브원 / 업사이클',
},
serviceDesc: {
tees: '커스텀 티셔츠와 상의',
hoodies: '후디, 크루넥, 스웨트팬츠',
pants: '워크 팬츠, 카고, 쇼츠',
jackets: '코치 재킷, 셸, 워크 재킷',
kits: '팀 키트, 저지, 유니폼',
caps: '캡, 비니, 헤드웨어',
socks: '크루 삭스와 니트',
accessories: '가방, 벨트, 소품',
footwear: '커스텀 신발과 풋웨어',
patches: '자수 패치와 아플리케',
griptape: '그립테이프 아트와 데크 의류',
onepiece: '단품과 업사이클 의류',
},
method: {
screenprint: '스크린 프린트',
dtg: 'DTG / 다이렉트 투 가먼트',
embroidery: '자수',
cutsew: '컷 앤 쏘',
sublimation: '승화 전사',
heattransfer: '열전사 / 비닐',
garmentdye: '가먼트 다이',
knit: '니트웨어',
patchwork: '패치워크',
allover: '전면 프린트',
},
material: {
cotton: '코튼',
heavyweight: '헤비웨이트',
organic: '오가닉 / 지속가능',
fleece: '플리스',
denim: '데님',
canvas: '캔버스',
nylon: '나일론 / 테크니컬',
wool: '메리노 / 울',
leather: '레더',
recycled: '리사이클 / 데드스톡',
},
},
},
becomeRolesUi: {
clothing: {
seoTitle: '의류 디자이너 되기 - SkateSpots',
seoDescription: '씬을 위한 맞춤 의류, 팀 키트 & 의류.',
heading: '의류 디자이너',
tagline: '씬을 위한 맞춤 의류, 팀 키트 & 의류',
noun: '의류 디자이너',
rateLabel: '요금',
portfolioLabel: '샵 / 포트폴리오 링크',
sectionWhatYouMake: '무엇을 만드는가',
sectionHowYouMake: '어떻게 만드는가',
sectionMaterials: '재료',
minimumPlaceholder: '예: 10벌',
turnaroundPlaceholder: '예: 2-3주',
sizingPlaceholder: '예: XS-3XL / 맞춤 제작',
samplesHelper: '본 생산 전에 샘플이나 시제품을 제공하나요?',
customizationPlaceholder: '예: 이름, 번호, 그래픽',
},
},
weatherUi: {
updated: '업데이트됨',
refresh: '새로고침',
unavailable: '날씨를 사용할 수 없습니다.',
retry: '재시도',
sunrise: '일출',
sunset: '일몰',
legendTitle: '날씨 점수',
legendWeatherOnly: '날씨만',
},
cordnUi: {
title: '비공개 채팅',
subtitle: '크루 멤버 간 종단 간 암호화(MLS). 코디네이터는 암호문과 메타데이터만 라우팅하며 메시지 내용은 절대 보지 않습니다.',
notLoggedIn: '크루의 비공개 채팅을 사용하려면 로그인하세요.',
membersOnly: '크루 멤버만 비공개 채팅을 열 수 있습니다.',
connecting: '연결 중…',
noCoordinator: '이 크루에는 아직 코디네이터가 설정되지 않았습니다.',
noGroupAdmin: '이 크루의 비공개 채팅은 아직 만들어지지 않았습니다.',
noGroupMember: '아직 이 크루의 비공개 채팅에 참여하지 않았습니다.',
create: '비공개 채팅 만들기',
requestJoin: '참여 요청',
checkInvite: '초대 확인',
requested: '요청을 보냈습니다 — 크루 관리자가 승인합니다.',
noInvite: '아직 대기 중인 초대가 없습니다. 관리자에게 요청 승인을 부탁하세요.',
placeholder: '크루에게 메시지…',
send: '보내기',
refresh: '새로고침',
requests: '참여 요청',
checkRequests: '요청 확인',
approve: '추가',
noRequests: '대기 중인 참여 요청이 없습니다.',
inviteHint: '지금까지 이 채팅에는 당신만 있습니다 — 크루 멤버가 “참여 요청”을 누르면 여기서 승인할 수 있습니다.',
memberCount: '그룹에 {{count}}명',
you: '나',
groupRef: '그룹 링크',
copyRef: '복사',
copied: '복사됨',
attachImage: '이미지 첨부',
uploading: '업로드 중…',
uploadFailed: '이미지를 업로드하지 못했습니다.',
bannerTitle: '이 크루에는 아직 비공개 채팅이 없습니다',
bannerBody: '크루를 위한 종단 간 암호화(MLS) 채팅을 설정하세요 — 멤버는 탭에서 참여합니다.',
bannerCta: '설정',
ready: '연결됨 · MLS',
errorPrefix: '코디네이터에 연결할 수 없습니다',
interactiveHint: '서명자가 각 작업마다 승인을 요청합니다 — 필요에 따라 새로고침과 보내기를 사용하세요.',
},
};
export default drift;