Files
TREK/shared/src/i18n/ko/settings.ts
T
Maurice 1f66ef1d32 fix(maps): let users and admins enter a CARTO API key (#2060)
CARTO stamps an "API KEY REQUIRED" watermark onto every basemap tile
fetched without a key since 26.08.2026, and both CartoDB presets plus the
built-in fallback are CARTO. The key is free and needs no account, so add
it as a setting rather than dropping the provider.

carto_api_key sits next to mapbox_access_token: per user in Settings/Map,
instance-wide under Admin/User Defaults, encrypted at rest, injected from
CARTO_API_KEY on managed instances. Unlike Mapbox it never switches the
map provider, since a raster key says nothing about the renderer.

The key is appended as ?key= at render time instead of being stored in the
template, so a saved URL stays portable and survives a rotation. That is
also what reaches the four maps that pinned CARTO and ignored the user's
tile setting: atlas, collections, the public trip share and the public
journey. The two share pages read it from their token-gated payload, the
same way baseCurrency already travels.

Also lifts the release notice above page chrome. Its overlay sat at
z-index 50, under the Vacay mode toolbar at 61, so the dialog was neither
on top nor modal. Adds a six-step layer scale to index.css and moves the
three notice shells onto it.

Closes #2054
Closes #2052
2026-08-27 12:06:55 +02:00

525 lines
35 KiB
TypeScript

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.plugins.oauth.connected': '연결됨',
'settings.plugins.oauth.notConnected': '연결 안 됨',
'settings.plugins.oauth.connect': '연결',
'settings.plugins.oauth.disconnect': '연결 해제',
'settings.tabs.plugins': '플러그인',
'settings.plugins.title': '플러그인 설정',
'settings.plugins.subtitle': '사용 중인 플러그인의 개인 설정(API 키, 환경설정).',
'settings.plugins.empty': '활성화된 플러그인이 없습니다.',
'settings.plugins.saved': '설정이 저장되었습니다',
'settings.tabs.account': '계정',
'settings.tabs.offline': '오프라인',
'settings.tabs.about': '정보',
'settings.map': '지도',
'settings.mapTemplate': '지도 템플릿',
'settings.mapTemplatePlaceholder.select': '템플릿 선택...',
'settings.mapDefaultHint': '비워두면 OpenStreetMap (기본값) 사용',
'settings.mapHint': '지도 타일 URL 템플릿',
'settings.mapProvider': '지도 공급자',
'settings.mapProviderHint': '여행 플래너 및 Journey 지도에 영향을 줍니다. Atlas는 항상 Leaflet을 사용합니다.',
'settings.mapLeafletSubtitle': '클래식 2D, 모든 래스터 타일',
'settings.mapMapboxSubtitle': '벡터 타일, 3D 건물 및 지형',
'settings.mapMapLibreSubtitle': 'OpenFreeMap 벡터 타일, 토큰 불필요',
'settings.mapExperimental': '실험적',
'settings.mapMapboxToken': 'Mapbox 액세스 토큰',
'settings.mapMapboxTokenHint': '공개 토큰 (pk.*) 출처',
'settings.mapMapboxTokenLink': 'mapbox.com → 액세스 토큰',
'settings.mapCartoKey': 'CARTO API 키',
'settings.mapCartoKeyHint':
'CARTO 배경 지도는 키가 없으면 워터마크가 표시됩니다. 무료이며 계정도 필요 없습니다. 출처',
'settings.mapCartoKeyLink': 'carto.com 배경 지도 API 키',
'settings.mapCartoKeyMissing':
'이 템플릿은 CARTO 배경 지도입니다. 키가 없으면 CARTO가 모든 타일에 "API KEY REQUIRED"를 새깁니다.',
'settings.mapStyle': '지도 스타일',
'settings.mapStylePlaceholder': 'Mapbox 스타일 선택',
'settings.mapStyleHint': '프리셋 또는 mapbox://styles/USER/ID URL 직접 입력',
'settings.mapOpenFreeMapStylePlaceholder': 'OpenFreeMap 스타일 선택',
'settings.mapOpenFreeMapStyleHint': '프리셋 또는 OpenFreeMap 스타일 URL. OpenFreeMap 스타일은 토큰 없이 작동합니다.',
'settings.map3dBuildings': '3D 건물 및 지형',
'settings.map3dHint': '기울기 + 실제 3D 건물 돌출 — 위성 포함 모든 스타일에서 작동합니다.',
'settings.mapHighQuality': '고품질 모드',
'settings.mapHighQualityHint': '안티앨리어싱 + 구형 투영으로 선명한 경계와 현실적인 지구 뷰를 제공합니다.',
'settings.mapHighQualityWarning': '저사양 기기에서 성능에 영향을 줄 수 있습니다.',
'settings.mapTipLabel': '팁:',
'settings.mapTip':
'우클릭 후 드래그하여 지도를 회전/기울이세요. 가운데 클릭으로 장소를 추가할 수 있습니다 (우클릭은 회전 전용).',
'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.distance': '거리 단위',
'settings.timeFormat': '시간 형식',
'settings.bookingLabels': '예약 경로 레이블',
'settings.bookingLabelsHint': '지도에 역 / 공항 이름을 표시합니다. 끄면 아이콘만 표시됩니다.',
'settings.blurBookingCodes': '예약 코드 흐리게',
'settings.aiAlwaysRetry': 'Always retry booking imports with AI',
'settings.aiAlwaysRetryHint': 'When a file cannot be read by the standard parser, automatically retry it with AI.',
'settings.optimizeFromAccommodation': '숙소 기준으로 경로 최적화',
'settings.optimizeFromAccommodationHint':
'하루 일정을 최적화할 때, 아침에 머무는 숙소에서 경로를 시작하고 그날 저녁에 체크인하는 숙소에서 경로를 끝냅니다.',
'settings.notifications': '알림',
'settings.notifyTripInvite': '여행 초대',
'settings.notifyBookingChange': '예약 변경',
'settings.notifyTripReminder': '여행 리마인더',
'settings.notifyTodoDue': '할 일 마감 임박',
'settings.notifyVacayInvite': 'Vacay 퓨전 초대',
'settings.notifyVacayShare': 'Vacay 캘린더 공유',
'settings.notifyPhotosShared': '공유된 사진 (Immich)',
'settings.notifyCollabMessage': '채팅 메시지 (Collab)',
'settings.notifyPackingTagged': '짐 목록: 배정',
'settings.notifyWebhook': '웹훅 알림',
'settings.notifyVersionAvailable': '새 버전 사용 가능',
'settings.notificationPreferences.email': '이메일',
'settings.notificationPreferences.webhook': '웹훅',
'settings.notificationPreferences.inapp': '앱 내',
'settings.notificationPreferences.notConfigured': '아직 설정되지 않았습니다 — 플러그인 설정에서 구성하세요',
'settings.plugins.actions': '작업',
'settings.plugins.actions.confirm': '이 작업을 실행할까요?',
'settings.notificationPreferences.sendTest': '테스트 전송',
'settings.notificationPreferences.configure': '설정하기',
'settings.notificationPreferences.testSuccess': '테스트 알림을 보냈습니다.',
'settings.notificationPreferences.testFailed': '테스트에 실패했습니다.',
'settings.notificationPreferences.pluginConfigured': '설정됨. 자격 증명은 플러그인 설정 페이지에서 관리하세요.',
'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.descriptionManaged':
'TREK helps you organize your trips from the first idea to the last memory. Day planning, budget, packing lists, photos and much more — all in one place.',
'settings.about.sourceTitle': 'Source code',
'settings.about.sourceHint': 'TREK is open source, licensed AGPL-3.0',
'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.avatarRemoveError': '삭제 실패',
'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': '머신',
'settings.currency': '표시 통화',
'settings.currencyHint': '비용의 금액은 표시 목적으로만 이 통화로 환산되어 표시되며, 원래 금액은 변경되지 않습니다.',
'settings.currencyTrip': '여행 통화',
'settings.passkey.title': '패스키',
'settings.passkey.description':
'지문, 얼굴, PIN 또는 하드웨어 키 같은 패스키로 더 빠르고 피싱에 강하게 로그인하세요. 비밀번호는 백업으로 그대로 유지됩니다.',
'settings.passkey.notConfigured':
'패스키가 활성화되어 있지만 이 서버에 아직 완전히 설정되지 않았습니다. 관리자에게 WebAuthn 도메인 설정을 요청하세요.',
'settings.passkey.add': '패스키 추가',
'settings.passkey.addTitle': '패스키 추가',
'settings.passkey.passwordPrompt': '현재 비밀번호를 확인한 뒤 기기 안내에 따라 진행하세요.',
'settings.passkey.passwordRequired': '현재 비밀번호가 필요합니다.',
'settings.passkey.namePlaceholder': '이름 (선택, 예: "iPhone")',
'settings.passkey.addedToast': '패스키가 추가되었습니다',
'settings.passkey.added': '추가됨',
'settings.passkey.addError': '패스키를 추가할 수 없습니다',
'settings.passkey.cancelled': '패스키 설정이 취소되었습니다',
'settings.passkey.deleted': '패스키가 삭제되었습니다',
'settings.passkey.deleteConfirm': '이 패스키를 삭제할까요? 비밀번호로 확인하세요.',
'settings.passkey.rename': '이름 변경',
'settings.passkey.defaultName': '패스키',
'settings.passkey.synced': '동기화됨',
'settings.passkey.deviceBound': '이 기기',
'settings.passkey.lastUsed': '마지막 사용',
'settings.passkey.neverUsed': '사용한 적 없음',
'settings.mapPoiPill': '지도에서 장소 탐색',
'settings.mapPoiPillHint': '여행 지도에 카테고리 칩을 표시하여 OpenStreetMap에서 주변 음식점, 숙소 등을 찾아보세요.',
'settings.airtrail.title': 'AirTrail',
'settings.airtrail.hint':
'자체 호스팅한 AirTrail을 연결하여 항공편을 가져오고 동기화하세요. AirTrail의 설정 → 보안에서 API 키를 생성하세요.',
'settings.airtrail.url': '인스턴스 URL',
'settings.airtrail.apiKey': 'API 키',
'settings.airtrail.apiKeyPlaceholder': 'Bearer API 키',
'settings.airtrail.apiKeyHint': 'AirTrail의 설정 → 보안에서 생성됩니다. 암호화하여 저장됩니다.',
'settings.airtrail.allowInsecureTls': '자체 서명 인증서 허용',
'settings.airtrail.allowInsecureTlsHint': '자체 네트워크의 신뢰할 수 있는 인스턴스에서만 활성화하세요.',
'settings.airtrail.writeBack': '변경 사항을 AirTrail에 다시 기록',
'settings.airtrail.writeBackHint':
'기본적으로 꺼져 있음: AirTrail이 신뢰할 수 있는 원본이며 TREK은 읽기만 합니다. TREK에서 변경한 내용을 AirTrail로 다시 보내려면 켜세요.',
'settings.airtrail.connected': '연결됨',
'settings.airtrail.notConnected': '연결되지 않음',
'settings.airtrail.toast.saved': 'AirTrail 연결이 저장되었습니다',
'settings.airtrail.toast.saveError': '연결을 저장할 수 없습니다',
'settings.airtrail.test.button': '연결 테스트',
'settings.airtrail.test.success': '연결됨 — {count}개 항공편을 찾았습니다',
'settings.airtrail.test.failed': '연결에 실패했습니다',
'settings.aiParsing.title': 'AI 분석',
'settings.aiParsing.hint':
'업로드한 파일에서 예약 정보를 추출할 AI 모델을 선택하세요. 이 설정은 관리자가 인스턴스 전체에 모델을 설정하지 않은 경우에만 적용됩니다.',
'settings.aiParsing.provider': '제공자',
'settings.aiParsing.providerLocal': '로컬 (Ollama)',
'settings.aiParsing.providerOpenai': 'OpenAI',
'settings.aiParsing.providerAnthropic': 'Anthropic',
'settings.aiParsing.localAdminOnly':
'로컬 (Ollama) 엔드포인트는 관리자 설정에서 인스턴스 전체에 대해 한 번만 설정합니다. 본인의 OpenAI 또는 Anthropic 키는 여기서 계속 사용할 수 있습니다.',
'settings.aiParsing.model': '모델',
'settings.aiParsing.baseUrl': '기본 URL',
'settings.aiParsing.baseUrlHint': '모델이 실행되는 위치 — 로컬 Ollama 서버 또는 OpenAI 호환 엔드포인트입니다.',
'settings.aiParsing.apiKey': 'API 키',
'settings.aiParsing.apiKeyHint': '암호화되어 저장됩니다. 현재 키를 유지하려면 비워 두세요.',
'settings.aiParsing.multimodal': '문서를 이미지로 전송',
'settings.aiParsing.multimodalHint': '비전 지원 모델용 — 추출된 텍스트 대신 원본 PDF를 전송합니다.',
'settings.aiParsing.toast.saved': 'AI 설정이 저장되었습니다',
'settings.aiParsing.toast.saveError': 'AI 설정을 저장할 수 없습니다',
'settings.tabs.appearance': 'Appearance',
'settings.appearance.theme': 'Theme',
'settings.appearance.scheme': 'Color scheme',
'settings.appearance.scheme.default': 'Default',
'settings.appearance.scheme.highContrast': 'High contrast',
'settings.appearance.scheme.indigo': 'Indigo',
'settings.appearance.scheme.teal': 'Teal',
'settings.appearance.scheme.rose': 'Rose',
'settings.appearance.scheme.amber': 'Amber',
'settings.appearance.scheme.violet': 'Violet',
'settings.appearance.scheme.custom': 'Custom',
'settings.appearance.customAccent': 'Custom accent',
'settings.appearance.contrastOk': 'Good contrast',
'settings.appearance.contrastLow': 'Low contrast',
'settings.appearance.readability': 'Readability',
'settings.appearance.transparency': 'Transparency',
'settings.appearance.transparencyHint':
'Glassy translucent surfaces. Turn off for solid, higher-contrast backgrounds.',
'settings.appearance.reduceMotion': 'Reduce motion',
'settings.appearance.reduceMotionHint': 'Minimize animations and transitions.',
'settings.appearance.density': 'Density',
'settings.appearance.comfortable': 'Comfortable',
'settings.appearance.compact': 'Compact',
'settings.appearance.textSize': 'Text size',
'settings.appearance.advancedTextSizes': 'Advanced text sizes',
'settings.appearance.hideAdvanced': 'Hide advanced',
'settings.appearance.tier.title': 'Titles',
'settings.appearance.tier.subtitle': 'Subtitles',
'settings.appearance.tier.body': 'Body',
'settings.appearance.tier.caption': 'Captions',
'settings.appearance.dashboardWidgets': 'Dashboard widgets',
'settings.appearance.dashboardWidgetsHint': 'Show or hide dashboard widgets independently on desktop and mobile.',
'settings.appearance.desktop': 'Desktop',
'settings.appearance.mobile': 'Mobile',
'settings.appearance.widget.sidebar': 'Right sidebar',
'settings.appearance.widget.currency': 'Currency',
'settings.appearance.widget.collections': '컬렉션',
'settings.appearance.widget.timezones': 'Timezones',
'settings.appearance.widget.upcomingReservations': 'Upcoming reservations',
'settings.appearance.widget.atlas': 'Atlas / countries',
'settings.appearance.widget.tripsTotal': 'Trips total',
'settings.appearance.widget.daysTraveled': 'Days traveled',
'settings.appearance.widget.distanceFlown': 'Distance flown',
'settings.appearance.reset': 'Reset to defaults',
'settings.appearance.group.belowHero': 'Below the hero',
'settings.appearance.group.bottomOfPage': 'Bottom of page',
'settings.appearance.sidebarHint': 'The whole right column. Turn off and the dashboard centers.',
'settings.appearance.densityHint':
'Compact tightens spacing and padding for a denser layout that fits more on screen.',
'settings.appearance.textSizeAll': 'Everything',
'settings.appearance.perSize': 'Adjust each size separately',
'settings.appearance.size.large': 'Large',
'settings.appearance.size.medium': 'Medium',
'settings.appearance.size.normal': 'Normal',
'settings.appearance.size.small': 'Small',
'settings.appearance.preview.large': 'Large heading',
'settings.appearance.preview.medium': 'Medium subtitle',
'settings.appearance.preview.normal': 'Normal body text',
'settings.appearance.preview.small': 'Small caption / address',
'settings.appearance.example.large': 'Headings, big numbers',
'settings.appearance.example.medium': 'Sub-headings',
'settings.appearance.example.normal': 'Place names, descriptions',
'settings.appearance.example.small': 'Addresses, labels',
'settings.appearance.experimental': 'Experimental',
'settings.appearance.mobileNav': '하단 내비게이션 바',
'settings.appearance.mobileNav.hint':
'바에 표시할 항목과 「더보기」에 넣을 항목을 선택하세요. 대시보드는 항상 맨 앞에 고정됩니다.',
'settings.appearance.mobileNav.inBar': '바에 표시',
'settings.appearance.mobileNav.underMore': '「더보기」에 표시',
'settings.appearance.mobileNav.moreEmpty': '아직 비어 있습니다 — 모든 항목이 바에 들어갑니다.',
'settings.appearance.mobileNav.pinned': '고정됨',
'settings.appearance.mobileNav.toMore': '「더보기」에 넣기',
'settings.appearance.mobileNav.toBar': '바에 넣기',
'settings.appearance.dashOrder': '대시보드 순서',
'settings.appearance.dashOrder.hint':
'휴대폰 대시보드에서 여행 목록과 위젯이 표시되는 순서를 조정하세요. 대표 여행은 항상 맨 위에 고정됩니다.',
'settings.appearance.dashOrder.trips': '여행',
'settings.appearance.dashOrder.hidden': '숨김',
'settings.general.languageRegion': 'Language & region',
'settings.general.travelMap': 'Travel & map',
'settings.general.startup': '시작',
'settings.startPage': '시작 화면',
'settings.startPageDashboard': '대시보드',
'settings.startPageActiveTrip': '진행 중인 여행',
'settings.startPageHint':
'TREK을 열면 지금 진행 중인 여행, 없으면 다음에 시작하는 여행으로 바로 이동합니다. 대시보드가 강조하는 여행과 같습니다.',
'settings.startTripTab': '시작 탭',
'settings.startTripTabHint': '여행이 열릴 탭입니다. 꺼 둔 애드온의 탭이면 대신 계획이 열립니다.',
// ── Offline (#1135)
'settings.offline.cache.title': '오프라인 캐시',
'settings.offline.mode.title': '오프라인 모드',
'settings.offline.mode.force': '오프라인 모드 강제 사용',
'settings.offline.mode.forceHint':
'캐시된 데이터만 사용하고 변경 사항을 대기열에 넣습니다. 다시 연결하여 동기화하려면 끄세요.',
'settings.offline.mode.active':
'오프라인 모드가 켜져 있습니다 — 변경 사항이 대기열에 있으며 모드를 끄면 동기화됩니다.',
'settings.offline.prepare.title': '오프라인 준비',
'settings.offline.prepare.hint':
'연결이 끊기기 전에 필요한 모든 것 — 여행 데이터, 문서, 지도 타일 — 을 다운로드하세요.',
'settings.offline.prepare.button': '오프라인 사용을 위해 다운로드',
'settings.offline.prepare.running': '다운로드 중…',
'settings.offline.prepare.done': '오프라인 사용 준비 완료',
'settings.offline.prepare.phase.trips': '여행 데이터',
'settings.offline.prepare.phase.files': '문서',
'settings.offline.prepare.phase.tiles': '지도 타일',
'settings.offline.resync': '지금 다시 동기화',
'settings.offline.resyncing': '동기화 중…',
'settings.offline.storage.title': '오프라인에 저장할 항목',
'settings.offline.storage.tiles': '지도 타일을 오프라인에 저장',
'settings.offline.storage.tilesHint':
'지도 타일은 저장 공간을 가장 많이 사용합니다. 끄면 여행 데이터와 문서만 오프라인에 저장합니다.',
'settings.offline.storage.tripsTitle': '여행',
'settings.offline.storage.tripOn': '오프라인에 저장됨',
'settings.offline.storage.tripOff': '저장 안 됨',
'settings.offline.clear': '캐시 지우기',
'settings.offline.clearConfirm':
'모든 오프라인 여행 데이터를 지울까요? 온라인일 때 언제든지 다시 동기화할 수 있습니다.',
'settings.offline.stats.trips': '캐시된 여행',
'settings.offline.stats.pending': '대기 중인 변경 사항',
'settings.offline.stats.failed': '실패한 변경 사항',
'settings.offline.stats.conflicts': '충돌',
'settings.offline.empty': '아직 캐시된 여행이 없습니다. 인터넷에 연결하여 동기화하세요.',
'settings.offline.loading': '불러오는 중…',
'settings.offline.conflicts.title': '동기화 충돌',
'settings.offline.conflicts.hint':
'오프라인에서 변경한 내용이 서버의 최신 변경 내용과 충돌합니다. 보관할 버전을 선택하세요.',
'settings.offline.conflicts.keepMine': '내 버전 유지',
'settings.offline.conflicts.keepServer': '상대 버전 유지',
'settings.offline.conflicts.mine': '내 버전',
'settings.offline.conflicts.server': '서버 버전',
'settings.offline.conflicts.item': '“{name}” 변경',
'settings.offline.conflicts.strategyTitle': '충돌이 발생하면',
'settings.offline.conflicts.strategy.ask': '매번 묻기',
'settings.offline.conflicts.strategy.mine': '항상 내 버전 유지',
'settings.offline.conflicts.strategy.server': '항상 서버 버전 유지',
'settings.offline.banner.offline': '오프라인',
'settings.offline.banner.forced': '오프라인 모드',
'settings.offline.banner.queued': '오프라인 · {count}개 대기 중',
'settings.offline.banner.syncing': '{count}개 동기화 중…',
'settings.offline.banner.failed': '동기화 실패: {count}',
'settings.offline.banner.conflicts': '충돌: {count}',
'settings.pluginActivity.title': '플러그인 활동',
'settings.pluginActivity.description': '플러그인이 사용자를 대신해 수행한 모든 작업을 최신순으로 보여줍니다.',
'settings.pluginActivity.empty': '아직 플러그인 활동이 없습니다.',
'settings.pluginActivity.refresh': '새로고침',
'settings.pluginActivity.columns.plugin': '플러그인',
'settings.pluginActivity.columns.action': '작업',
'settings.pluginActivity.columns.resource': '리소스',
'settings.pluginActivity.columns.when': '시간',
'settings.pluginActivity.columns.status': '결과',
'settings.alwaysShowRoutes': '예약 경로 항상 표시',
'settings.alwaysShowRoutesHint':
'항공편, 기차 등 모든 예약의 경로를 개별적으로 켤 필요 없이 지도에 자동으로 표시합니다.',
};
export default settings;