mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-21 22:46:32 +00:00
77162aa8d5
The switch a road tripper keeps asking for has never worked. OSRM's `exclude` is the only
avoidance TREK has, and the two public hosts it ships with answer it HTTP 400 on every
leg: their car profile is built without excludable classes, and their own Lua says why
("no memory for classes on demo server"). So "drive this without the tolls" produced
nothing at all on a default install, and the fallback inside the alternatives bar quietly
gave up after one refusal per host.
FOSSGIS runs a public Valhalla on the whole planet next to that OSRM, keyless, and there
avoidance is a runtime weighting rather than a profile that has to be rebuilt. This adds
it as a second engine asked only the questions the first cannot answer, and puts three
switches under the road trip settings that change the road itself rather than offering an
alternative beside it. Paris to Lyon measured 465.8 km / 297 min with tolls against
492.0 km / 454 min without; Hamburg to Copenhagen comes back ferry-free at 469.8 km,
which OSRM cannot produce at all — where a ferry IS the crossing it answers NoRoute
rather than driving round.
Four things the docs would have got wrong, all measured against the live instance:
- `format=osrm` does not carry `has_toll`. That flag is the entire reason for doing this,
and it exists only in the native answer — which is also 5.7x smaller, because the OSRM
shape drags every intersection along. So the adapter translates instead of borrowing a
familiar envelope.
- Without a `radius` Valhalla refuses a point it cannot bind to a road, where OSRM still
snaps one. Vienna's Stephansdom, in a pedestrian zone, answers error 442 until a search
radius is allowed. TREK is full of such places, so every location carries one.
- Ten locations is a hard cap and a road trip day is bundled into one request. A day over
it is split into runs overlapping by one point, which is exact rather than approximate:
a measured six-stop day came back within two metres and under a second of the same day
asked whole.
- Its drive times run 5.4 % above OSRM's over ten European legs and 36 % above on one, and
those times feed the arrival clocks of a day. So a day is answered by one engine or by
neither, never by both, and a piece that will not answer loses the whole day rather than
half of it — the schedule chains leg times blindly and would otherwise print a complete,
plausible, silently wrong timetable.
Because the weighting can fail, the honest surface is the answer rather than the request.
`use_tolls: 0` still returns a tolled road where there is no untolled crossing, so what
the road actually turned out to be is read back per leg, and a day that could not avoid
what it was asked to avoid says so on its own header instead of wearing a label the road
disproves. The switches disable themselves, with a reason, on an instance pointed at its
own OSRM: that operator chose against public hosts, and a second one they never asked for
would undo the choice.
Two things that would have broken quietly and did not:
- The route cache keys on `profile:unit:coords` and is shared with the day planner, the
studio and the booking geometry. Without the avoidance in the key, flipping a switch
returns the old road out of cache in under a millisecond — and worse, an avoiding answer
stored under the plain key hands those other callers a road nobody drives.
- `snapped` is OSRM-only and carries the dashed kerb-to-door spur from #2273. Valhalla
echoes the coordinates it was given and never says where it bound them, but the ends of
a leg's line are exactly those points: measured against Füssen, its first vertex matches
OSRM's snapped location to the digit.
The alternatives bar gets the same engine, which finally makes its "no motorway" and "no
tolls" offers appear on a default install, plus a ferry-free one. `sameRoad` now compares
geometry rather than numbers there, because two engines' distances for the same road sit
kilometres apart and the old 200 m tolerance called that a discovery.
Desktop only, like the whole road trip mode: nothing under client/src/mobile renders it.
567 lines
39 KiB
TypeScript
567 lines
39 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.plugins.requiredMissing': '"{field}"은(는) 필수입니다',
|
|
'settings.tabs.account': '계정',
|
|
'settings.tabs.offline': '오프라인',
|
|
'settings.tabs.about': '정보',
|
|
'settings.map': '지도',
|
|
'settings.mapTemplate': '지도 템플릿',
|
|
'settings.mapTemplatePlaceholder.select': '템플릿 선택...',
|
|
'settings.mapDefaultHint': '비워두면 OpenStreetMap (기본값) 사용',
|
|
'settings.routingBase': '자체 경로 서버',
|
|
'settings.routingBaseHint': '자체 OSRM 인스턴스입니다. 비워 두면 초당 약 한 번의 요청만 허용하는 공개 서버를 사용합니다. 하루치는 충분하지만 로드트립에는 빠듯합니다. 서버를 다시 시작해야 적용됩니다.',
|
|
'settings.valhallaBase': '자체 Valhalla 인스턴스',
|
|
'settings.valhallaBaseHint': '자체 Valhalla 인스턴스. 구간에서 통행료, 고속도로, 페리를 피해야 할 때 이 서버에 묻습니다. 공개 OSRM 서버는 이에 답하지 못합니다. 비워 두면 FOSSGIS의 공개 Valhalla를 쓰지만, 위에 자체 라우팅 서버를 적어 두었다면 두 번째 엔진은 아예 묻지 않습니다. 서버를 다시 시작한 뒤에 적용됩니다.',
|
|
'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"를 새깁니다. 키를 입력하기 전까지 TREK은 기본 배경 지도를 표시합니다.',
|
|
'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.notifyCollectionInvite': '컬렉션 초대',
|
|
'settings.notifySynologySessionCleared': 'Synology 세션이 초기화되었습니다',
|
|
'settings.notifyPluginNotification': '플러그인 알림',
|
|
'settings.notifyPhotosShared': '공유된 사진 (Immich)',
|
|
'settings.notifyCollabMessage': '채팅 메시지 (Collab)',
|
|
'settings.notifyPackingTagged': '짐 목록: 배정',
|
|
'settings.notifyWebhook': '웹훅 알림',
|
|
'settings.notifyVersionAvailable': '새 버전 사용 가능',
|
|
'settings.notifyReplicaFailure': '스토리지 복제본 오류',
|
|
'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, 루프백 HTTP 또는 앱 전용 스킴(myapp://)을 쓸 수 있습니다. 루프백 URI의 포트를 빼고 정확히 일치해야 합니다.',
|
|
'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.storage.tripFinished': '종료됨. 켜야만 저장됩니다.',
|
|
'settings.offline.notice.stored': '이 기기에 여행 {count}개를 저장했습니다',
|
|
'settings.offline.notice.nothing': '저장할 항목이 없습니다. 보관할 여행을 켜세요.',
|
|
'settings.offline.notice.busy': '이미 동기화가 진행 중입니다. 잠시 후 다시 시도하세요.',
|
|
'settings.offline.notice.offline': '연결되지 않았습니다. 오프라인으로 저장하려면 연결하세요.',
|
|
'settings.offline.notice.signedOut': '세션이 종료되었습니다. 동기화하려면 다시 로그인하세요.',
|
|
'settings.offline.notice.failed': '다운로드를 끝낼 수 없었습니다. 연결을 확인하고 다시 시도하세요.',
|
|
'settings.offline.notice.loadFailed': '이 기기의 오프라인 저장소를 읽지 못했습니다. 보통 캐시를 지우면 해결됩니다.',
|
|
'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':
|
|
'항공편, 기차 등 모든 예약의 경로를 개별적으로 켤 필요 없이 지도에 자동으로 표시합니다.',
|
|
|
|
// Public API keys (Settings -> Integrations)
|
|
'settings.apiKeys.title': 'API 키',
|
|
'settings.apiKeys.description': '공개 API용 키입니다. 다른 소프트웨어가 여행을 읽을 수 있습니다. 읽기 전용이라 무엇도 바꾸거나 지울 수 없습니다.',
|
|
'settings.apiKeys.create': '키 만들기',
|
|
'settings.apiKeys.empty': '아직 키가 없습니다. 다른 소프트웨어를 연결하려면 하나 만드세요.',
|
|
'settings.apiKeys.createdAt': '생성일',
|
|
'settings.apiKeys.usedAt': '마지막 사용',
|
|
'settings.apiKeys.deleteTitle': '키 삭제',
|
|
'settings.apiKeys.deleteMessage': '이 키를 쓰는 모든 것이 즉시 작동을 멈춥니다. 되돌릴 수 없습니다.',
|
|
'settings.apiKeys.deleted': '키를 삭제했습니다',
|
|
'settings.apiKeys.deleteFailed': '키를 삭제하지 못했습니다',
|
|
'settings.apiKeys.createFailed': '키를 만들지 못했습니다',
|
|
'settings.apiKeys.copy': '복사',
|
|
'settings.apiKeys.docsHint': '키를 "Authorization: Bearer ..." 또는 "X-API-Key: ..." 로 /api/v1 에 보내세요.',
|
|
'settings.apiKeys.modal.createTitle': 'API 키 만들기',
|
|
'settings.apiKeys.modal.name': '이름',
|
|
'settings.apiKeys.modal.namePlaceholder': '예: Dawarich',
|
|
'settings.apiKeys.modal.nameHint': '나중에 키를 알아보기 위한, 본인용 이름입니다.',
|
|
'settings.apiKeys.modal.creating': '만드는 중...',
|
|
'settings.apiKeys.modal.create': '만들기',
|
|
'settings.apiKeys.modal.createdTitle': 'API 키를 만들었습니다',
|
|
'settings.apiKeys.modal.createdWarning': '지금 키를 복사하세요. 한 번만 표시되며 나중에 다시 확인할 수 없습니다.',
|
|
'settings.apiKeys.modal.done': '완료',
|
|
};
|
|
|
|
export default settings;
|