mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
a9907e2f10
TREK searches its own place index and OpenStreetMap. Neither carries a rating, so "the best rated hotel around here" has never been answerable, and an operator with a better index for their region had no way to reach the search box at all. The searchProvider hook is that way in: a plugin is handed the query, a limit, the language and the coordinate the search is biased toward, and answers with places in the same shape the core search returns, plus a rating. It sits beside the core search rather than inside it. The plugin runtime already imports PlacesModule, which imports MapsModule, so asking the providers from the maps service would close a module cycle — the same reason the other fourteen contribution controllers stand next to what they contribute to. The client asks both at once and merges, at the single point every caller already goes through, so all nine search surfaces get plugin hits without knowing the hook exists. A plugin index may never hold up the list: the client stops waiting at two and a half seconds and the host gives a provider two, which is also why the budget is the shortest of any hook here. With no such plugin installed the route answers without reaching the runtime at all. Every hit is normalized host-side and shared by the REST route and the MCP tool, so a cap that holds for the browser holds for the assistant: coordinates are range-checked, strings capped, the rating clamped to 0..5, a website must be http or https, and ids are namespaced so they can never collide with an OSM one. search_places_via_plugins is the MCP half, because what the user can see the assistant has to be able to see; search_place now points at it.
759 lines
62 KiB
TypeScript
759 lines
62 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const admin: TranslationStrings = {
|
||
'admin.notifications.title': '通知',
|
||
'admin.notifications.hint': '通知チャネルを1つ選択してください。同時に有効にできるのは1つだけです。',
|
||
'admin.notifications.none': '無効',
|
||
'admin.notifications.email': 'メール(SMTP)',
|
||
'admin.notifications.webhook': 'Webhook',
|
||
'admin.notifications.ntfy': 'Ntfy',
|
||
'admin.ntfy.hint': 'ユーザーが独自のntfyトピックを設定できるようにします。下で既定サーバーを設定してください。',
|
||
'admin.notifications.save': '通知設定を保存',
|
||
'admin.notifications.saved': '通知設定を保存しました',
|
||
'admin.notifications.testWebhook': 'Webhookテスト送信',
|
||
'admin.notifications.testWebhookSuccess': 'テストWebhookを送信しました',
|
||
'admin.notifications.testWebhookFailed': 'テストWebhookに失敗しました',
|
||
'admin.notifications.testNtfy': 'ntfyテスト送信',
|
||
'admin.notifications.testNtfySuccess': 'テストntfyを送信しました',
|
||
'admin.notifications.testNtfyFailed': 'テストntfyに失敗しました',
|
||
'admin.notifications.emailPanel.title': 'メール(SMTP)',
|
||
'admin.notifications.webhookPanel.title': 'Webhook',
|
||
'admin.notifications.inappPanel.title': 'アプリ内',
|
||
'admin.notifications.inappPanel.hint': 'アプリ内通知は常に有効で、全体では無効にできません。',
|
||
'admin.notifications.adminWebhookPanel.title': '管理者Webhook',
|
||
'admin.notifications.adminWebhookPanel.hint': '管理者通知専用のWebhookです(例:バージョン通知)。常に送信されます。',
|
||
'admin.notifications.adminWebhookPanel.saved': '管理者Webhook URLを保存しました',
|
||
'admin.notifications.adminWebhookPanel.testSuccess': 'テストWebhookを送信しました',
|
||
'admin.notifications.adminWebhookPanel.testFailed': 'テストWebhookに失敗しました',
|
||
'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': 'ユーザー通知の既定サーバーとしても使用されます。',
|
||
'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': 'トピック設定時は常に送信されます',
|
||
'admin.notifications.adminNotificationsHint': '管理者専用通知の配信先を設定します。',
|
||
'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': 'ユーザーが独自のWebhook URLを設定できるようにします。',
|
||
'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.lastLogin': '最終ログイン',
|
||
'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': '少なくとも1つのログイン方法を有効にしてください',
|
||
'admin.requireMfa': '二要素認証(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,360 万件の場所',
|
||
'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.validateKey': 'テスト',
|
||
'admin.keyValid': '接続済み',
|
||
'admin.keyInvalid': '無効',
|
||
'admin.keySaved': 'APIキーを保存しました',
|
||
'admin.oidcTitle': 'シングルサインオン(OIDC)',
|
||
'admin.oidcSubtitle': 'Google、Apple、Authentik、Keycloak などでログインを許可します。',
|
||
'admin.oidcDisplayName': '表示名',
|
||
'admin.oidcIssuer': 'Issuer URL',
|
||
'admin.oidcIssuerHint': 'OpenID ConnectのIssuer 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.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': '操作中のユーザーがアクセスできる旅行のToDoを読み取る',
|
||
'admin.plugins.perm.db:write:todos': '操作中のユーザーが編集できる旅行のToDoの作成・編集・削除',
|
||
'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: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':
|
||
'プランナーが日程のルート計算に使えるルーティングプロファイルを提供(例: 充電スポットを経由する EV ルーティング)',
|
||
'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.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':
|
||
'プラグインは、自身のファイルしか読み取れない厳重に制限された独立プロセスとして実行されます。データベース、ログイン用のシークレット、暗号鍵を読み取ることはできず、他のプログラムを起動することも、どこかにファイルを書き込むこともできません。その画面は隔離されたブラウザフレーム内で動作し、セッションCookieを読み取ったり、周囲の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.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': '旅行用の持ち物リストとToDo',
|
||
'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連携のためのModel Context Protocol',
|
||
'admin.addons.subtitleBefore': '機能を有効/無効にして ',
|
||
'admin.addons.subtitleAfter': ' をカスタマイズします。',
|
||
'admin.addons.catalog.naver_list_import.name': 'Naver List Import',
|
||
'admin.addons.catalog.naver_list_import.description': '共有された Naver マップのリストから場所をインポート',
|
||
'admin.addons.catalog.airtrail.name': 'AirTrail',
|
||
'admin.addons.catalog.airtrail.description': '自分の AirTrail から フライトを同期',
|
||
'admin.addons.catalog.llm_parsing.name': 'AI 解析',
|
||
'admin.addons.catalog.llm_parsing.description': '内蔵パーサーが読めない予約を、選んだ AI モデルで読み取ります',
|
||
'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.noAddons': '利用可能なアドオンはありません',
|
||
'admin.weather.title': '天気データ',
|
||
'admin.weather.badge': '2026年3月24日以降',
|
||
'admin.weather.description':
|
||
'TREKは天気データにOpen‑Meteoを使用しています。無料でオープンソース、APIキーは不要です。',
|
||
'admin.weather.forecast': '16日間予報',
|
||
'admin.weather.forecastDesc': '以前は5日(OpenWeatherMap)',
|
||
'admin.weather.climate': '過去の気候データ',
|
||
'admin.weather.climateDesc': '16日以降は過去85年の平均値',
|
||
'admin.weather.requests': '1日10,000リクエスト',
|
||
'admin.weather.requestsDesc': '無料、APIキー不要',
|
||
'admin.weather.locationHint':
|
||
'各日の座標付き最初の場所を基準にします。場所が未割り当ての場合は、場所一覧の任意の場所を参照します。',
|
||
'admin.tabs.mcpTokens': 'MCPトークン',
|
||
'admin.mcpTokens.title': 'MCPトークン',
|
||
'admin.mcpTokens.subtitle': 'すべてのユーザーの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': '日記',
|
||
'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}に追加',
|
||
};
|
||
export default admin;
|