mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-22 06:41:46 +00:00
chore: move i18n to shared package (#1066)
* chore: move i18n to shared package * chore: move server translations to shared package and apply linter and prettier on entire shared package
This commit is contained in:
@@ -0,0 +1,295 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const settings: TranslationStrings = {
|
||||
'settings.title': '설정',
|
||||
'settings.subtitle': '개인 설정을 구성하세요',
|
||||
'settings.tabs.display': '화면',
|
||||
'settings.tabs.map': '지도',
|
||||
'settings.tabs.notifications': '알림',
|
||||
'settings.tabs.integrations': '통합',
|
||||
'settings.tabs.account': '계정',
|
||||
'settings.tabs.offline': '오프라인',
|
||||
'settings.tabs.about': '정보',
|
||||
'settings.map': '지도',
|
||||
'settings.mapTemplate': '지도 템플릿',
|
||||
'settings.mapTemplatePlaceholder.select': '템플릿 선택...',
|
||||
'settings.mapDefaultHint': '비워두면 OpenStreetMap (기본값) 사용',
|
||||
'settings.mapTemplatePlaceholder':
|
||||
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
'settings.mapHint': '지도 타일 URL 템플릿',
|
||||
'settings.mapProvider': '지도 공급자',
|
||||
'settings.mapProviderHint':
|
||||
'여행 플래너 및 Journey 지도에 영향을 줍니다. Atlas는 항상 Leaflet을 사용합니다.',
|
||||
'settings.mapLeafletSubtitle': '클래식 2D, 모든 래스터 타일',
|
||||
'settings.mapMapboxSubtitle': '벡터 타일, 3D 건물 및 지형',
|
||||
'settings.mapExperimental': '실험적',
|
||||
'settings.mapMapboxToken': 'Mapbox 액세스 토큰',
|
||||
'settings.mapMapboxTokenHint': '공개 토큰 (pk.*) 출처',
|
||||
'settings.mapMapboxTokenLink': 'mapbox.com → 액세스 토큰',
|
||||
'settings.mapStyle': '지도 스타일',
|
||||
'settings.mapStylePlaceholder': 'Mapbox 스타일 선택',
|
||||
'settings.mapStyleHint': '프리셋 또는 mapbox://styles/USER/ID URL 직접 입력',
|
||||
'settings.map3dBuildings': '3D 건물 및 지형',
|
||||
'settings.map3dHint':
|
||||
'기울기 + 실제 3D 건물 돌출 — 위성 포함 모든 스타일에서 작동합니다.',
|
||||
'settings.mapHighQuality': '고품질 모드',
|
||||
'settings.mapHighQualityHint':
|
||||
'안티앨리어싱 + 구형 투영으로 선명한 경계와 현실적인 지구 뷰를 제공합니다.',
|
||||
'settings.mapHighQualityWarning':
|
||||
'저사양 기기에서 성능에 영향을 줄 수 있습니다.',
|
||||
'settings.mapTipLabel': '팁:',
|
||||
'settings.mapTip':
|
||||
'우클릭 후 드래그하여 지도를 회전/기울이세요. 가운데 클릭으로 장소를 추가할 수 있습니다 (우클릭은 회전 전용).',
|
||||
'settings.latitude': '위도',
|
||||
'settings.longitude': '경도',
|
||||
'settings.saveMap': '지도 저장',
|
||||
'settings.apiKeys': 'API 키',
|
||||
'settings.mapsKey': 'Google Maps API 키',
|
||||
'settings.mapsKeyHint':
|
||||
'장소 검색용. Places API (New) 필요. console.cloud.google.com에서 발급',
|
||||
'settings.weatherKey': 'OpenWeatherMap API 키',
|
||||
'settings.weatherKeyHint':
|
||||
'날씨 데이터용. openweathermap.org/api에서 무료 발급',
|
||||
'settings.keyPlaceholder': '키 입력...',
|
||||
'settings.configured': '설정됨',
|
||||
'settings.saveKeys': '키 저장',
|
||||
'settings.display': '화면',
|
||||
'settings.colorMode': '색상 모드',
|
||||
'settings.light': '라이트',
|
||||
'settings.dark': '다크',
|
||||
'settings.auto': '자동',
|
||||
'settings.language': '언어',
|
||||
'settings.temperature': '온도 단위',
|
||||
'settings.timeFormat': '시간 형식',
|
||||
'settings.bookingLabels': '예약 경로 레이블',
|
||||
'settings.bookingLabelsHint':
|
||||
'지도에 역 / 공항 이름을 표시합니다. 끄면 아이콘만 표시됩니다.',
|
||||
'settings.blurBookingCodes': '예약 코드 흐리게',
|
||||
'settings.notifications': '알림',
|
||||
'settings.notifyTripInvite': '여행 초대',
|
||||
'settings.notifyBookingChange': '예약 변경',
|
||||
'settings.notifyTripReminder': '여행 리마인더',
|
||||
'settings.notifyTodoDue': '할 일 마감 임박',
|
||||
'settings.notifyVacayInvite': 'Vacay 퓨전 초대',
|
||||
'settings.notifyPhotosShared': '공유된 사진 (Immich)',
|
||||
'settings.notifyCollabMessage': '채팅 메시지 (Collab)',
|
||||
'settings.notifyPackingTagged': '짐 목록: 배정',
|
||||
'settings.notifyWebhook': '웹훅 알림',
|
||||
'settings.notifyVersionAvailable': '새 버전 사용 가능',
|
||||
'settings.notificationPreferences.email': '이메일',
|
||||
'settings.notificationPreferences.webhook': '웹훅',
|
||||
'settings.notificationPreferences.inapp': '앱 내',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
'settings.notificationPreferences.noChannels':
|
||||
'알림 채널이 설정되지 않았습니다. 관리자에게 이메일 또는 웹훅 알림 설정을 요청하세요.',
|
||||
'settings.webhookUrl.label': '웹훅 URL',
|
||||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||||
'settings.webhookUrl.hint':
|
||||
'Discord, Slack 또는 사용자 지정 웹훅 URL을 입력하여 알림을 받으세요.',
|
||||
'settings.webhookUrl.saved': '웹훅 URL이 저장되었습니다',
|
||||
'settings.webhookUrl.test': '테스트',
|
||||
'settings.webhookUrl.testSuccess': '테스트 웹훅이 성공적으로 전송되었습니다',
|
||||
'settings.webhookUrl.testFailed': '테스트 웹훅 실패',
|
||||
'settings.ntfyUrl.topicLabel': 'Ntfy 토픽',
|
||||
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
|
||||
'settings.ntfyUrl.serverLabel': 'Ntfy 서버 URL (선택)',
|
||||
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
|
||||
'settings.ntfyUrl.hint':
|
||||
'ntfy 토픽을 입력하여 푸시 알림을 받으세요. 서버를 비워두면 관리자가 설정한 기본값을 사용합니다.',
|
||||
'settings.ntfyUrl.tokenLabel': '액세스 토큰 (선택)',
|
||||
'settings.ntfyUrl.tokenHint': '비밀번호로 보호된 토픽에 필요합니다.',
|
||||
'settings.ntfyUrl.saved': 'Ntfy 설정이 저장되었습니다',
|
||||
'settings.ntfyUrl.test': '테스트',
|
||||
'settings.ntfyUrl.testSuccess':
|
||||
'테스트 ntfy 알림이 성공적으로 전송되었습니다',
|
||||
'settings.ntfyUrl.testFailed': '테스트 ntfy 알림 실패',
|
||||
'settings.ntfyUrl.tokenCleared': '액세스 토큰이 삭제되었습니다',
|
||||
'settings.notificationsDisabled':
|
||||
'알림이 설정되지 않았습니다. 관리자에게 이메일 또는 웹훅 알림 활성화를 요청하세요.',
|
||||
'settings.notificationsActive': '활성 채널',
|
||||
'settings.notificationsManagedByAdmin': '알림 이벤트는 관리자가 설정합니다.',
|
||||
'settings.on': '켜기',
|
||||
'settings.off': '끄기',
|
||||
'settings.mcp.title': 'MCP 설정',
|
||||
'settings.mcp.endpoint': 'MCP 엔드포인트',
|
||||
'settings.mcp.clientConfig': '클라이언트 설정',
|
||||
'settings.mcp.clientConfigHint':
|
||||
'<your_token>을 아래 목록의 API 토큰으로 교체하세요. npx 경로는 시스템에 따라 조정해야 할 수 있습니다 (예: Windows의 경우 C:\\PROGRA~1\\nodejs\\npx.cmd).',
|
||||
'settings.mcp.clientConfigHintOAuth':
|
||||
'<your_client_id>와 <your_client_secret>을 위에서 생성한 OAuth 2.1 클라이언트 자격 증명으로 교체하세요. mcp-remote가 처음 연결 시 브라우저를 열어 인증을 완료합니다. npx 경로는 시스템에 따라 조정해야 할 수 있습니다 (예: Windows의 경우 C:\\PROGRA~1\\nodejs\\npx.cmd).',
|
||||
'settings.mcp.copy': '복사',
|
||||
'settings.mcp.copied': '복사됨!',
|
||||
'settings.mcp.apiTokens': 'API 토큰',
|
||||
'settings.mcp.createToken': '새 토큰 만들기',
|
||||
'settings.mcp.noTokens':
|
||||
'토큰이 없습니다. MCP 클라이언트 연결을 위해 토큰을 만드세요.',
|
||||
'settings.mcp.tokenCreatedAt': '생성일',
|
||||
'settings.mcp.tokenUsedAt': '사용일',
|
||||
'settings.mcp.deleteTokenTitle': '토큰 삭제',
|
||||
'settings.mcp.deleteTokenMessage':
|
||||
'이 토큰은 즉시 무효화됩니다. 이 토큰을 사용하는 MCP 클라이언트는 접근 권한을 잃게 됩니다.',
|
||||
'settings.mcp.modal.createTitle': 'API 토큰 만들기',
|
||||
'settings.mcp.modal.tokenName': '토큰 이름',
|
||||
'settings.mcp.modal.tokenNamePlaceholder':
|
||||
'예: Claude Desktop, 업무용 노트북',
|
||||
'settings.mcp.modal.creating': '생성 중…',
|
||||
'settings.mcp.modal.create': '토큰 만들기',
|
||||
'settings.mcp.modal.createdTitle': '토큰이 생성되었습니다',
|
||||
'settings.mcp.modal.createdWarning':
|
||||
'이 토큰은 한 번만 표시됩니다. 지금 복사하여 저장하세요 — 다시 복구할 수 없습니다.',
|
||||
'settings.mcp.modal.done': '완료',
|
||||
'settings.mcp.toast.created': '토큰이 생성되었습니다',
|
||||
'settings.mcp.toast.createError': '토큰 생성 실패',
|
||||
'settings.mcp.toast.deleted': '토큰이 삭제되었습니다',
|
||||
'settings.mcp.toast.deleteError': '토큰 삭제 실패',
|
||||
'settings.mcp.apiTokensDeprecated':
|
||||
'API 토큰은 더 이상 사용되지 않으며 향후 버전에서 제거될 예정입니다. 대신 OAuth 2.1 클라이언트를 사용하세요.',
|
||||
'settings.oauth.clients': 'OAuth 2.1 클라이언트',
|
||||
'settings.oauth.clientsHint':
|
||||
'OAuth 2.1 클라이언트를 등록하여 타사 MCP 앱 (Claude Web, Cursor 등)이 정적 토큰 없이 연결할 수 있도록 하세요.',
|
||||
'settings.oauth.createClient': '새 클라이언트',
|
||||
'settings.oauth.noClients': '등록된 OAuth 클라이언트가 없습니다.',
|
||||
'settings.oauth.clientId': '클라이언트 ID',
|
||||
'settings.oauth.clientSecret': '클라이언트 시크릿',
|
||||
'settings.oauth.deleteClient': '클라이언트 삭제',
|
||||
'settings.oauth.deleteClientMessage':
|
||||
'이 클라이언트와 모든 활성 세션이 영구 삭제됩니다. 이 클라이언트를 사용하는 앱은 즉시 접근 권한을 잃게 됩니다.',
|
||||
'settings.oauth.rotateSecret': '시크릿 교체',
|
||||
'settings.oauth.rotateSecretMessage':
|
||||
'새 클라이언트 시크릿이 생성되고 기존 세션은 즉시 무효화됩니다. 이 대화창을 닫기 전에 앱을 업데이트하세요.',
|
||||
'settings.oauth.rotateSecretConfirm': '교체',
|
||||
'settings.oauth.rotateSecretConfirming': '교체 중…',
|
||||
'settings.oauth.rotateSecretDoneTitle': '새 시크릿이 생성되었습니다',
|
||||
'settings.oauth.rotateSecretDoneWarning':
|
||||
'이 시크릿은 한 번만 표시됩니다. 지금 복사하여 앱을 업데이트하세요 — 이전 세션은 모두 무효화되었습니다.',
|
||||
'settings.oauth.activeSessions': '활성 OAuth 세션',
|
||||
'settings.oauth.sessionScopes': '권한 범위',
|
||||
'settings.oauth.sessionExpires': '만료',
|
||||
'settings.oauth.revoke': '취소',
|
||||
'settings.oauth.revokeSession': '세션 취소',
|
||||
'settings.oauth.revokeSessionMessage':
|
||||
'이 OAuth 세션의 접근 권한이 즉시 취소됩니다.',
|
||||
'settings.oauth.modal.createTitle': 'OAuth 클라이언트 등록',
|
||||
'settings.oauth.modal.presets': '빠른 프리셋',
|
||||
'settings.oauth.modal.clientName': '앱 이름',
|
||||
'settings.oauth.modal.clientNamePlaceholder': '예: Claude Web, My MCP App',
|
||||
'settings.oauth.modal.redirectUris': '리디렉션 URI',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder':
|
||||
'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||||
'settings.oauth.modal.redirectUrisHint':
|
||||
'한 줄에 URI 하나. HTTPS 필수 (localhost 예외). 정확히 일치해야 합니다.',
|
||||
'settings.oauth.modal.scopes': '허용 권한 범위',
|
||||
'settings.oauth.modal.scopesHint':
|
||||
'list_trips 및 get_trip_summary는 항상 사용 가능합니다 — 권한 범위 불필요. AI가 다른 도구를 사용하는 데 필요한 여행 ID를 찾을 수 있습니다.',
|
||||
'settings.oauth.modal.selectAll': '전체 선택',
|
||||
'settings.oauth.modal.deselectAll': '전체 해제',
|
||||
'settings.oauth.modal.creating': '등록 중…',
|
||||
'settings.oauth.modal.create': '클라이언트 등록',
|
||||
'settings.oauth.modal.createdTitle': '클라이언트가 등록되었습니다',
|
||||
'settings.oauth.modal.createdWarning':
|
||||
'클라이언트 시크릿은 한 번만 표시됩니다. 지금 복사하세요 — 다시 복구할 수 없습니다.',
|
||||
'settings.oauth.toast.createError': 'OAuth 클라이언트 등록 실패',
|
||||
'settings.oauth.toast.deleted': 'OAuth 클라이언트가 삭제되었습니다',
|
||||
'settings.oauth.toast.deleteError': 'OAuth 클라이언트 삭제 실패',
|
||||
'settings.oauth.toast.revoked': '세션이 취소되었습니다',
|
||||
'settings.oauth.toast.revokeError': '세션 취소 실패',
|
||||
'settings.oauth.toast.rotateError': '클라이언트 시크릿 교체 실패',
|
||||
'settings.account': '계정',
|
||||
'settings.about': '정보',
|
||||
'settings.about.reportBug': '버그 신고',
|
||||
'settings.about.reportBugHint': '문제를 발견하셨나요? 알려주세요',
|
||||
'settings.about.featureRequest': '기능 요청',
|
||||
'settings.about.featureRequestHint': '새로운 기능을 제안하세요',
|
||||
'settings.about.wikiHint': '문서 및 가이드',
|
||||
'settings.about.supporters.badge': '월간 후원자',
|
||||
'settings.about.supporters.title': 'TREK의 여행 동반자',
|
||||
'settings.about.supporters.subtitle':
|
||||
'다음 여정을 계획하는 동안, 이분들이 TREK의 미래를 함께 만들어가고 있습니다. 월간 후원금은 개발과 실제 작업 시간에 직접 사용되어 TREK이 오픈 소스로 유지될 수 있게 합니다.',
|
||||
'settings.about.supporters.since': '{date}부터 후원자',
|
||||
'settings.about.supporters.tierEmpty': '첫 번째 후원자가 되어보세요',
|
||||
'settings.about.supporter.tier.noReturnTicket': '편도 티켓',
|
||||
'settings.about.supporter.tier.lostLuggageVip': '분실 수하물 VIP',
|
||||
'settings.about.supporter.tier.businessClassDreamer':
|
||||
'비즈니스 클래스 꿈꾸기',
|
||||
'settings.about.supporter.tier.budgetTraveller': '알뜰 여행자',
|
||||
'settings.about.supporter.tier.hostelBunkmate': '호스텔 룸메이트',
|
||||
'settings.about.description':
|
||||
'TREK은 첫 아이디어부터 마지막 추억까지 여행을 체계적으로 관리하는 자체 호스팅 여행 플래너입니다. 일별 계획, 예산, 짐 목록, 사진 등 모든 것이 하나의 서버에 담겨 있습니다.',
|
||||
'settings.about.madeWith': '으로 만들어졌습니다',
|
||||
'settings.about.madeBy': 'Maurice와 성장하는 오픈 소스 커뮤니티가 함께',
|
||||
'settings.username': '사용자 이름',
|
||||
'settings.email': '이메일',
|
||||
'settings.role': '역할',
|
||||
'settings.roleAdmin': '관리자',
|
||||
'settings.oidcLinked': '연결됨',
|
||||
'settings.changePassword': '비밀번호 변경',
|
||||
'settings.currentPassword': '현재 비밀번호',
|
||||
'settings.currentPasswordRequired': '현재 비밀번호를 입력하세요',
|
||||
'settings.newPassword': '새 비밀번호',
|
||||
'settings.confirmPassword': '새 비밀번호 확인',
|
||||
'settings.updatePassword': '비밀번호 업데이트',
|
||||
'settings.passwordRequired': '현재 비밀번호와 새 비밀번호를 입력하세요',
|
||||
'settings.passwordTooShort': '비밀번호는 최소 8자 이상이어야 합니다',
|
||||
'settings.passwordMismatch': '비밀번호가 일치하지 않습니다',
|
||||
'settings.passwordWeak':
|
||||
'비밀번호는 대문자, 소문자, 숫자, 특수문자를 포함해야 합니다',
|
||||
'settings.passwordChanged': '비밀번호가 성공적으로 변경되었습니다',
|
||||
'settings.mustChangePassword':
|
||||
'계속하기 전에 비밀번호를 변경해야 합니다. 아래에서 새 비밀번호를 설정하세요.',
|
||||
'settings.deleteAccount': '계정 삭제',
|
||||
'settings.deleteAccountTitle': '계정을 삭제할까요?',
|
||||
'settings.deleteAccountWarning':
|
||||
'계정과 모든 여행, 장소, 파일이 영구 삭제됩니다. 이 작업은 취소할 수 없습니다.',
|
||||
'settings.deleteAccountConfirm': '영구 삭제',
|
||||
'settings.deleteBlockedTitle': '삭제 불가',
|
||||
'settings.deleteBlockedMessage':
|
||||
'유일한 관리자입니다. 계정을 삭제하기 전에 다른 사용자를 관리자로 승격하세요.',
|
||||
'settings.roleUser': '사용자',
|
||||
'settings.saveProfile': '프로필 저장',
|
||||
'settings.toast.mapSaved': '지도 설정이 저장되었습니다',
|
||||
'settings.toast.keysSaved': 'API 키가 저장되었습니다',
|
||||
'settings.toast.displaySaved': '화면 설정이 저장되었습니다',
|
||||
'settings.toast.profileSaved': '프로필이 저장되었습니다',
|
||||
'settings.uploadAvatar': '프로필 사진 업로드',
|
||||
'settings.removeAvatar': '프로필 사진 삭제',
|
||||
'settings.avatarUploaded': '프로필 사진이 업데이트되었습니다',
|
||||
'settings.avatarRemoved': '프로필 사진이 삭제되었습니다',
|
||||
'settings.avatarError': '업로드 실패',
|
||||
'settings.mfa.title': '2단계 인증 (2FA)',
|
||||
'settings.mfa.description':
|
||||
'이메일 및 비밀번호로 로그인할 때 두 번째 단계를 추가합니다. 인증 앱 (Google Authenticator, Authy 등)을 사용하세요.',
|
||||
'settings.mfa.requiredByPolicy':
|
||||
'관리자가 2단계 인증을 요구합니다. 앱을 계속 사용하려면 아래에서 인증 앱을 설정하세요.',
|
||||
'settings.mfa.backupTitle': '백업 코드',
|
||||
'settings.mfa.backupDescription':
|
||||
'인증 앱에 접근할 수 없을 때 이 일회용 백업 코드를 사용하세요.',
|
||||
'settings.mfa.backupWarning':
|
||||
'지금 이 코드를 저장하세요. 각 코드는 한 번만 사용할 수 있습니다.',
|
||||
'settings.mfa.backupCopy': '코드 복사',
|
||||
'settings.mfa.backupDownload': 'TXT 다운로드',
|
||||
'settings.mfa.backupPrint': '인쇄 / PDF',
|
||||
'settings.mfa.backupCopied': '백업 코드가 복사되었습니다',
|
||||
'settings.mfa.enabled': '계정에 2FA가 활성화되어 있습니다.',
|
||||
'settings.mfa.disabled': '2FA가 활성화되지 않았습니다.',
|
||||
'settings.mfa.setup': '인증 앱 설정',
|
||||
'settings.mfa.scanQr':
|
||||
'앱으로 이 QR 코드를 스캔하거나 시크릿을 수동으로 입력하세요.',
|
||||
'settings.mfa.secretLabel': '시크릿 키 (수동 입력)',
|
||||
'settings.mfa.codePlaceholder': '6자리 코드',
|
||||
'settings.mfa.enable': '2FA 활성화',
|
||||
'settings.mfa.cancelSetup': '취소',
|
||||
'settings.mfa.disableTitle': '2FA 비활성화',
|
||||
'settings.mfa.disableHint':
|
||||
'계정 비밀번호와 인증 앱의 현재 코드를 입력하세요.',
|
||||
'settings.mfa.disable': '2FA 비활성화',
|
||||
'settings.mfa.toastEnabled': '2단계 인증이 활성화되었습니다',
|
||||
'settings.mfa.toastDisabled': '2단계 인증이 비활성화되었습니다',
|
||||
'settings.mfa.demoBlocked': '데모 모드에서는 사용할 수 없습니다',
|
||||
'settings.oauth.modal.machineClient': '머신 클라이언트(브라우저 로그인 없음)',
|
||||
'settings.oauth.modal.machineClientHint':
|
||||
'client_credentials 권한 부여를 사용합니다 — 리디렉션 URI가 필요하지 않습니다. 토큰은 client_id + client_secret을 통해 직접 발급되며 선택한 범위 내에서 사용자로 작동합니다.',
|
||||
'settings.oauth.modal.machineClientUsage':
|
||||
'토큰 받기: grant_type=client_credentials, client_id, client_secret으로 POST /oauth/token을 호출하세요. 브라우저도 새로 고침 토큰도 필요 없습니다.',
|
||||
'settings.oauth.badge.machine': '머신',
|
||||
};
|
||||
export default settings;
|
||||
Reference in New Issue
Block a user