Files
TREK/shared/src/i18n/ko/admin.ts
T
Maurice fa8272c522 feat(i18n): the paddle checklist and safety strings in every language
The checklist, its statuses, choices and notices, and the safety note of a
paddle tour, translated into all 27 languages. A spec keeps the checklist
strings in English and German from claiming the water is safe, cleared or
passable. The paddle strings of the last batch that Prettier had not seen
are formatted.
2026-10-17 00:29:18 +00:00

836 lines
65 KiB
TypeScript

import type { TranslationStrings } from '../types';
const admin: TranslationStrings = {
'admin.notifications.title': '알림',
'admin.notifications.hint': '알림 채널을 하나 선택하세요. 한 번에 하나만 활성화할 수 있습니다.',
'admin.notifications.none': '비활성화',
'admin.notifications.email': '이메일 (SMTP)',
'admin.notifications.webhook': '웹훅',
'admin.notifications.ntfy': 'Ntfy',
'admin.ntfy.hint':
'사용자가 자신의 ntfy 토픽을 설정하여 푸시 알림을 받을 수 있습니다. 아래에 기본 서버를 설정하면 사용자 설정에 미리 채워집니다.',
'admin.notifications.save': '알림 설정 저장',
'admin.notifications.saved': '알림 설정이 저장되었습니다',
'admin.notifications.testWebhook': '테스트 웹훅 전송',
'admin.notifications.testWebhookSuccess': '테스트 웹훅이 성공적으로 전송되었습니다',
'admin.notifications.testWebhookFailed': '테스트 웹훅 실패',
'admin.notifications.testNtfy': '테스트 ntfy 전송',
'admin.notifications.testNtfySuccess': '테스트 ntfy가 성공적으로 전송되었습니다',
'admin.notifications.testNtfyFailed': '테스트 ntfy 실패',
'admin.notifications.emailPanel.title': '이메일 (SMTP)',
'admin.notifications.webhookPanel.title': '웹훅',
'admin.notifications.webPushPanel.title': '웹 푸시',
'admin.notifications.webPushPanel.hint':
'TREK이 닫혀 있어도 사용자가 브라우저를 통해 휴대폰과 컴퓨터에서 알림을 받을 수 있습니다. HTTPS가 필요하며, iPhone과 iPad에서는 TREK을 홈 화면에 추가해야 합니다.',
'admin.notifications.inappPanel.title': '앱 내',
'admin.notifications.inappPanel.hint': '앱 내 알림은 항상 활성화되어 있으며 전역으로 비활성화할 수 없습니다.',
'admin.notifications.adminWebhookPanel.title': '관리자 웹훅',
'admin.notifications.adminWebhookPanel.hint':
'이 웹훅은 관리자 알림 전용입니다 (예: 버전 알림). 사용자별 웹훅과 별개이며 설정 시 항상 실행됩니다.',
'admin.notifications.adminWebhookPanel.saved': '관리자 웹훅 URL이 저장되었습니다',
'admin.notifications.adminWebhookPanel.testSuccess': '테스트 웹훅이 성공적으로 전송되었습니다',
'admin.notifications.adminWebhookPanel.testFailed': '테스트 웹훅 실패',
'admin.notifications.adminWebhookPanel.alwaysOnHint': 'URL이 설정되면 관리자 웹훅은 항상 실행됩니다',
'admin.notifications.adminNtfyPanel.title': '관리자 Ntfy',
'admin.notifications.adminNtfyPanel.hint':
'이 ntfy 토픽은 관리자 알림 전용입니다 (예: 버전 알림). 사용자별 토픽과 별개이며 설정 시 항상 실행됩니다.',
'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy 서버 URL',
'admin.notifications.adminNtfyPanel.serverHint':
'사용자 ntfy 알림의 기본 서버로도 사용됩니다. 비워두면 ntfy.sh가 기본값입니다. 사용자는 자신의 설정에서 변경할 수 있습니다.',
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
'admin.notifications.adminNtfyPanel.topicLabel': '관리자 토픽',
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
'admin.notifications.adminNtfyPanel.tokenLabel': '액세스 토큰 (선택)',
'admin.notifications.adminNtfyPanel.tokenCleared': '관리자 액세스 토큰이 삭제되었습니다',
'admin.notifications.adminNtfyPanel.saved': '관리자 ntfy 설정이 저장되었습니다',
'admin.notifications.adminNtfyPanel.test': '테스트 ntfy 전송',
'admin.notifications.adminNtfyPanel.testSuccess': '테스트 ntfy가 성공적으로 전송되었습니다',
'admin.notifications.adminNtfyPanel.testFailed': '테스트 ntfy 실패',
'admin.notifications.adminNtfyPanel.alwaysOnHint': '토픽이 설정되면 관리자 ntfy는 항상 실행됩니다',
'admin.notifications.adminNotificationsHint': '관리자 전용 알림 (예: 버전 알림)을 전달할 채널을 설정하세요.',
'admin.notificationDefaults.title': '사용자 기본값',
'admin.notificationDefaults.hint':
'각 사용자의 알림 초기 상태입니다. "끔"은 사용자가 직접 켤 수 있고, "차단"은 모두에게 꺼지며 설정에서 잠금으로 표시됩니다. 해당 칸을 직접 바꾸지 않은 모든 사용자에게 적용됩니다.',
'admin.notificationDefaults.on': '켬',
'admin.notificationDefaults.off': '끔',
'admin.notificationDefaults.blocked': '차단',
'admin.notificationDefaults.cycle': '클릭하여 변경: {next}',
'admin.notifications.tripReminders.title': '여행 리마인더',
'admin.notifications.tripReminders.hint':
'여행 시작 전에 리마인더 알림을 전송합니다 (여행에 리마인더 일수가 설정되어 있어야 합니다).',
'admin.notifications.tripReminders.enabled': '여행 리마인더 활성화됨',
'admin.notifications.tripReminders.disabled': '여행 리마인더 비활성화됨',
'admin.smtp.title': '이메일 및 알림',
'admin.smtp.hint': '이메일 알림 전송을 위한 SMTP 설정입니다.',
'admin.smtp.testButton': '테스트 이메일 전송',
'admin.webhook.hint': '사용자가 알림용 웹훅 URL을 설정할 수 있습니다 (Discord, Slack 등).',
'admin.smtp.testSuccess': '테스트 이메일이 성공적으로 전송되었습니다',
'admin.smtp.testFailed': '테스트 이메일 실패',
'admin.title': '관리자',
'admin.subtitle': '사용자 관리 및 시스템 설정',
'admin.tabs.users': '사용자',
'admin.tabs.categories': '카테고리',
'admin.tabs.backup': '백업',
'admin.tabs.notifications': '알림',
'admin.tabs.audit': '감사',
'admin.stats.users': '사용자',
'admin.stats.trips': '여행',
'admin.stats.places': '장소',
'admin.stats.photos': '사진',
'admin.stats.files': '파일',
'admin.table.user': '사용자',
'admin.table.email': '이메일',
'admin.table.role': '역할',
'admin.table.created': '생성일',
'admin.table.lastActive': '마지막 활동',
'admin.table.actions': '작업',
'admin.you': '(나)',
'admin.editUser': '사용자 편집',
'admin.newPassword': '새 비밀번호',
'admin.newPasswordHint': '비워두면 현재 비밀번호 유지',
'admin.deleteUser': '사용자 "{name}"을(를) 삭제할까요? 모든 여행이 영구 삭제됩니다.',
'admin.deleteUserTitle': '사용자 삭제',
'admin.newPasswordPlaceholder': '새 비밀번호 입력…',
'admin.toast.loadError': '관리자 데이터 불러오기 실패',
'admin.toast.userUpdated': '사용자가 업데이트되었습니다',
'admin.toast.updateError': '업데이트 실패',
'admin.toast.userDeleted': '사용자가 삭제되었습니다',
'admin.toast.deleteError': '삭제 실패',
'admin.toast.cannotDeleteSelf': '자신의 계정은 삭제할 수 없습니다',
'admin.toast.userCreated': '사용자가 생성되었습니다',
'admin.toast.createError': '사용자 생성 실패',
'admin.toast.fieldsRequired': '사용자 이름, 이메일, 비밀번호가 필요합니다',
'admin.createUser': '사용자 만들기',
'admin.invite.title': '초대 링크',
'admin.invite.subtitle': '일회용 회원가입 링크 만들기',
'admin.invite.create': '링크 만들기',
'admin.invite.createAndCopy': '만들기 및 복사',
'admin.invite.empty': '아직 초대 링크가 없습니다',
'admin.invite.maxUses': '최대 사용 횟수',
'admin.invite.expiry': '만료 기간',
'admin.invite.uses': '사용됨',
'admin.invite.expiresAt': '만료',
'admin.invite.createdBy': '작성자',
'admin.invite.active': '활성',
'admin.invite.expired': '만료됨',
'admin.invite.usedUp': '사용 완료',
'admin.invite.copied': '초대 링크가 클립보드에 복사되었습니다',
'admin.invite.copyLink': '링크 복사',
'admin.invite.deleted': '초대 링크가 삭제되었습니다',
'admin.invite.createError': '초대 링크 생성 실패',
'admin.invite.deleteError': '초대 링크 삭제 실패',
'admin.tabs.settings': '설정',
'admin.allowRegistration': '회원가입 허용',
'admin.allowRegistrationHint': '새 사용자가 직접 회원가입할 수 있습니다',
'admin.authMethods': '인증 방법',
'admin.passwordLogin': '비밀번호 로그인',
'admin.passwordLoginHint': '사용자가 이메일과 비밀번호로 로그인할 수 있습니다',
'admin.passwordRegistration': '비밀번호 회원가입',
'admin.passwordRegistrationHint': '새 사용자가 이메일과 비밀번호로 가입할 수 있습니다',
'admin.oidcLogin': 'SSO 로그인',
'admin.oidcLoginHint': '사용자가 SSO로 로그인할 수 있습니다',
'admin.oidcRegistration': 'SSO 자동 프로비저닝',
'admin.oidcRegistrationHint': '새 SSO 사용자의 계정을 자동으로 생성합니다',
'admin.envOverrideHint': '비밀번호 로그인 설정은 OIDC_ONLY 환경 변수로 제어되며 여기서 변경할 수 없습니다.',
'admin.lockoutWarning': '최소 하나의 로그인 방법이 활성화되어 있어야 합니다',
'admin.requireMfa': '2단계 인증 (2FA) 요구',
'admin.requireMfaHint': '2FA가 없는 사용자는 앱을 사용하기 전에 설정에서 설정을 완료해야 합니다.',
'admin.apiKeys': 'API 키',
'admin.apiKeysHint': '장소 데이터의 출처. TREK 색인에는 키가 필요 없으며, 아래 두 제공자는 선택 사항입니다.',
'admin.trekApi.badgeDefault': '권장 기본 소스',
'admin.googleCaveat.badge': '권장하지 않음',
'admin.googleCaveat.body':
'TREK은 오픈 소스이며 이 점에서 중립이 아닙니다. 이 규모에서 평점과 일반 상점 사진은 Google에만 있고, 그것이 독점입니다. 이 입력란은 대안이 없어서 있는 것이지 권해서가 아닙니다. 쓰면 모든 조회가 Google로 갑니다.',
'admin.trekApi.tagline':
'TREK 자체 장소 색인. Google 키 없이, 할당량 없이, 누구도 검색 횟수를 세지 않는 채로 찾습니다.',
'admin.trekApi.factPlaces': '전 세계 7,363만 개 장소',
'admin.trekApi.factNoKey': '키도 할당량도 없음',
'admin.trekApi.factOffline': '국가별 패키지는 오프라인에서도 동작',
'admin.trekApi.factPrivacy': '검색어는 결코 기록하지 않음',
'admin.trekApi.more': '무엇이 들어 있나',
'admin.trekApi.fieldPhone': '전화',
'admin.trekApi.fieldStableId': '고정 식별자',
'admin.trekApi.includedNote':
'설명은 장소 자체의 웹사이트에서, 영업시간은 입력되어 있는 경우 OpenStreetMap에서 가져옵니다.',
'admin.trekApi.notRatings': '평점',
'admin.trekApi.notPhotos': '일반 상점의 사진',
'admin.trekApi.notIncludedNote':
'둘 다 어떤 값을 치르더라도 공개 데이터에는 없습니다. 이 둘에는 Google 키가 유일한 길로 남습니다.',
'admin.trekApi.sourcesLabel': '출처',
'admin.trekApi.sourcesNote': '응답의 모든 항목은 이 가운데 어디에서 왔는지 밝힙니다.',
'admin.trekApi.included': '포함',
'admin.trekApi.notIncluded': '미포함',
'admin.mapsKey': 'Google Maps API 키',
'admin.mapsKeyHint': '장소 검색에 필요합니다. console.cloud.google.com에서 발급',
'admin.mapsKeyHintLong':
'Google API 키가 없어도 권장되는 TREK API가 사용됩니다. 키가 있으면 사진, 평점, 영업시간을 추가로 불러올 수 있습니다. 키는 console.cloud.google.com에서 만들 수 있습니다.',
'admin.recommended': '권장',
'admin.weatherKey': 'OpenWeatherMap API 키',
'admin.weatherKeyHint': '날씨 데이터용. openweathermap.org에서 무료 발급',
'admin.unsplashKey': 'Unsplash API 키',
'admin.unsplashKeyHint': '이미지 검색용. unsplash.com/developers에서 무료 발급',
'admin.amapKey': 'Amap(高德地图) API 키',
'admin.amapKeyHint':
'Google에 접속할 수 없고 OpenStreetMap 데이터도 부족한 중국 본토에서 장소를 검색할 때 사용합니다. JS API 키가 아니라 "Web 服务"(웹 서비스) 유형의 키가 필요합니다. console.amap.com에서 발급받을 수 있습니다.',
'admin.keyFromEnv': '{name}(으)로 설정됨',
'admin.placesProvider.title': '장소 검색 제공자',
'admin.placesProvider.subtitle':
'TREK 자체 색인과 OpenStreetMap이 모든 검색에 답합니다. 여기서는 둘이 아무것도 찾지 못했을 때 누구에게 더 물을지 고릅니다. 자동은 키가 있으면 Google을, 그다음 Amap을 씁니다.',
'admin.placesProvider.auto': '자동',
'admin.placesProvider.google': 'Google Places',
'admin.placesProvider.amap': 'Amap(高德地图)',
'admin.placesProvider.openstreetmap': 'OpenStreetMap',
'admin.placesProvider.missingKey':
'선택한 공급자에 API 키가 설정되어 있지 않아 장소 검색은 TREK 색인과 OpenStreetMap만 응답합니다.',
'admin.placesProvider.saved': '장소 검색 제공자를 저장했습니다',
'admin.validateKey': '테스트',
'admin.keyValid': '연결됨',
'admin.keyInvalid': '유효하지 않음',
'admin.keySaved': 'API 키가 저장되었습니다',
'admin.oidcTitle': 'Single Sign-On (OIDC)',
'admin.oidcSubtitle': 'Google, Apple, Authentik 또는 Keycloak 등 외부 공급자를 통한 로그인을 허용합니다.',
'admin.oidcDisplayName': '표시 이름',
'admin.oidcIssuer': '발급자 URL',
'admin.oidcIssuerHint': '공급자의 OpenID Connect 발급자 URL. 예: https://accounts.google.com',
'admin.oidcSaved': 'OIDC 설정이 저장되었습니다',
'admin.oidcOnlyMode': '비밀번호 인증 비활성화',
'admin.oidcOnlyModeHint': '활성화하면 SSO 로그인만 허용됩니다. 비밀번호 기반 로그인 및 회원가입이 차단됩니다.',
'admin.fileTypes': '허용된 파일 형식',
'admin.fileTypesHint': '사용자가 업로드할 수 있는 파일 형식을 설정합니다.',
'admin.fileTypesFormat': '쉼표로 구분된 확장자 (예: jpg,png,pdf,doc). 모든 형식을 허용하려면 *를 사용하세요.',
'admin.fileTypesSaved': '파일 형식 설정이 저장되었습니다',
'admin.googleOptions': '키의 사용 범위',
'admin.googleOptionsSummary': '{total}개 중 {on}개 켜짐',
'admin.placesPhotos.title': '장소 사진',
'admin.placesPhotos.subtitle':
'Google Places API에서 사진을 가져옵니다. API 할당량 절약을 위해 비활성화할 수 있습니다. Wikimedia 사진은 영향을 받지 않습니다.',
'admin.placesAutocomplete.title': '장소 자동완성',
'admin.placesAutocomplete.subtitle':
'검색 제안에 Google Places API를 사용합니다. API 할당량 절약을 위해 비활성화할 수 있습니다.',
'admin.placesDetails.title': '장소 상세 정보',
'admin.placesDetails.subtitle':
'Google Places API에서 상세 장소 정보 (영업 시간, 평점, 웹사이트)를 가져옵니다. API 할당량 절약을 위해 비활성화할 수 있습니다.',
'admin.placesEnrich.title': '장소 정보 보강',
'admin.placesEnrich.subtitle':
'장소를 추가할 때 사진과 설명을 표시합니다. Wikipedia와 OpenStreetMap은 항상 사용되며, 장소 사진 또는 장소 세부정보가 켜져 있으면 Google도 함께 사용됩니다.',
'admin.placesGoogleOnly.title': 'Google로만 검색',
'admin.placesGoogleOnly.subtitle':
'모든 검색과 제안이 Google Places로 갑니다. 끄면 TREK 자체 색인과 OpenStreetMap이 먼저 답하고, 둘 다 찾지 못할 때만 Google에 묻습니다.',
'admin.placesGoogleOnly.missingKey':
'Google Maps API 키가 필요합니다. 키가 없으면 이 스위치와 상관없이 TREK 색인과 OpenStreetMap으로 검색합니다.',
'admin.placesGoogleOnly.otherProvider':
'장소 제공자로 Google이 필요합니다. Amap 또는 OpenStreetMap을 선택한 동안에는 이 스위치와 상관없이 검색이 Google로 가지 않습니다.',
'admin.googleQuota.title': 'Google 호출 일일 한도',
'admin.googleQuota.subtitle':
'한도에 도달하면 다음 날(UTC)까지 Google을 호출하지 않고 OpenStreetMap으로 검색합니다. 비워 두면 한도가 없습니다.',
'admin.googleQuota.placeholder': '한도 없음',
'admin.googleQuota.usedToday': '오늘: {used}',
'admin.googleQuota.usedOfLimit': '오늘: {used} / {limit}',
'admin.googleQuota.reached': '한도 도달({used}), 내일까지 Google 일시 중지',
'admin.googleQuota.saved': '일일 한도를 저장했습니다',
'admin.transitProvider.title': '대중교통 제공자',
'admin.transitProvider.subtitle': '대중교통 검색에 응답하는 서비스입니다.',
'admin.transitProvider.transitous': 'Transitous (무료)',
'admin.transitProvider.google': 'Google',
'admin.transitProvider.transitousHint': '커뮤니티 GTFS 피드. 무료이며 키가 필요 없고 유럽 커버리지가 가장 좋습니다.',
'admin.transitProvider.googleHint':
'위의 Google 키를 사용하여 Transitous에 데이터가 없는 지역을 처리합니다. 검색당 과금되며, 키가 없으면 Transitous를 사용합니다.',
'admin.transitProvider.noKeyWarning':
'Google이 선택되었지만 Google 키가 설정되지 않았습니다 — 대중교통 검색은 여전히 Transitous를 사용합니다. 위의 API 키에서 키를 추가하세요.',
'admin.transitProvider.personalKeyWarning':
'본인의 Google 키만 설정되어 있어 다른 멤버의 검색은 여전히 Transitous로 대체됩니다. 인스턴스 전체에 적용하려면 관리자로 위에서 키를 저장하세요.',
'admin.placeShadow.title': '장소 검색 기록',
'admin.placeShadow.subtitle':
'어떤 검색 결과가 선택되었는지 기록하여, 나중에 다른 장소 색인을 실제 검색으로 평가할 수 있게 합니다. 이 인스턴스 밖으로 나가는 것은 없으며 관리자는 언제든지 기록을 내보내거나 삭제할 수 있습니다.',
'admin.bagTracking.title': '가방 추적',
'admin.bagTracking.subtitle': '짐 항목에 무게 및 가방 배정을 활성화합니다',
'admin.collab.chat.title': '채팅',
'admin.collab.chat.subtitle': '여행 협업을 위한 실시간 메시지',
'admin.collab.notes.title': '메모',
'admin.collab.notes.subtitle': '공유 메모 및 문서',
'admin.collab.polls.title': '투표',
'admin.collab.polls.subtitle': '그룹 투표',
'admin.collab.whatsnext.title': '다음 할 일',
'admin.collab.whatsnext.subtitle': '활동 제안 및 다음 단계',
'admin.tabs.config': '개인 설정',
'admin.tabs.defaults': '기본값',
'admin.defaultSettings.title': '기본 사용자 설정',
'admin.defaultSettings.description':
'인스턴스 전체 기본값을 설정합니다. 설정을 변경하지 않은 사용자에게 이 값이 표시됩니다. 사용자의 변경 사항이 항상 우선합니다.',
'admin.defaultSettings.saved': '기본값이 저장되었습니다',
'admin.defaultSettings.reset': '기본 내장값으로 초기화',
'admin.defaultSettings.resetToBuiltIn': '초기화',
'admin.tabs.templates': '짐 목록 템플릿',
'admin.packingTemplates.title': '짐 목록 템플릿',
'admin.packingTemplates.subtitle': '여행을 위한 재사용 가능한 짐 목록을 만드세요',
'admin.packingTemplates.create': '새 템플릿',
'admin.packingTemplates.namePlaceholder': '템플릿 이름 (예: 해변 휴가)',
'admin.packingTemplates.empty': '아직 템플릿이 없습니다',
'admin.packingTemplates.items': '항목',
'admin.packingTemplates.categories': '카테고리',
'admin.packingTemplates.itemName': '항목 이름',
'admin.packingTemplates.itemCategory': '카테고리',
'admin.packingTemplates.categoryName': '카테고리 이름 (예: 의류)',
'admin.packingTemplates.addCategory': '카테고리 추가',
'admin.packingTemplates.created': '템플릿이 생성되었습니다',
'admin.packingTemplates.deleted': '템플릿이 삭제되었습니다',
'admin.packingTemplates.loadError': '템플릿 불러오기 실패',
'admin.packingTemplates.createError': '템플릿 생성 실패',
'admin.packingTemplates.deleteError': '템플릿 삭제 실패',
'admin.packingTemplates.deleteCategoryError': '카테고리를 삭제하지 못했습니다',
'admin.packingTemplates.deleteItemError': '항목을 삭제하지 못했습니다',
'admin.packingTemplates.saveError': '저장 실패',
'admin.tabs.addons': '애드온',
'admin.tabs.plugins': '플러그인',
'admin.tabs.storage': '스토리지',
'admin.plugins.rescan': '다시 스캔',
'admin.plugins.rescanned': '플러그인 폴더를 다시 스캔했습니다',
'admin.plugins.upload': '플러그인 업로드',
'admin.plugins.dropToUpload': '플러그인 .zip을 여기에 놓아 설치',
'admin.plugins.uploaded': '플러그인 “{name}” 업로드됨 — 실행하려면 활성화하세요',
'admin.plugins.sideloaded': '수동 로드',
'admin.plugins.devLinkBadge': 'Dev-Link',
'admin.plugins.devLinkHint': '로컬 빌드 디렉터리에서 로드되어 실제 데이터로 핫 리로드됩니다 — 개발 전용',
'admin.plugins.devLinkTitle': '로컬 플러그인 링크',
'admin.plugins.devLinkPathPlaceholder': '/absolute/path/to/your/plugin',
'admin.plugins.devLinkButton': '링크',
'admin.plugins.devLinkLinked': '{id} 링크됨 — 실행하려면 활성화하세요',
'admin.plugins.sideloadedHint': '수동으로 업로드됨 — 레지스트리가 아니며 서명·검토되지 않음',
'admin.plugins.browse': '플러그인 둘러보기',
'admin.plugins.installed': '설치됨',
'admin.plugins.install': '설치',
'admin.plugins.registryEmpty': '아직 레지스트리에 사용 가능한 플러그인이 없습니다.',
'admin.plugins.actionError': '작업 실패',
'admin.plugins.activate': '활성화',
'admin.plugins.activated': '플러그인이 활성화되었습니다',
'admin.plugins.deactivate': '비활성화',
'admin.plugins.deactivated': '플러그인이 비활성화되었습니다',
'admin.plugins.viewErrors': '오류 로그 보기',
'admin.plugins.errorLog': '오류 로그',
'admin.plugins.allowedHosts': '허용된 호스트',
'admin.plugins.allowedHosts.hint':
'이 플러그인은 관리자만 알 수 있는 서비스(자체 호스팅 서버)와 통신합니다. 접근을 허용할 호스트를 추가하세요 — 그 외에는 접근할 수 없습니다.',
'admin.plugins.allowedHosts.none': '아직 추가된 호스트가 없습니다.',
'admin.plugins.allowedHosts.unsupported':
'이 플러그인은 운영자가 지정하는 호스트를 사용하지 않습니다. 허용 호스트는 매니페스트에 고정되어 있습니다.',
'admin.plugins.allowedHosts.restartNote': '저장하면 플러그인이 재시작되어 새 목록을 적용합니다.',
'admin.plugins.allowedHosts.add': '허용 호스트 추가',
'admin.plugins.allowedHosts.count': '허용 호스트 {n}개',
'admin.plugins.operatorEgressPill': '+ 직접 추가하는 호스트',
'admin.plugins.operatorEgressHint':
'이 플러그인은 관리자만 알 수 있는 서비스(자체 호스팅 서버)와 통신합니다. 설치 후 ⋯ → 허용된 호스트에서 추가하세요. 그 외에는 접근할 수 없습니다.',
'admin.plugins.noErrors': '기록된 오류가 없습니다.',
'admin.plugins.uninstalled': '플러그인이 제거되었습니다',
'admin.plugins.uninstallTitle': '플러그인을 제거할까요?',
'admin.plugins.uninstallBody':
'플러그인이 중지되고 코드가 제거되며 모든 데이터가 삭제됩니다. 이 작업은 되돌릴 수 없습니다.',
'admin.plugins.status.starting': '시작 중…',
'admin.plugins.type.widget': '위젯',
'admin.plugins.type.page': '페이지',
'admin.plugins.type.integration': '통합',
'admin.plugins.type.trip-page': '여행 페이지',
'admin.plugins.reviewed': '검토됨',
'admin.plugins.unreviewed': '검토되지 않음',
'admin.plugins.updated': '플러그인이 업데이트되었습니다',
'admin.plugins.updateTo': '업데이트 → v{version}',
'admin.plugins.enabledToggle': '플러그인 활성화',
'plugins.notFound': '플러그인을 찾을 수 없습니다',
'plugins.frameLoadFailed': 'This plugin could not be loaded.',
'admin.plugins.title': '플러그인',
'admin.plugins.subtitle': '인스턴스에 서드파티 플러그인을 설치하고 관리하세요.',
'admin.plugins.disabledTitle': '플러그인이 비활성화되어 있습니다',
'admin.plugins.disabledBody':
'플러그인 런타임이 꺼져 있습니다 (TREK_PLUGINS_ENABLED). 관리자가 서버 설정에서 활성화하기 전까지 어떤 플러그인도 실행할 수 없습니다.',
'admin.plugins.empty': '아직 설치된 플러그인이 없습니다.',
'admin.plugins.loadError': '플러그인을 불러올 수 없습니다.',
'admin.plugins.scaffoldNote':
'플러그인 설치 및 활성화는 이후 업데이트에서 제공됩니다. 현재 이 패널은 설치된 플러그인만 표시합니다.',
'admin.plugins.status.active': '활성',
'admin.plugins.status.inactive': '비활성',
'admin.plugins.status.disabled': '비활성화됨',
'admin.plugins.status.error': '오류',
'admin.plugins.status.incompatible': '호환되지 않음',
'admin.plugins.details': '상세 정보',
'admin.plugins.detailError': '플러그인 상세 정보를 불러올 수 없습니다.',
'admin.plugins.permissionsTitle': '권한',
'admin.plugins.noPermissions': '이 플러그인은 특별한 권한을 요청하지 않습니다.',
'admin.plugins.egressNote': '연결 가능 호스트: {hosts}',
'admin.plugins.setupTitle': '설정',
'admin.plugins.noSetup': '별도의 설정 없이 바로 사용할 수 있습니다.',
'admin.plugins.scope.instance': '인스턴스 전체',
'admin.plugins.scope.user': '사용자별',
'admin.plugins.fieldRequired': '필수',
'admin.plugins.sourceRepo': '소스 저장소',
'admin.plugins.reportIssue': '문제 신고',
'admin.plugins.homepage': '홈페이지',
'admin.plugins.requiresTrek': 'TREK {version} 이상 필요',
'admin.plugins.reviewedOn': '{date} 검토됨',
'admin.plugins.perm.db:own': '격리된 데이터베이스에 자체 데이터 저장',
'admin.plugins.perm.db:read:trips': '현재 사용자가 접근할 수 있는 여행 읽기',
'admin.plugins.perm.db:read:users': '기본 프로필 정보 읽기 (이름, 아바타 — 자격 증명은 제외)',
'admin.plugins.perm.db:read:costs': '현재 사용자가 접근할 수 있는 지출(예산 항목) 읽기',
'admin.plugins.perm.db:read:packing': '현재 사용자가 접근할 수 있는 여행의 짐 목록 읽기',
'admin.plugins.perm.db:write:packing': '현재 사용자가 편집할 수 있는 여행에서 짐 목록 항목 만들기, 편집 및 삭제',
'admin.plugins.perm.weather:read': '호스트의 캐시된 날씨 예보 읽기(좌표 기준)',
'admin.plugins.perm.db:read:categories': '전역 장소 카테고리 목록 읽기',
'admin.plugins.perm.db:read:tags': '현재 사용자의 태그 읽기',
'admin.plugins.perm.db:write:tags': '현재 사용자의 태그 만들기, 편집 및 삭제',
'admin.plugins.perm.db:read:todos': '현재 사용자가 접근할 수 있는 여행의 할 일 읽기',
'admin.plugins.perm.db:write:todos': '현재 사용자가 편집할 수 있는 여행에서 할 일 만들기, 편집 및 삭제',
'admin.plugins.perm.db:write:atlas':
'현재 사용자의 방문한 국가와 지역을 표시하고 버킷 리스트 관리(Atlas 애드온 필요)',
'admin.plugins.perm.db:write:vacay': '현재 사용자의 활성 계획에서 휴가일과 회사 휴일 전환(Vacay 애드온 필요)',
'admin.plugins.perm.db:write:journal':
'현재 사용자가 편집할 수 있는 일지에서 항목 만들기, 편집 및 삭제(Journey 애드온 필요)',
'admin.plugins.perm.db:write:collections':
'컬렉션을 만들고 편집하며 장소 저장(현재 사용자의 컬렉션 역할 기준, Collections 애드온 필요)',
'admin.plugins.perm.db:write:files':
'현재 사용자가 편집할 수 있는 여행에 파일 첨부(10MB 제한, 차단된 확장자 거부) 및 링크 관리',
'admin.plugins.perm.db:write:collab':
'현재 사용자가 편집할 수 있는 여행에 메모, 투표 및 채팅 메시지 게시(Collab 애드온 필요)',
'admin.plugins.perm.db:write:members':
'여행에 사용자 추가 — 여행 접근 권한 부여; 현재 사용자의 멤버 관리 권한으로 보호',
'admin.plugins.perm.notify:send':
'현재 사용자 또는 그가 속한 여행에 알림(벨 받은함 + 이메일/ntfy) 전송 — 임의의 수신자에게는 보내지 않음',
'admin.plugins.perm.ai:invoke':
'관리자가 구성한 AI 공급자(텍스트 완성 + 문서 추출)를 현재 사용자를 대신하여 실행 — 플러그인은 키를 보유하지 않음',
'admin.plugins.perm.oauth:client':
'호스트가 중개하는 OAuth로 사용자를 대신해 타사 서비스에 연결(토큰은 호스트가 보유하며 플러그인은 볼 수 없음)',
'admin.plugins.perm.db:read:files': '현재 사용자가 접근할 수 있는 여행의 파일 읽기',
'admin.plugins.perm.db:write:reservations': '현재 사용자가 편집할 수 있는 여행에서 예약 만들기, 편집 및 삭제',
'admin.plugins.perm.db:write:accommodations': '현재 사용자가 편집할 수 있는 여행에서 숙소 만들기, 편집 및 삭제',
'admin.plugins.perm.db:read:journal': '현재 사용자의 여행 일지 읽기(Journey 애드온 필요)',
'admin.plugins.perm.db:read:atlas': '현재 사용자가 방문한 국가 및 지역 읽기(Atlas 애드온 필요)',
'admin.plugins.perm.db:read:vacay': '현재 사용자의 휴가 계획 읽기(Vacay 애드온 필요)',
'admin.plugins.perm.db:read:daynotes': '현재 사용자가 접근할 수 있는 여행의 일자 메모 읽기',
'admin.plugins.perm.db:read:collections': '현재 사용자의 저장한 장소 컬렉션 읽기(Collections 애드온 필요)',
'admin.plugins.perm.db:write:daynotes': '현재 사용자가 편집할 수 있는 여행에서 일자 메모 만들기, 편집 및 삭제',
'admin.plugins.perm.jobs:run':
'선언된 백그라운드 작업을 예약에 따라 실행(사용자 컨텍스트 없음 — 사용자 데이터를 읽을 수 없음)',
'admin.plugins.perm.db:write:costs': '현재 사용자가 편집할 수 있는 여행에 지출(예산 항목) 만들기',
'admin.plugins.perm.db:write:places': '현재 사용자가 편집할 수 있는 여행에서 장소 추가, 편집 및 삭제',
'admin.plugins.perm.db:write:days': '현재 사용자가 편집할 수 있는 여행에서 날짜 추가, 편집 및 삭제',
'admin.plugins.perm.db:write:itinerary': '현재 사용자가 편집할 수 있는 여행의 날짜에 장소 지정 및 삭제',
'admin.plugins.perm.db:write:trips': '현재 사용자가 편집할 수 있는 여행의 세부 정보(제목, 날짜, 통화…) 편집',
'admin.plugins.perm.db:meta': '현재 사용자가 접근할 수 있는 여행, 장소, 날짜에 플러그인 고유의 비공개 데이터 첨부',
'admin.plugins.perm.ws:broadcast:trip': '여행 멤버에게 실시간 업데이트 전송',
'admin.plugins.perm.ws:broadcast:user': '개별 사용자에게 실시간 업데이트 전송',
'admin.plugins.perm.hook:photo-provider': '사진 기능에 사진 제공',
'admin.plugins.perm.hook:calendar-source': '캘린더에 일정 제공',
'admin.plugins.perm.hook:place-detail-provider': '장소에 추가 정보(리뷰, 평점, 링크)를 제공',
'admin.plugins.perm.hook:search-provider': '자체 색인에서 장소 검색에 응답 (TREK 자체 결과와 함께 표시)',
'admin.plugins.perm.hook:poi-category-provider':
'자체 장소 카테고리를 ‘지도에서 장소 탐색’에 추가 (카테고리를 선택하면 보고 있는 지도 영역이 플러그인에 전송됨)',
'admin.plugins.perm.hook:trip-warning-provider': '여행에 검증 경고를 표시 (플래너에 표시됨)',
'admin.plugins.perm.hook:table-contributor': '여행 보기(예약, 장소, 일자)에 열과 작업 추가',
'admin.plugins.perm.hook:map-marker-provider': '여행 지도에 마커 추가(예: 예약 또는 POI 표시)',
'admin.plugins.perm.hook:map-layer-provider': '여행 지도에 경로, 회랑, 구역 그리기',
'admin.plugins.perm.hook:route-provider':
'플래너가 일자 경로 계산에 사용할 라우팅 프로필 제공(예: 충전소 경유 전기차 라우팅)',
'admin.plugins.perm.hook:day-schedule-provider': '일자 계획에 시간 항목 추가(충전 정차, 보안 검색 여유 시간)',
'admin.plugins.perm.hook:day-tint-provider': '일자 계획에서 날짜를 색으로 구분(예: 해당 날짜가 여행의 어느 구간인지)',
'admin.plugins.cap.mcpTools': 'AI 도구 게시',
'admin.plugins.mcpToolsTitle': '게시하는 AI 도구',
'admin.plugins.mcpToolsHint':
'어시스턴트가 사용자를 대신해 실행할 수 있습니다. 각 도구는 위에서 부여한 권한으로 동작합니다.',
'admin.plugins.poiCategoriesTitle': '추가하는 지도 카테고리',
'admin.plugins.perm.mcp:tools':
'AI 어시스턴트가 사용자를 대신해 실행할 수 있는 도구 게시 (여기서 플러그인에 부여한 권한으로 동작하며, 어시스턴트 자신의 권한이 아닙니다)',
'admin.plugins.perm.geolocation:read':
'해당 플러그인 화면이 열려 있는 동안 실시간 위치 요청 (TREK이 이 사이트에 부여된 위치 권한으로 읽으며, 플러그인용 권한을 따로 묻지 않음)',
'admin.plugins.perm.hook:pdf-section-provider': '여행 PDF 내보내기에 텍스트 섹션 추가',
'admin.plugins.perm.hook:atlas-layer-provider': 'Atlas 세계 지도에서 국가 강조 표시(예: 위시리스트 또는 여행 경보)',
'admin.plugins.perm.hook:journal-entry-provider': '저널 항목에 추가 행(링크, 통계) 제공',
'admin.plugins.perm.hook:user-data':
'사용자에 대해 저장한 데이터를 삭제하거나 내보내기 (GDPR: 계정 삭제 및 데이터 요청)',
'admin.plugins.perm.hook:trip-card-provider': '대시보드 여행 카드에 작은 배지(상태, 개수) 추가',
'admin.plugins.perm.hook:notification-channel': '추가 채널을 통해 알림을 전달합니다',
'admin.plugins.perm.events:subscribe': '핵심 활동 이벤트에 반응 (이벤트 이름과 여행만, 내용은 절대 표시 안 함)',
'admin.plugins.perm.http:outbound': '선언된 호스트로 아웃바운드 요청 전송',
'admin.plugins.perm.db:read:collab':
'현재 사용자가 접근할 수 있는 여행의 메모, 투표 및 채팅 메시지 읽기(Collab 애드온 필요)',
'admin.plugins.perm.db:read:files:content': '현재 사용자가 접근할 수 있는 여행의 파일 내용(바이트) 읽기',
'admin.plugins.perm.db:create:trips': '현재 사용자 소유의 새 여행 만들기',
'admin.plugins.perm.rates:read': '호스트의 캐시된 환율 읽기',
'admin.plugins.updateConsentTitle': '이 업데이트에는 새로운 권한이 필요합니다',
'admin.plugins.updateConsentBody':
'{name} v{version}이(가) 아직 부여하지 않은 권한을 요청합니다. 새 버전은 설치되었지만 승인하기 전까지는 꺼진 상태로 유지됩니다.',
'admin.plugins.updateNewPermissions': '새로 요청된 권한',
'admin.plugins.updateNewEgress': '새로운 아웃바운드 연결',
'admin.plugins.updateApprove': '승인하고 켜기',
'admin.plugins.updateLater': '일단 꺼두기',
'admin.plugins.updateKeptOff': '업데이트가 설치되었습니다 — 새 권한을 승인하기 전까지 꺼진 상태로 둡니다',
'admin.plugins.reviewedMeaning':
'"검토됨"은 TREK 관리자가 각 버전마다 이 플러그인에 악성코드가 있는지 검사했다는 의미입니다 — 품질이나 정상 작동 여부를 검사한 것이 아닙니다. 플러그인이 무해하다는 보장은 아닙니다.',
'admin.plugins.security.title': '플러그인이 격리되는 방식 — 그리고 그 한계',
'admin.plugins.security.isolationTitle': '모든 플러그인은 격리된 상태로 실행됩니다',
'admin.plugins.security.isolationBody':
'플러그인은 자체 파일만 읽을 수 있는 잠긴 별도 프로세스로 실행됩니다. 데이터베이스, 로그인 비밀 값, 암호화 키를 읽을 수 없고, 다른 프로그램을 실행할 수 없으며, 어디에도 파일을 쓸 수 없습니다. 플러그인의 인터페이스는 세션 쿠키를 읽거나 주변 TREK 페이지를 건드릴 수 없는 봉인된 브라우저 프레임에서 실행됩니다.',
'admin.plugins.security.permsTitle': '권한이 의미하는 것',
'admin.plugins.security.permsBody':
'설치 전에 표시되는 권한은 플러그인이 실행되는 동안 TREK이 강제하는 엄격한 한계입니다 — 목록에 없는 것은 말 그대로 아무것도 할 수 없습니다. 하지만 이는 플러그인이 무엇을 할 수 있는지를 알려줄 뿐, 실제로 무엇을 하는지는 알려주지 않습니다. 여행을 읽고 서버에 연결할 수 있는 플러그인은 그 서버로 여행 데이터를 전송할 수 있으므로, 설명뿐만 아니라 권한과 아웃바운드 호스트도 확인하세요.',
'admin.plugins.security.limitsTitle': '보장할 수 없는 것',
'admin.plugins.security.limitsBody':
'이 격리는 강력한 소프트웨어 경계이지만 절대적인 것은 아닙니다. 플러그인은 정확히 승인한 권한만큼 동작하므로, 그 권한 범위 내에서는 설명과 다르게 동작할 수 있으며, 정당하게 보유한 데이터를 선언한 호스트로 전송할 수 있습니다. TREK은 플러그인의 코드가 실제로 무엇을 하는지 읽거나 판단하지 않습니다.',
'admin.plugins.security.worstTitle': '최악의 경우',
'admin.plugins.security.worstBody':
'활성화한 악의적인 플러그인은 부여한 데이터와 연결을 오용할 수 있습니다 — 예를 들어 읽을 수 있는 여행 데이터를 유출할 수 있습니다. 하지만 비밀번호를 훔치거나, 관리자 로그인을 위조하거나, 서버에서 명령을 실행하거나, 부여하지 않은 데이터에 접근할 수는 없습니다. 피해는 승인한 범위 안에 머물며, 플러그인을 끄면 중단됩니다.',
'admin.plugins.security.reviewedTitle': '"검토됨"의 의미',
'admin.plugins.security.reviewedBody':
'검토된 플러그인은 각 버전마다 TREK 관리자가 악성코드를 수동으로 검사한 것입니다 — 정상 작동 여부가 아니라 악의적인 코드가 있는지 확인한 것입니다. 플러그인이 무해하다는 약속은 아닙니다.',
'admin.plugins.security.signedTitle': '"서명됨"의 의미',
'admin.plugins.security.signedBody':
'TREK이 설치할 때마다 검증하는 체크섬은 파일이 레지스트리가 보증하는 것과 정확히 일치함을 증명합니다. 서명은 다른 것을 증명합니다. 그 파일이 작성자에게서 왔으며, 작성자만 가진 키로 서명되었다는 사실입니다. 서명된 플러그인은 두 가지를 모두 갖추고 있습니다. 서명되지 않았다고 해서 안전하지 않다는 뜻은 아닙니다 — 보장이 하나 적을 뿐이며, 현재 레지스트리의 플러그인 대부분은 서명되어 있지 않습니다.',
'admin.plugins.signed': '서명됨',
'admin.plugins.signedHint': '설치 당시 작성자의 서명 키로 검증되었습니다',
'admin.plugins.unsigned': '서명 없음',
'admin.plugins.unsignedHint':
'파일은 레지스트리가 보증하는 것과 일치하지만, 작성자와 연결해 주는 것은 없습니다. 보장이 하나 적을 뿐, 안전하지 않다는 뜻은 아닙니다.',
'admin.plugins.updateBlocked': '업데이트가 차단되었습니다 — {reason}',
'admin.plugins.reviewBlock': '확인',
'admin.plugins.retrusted': '새 서명 키를 신뢰했습니다 — 플러그인이 업데이트되었습니다',
'admin.plugins.sig.title': '{name}의 서명을 검증할 수 없습니다',
'admin.plugins.sig.keyChangedBody':
'작성자의 서명 키가 이 플러그인을 설치할 때 사용된 키와 다릅니다. 작성자가 키를 교체하는 일은 실제로 있습니다 — 하지만 플러그인을 탈취한 공격자도 여기서는 이와 똑같아 보입니다.',
'admin.plugins.sig.invalidBody':
'파일이 작성자의 서명과 일치하지 않습니다. 작성자가 서명한 파일이 아니며, 손상되었거나 변조된 것입니다. 이 경우는 무시하고 진행할 수 없습니다.',
'admin.plugins.sig.missingBody':
'설치할 때 이 플러그인에는 서명이 있었지만, 새 버전에는 서명이 없습니다. TREK은 이런 후퇴를 조용히 받아들이지 않습니다. 이 경우는 무시하고 진행할 수 없습니다.',
'admin.plugins.sig.incompleteBody':
'레지스트리 항목이 반만 서명되어 있습니다. 작성자 키는 선언되어 있지만 해당 버전에는 서명이 없습니다(또는 그 반대입니다). 이는 플러그인 쪽의 실수입니다. 이 경우는 무시하고 진행할 수 없습니다.',
'admin.plugins.sig.pinnedKey': '설치할 때 사용된 키',
'admin.plugins.sig.newKey': '지금 제시하는 키',
'admin.plugins.sig.confirmOutOfBand':
'TREK은 정당한 키 교체와 탈취를 구분할 수 없습니다 — 여기서는 둘이 똑같아 보입니다. 받아들이기 전에 이미 신뢰하는 경로를 통해 작성자에게 새 키를 확인하세요. 받아들이면 플러그인이 업데이트되고 새 키가 기억됩니다.',
'admin.plugins.sig.retrustConfirm': '새 키를 신뢰하고 업데이트',
'admin.plugins.sig.cancel': '신뢰하지 않기',
'admin.plugins.sig.consentUnsigned':
'이 버전과 작성자를 연결해 주는 것이 없습니다 — 파일은 레지스트리와 일치하지만 작성자 서명이 없습니다.',
'admin.plugins.security.trustTitle': '핵심 요약',
'admin.plugins.security.trustBody':
'플러그인을 설치하는 것은 다른 서드파티 앱을 설치하는 것과 같습니다: 신뢰할 수 있는 작성자의 코드만 추가하고, 의심스러우면 먼저 직접 확인하세요. TREK은 서드파티 플러그인에 대해 어떠한 책임도 지지 않습니다.',
'admin.plugins.runtimeOn': '런타임 켜짐',
'admin.plugins.tabDiscover': '둘러보기',
'admin.plugins.searchPlaceholder': '플러그인 검색…',
'admin.plugins.filterType': '유형',
'admin.plugins.filterStatus': '상태',
'admin.plugins.sortBy': '정렬',
'admin.plugins.allTypes': '모든 유형',
'admin.plugins.allStatuses': '전체',
'admin.plugins.stateOff': '꺼짐',
'admin.plugins.filterUpdate': '업데이트 가능',
'admin.plugins.sortName': '이름',
'admin.plugins.sortRecent': '최근 업데이트순',
'admin.plugins.sortUpdates': '업데이트 우선',
'admin.plugins.sortDownloads': '다운로드순',
'admin.plugins.updatesAvailable': '플러그인 업데이트 {count}건이 있습니다.',
'admin.plugins.newerNeedsTrek': 'v{version} 사용 가능 — TREK {range} 필요',
'admin.plugins.versionsTitle': '버전',
'admin.plugins.versionPickerTitle': '버전 변경 — {name}',
'admin.plugins.versionSwitch': '{version}(으)로 전환',
'admin.plugins.versionNeedsTrek': 'TREK {range} 필요',
'admin.plugins.changeVersion': '버전 변경…',
'admin.plugins.noVersions': '레지스트리에서 게시된 버전을 찾을 수 없습니다.',
'admin.plugins.downgradeTitle': '이 플러그인을 롤백하시겠습니까?',
'admin.plugins.downgradeBody':
'v{from}에서 v{to}(으)로 전환: 최신 버전이 기록한 데이터는 그대로 유지되며, 이전 버전이 이를 인식하지 못할 수 있습니다.',
'admin.plugins.downgradeConfirm': '롤백',
'admin.plugins.updatesHeld': 'v{version}에서 업데이트 일시 중지됨',
'admin.plugins.resumeUpdates': '업데이트 재개',
'admin.plugins.updatesResumed': '업데이트가 재개되었습니다',
'admin.plugins.updateAll': '모두 업데이트',
'admin.plugins.noMatchInstalled': '검색과 일치하는 설치된 플러그인이 없습니다.',
'admin.plugins.noMatchRegistry': '레지스트리에 검색과 일치하는 플러그인이 없습니다.',
'admin.plugins.restart': '다시 시작',
'admin.plugins.restarted': '플러그인이 다시 시작되었습니다',
'admin.plugins.instanceSettings': '인스턴스 설정',
'admin.plugins.settingsSaved': '설정이 저장되었습니다',
'admin.plugins.settingsSavedRestarted': '설정이 저장되었습니다 — 플러그인이 다시 시작되었습니다',
'admin.plugins.actions': '작업',
'admin.plugins.actions.confirm': '이 작업을 실행할까요?',
'admin.plugins.actions.inactive': '작업을 실행하려면 플러그인을 활성화하세요',
'admin.plugins.requiredMissing': '"{field}"은(는) 필수입니다',
'admin.plugins.cap.readsTrips': '여행 읽기',
'admin.plugins.cap.readsUsers': '기본 프로필 읽기',
'admin.plugins.cap.readsCosts': '지출 읽기',
'admin.plugins.cap.readsPacking': '짐 목록 읽기',
'admin.plugins.cap.readsFiles': '여행 파일 읽기',
'admin.plugins.cap.writesCosts': '지출 추가',
'admin.plugins.cap.writesPlaces': '장소 편집',
'admin.plugins.cap.writesDays': '날짜 편집',
'admin.plugins.cap.writesItinerary': '일정 편집',
'admin.plugins.cap.writesTrips': '여행 편집',
'admin.plugins.cap.metadata': '메타데이터 추가',
'admin.plugins.cap.widget': '대시보드 위젯',
'admin.plugins.cap.heroWidget': '탑승권 위젯',
'admin.plugins.cap.placeSlot': '장소 상세',
'admin.plugins.cap.daySlot': '일자 상세',
'admin.plugins.cap.reservationSlot': '예약 상세',
'admin.plugins.cap.replacesTabs': '플래너 탭 대체',
'admin.plugins.cap.realtime': '실시간 업데이트',
'admin.plugins.cap.notificationChannel': '알림 채널',
'admin.plugins.cap.photos': '사진 제공',
'admin.plugins.cap.calendar': '캘린더 일정 제공',
'admin.plugins.cap.placeDetails': '장소 정보 강화',
'admin.plugins.cap.search': '검색에 응답',
'admin.plugins.cap.poiCategories': '지도 카테고리 추가',
'admin.plugins.cap.warnings': '문제 표시',
'admin.plugins.cap.mapLayers': '지도에 그리기',
'admin.plugins.cap.routing': '라우팅 제공',
'admin.plugins.cap.daySchedule': '계획 시간 추가',
'admin.plugins.cap.dayTint': '날짜 색상 표시',
'admin.plugins.cap.geolocation': '위치 읽기',
'admin.plugins.cap.events': '활동에 반응',
'admin.plugins.cap.requiresAddon': '{addon} 필요',
'admin.plugins.cap.dependsOn': '{id} {version} 필요',
'admin.plugins.dep.addonDisabledToast': '필요한 애드온을 먼저 활성화하세요: {addons}',
'admin.plugins.dep.autoEnabled': '필요한 플러그인을 먼저 활성화했습니다: {plugins}',
'admin.plugins.dep.downloaded': '{id} 다운로드 완료',
'admin.plugins.dep.resolveTitle': '누락된 종속성',
'admin.plugins.dep.resolveBody': '“{name}”을(를) 활성화하려면 다음 플러그인을 먼저 설치해야 합니다.',
'admin.plugins.dep.requires': '{version} 필요',
'admin.plugins.dep.mismatch': '{wanted} 필요 — 현재 {installed} 설치됨',
'admin.plugins.dep.download': '다운로드',
'admin.plugins.dep.update': '업데이트',
'admin.plugins.dep.resolveHint': '자체 종속성을 포함하여 호환되는 최신 버전을 다운로드합니다.',
'admin.plugins.dep.trekIncompatible': 'TREK {range}이(가) 필요합니다 — 이 서버는 {host}입니다',
'admin.plugins.dep.trekUnknown': '지원하는 TREK 버전을 명시하지 않았습니다',
'admin.plugins.installCompatible': '{version} 설치',
'admin.plugins.installAnyway': '그래도 설치',
'admin.plugins.rangeBypass.pill': '버전 검사 꺼짐',
'admin.plugins.rangeBypass.pillHint':
'TREK_PLUGINS_IGNORE_TREK_RANGE가 설정되어 있습니다 — 플러그인이 작성자가 선언한 TREK 버전 범위 밖에서도 설치·실행될 수 있습니다',
'admin.plugins.rangeBypass.title': '지원되는 TREK 버전 범위 밖',
'admin.plugins.rangeBypass.noticeTitle': '지원되는 TREK 버전 범위 밖에 설치됨',
'admin.plugins.rangeBypass.body':
'“{name}”은(는) TREK {range} 지원을 선언했지만 이 서버는 {host}을(를) 실행 중입니다. TREK_PLUGINS_IGNORE_TREK_RANGE가 설정되어 있기 때문에만 TREK가 이를 허용합니다. 작성자가 이 TREK에 맞게 플러그인의 버전 범위를 갱신하지 않았으므로 정상 동작을 보장할 수 없으며, 드물게 호환되지 않는 플러그인이 TREK 데이터를 손상시킬 수 있습니다. 이 위험을 감수하는 경우에만 계속하세요.',
'admin.plugins.rangeBypass.bodyUnknown':
'“{name}”은(는) 지원하는 TREK 버전을 선언하지 않았습니다. 이 서버는 {host}을(를) 실행 중입니다. TREK_PLUGINS_IGNORE_TREK_RANGE가 설정되어 있기 때문에만 TREK가 이를 허용합니다. 작성자가 이 TREK에서 테스트했다는 근거가 없으므로 정상 동작을 보장할 수 없으며, 드물게 호환되지 않는 플러그인이 TREK 데이터를 손상시킬 수 있습니다. 이 위험을 감수하는 경우에만 계속하세요.',
'admin.plugins.dep.trekBypassed': 'TREK 범위 밖 ({range}) — 버전 검사 꺼짐',
'admin.plugins.dep.trekBypassedUnknown': 'TREK 범위 선언 없음 — 버전 검사 꺼짐',
'admin.plugins.incompatible': '호환되지 않음',
'admin.plugins.accessTitle': '접근할 수 있는 항목',
'admin.plugins.connectsTitle': '연결 대상',
'admin.plugins.detailsTitle': '상세 정보',
'admin.plugins.noAccess': '특별한 접근 권한이 필요하지 않습니다.',
'admin.plugins.metaVersion': '버전',
'admin.plugins.metaSize': '크기',
'admin.plugins.metaRequires': '요구 사항',
'admin.plugins.metaReviewed': '검토일',
'admin.plugins.downloads': '다운로드',
'admin.addons.title': '애드온',
'admin.addons.subtitle': '기능을 활성화 또는 비활성화하여 TREK 경험을 맞춤 설정하세요.',
'admin.addons.catalog.packing.name': '목록',
'admin.addons.catalog.packing.description': '여행을 위한 짐 목록 및 할 일 작업',
'admin.addons.catalog.budget.name': '비용',
'admin.addons.catalog.budget.description': '여행 지출을 기록하고 동행자끼리 나누기',
'admin.addons.catalog.documents.name': '문서',
'admin.addons.catalog.documents.description': '여행 서류 저장 및 관리',
'admin.addons.catalog.vacay.name': 'Vacay',
'admin.addons.catalog.vacay.description': '캘린더 보기가 있는 개인 휴가 플래너',
'admin.addons.catalog.atlas.name': 'Atlas',
'admin.addons.catalog.atlas.description': '방문한 나라와 여행 통계가 있는 세계 지도',
'admin.addons.catalog.collab.name': 'Collab',
'admin.addons.catalog.collab.description': '메모, 투표, 채팅, 제안으로 함께 계획하기',
'admin.addons.catalog.roadtrip.name': '로드트립',
'admin.addons.catalog.roadtrip.description':
'경유지가 있는 주행을 계획하세요. 운전 시간과 도착 시간이 자동으로 다시 계산됩니다',
'admin.addons.catalog.memories.name': '사진 (Immich)',
'admin.addons.catalog.memories.description': 'Immich 인스턴스를 통해 여행 사진 공유',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'AI 어시스턴트 통합을 위한 모델 컨텍스트 프로토콜',
'admin.addons.subtitleBefore': '기능을 활성화 또는 비활성화하여 ',
'admin.addons.subtitleAfter': ' 경험을 맞춤 설정하세요.',
'admin.addons.catalog.naver_list_import.name': 'Naver List Import',
'admin.addons.catalog.naver_list_import.description': '공유된 네이버 지도 목록에서 장소 가져오기',
'admin.addons.catalog.airtrail.name': 'AirTrail',
'admin.addons.catalog.airtrail.description': 'AirTrail 인스턴스에서 항공편 동기화',
'admin.addons.catalog.dawarich.name': 'Dawarich',
'admin.addons.catalog.dawarich.description':
'사용자가 각자 연결한 Dawarich 인스턴스에서 방문 기록과 기록된 경로를 읽어옵니다',
'admin.addons.catalog.llm_parsing.name': 'AI 분석',
'admin.addons.catalog.llm_parsing.description': '기본 분석기가 읽지 못하는 예약을 원하는 AI 모델로 읽어냅니다',
'admin.addons.llm.vision.auto': '자동',
'admin.addons.llm.vision.on': '예',
'admin.addons.llm.vision.off': '아니요',
'admin.addons.llm.vision.hintLocal': '자동은 이 모델이 이미지를 읽을 수 있는지 Ollama 서버에 묻습니다.',
'admin.addons.llm.vision.hintCloud':
'클라우드 모델에서 자동은 아니요를 뜻합니다. 이 모델이 이미지를 읽을 수 있으면 예를 선택하세요.',
'admin.addons.enabled': '활성화됨',
'admin.addons.disabled': '비활성화됨',
'admin.addons.type.trip': '여행',
'admin.addons.type.global': '전역',
'admin.addons.type.integration': '통합',
'admin.addons.tripHint': '각 여행 내 탭으로 사용 가능',
'admin.addons.globalHint': '메인 내비게이션의 독립 섹션으로 사용 가능',
'admin.addons.integrationHint': '전용 페이지가 없는 백엔드 서비스 및 API 통합',
'admin.addons.toast.updated': '애드온이 업데이트되었습니다',
'admin.addons.toast.error': '애드온 업데이트 실패',
'admin.addons.group.count': '{total}개 중 {enabled}개 활성화됨',
'admin.addons.subOptions': '옵션 {count}개',
'admin.addons.subOptionsOn': '{count}개 켜짐',
'admin.toursWanderer.title': 'wanderer',
'admin.toursWanderer.subtitle': '사용자가 자신의 wanderer 인스턴스를 연결하고 그 트레일을 투어로 가져올 수 있습니다',
'admin.addons.noAddons': '사용 가능한 애드온이 없습니다',
'admin.weather.title': '날씨 데이터',
'admin.weather.badge': '2026년 3월 24일부터',
'admin.weather.description':
'TREK은 날씨 데이터 소스로 Open-Meteo를 사용합니다. Open-Meteo는 무료 오픈 소스 날씨 서비스로 API 키가 필요 없습니다.',
'admin.weather.forecast': '16일 예보',
'admin.weather.forecastDesc': '이전: 5일 (OpenWeatherMap)',
'admin.weather.climate': '과거 기후 데이터',
'admin.weather.climateDesc': '16일 예보 이후 날짜의 85년 평균값',
'admin.weather.requests': '하루 10,000 요청',
'admin.weather.requestsDesc': '무료, API 키 불필요',
'admin.weather.locationHint':
'날씨는 각 날의 좌표가 있는 첫 번째 장소를 기준으로 합니다. 날에 배정된 장소가 없으면 장소 목록의 임의 장소가 참조로 사용됩니다.',
'admin.tabs.mcpTokens': 'MCP 접근',
'admin.mcpTokens.title': 'MCP 접근',
'admin.mcpTokens.subtitle': '모든 사용자의 OAuth 세션 및 API 토큰을 관리합니다',
'admin.mcpTokens.sectionTitle': 'API 토큰',
'admin.mcpTokens.owner': '소유자',
'admin.mcpTokens.tokenName': '토큰 이름',
'admin.mcpTokens.created': '생성일',
'admin.mcpTokens.lastUsed': '마지막 사용',
'admin.mcpTokens.never': '없음',
'admin.mcpTokens.empty': '생성된 MCP 토큰이 없습니다',
'admin.mcpTokens.deleteTitle': '토큰 삭제',
'admin.mcpTokens.deleteMessage': '토큰이 즉시 취소됩니다. 사용자는 이 토큰을 통한 MCP 접근 권한을 잃게 됩니다.',
'admin.mcpTokens.deleteSuccess': '토큰이 삭제되었습니다',
'admin.mcpTokens.deleteError': '토큰 삭제 실패',
'admin.mcpTokens.loadError': '토큰 불러오기 실패',
'admin.oauthSessions.sectionTitle': 'OAuth 세션',
'admin.oauthSessions.clientName': '클라이언트',
'admin.oauthSessions.owner': '소유자',
'admin.oauthSessions.scopes': '권한 범위',
'admin.oauthSessions.created': '생성일',
'admin.oauthSessions.empty': '활성 OAuth 세션이 없습니다',
'admin.oauthSessions.revokeTitle': '세션 취소',
'admin.oauthSessions.revokeMessage': 'OAuth 세션이 즉시 취소됩니다. 클라이언트는 MCP 접근 권한을 잃게 됩니다.',
'admin.oauthSessions.revokeSuccess': '세션이 취소되었습니다',
'admin.oauthSessions.revokeError': '세션 취소 실패',
'admin.oauthSessions.loadError': 'OAuth 세션 불러오기 실패',
'admin.tabs.github': 'GitHub',
'admin.audit.subtitle': '보안 및 관리 이벤트 (백업, 사용자, MFA, 설정).',
'admin.audit.empty': '아직 감사 항목이 없습니다.',
'admin.audit.refresh': '새로 고침',
'admin.audit.loadMore': '더 불러오기',
'admin.audit.showing': '{count}개 불러옴 · 총 {total}개',
'admin.audit.col.time': '시간',
'admin.audit.col.user': '사용자',
'admin.audit.col.action': '작업',
'admin.audit.col.resource': '리소스',
'admin.audit.col.ip': 'IP',
'admin.audit.col.details': '상세',
'admin.github.title': '릴리스 히스토리',
'admin.github.subtitle': '{repo}의 최신 업데이트',
'admin.github.latest': '최신',
'admin.github.prerelease': '사전 릴리스',
'admin.github.showDetails': '상세 보기',
'admin.github.hideDetails': '상세 숨기기',
'admin.github.loadMore': '더 불러오기',
'admin.github.loading': '불러오는 중...',
'admin.github.error': '릴리스 불러오기 실패',
'admin.github.by': '작성자',
'admin.github.support': 'TREK 개발 지속에 도움이 됩니다',
'admin.update.available': '업데이트 사용 가능',
'admin.update.text': 'TREK {version}이(가) 사용 가능합니다. 현재 {current}을(를) 실행 중입니다.',
'admin.update.button': 'GitHub에서 보기',
'admin.update.install': '업데이트 설치',
'admin.update.confirmTitle': '업데이트를 설치할까요?',
'admin.update.confirmText': 'TREK이 {current}에서 {version}으로 업데이트됩니다. 서버가 이후 자동으로 재시작됩니다.',
'admin.update.dataInfo': '모든 데이터 (여행, 사용자, API 키, 업로드, Vacay, Atlas, 예산)가 보존됩니다.',
'admin.update.warning': '재시작 중에 앱이 잠시 사용할 수 없게 됩니다.',
'admin.update.confirm': '지금 업데이트',
'admin.update.installing': '업데이트 중…',
'admin.update.success': '업데이트 완료! 서버가 재시작 중입니다…',
'admin.update.failed': '업데이트 실패',
'admin.update.backupHint': '업데이트 전에 백업을 생성하는 것을 권장합니다.',
'admin.update.backupLink': '백업으로 이동',
'admin.update.howTo': '업데이트 방법',
'admin.update.dockerText':
'TREK 인스턴스가 Docker에서 실행 중입니다. {version}으로 업데이트하려면 서버에서 다음 명령을 실행하세요:',
'admin.update.nonDockerText':
'이 TREK 인스턴스는 Docker에서 실행되고 있지 않습니다. {version}으로 업데이트하려면 사용했던 설치 또는 업데이트 방법을 다시 실행하세요 — 예를 들어 Proxmox Community Scripts에서는 LXC 콘솔에서 업데이트를 실행하세요:',
'admin.update.wikiLink': '업데이트 가이드 열기',
'admin.update.reloadHint': '잠시 후 페이지를 새로 고침하세요.',
'admin.tabs.permissions': '권한',
'admin.addons.catalog.journey.name': 'Journey',
'admin.addons.catalog.journey.description': '체크인, 사진, 일별 이야기가 있는 여행 기록 및 여행 일지',
'admin.addons.catalog.collections.name': '컬렉션',
'admin.addons.catalog.collections.description': '어떤 여행의 장소든 이름 붙인 목록에 모아 다시 사용',
'admin.passkey.title': '패스키 로그인',
'admin.passkey.cardHint': '사용자가 패스키(WebAuthn)로 로그인할 수 있게 합니다. 기본값은 꺼짐입니다.',
'admin.passkey.login': '패스키 로그인 활성화',
'admin.passkey.loginHint': '"패스키로 로그인" 옵션을 표시하고 사용자가 설정에서 패스키를 등록할 수 있게 합니다.',
'admin.passkey.notConfigured':
'이 배포에 아직 WebAuthn 도메인이 확인되지 않습니다. 아래에서 APP_URL 또는 Relying Party ID를 설정하세요 — 그 전까지 패스키는 숨겨진 상태로 유지됩니다.',
'admin.passkey.rpId': 'Relying Party ID (도메인)',
'admin.passkey.rpIdHint':
'패스키가 바인딩되는 순수 도메인입니다. 예: trek.example.org. 비워두면 APP_URL에서 자동으로 가져옵니다. 나중에 변경하면 기존 패스키가 무효화됩니다.',
'admin.passkey.origins': '허용된 오리진',
'admin.passkey.originsHint':
'쉼표로 구분된 전체 오리진입니다. 예: https://trek.example.org. 비워두면 APP_URL을 사용합니다.',
'admin.passkey.reset': '패스키 초기화',
'admin.passkey.resetHint':
'이 사용자의 모든 패스키를 삭제합니다 (예: 기기 분실 시). 사용자는 비밀번호로 계속 로그인할 수 있습니다.',
'admin.passkey.resetConfirm': '{name}의 모든 패스키를 삭제할까요?',
'admin.passkey.resetDone': '패스키 {count}개를 삭제했습니다',
'admin.defaultSettings.mapProvider': '지도 엔진',
'admin.defaultSettings.mapProviderHint':
'이 인스턴스의 모든 사용자에게 적용되는 기본 지도입니다. 각 사용자는 자신의 설정에서 이를 변경할 수 있습니다.',
'admin.defaultSettings.providerLeaflet': '표준 (무료)',
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
'admin.defaultSettings.providerMapLibre': 'MapLibre (OpenFreeMap)',
'admin.defaultSettings.mapboxToken': '공유 Mapbox 토큰',
'admin.defaultSettings.mapboxTokenHint':
'자신의 토큰을 입력하지 않은 모든 사용자에게 사용됩니다 — 키를 개별적으로 공유하지 않아도 인스턴스 전체에서 Mapbox를 사용할 수 있습니다. 암호화하여 저장됩니다.',
'admin.defaultSettings.mapboxStyle': '지도 스타일',
'admin.defaultSettings.mapboxStylePlaceholder': '스타일을 선택하세요…',
'admin.defaultSettings.mapbox3d': '3D 건물 & 지형',
'admin.defaultSettings.mapboxQuality': '고품질 모드',
'admin.defaultSettings.cartoKey': '공유 CARTO 키',
'admin.defaultSettings.cartoKeyHint':
'자신의 키를 입력하지 않은 모든 사용자에게 사용됩니다. 이렇게 하면 인스턴스 전체에서 워터마크 없는 CARTO 타일을 사용할 수 있습니다. 암호화하여 저장됩니다.',
'admin.group.users': 'Users',
'admin.group.config': 'Configuration',
'admin.group.integration': 'Integrations',
'admin.group.maintenance': 'Maintenance',
'admin.invite.tripLabel': '여행에 추가 (선택 사항)',
'admin.invite.tripNone': '여행 없음',
'admin.invite.tripHint': '새 사용자가 이 링크를 통해 가입하면 해당 여행에 자동으로 추가됩니다.',
'admin.invite.boundTo': '{trip}에 추가',
'admin.placesUsageTitle': '키를 사용하는 곳',
'admin.mapsKeyHintShort': '사진, 평점, 영업시간이 추가됩니다. 이후 모든 조회는 Google로 갑니다.',
'admin.amapKeyHintShort': '중국 본토에서의 장소 검색용. JS API 키가 아니라 웹 서비스 키가 필요합니다.',
'admin.collab.links.subtitle': '공유 링크와 북마크',
'admin.paddleRegions.title': '패들 수역 데이터',
'admin.paddleRegions.hint': 'OpenStreetMap의 보, 갑문, 통행 규칙을 지역별로 읽고 매달 다시 읽습니다.',
'admin.paddleRegions.search': '지역 추가',
'admin.paddleRegions.searchPlaceholder': 'Geofabrik 검색 (예: Oberpfalz)',
'admin.paddleRegions.noHits': '이 이름의 지역이 없습니다',
'admin.paddleRegions.added': '추가됨',
'admin.paddleRegions.empty': '아직 지역이 없습니다. 이 경우 패들 투어에는 알려진 장애물 데이터가 없다고 표시됩니다.',
'admin.paddleRegions.status.queued': '대기 중',
'admin.paddleRegions.status.importing': '읽는 중',
'admin.paddleRegions.status.ready': '준비됨',
'admin.paddleRegions.status.failed': '실패',
'admin.paddleRegions.phase.download': '다운로드 중',
'admin.paddleRegions.phase.read': '읽는 중',
'admin.paddleRegions.objects': '항목 {count}개',
'admin.paddleRegions.asOf': '{date} 기준',
'admin.paddleRegions.keptData': '이전에 읽은 데이터를 계속 사용합니다.',
'admin.paddleRegions.refresh': '다시 읽기',
'admin.paddleRegions.remove': '지역 삭제',
'admin.paddleRegions.removeMessage':
'{name} 및 해당 장애물 데이터가 삭제됩니다. 그 지역의 패들 투어에는 데이터가 표시되지 않습니다.',
'admin.paddleRegions.retry': '다시 시도',
'admin.paddleRegions.offline': '지역은 연결된 상태에서만 관리할 수 있습니다.',
'admin.paddleRegions.catalogUnavailable': '지금은 Geofabrik에 연결할 수 없습니다. 나중에 다시 시도하세요.',
'admin.paddleRegions.attribution':
'데이터 © OpenStreetMap 기여자 (ODbL), 지역별 추출본은 Geofabrik 제공. 매달 3일에 다시 읽습니다.',
'admin.paddleRegions.toast.added': '지역을 추가했습니다. TREK이 백그라운드에서 읽습니다.',
'admin.paddleRegions.toast.removed': '지역을 삭제했습니다',
};
export default admin;