mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 14:21:46 +00:00
chore: move i18n to shared package (#1066)
* chore: move i18n to shared package * chore: move server translations to shared package and apply linter and prettier on entire shared package
This commit is contained in:
@@ -0,0 +1,340 @@
|
||||
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': '任意。写真や天気などの拡張データを有効化します。',
|
||||
'admin.mapsKey': 'Google Maps APIキー',
|
||||
'admin.mapsKeyHint': '場所検索に必要。console.cloud.google.com で取得',
|
||||
'admin.mapsKeyHintLong':
|
||||
'APIキーなしではOpenStreetMapを使用します。Google APIキーがあれば写真、評価、営業時間も表示できます。',
|
||||
'admin.recommended': '推奨',
|
||||
'admin.weatherKey': 'OpenWeatherMap APIキー',
|
||||
'admin.weatherKeyHint': '天気データ用。openweathermap.org で無料',
|
||||
'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.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.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.saveError': '保存に失敗しました',
|
||||
'admin.tabs.addons': 'アドオン',
|
||||
'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.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.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.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.reloadHint': '数秒後にページを再読み込みしてください。',
|
||||
'admin.tabs.permissions': '権限',
|
||||
'admin.addons.catalog.journey.name': '日記',
|
||||
'admin.addons.catalog.journey.description':
|
||||
'チェックイン、写真、日ごとのストーリーで旅を記録',
|
||||
};
|
||||
export default admin;
|
||||
@@ -0,0 +1,6 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const airport: TranslationStrings = {
|
||||
'airport.searchPlaceholder': '空港コードまたは都市名(例:FRA)',
|
||||
};
|
||||
export default airport;
|
||||
@@ -0,0 +1,58 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const atlas: TranslationStrings = {
|
||||
'atlas.subtitle': '世界に広がるあなたの旅の足跡',
|
||||
'atlas.countries': '国',
|
||||
'atlas.trips': '旅行',
|
||||
'atlas.places': '場所',
|
||||
'atlas.unmark': '削除',
|
||||
'atlas.confirmMark': 'この国を訪問済みにしますか?',
|
||||
'atlas.confirmUnmark': 'この国を訪問済みリストから削除しますか?',
|
||||
'atlas.confirmUnmarkRegion': 'この地域を訪問済みリストから削除しますか?',
|
||||
'atlas.markVisited': '訪問済みにする',
|
||||
'atlas.markVisitedHint': 'この国を訪問済みリストに追加',
|
||||
'atlas.markRegionVisitedHint': 'この地域を訪問済みリストに追加',
|
||||
'atlas.addToBucket': '行きたいリストに追加',
|
||||
'atlas.addPoi': '場所を追加',
|
||||
'atlas.searchCountry': '国を検索...',
|
||||
'atlas.bucketNamePlaceholder': '名前(国・都市・場所など)',
|
||||
'atlas.month': '月',
|
||||
'atlas.year': '年',
|
||||
'atlas.addToBucketHint': '行きたい場所として保存',
|
||||
'atlas.bucketWhen': '訪問予定はいつですか?',
|
||||
'atlas.statsTab': '統計',
|
||||
'atlas.bucketTab': '行きたいリスト',
|
||||
'atlas.addBucket': '行きたいリストに追加',
|
||||
'atlas.bucketNotesPlaceholder': 'メモ(任意)',
|
||||
'atlas.bucketEmpty': '行きたいリストは空です',
|
||||
'atlas.bucketEmptyHint': '行ってみたい場所を追加しましょう',
|
||||
'atlas.days': '日',
|
||||
'atlas.visitedCountries': '訪問国',
|
||||
'atlas.cities': '都市',
|
||||
'atlas.noData': '旅行データがありません',
|
||||
'atlas.noDataHint': '旅行を作成して場所を追加すると、マップに表示されます',
|
||||
'atlas.lastTrip': '前回の旅行',
|
||||
'atlas.nextTrip': '次の旅行',
|
||||
'atlas.daysLeft': '残り日数',
|
||||
'atlas.streak': '連続',
|
||||
'atlas.years': '年',
|
||||
'atlas.yearInRow': '年連続',
|
||||
'atlas.yearsInRow': '年連続',
|
||||
'atlas.tripIn': '旅行',
|
||||
'atlas.tripsIn': '旅行',
|
||||
'atlas.since': '開始',
|
||||
'atlas.europe': 'ヨーロッパ',
|
||||
'atlas.asia': 'アジア',
|
||||
'atlas.northAmerica': '北アメリカ',
|
||||
'atlas.southAmerica': '南アメリカ',
|
||||
'atlas.africa': 'アフリカ',
|
||||
'atlas.oceania': 'オセアニア',
|
||||
'atlas.other': 'その他',
|
||||
'atlas.firstVisit': '最初の旅行',
|
||||
'atlas.lastVisitLabel': '最後の旅行',
|
||||
'atlas.tripSingular': '旅行',
|
||||
'atlas.tripPlural': '旅行',
|
||||
'atlas.placeVisited': '訪問した場所',
|
||||
'atlas.placesVisited': '訪問した場所',
|
||||
};
|
||||
export default atlas;
|
||||
@@ -0,0 +1,77 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const backup: TranslationStrings = {
|
||||
'backup.title': 'データバックアップ',
|
||||
'backup.subtitle': 'データベースとアップロードされたすべてのファイル',
|
||||
'backup.refresh': '更新',
|
||||
'backup.upload': 'バックアップをアップロード',
|
||||
'backup.uploading': 'アップロード中…',
|
||||
'backup.create': 'バックアップを作成',
|
||||
'backup.creating': '作成中…',
|
||||
'backup.empty': 'バックアップはまだありません',
|
||||
'backup.createFirst': '最初のバックアップを作成',
|
||||
'backup.download': 'ダウンロード',
|
||||
'backup.restore': '復元',
|
||||
'backup.confirm.restore':
|
||||
'バックアップ「{name}」を復元しますか?\n\n現在のすべてのデータはバックアップで置き換えられます。',
|
||||
'backup.confirm.uploadRestore':
|
||||
'バックアップファイル「{name}」をアップロードして復元しますか?\n\n現在のすべてのデータは上書きされます。',
|
||||
'backup.confirm.delete': 'バックアップ「{name}」を削除しますか?',
|
||||
'backup.toast.loadError': 'バックアップの読み込みに失敗しました',
|
||||
'backup.toast.created': 'バックアップを作成しました',
|
||||
'backup.toast.createError': 'バックアップの作成に失敗しました',
|
||||
'backup.toast.restored':
|
||||
'バックアップを復元しました。ページを再読み込みします…',
|
||||
'backup.toast.restoreError': '復元に失敗しました',
|
||||
'backup.toast.uploadError': 'アップロードに失敗しました',
|
||||
'backup.toast.deleted': 'バックアップを削除しました',
|
||||
'backup.toast.deleteError': '削除に失敗しました',
|
||||
'backup.toast.downloadError': 'ダウンロードに失敗しました',
|
||||
'backup.toast.settingsSaved': '自動バックアップ設定を保存しました',
|
||||
'backup.toast.settingsError': '設定の保存に失敗しました',
|
||||
'backup.auto.title': '自動バックアップ',
|
||||
'backup.auto.subtitle': 'スケジュールに基づいて自動実行',
|
||||
'backup.auto.enable': '自動バックアップを有効化',
|
||||
'backup.auto.enableHint': '選択したスケジュールで自動的に作成されます',
|
||||
'backup.auto.interval': '間隔',
|
||||
'backup.auto.hour': '実行時刻',
|
||||
'backup.auto.hourHint': 'サーバーのローカル時刻({format}形式)',
|
||||
'backup.auto.dayOfWeek': '曜日',
|
||||
'backup.auto.dayOfMonth': '月の日',
|
||||
'backup.auto.dayOfMonthHint':
|
||||
'すべての月に対応するため1~28に制限されています',
|
||||
'backup.auto.scheduleSummary': 'スケジュール',
|
||||
'backup.auto.summaryDaily': '毎日 {hour}:00',
|
||||
'backup.auto.summaryWeekly': '毎週{day} {hour}:00',
|
||||
'backup.auto.summaryMonthly': '毎月{day}日 {hour}:00',
|
||||
'backup.auto.envLocked': 'Docker',
|
||||
'backup.auto.envLockedHint':
|
||||
'自動バックアップはDockerの環境変数で設定されています。変更するにはdocker-compose.ymlを更新し、コンテナを再起動してください。',
|
||||
'backup.auto.copyEnv': 'Docker環境変数をコピー',
|
||||
'backup.auto.envCopied': 'Docker環境変数をコピーしました',
|
||||
'backup.auto.keepLabel': '古いバックアップを削除',
|
||||
'backup.dow.sunday': '日',
|
||||
'backup.dow.monday': '月',
|
||||
'backup.dow.tuesday': '火',
|
||||
'backup.dow.wednesday': '水',
|
||||
'backup.dow.thursday': '木',
|
||||
'backup.dow.friday': '金',
|
||||
'backup.dow.saturday': '土',
|
||||
'backup.interval.hourly': '毎時間',
|
||||
'backup.interval.daily': '毎日',
|
||||
'backup.interval.weekly': '毎週',
|
||||
'backup.interval.monthly': '毎月',
|
||||
'backup.keep.1day': '1日',
|
||||
'backup.keep.3days': '3日',
|
||||
'backup.keep.7days': '7日',
|
||||
'backup.keep.14days': '14日',
|
||||
'backup.keep.30days': '30日',
|
||||
'backup.keep.forever': '無期限',
|
||||
'backup.restoreConfirmTitle': 'バックアップを復元しますか?',
|
||||
'backup.restoreWarning':
|
||||
'現在のすべてのデータ(旅行、場所、ユーザー、アップロード)はバックアップで完全に置き換えられます。この操作は元に戻せません。',
|
||||
'backup.restoreTip':
|
||||
'ヒント:復元前に現在の状態をバックアップすることをおすすめします。',
|
||||
'backup.restoreConfirm': 'はい、復元します',
|
||||
};
|
||||
export default backup;
|
||||
@@ -0,0 +1,42 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const budget: TranslationStrings = {
|
||||
'budget.title': '予算',
|
||||
'budget.exportCsv': 'CSVを書き出し',
|
||||
'budget.emptyTitle': '予算はまだありません',
|
||||
'budget.emptyText': 'カテゴリと項目を作成して旅行予算を計画しましょう',
|
||||
'budget.emptyPlaceholder': 'カテゴリ名を入力...',
|
||||
'budget.createCategory': 'カテゴリを作成',
|
||||
'budget.category': 'カテゴリ',
|
||||
'budget.categoryName': 'カテゴリ名',
|
||||
'budget.table.name': '名前',
|
||||
'budget.table.total': '合計',
|
||||
'budget.table.persons': '人数',
|
||||
'budget.table.days': '日数',
|
||||
'budget.table.perPerson': '1人あたり',
|
||||
'budget.table.perDay': '1日あたり',
|
||||
'budget.table.perPersonDay': '人/日',
|
||||
'budget.table.note': 'メモ',
|
||||
'budget.table.date': '日付',
|
||||
'budget.newEntry': '新しい項目',
|
||||
'budget.defaultEntry': '新しい項目',
|
||||
'budget.defaultCategory': '新しいカテゴリ',
|
||||
'budget.total': '合計',
|
||||
'budget.totalBudget': '総予算',
|
||||
'budget.byCategory': 'カテゴリ別',
|
||||
'budget.editTooltip': 'クリックして編集',
|
||||
'budget.linkedToReservation': '予約に連携中 — 名前はそちらで編集してください',
|
||||
'budget.confirm.deleteCategory':
|
||||
'{count}件の項目があるカテゴリ「{name}」を削除しますか?',
|
||||
'budget.deleteCategory': 'カテゴリを削除',
|
||||
'budget.perPerson': '1人あたり',
|
||||
'budget.paid': '支払済み',
|
||||
'budget.open': '未精算',
|
||||
'budget.noMembers': 'メンバー未割り当て',
|
||||
'budget.settlement': '精算',
|
||||
'budget.settlementInfo':
|
||||
'予算項目のメンバーアイコンをクリックして緑にすると、支払い済みを示します。精算では、誰が誰にいくら支払うべきかを表示します。',
|
||||
'budget.netBalances': '差引残高',
|
||||
'budget.categoriesLabel': 'カテゴリ',
|
||||
};
|
||||
export default budget;
|
||||
@@ -0,0 +1,26 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const categories: TranslationStrings = {
|
||||
'categories.title': 'カテゴリ',
|
||||
'categories.subtitle': '場所のカテゴリを管理',
|
||||
'categories.new': '新しいカテゴリ',
|
||||
'categories.empty': 'カテゴリはまだありません',
|
||||
'categories.namePlaceholder': 'カテゴリ名',
|
||||
'categories.icon': 'アイコン',
|
||||
'categories.color': '色',
|
||||
'categories.customColor': 'カスタムカラーを選択',
|
||||
'categories.preview': 'プレビュー',
|
||||
'categories.defaultName': 'カテゴリ',
|
||||
'categories.update': '更新',
|
||||
'categories.create': '作成',
|
||||
'categories.confirm.delete':
|
||||
'カテゴリを削除しますか?このカテゴリの場所は削除されません。',
|
||||
'categories.toast.loadError': 'カテゴリの読み込みに失敗しました',
|
||||
'categories.toast.nameRequired': '名前を入力してください',
|
||||
'categories.toast.updated': 'カテゴリを更新しました',
|
||||
'categories.toast.created': 'カテゴリを作成しました',
|
||||
'categories.toast.saveError': '保存に失敗しました',
|
||||
'categories.toast.deleted': 'カテゴリを削除しました',
|
||||
'categories.toast.deleteError': '削除に失敗しました',
|
||||
};
|
||||
export default categories;
|
||||
@@ -0,0 +1,74 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const collab: TranslationStrings = {
|
||||
'collab.tabs.chat': 'チャット',
|
||||
'collab.tabs.notes': 'ノート',
|
||||
'collab.tabs.polls': '投票',
|
||||
'collab.whatsNext.title': '次にすること',
|
||||
'collab.whatsNext.today': '今日',
|
||||
'collab.whatsNext.tomorrow': '明日',
|
||||
'collab.whatsNext.empty': '予定されたアクティビティはありません',
|
||||
'collab.whatsNext.until': '〜',
|
||||
'collab.whatsNext.emptyHint':
|
||||
'時間が設定されたアクティビティがここに表示されます',
|
||||
'collab.chat.send': '送信',
|
||||
'collab.chat.placeholder': 'メッセージを入力…',
|
||||
'collab.chat.empty': '会話を始めましょう',
|
||||
'collab.chat.emptyHint': 'メッセージは旅行メンバー全員と共有されます',
|
||||
'collab.chat.emptyDesc': 'アイデアや計画、最新情報を共有しましょう',
|
||||
'collab.chat.today': '今日',
|
||||
'collab.chat.yesterday': '昨日',
|
||||
'collab.chat.deletedMessage': 'メッセージを削除しました',
|
||||
'collab.chat.reply': '返信',
|
||||
'collab.chat.loadMore': '以前のメッセージを読み込む',
|
||||
'collab.chat.justNow': 'たった今',
|
||||
'collab.chat.minutesAgo': '{n}分前',
|
||||
'collab.chat.hoursAgo': '{n}時間前',
|
||||
'collab.notes.title': 'ノート',
|
||||
'collab.notes.new': '新規ノート',
|
||||
'collab.notes.empty': 'まだノートがありません',
|
||||
'collab.notes.emptyHint': 'アイデアや計画を書き留めましょう',
|
||||
'collab.notes.all': 'すべて',
|
||||
'collab.notes.titlePlaceholder': 'ノートのタイトル',
|
||||
'collab.notes.contentPlaceholder': '内容を入力…',
|
||||
'collab.notes.categoryPlaceholder': 'カテゴリ',
|
||||
'collab.notes.newCategory': '新しいカテゴリ…',
|
||||
'collab.notes.category': 'カテゴリ',
|
||||
'collab.notes.noCategory': 'カテゴリなし',
|
||||
'collab.notes.color': '色',
|
||||
'collab.notes.save': '保存',
|
||||
'collab.notes.cancel': 'キャンセル',
|
||||
'collab.notes.edit': '編集',
|
||||
'collab.notes.delete': '削除',
|
||||
'collab.notes.pin': '固定',
|
||||
'collab.notes.unpin': '固定を解除',
|
||||
'collab.notes.daysAgo': '{n}日前',
|
||||
'collab.notes.categorySettings': 'カテゴリ管理',
|
||||
'collab.notes.create': '作成',
|
||||
'collab.notes.website': 'ウェブサイト',
|
||||
'collab.notes.websitePlaceholder': 'https://...',
|
||||
'collab.notes.attachFiles': 'ファイルを添付',
|
||||
'collab.notes.noCategoriesYet': 'カテゴリがまだありません',
|
||||
'collab.notes.emptyDesc': 'ノートを作成して始めましょう',
|
||||
'collab.polls.title': '投票',
|
||||
'collab.polls.new': '新しい投票',
|
||||
'collab.polls.empty': 'まだ投票がありません',
|
||||
'collab.polls.emptyHint': '質問してみんなで投票しましょう',
|
||||
'collab.polls.question': '質問',
|
||||
'collab.polls.questionPlaceholder': '何をしますか?',
|
||||
'collab.polls.addOption': '+ 選択肢を追加',
|
||||
'collab.polls.optionPlaceholder': '選択肢 {n}',
|
||||
'collab.polls.create': '投票を作成',
|
||||
'collab.polls.close': '閉じる',
|
||||
'collab.polls.closed': '終了',
|
||||
'collab.polls.votes': '{n}票',
|
||||
'collab.polls.vote': '{n}票',
|
||||
'collab.polls.multipleChoice': '複数選択',
|
||||
'collab.polls.multiChoice': '複数選択',
|
||||
'collab.polls.deadline': '締切',
|
||||
'collab.polls.option': '選択肢',
|
||||
'collab.polls.options': '選択肢',
|
||||
'collab.polls.delete': '削除',
|
||||
'collab.polls.closedSection': '終了',
|
||||
};
|
||||
export default collab;
|
||||
@@ -0,0 +1,55 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const common: TranslationStrings = {
|
||||
'common.save': '保存',
|
||||
'common.showMore': 'もっと見る',
|
||||
'common.showLess': '閉じる',
|
||||
'common.cancel': 'キャンセル',
|
||||
'common.clear': 'クリア',
|
||||
'common.delete': '削除',
|
||||
'common.edit': '編集',
|
||||
'common.add': '追加',
|
||||
'common.loading': '読み込み中…',
|
||||
'common.import': 'インポート',
|
||||
'common.select': '選択',
|
||||
'common.selectAll': 'すべて選択',
|
||||
'common.deselectAll': 'すべて解除',
|
||||
'common.error': 'エラー',
|
||||
'common.unknownError': '不明なエラー',
|
||||
'common.tooManyAttempts':
|
||||
'試行回数が多すぎます。時間をおいて再度お試しください。',
|
||||
'common.back': '戻る',
|
||||
'common.all': 'すべて',
|
||||
'common.close': '閉じる',
|
||||
'common.open': '開く',
|
||||
'common.upload': 'アップロード',
|
||||
'common.search': '検索',
|
||||
'common.confirm': '確認',
|
||||
'common.ok': 'OK',
|
||||
'common.yes': 'はい',
|
||||
'common.no': 'いいえ',
|
||||
'common.or': 'または',
|
||||
'common.none': 'なし',
|
||||
'common.date': '日付',
|
||||
'common.rename': '名前を変更',
|
||||
'common.discardChanges': '変更をキャンセル',
|
||||
'common.discard': 'キャンセル',
|
||||
'common.name': '名前',
|
||||
'common.email': 'メールアドレス',
|
||||
'common.password': 'パスワード',
|
||||
'common.saving': '保存中…',
|
||||
'common.justNow': 'たった今',
|
||||
'common.hoursAgo': '{count}時間前',
|
||||
'common.daysAgo': '{count}日前',
|
||||
'common.saved': '保存しました',
|
||||
'common.update': '更新',
|
||||
'common.change': '変更',
|
||||
'common.uploading': 'アップロード中…',
|
||||
'common.backToPlanning': 'プランに戻る',
|
||||
'common.reset': 'リセット',
|
||||
'common.expand': '展開',
|
||||
'common.collapse': '折りたたむ',
|
||||
'common.copy': 'コピー',
|
||||
'common.copied': 'コピーしました',
|
||||
};
|
||||
export default common;
|
||||
@@ -0,0 +1,120 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const dashboard: TranslationStrings = {
|
||||
'dashboard.title': 'マイ旅行',
|
||||
'dashboard.subtitle.loading': '旅行を読み込み中...',
|
||||
'dashboard.subtitle.trips': '{count}件の旅行({archived}件アーカイブ)',
|
||||
'dashboard.subtitle.empty': '最初の旅行を始めましょう',
|
||||
'dashboard.subtitle.activeOne': '進行中の旅行 {count}件',
|
||||
'dashboard.subtitle.activeMany': '進行中の旅行 {count}件',
|
||||
'dashboard.subtitle.archivedSuffix': ' · アーカイブ {count}件',
|
||||
'dashboard.newTrip': '新しい旅行',
|
||||
'dashboard.gridView': 'グリッド表示',
|
||||
'dashboard.listView': 'リスト表示',
|
||||
'dashboard.currency': '通貨',
|
||||
'dashboard.timezone': 'タイムゾーン',
|
||||
'dashboard.localTime': '現地',
|
||||
'dashboard.timezoneCustomTitle': 'カスタムタイムゾーン',
|
||||
'dashboard.timezoneCustomLabelPlaceholder': 'ラベル(任意)',
|
||||
'dashboard.timezoneCustomTzPlaceholder': '例:America/New_York',
|
||||
'dashboard.timezoneCustomAdd': '追加',
|
||||
'dashboard.timezoneCustomErrorEmpty': 'タイムゾーンIDを入力してください',
|
||||
'dashboard.timezoneCustomErrorInvalid':
|
||||
'無効なタイムゾーンです(例:Europe/Berlin)',
|
||||
'dashboard.timezoneCustomErrorDuplicate': 'すでに追加されています',
|
||||
'dashboard.emptyTitle': '旅行はまだありません',
|
||||
'dashboard.emptyText': '最初の旅行を作成して計画を始めましょう!',
|
||||
'dashboard.emptyButton': '最初の旅行を作成',
|
||||
'dashboard.nextTrip': '次の旅行',
|
||||
'dashboard.shared': '共有済み',
|
||||
'dashboard.sharedBy': '{name}さんが共有',
|
||||
'dashboard.days': '日数',
|
||||
'dashboard.places': '場所',
|
||||
'dashboard.members': '同行者',
|
||||
'dashboard.archive': 'アーカイブ',
|
||||
'dashboard.copyTrip': 'コピー',
|
||||
'dashboard.copySuffix': 'コピー',
|
||||
'dashboard.restore': '復元',
|
||||
'dashboard.archived': 'アーカイブ済み',
|
||||
'dashboard.status.ongoing': '進行中',
|
||||
'dashboard.status.today': '今日',
|
||||
'dashboard.status.tomorrow': '明日',
|
||||
'dashboard.status.past': '過去',
|
||||
'dashboard.status.daysLeft': '残り{count}日',
|
||||
'dashboard.toast.loadError': '旅行の読み込みに失敗しました',
|
||||
'dashboard.toast.created': '旅行を作成しました!',
|
||||
'dashboard.toast.createError': '旅行の作成に失敗しました',
|
||||
'dashboard.toast.updated': '旅行を更新しました!',
|
||||
'dashboard.toast.updateError': '旅行の更新に失敗しました',
|
||||
'dashboard.toast.deleted': '旅行を削除しました',
|
||||
'dashboard.toast.deleteError': '旅行の削除に失敗しました',
|
||||
'dashboard.toast.archived': '旅行をアーカイブしました',
|
||||
'dashboard.toast.archiveError': '旅行のアーカイブに失敗しました',
|
||||
'dashboard.toast.restored': '旅行を復元しました',
|
||||
'dashboard.toast.restoreError': '旅行の復元に失敗しました',
|
||||
'dashboard.toast.copied': '旅行をコピーしました!',
|
||||
'dashboard.toast.copyError': '旅行のコピーに失敗しました',
|
||||
'dashboard.confirm.delete':
|
||||
'旅行「{title}」を削除しますか?すべての場所と計画は完全に削除されます。',
|
||||
'dashboard.confirm.copy.title': 'この旅行をコピーしますか?',
|
||||
'dashboard.confirm.copy.willCopy': 'コピーされる内容',
|
||||
'dashboard.confirm.copy.will1': '日数、訪問先 & 日ごとの割り当て',
|
||||
'dashboard.confirm.copy.will2': '宿泊施設 & 予約',
|
||||
'dashboard.confirm.copy.will3': '予算項目 & カテゴリの順序',
|
||||
'dashboard.confirm.copy.will4': '持ち物リスト(未チェックのみ)',
|
||||
'dashboard.confirm.copy.will5': 'TODO(未割り当て & 未チェック)',
|
||||
'dashboard.confirm.copy.will6': '日ごとのメモ',
|
||||
'dashboard.confirm.copy.wontCopy': 'コピーされない内容',
|
||||
'dashboard.confirm.copy.wont1': '共同編集者 & メンバー割り当て',
|
||||
'dashboard.confirm.copy.wont2': '共同ノート、投票 & メッセージ',
|
||||
'dashboard.confirm.copy.wont3': 'ファイル & 写真',
|
||||
'dashboard.confirm.copy.wont4': '共有トークン',
|
||||
'dashboard.confirm.copy.confirm': '旅行をコピー',
|
||||
'dashboard.editTrip': '旅行を編集',
|
||||
'dashboard.createTrip': '新しい旅行を作成',
|
||||
'dashboard.tripTitle': 'タイトル',
|
||||
'dashboard.tripTitlePlaceholder': '例:日本の夏',
|
||||
'dashboard.tripDescription': '説明',
|
||||
'dashboard.tripDescriptionPlaceholder': 'この旅行について',
|
||||
'dashboard.startDate': '開始日',
|
||||
'dashboard.endDate': '終了日',
|
||||
'dashboard.dayCount': '日数',
|
||||
'dashboard.dayCountHint': '日付が未設定の場合に作成する日数です。',
|
||||
'dashboard.noDateHint':
|
||||
'日付未設定 — 既定で7日分が作成されます。後で変更できます。',
|
||||
'dashboard.coverImage': 'カバー画像',
|
||||
'dashboard.addCoverImage': 'カバー画像を追加(またはドラッグ&ドロップ)',
|
||||
'dashboard.addMembers': '同行者',
|
||||
'dashboard.addMember': 'メンバーを追加',
|
||||
'dashboard.coverSaved': 'カバー画像を保存しました',
|
||||
'dashboard.coverUploadError': 'アップロードに失敗しました',
|
||||
'dashboard.coverRemoveError': '削除に失敗しました',
|
||||
'dashboard.titleRequired': 'タイトルは必須です',
|
||||
'dashboard.endDateError': '終了日は開始日より後にしてください',
|
||||
'dashboard.greeting.morning': 'おはようございます、',
|
||||
'dashboard.greeting.afternoon': 'こんにちは、',
|
||||
'dashboard.greeting.evening': 'こんばんは、',
|
||||
'dashboard.mobile.liveNow': 'ライブ中',
|
||||
'dashboard.mobile.tripProgress': '旅行の進行状況',
|
||||
'dashboard.mobile.daysLeft': '残り{count}日',
|
||||
'dashboard.mobile.places': '場所',
|
||||
'dashboard.mobile.buddies': '仲間',
|
||||
'dashboard.mobile.newTrip': '新しい旅行',
|
||||
'dashboard.mobile.currency': '通貨',
|
||||
'dashboard.mobile.timezone': 'タイムゾーン',
|
||||
'dashboard.mobile.upcomingTrips': '今後の旅行',
|
||||
'dashboard.mobile.yourTrips': 'あなたの旅行',
|
||||
'dashboard.mobile.trips': '旅行',
|
||||
'dashboard.mobile.starts': '開始',
|
||||
'dashboard.mobile.duration': '期間',
|
||||
'dashboard.mobile.day': '日',
|
||||
'dashboard.mobile.days': '日',
|
||||
'dashboard.mobile.ongoing': '進行中',
|
||||
'dashboard.mobile.startsToday': '今日開始',
|
||||
'dashboard.mobile.tomorrow': '明日',
|
||||
'dashboard.mobile.inDays': '{count}日後',
|
||||
'dashboard.mobile.inMonths': '{count}か月後',
|
||||
'dashboard.mobile.completed': '完了',
|
||||
'dashboard.mobile.currencyConverter': '通貨換算',
|
||||
};
|
||||
export default dashboard;
|
||||
@@ -0,0 +1,26 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const day: TranslationStrings = {
|
||||
'day.precipProb': '降水確率',
|
||||
'day.precipitation': '降水量',
|
||||
'day.wind': '風',
|
||||
'day.sunrise': '日の出',
|
||||
'day.sunset': '日の入り',
|
||||
'day.hourlyForecast': '時間別予報',
|
||||
'day.climateHint':
|
||||
'過去の平均値 — 実際の予報はこの日付の16日前から表示されます。',
|
||||
'day.noWeather': '天気データがありません。座標付きの場所を追加してください。',
|
||||
'day.overview': '1日の概要',
|
||||
'day.accommodation': '宿泊先',
|
||||
'day.addAccommodation': '宿泊先を追加',
|
||||
'day.hotelDayRange': '適用日',
|
||||
'day.noPlacesForHotel': '先に旅行に場所を追加してください',
|
||||
'day.allDays': 'すべて',
|
||||
'day.checkIn': 'チェックイン',
|
||||
'day.checkInUntil': 'チェックイン期限',
|
||||
'day.checkOut': 'チェックアウト',
|
||||
'day.confirmation': '確認',
|
||||
'day.editAccommodation': '宿泊先を編集',
|
||||
'day.reservations': '予約',
|
||||
};
|
||||
export default day;
|
||||
@@ -0,0 +1,43 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const dayplan: TranslationStrings = {
|
||||
'dayplan.icsTooltip': 'カレンダーを書き出し(ICS)',
|
||||
'dayplan.emptyDay': 'この日の予定はありません',
|
||||
'dayplan.cannotReorderTransport': '時刻が固定された予約は並び替えできません',
|
||||
'dayplan.confirmRemoveTimeTitle': '時刻を削除しますか?',
|
||||
'dayplan.confirmRemoveTimeBody':
|
||||
'この場所には固定時刻({time})があります。移動すると時刻が削除され、自由に並び替えできます。',
|
||||
'dayplan.confirmRemoveTimeAction': '時刻を削除して移動',
|
||||
'dayplan.cannotDropOnTimed': '時刻指定の項目の間には配置できません',
|
||||
'dayplan.cannotBreakChronology': '時刻指定の項目や予約の時系列が崩れます',
|
||||
'dayplan.addNote': 'メモを追加',
|
||||
'dayplan.expandAll': 'すべての日を展開',
|
||||
'dayplan.collapseAll': 'すべての日を折りたたむ',
|
||||
'dayplan.editNote': 'メモを編集',
|
||||
'dayplan.noteAdd': 'メモを追加',
|
||||
'dayplan.noteEdit': 'メモを編集',
|
||||
'dayplan.noteTitle': 'メモ',
|
||||
'dayplan.noteSubtitle': '日別メモ',
|
||||
'dayplan.totalCost': '合計費用',
|
||||
'dayplan.days': '日',
|
||||
'dayplan.dayN': '{n}日目',
|
||||
'dayplan.calculating': '計算中...',
|
||||
'dayplan.route': 'ルート',
|
||||
'dayplan.optimize': '最適化',
|
||||
'dayplan.optimized': 'ルートを最適化しました',
|
||||
'dayplan.routeError': 'ルートの計算に失敗しました',
|
||||
'dayplan.toast.needTwoPlaces': 'ルート最適化には2つ以上の場所が必要です',
|
||||
'dayplan.toast.routeOptimized': 'ルートを最適化しました',
|
||||
'dayplan.toast.noGeoPlaces': '座標付きの場所がありません',
|
||||
'dayplan.confirmed': '確定',
|
||||
'dayplan.pendingRes': '保留',
|
||||
'dayplan.pdf': 'PDF',
|
||||
'dayplan.pdfTooltip': '日別計画をPDFで書き出し',
|
||||
'dayplan.pdfError': 'PDFの書き出しに失敗しました',
|
||||
'dayplan.mobile.addPlace': '場所を追加',
|
||||
'dayplan.mobile.searchPlaces': '場所を検索…',
|
||||
'dayplan.mobile.allAssigned': 'すべて割り当て済み',
|
||||
'dayplan.mobile.noMatch': '一致なし',
|
||||
'dayplan.mobile.createNew': '新しい場所を作成',
|
||||
};
|
||||
export default dayplan;
|
||||
@@ -0,0 +1,63 @@
|
||||
import type { NotificationLocale } from '../externalNotifications/types';
|
||||
|
||||
const ja: NotificationLocale = {
|
||||
email: {
|
||||
footer: 'TREKで通知を有効にしているため、このメールが届きました。',
|
||||
manage: '設定で通知設定を管理',
|
||||
madeWith: 'Made with',
|
||||
openTrek: 'TREKを開く',
|
||||
},
|
||||
events: {
|
||||
trip_invite: (p) => ({
|
||||
title: `「${p.trip}」への旅行招待`,
|
||||
body: `${p.actor}が${p.invitee || 'メンバー'}を「${p.trip}」の旅行に招待しました。`,
|
||||
}),
|
||||
booking_change: (p) => ({
|
||||
title: `新しい予約:${p.booking}`,
|
||||
body: `${p.actor}が「${p.trip}」に「${p.booking}」(${p.type})を追加しました。`,
|
||||
}),
|
||||
trip_reminder: (p) => ({
|
||||
title: `旅行リマインダー:${p.trip}`,
|
||||
body: `「${p.trip}」の旅行が近づいています!`,
|
||||
}),
|
||||
todo_due: (p) => ({
|
||||
title: `期限のタスク:${p.todo}`,
|
||||
body: `「${p.trip}」の「${p.todo}」は${p.due}が期限です。`,
|
||||
}),
|
||||
vacay_invite: (p) => ({
|
||||
title: 'Vacay Fusion招待',
|
||||
body: `${p.actor}が休暇プランの統合に招待しています。TREKを開いて承認または拒否してください。`,
|
||||
}),
|
||||
photos_shared: (p) => ({
|
||||
title: `${p.count}枚の写真が共有されました`,
|
||||
body: `${p.actor}が「${p.trip}」で${p.count}枚の写真を共有しました。`,
|
||||
}),
|
||||
collab_message: (p) => ({
|
||||
title: `「${p.trip}」の新しいメッセージ`,
|
||||
body: `${p.actor}:${p.preview}`,
|
||||
}),
|
||||
packing_tagged: (p) => ({
|
||||
title: `パッキング:${p.category}`,
|
||||
body: `${p.actor}が「${p.trip}」の「${p.category}」カテゴリにあなたを割り当てました。`,
|
||||
}),
|
||||
version_available: (p) => ({
|
||||
title: '新しいTREKバージョンが利用可能',
|
||||
body: `TREK ${p.version}が利用可能になりました。管理パネルからアップデートしてください。`,
|
||||
}),
|
||||
synology_session_cleared: () => ({
|
||||
title: 'Synologyセッションがクリアされました',
|
||||
body: 'SynologyアカウントまたはURLが変更されました。Synology Photosからログアウトされました。',
|
||||
}),
|
||||
},
|
||||
passwordReset: {
|
||||
subject: 'パスワードをリセット',
|
||||
greeting: 'こんにちは',
|
||||
body: 'TREKアカウントのパスワードリセットリクエストを受け付けました。以下のボタンをクリックして新しいパスワードを設定してください。',
|
||||
ctaIntro: 'パスワードをリセット',
|
||||
expiry: 'このリンクは60分後に期限切れになります。',
|
||||
ignore:
|
||||
'このリクエストをご自身でしていない場合は、このメールを無視してください — パスワードは変更されません。',
|
||||
},
|
||||
};
|
||||
|
||||
export default ja;
|
||||
@@ -0,0 +1,62 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const files: TranslationStrings = {
|
||||
'files.title': 'ファイル',
|
||||
'files.pageTitle': 'ファイル・ドキュメント',
|
||||
'files.subtitle': '{trip} のファイル {count} 件',
|
||||
'files.download': 'ダウンロード',
|
||||
'files.openError': 'ファイルを開けませんでした',
|
||||
'files.downloadPdf': 'PDFをダウンロード',
|
||||
'files.count': '{count}件のファイル',
|
||||
'files.countSingular': '1件のファイル',
|
||||
'files.uploaded': '{count}件アップロード',
|
||||
'files.uploadError': 'アップロードに失敗しました',
|
||||
'files.dropzone': 'ここにファイルをドロップ',
|
||||
'files.dropzoneHint': 'またはクリックして参照',
|
||||
'files.allowedTypes': '画像、PDF、DOC、DOCX、XLS、XLSX、TXT、CSV · 最大50MB',
|
||||
'files.uploading': 'アップロード中...',
|
||||
'files.filterAll': 'すべて',
|
||||
'files.filterPdf': 'PDF',
|
||||
'files.filterImages': '画像',
|
||||
'files.filterDocs': 'ドキュメント',
|
||||
'files.filterCollab': 'Collabメモ',
|
||||
'files.sourceCollab': 'Collabメモより',
|
||||
'files.empty': 'ファイルはまだありません',
|
||||
'files.emptyHint': 'ファイルをアップロードして旅行に添付しましょう',
|
||||
'files.openTab': '新しいタブで開く',
|
||||
'files.confirm.delete': 'このファイルを削除しますか?',
|
||||
'files.toast.deleted': 'ファイルを削除しました',
|
||||
'files.toast.deleteError': 'ファイルの削除に失敗しました',
|
||||
'files.sourcePlan': '日別計画',
|
||||
'files.sourceBooking': '予約',
|
||||
'files.sourceTransport': '移動',
|
||||
'files.attach': '添付',
|
||||
'files.pasteHint':
|
||||
'クリップボードから画像を貼り付けることもできます(Ctrl+V)',
|
||||
'files.trash': 'ゴミ箱',
|
||||
'files.trashEmpty': 'ゴミ箱は空です',
|
||||
'files.emptyTrash': 'ゴミ箱を空にする',
|
||||
'files.restore': '復元',
|
||||
'files.star': 'スター',
|
||||
'files.unstar': 'スター解除',
|
||||
'files.assign': '割り当て',
|
||||
'files.assignTitle': 'ファイルを割り当て',
|
||||
'files.assignPlace': '場所',
|
||||
'files.assignBooking': '予約',
|
||||
'files.assignTransport': '移動',
|
||||
'files.unassigned': '未割り当て',
|
||||
'files.unlink': 'リンクを解除',
|
||||
'files.toast.trashed': 'ゴミ箱に移動しました',
|
||||
'files.toast.restored': 'ファイルを復元しました',
|
||||
'files.toast.trashEmptied': 'ゴミ箱を空にしました',
|
||||
'files.toast.assigned': 'ファイルを割り当てました',
|
||||
'files.toast.assignError': '割り当てに失敗しました',
|
||||
'files.toast.restoreError': '復元に失敗しました',
|
||||
'files.confirm.permanentDelete':
|
||||
'このファイルを完全に削除しますか?元に戻せません。',
|
||||
'files.confirm.emptyTrash':
|
||||
'ゴミ箱内のファイルをすべて完全に削除しますか?元に戻せません。',
|
||||
'files.noteLabel': 'メモ',
|
||||
'files.notePlaceholder': 'メモを追加...',
|
||||
};
|
||||
export default files;
|
||||
@@ -0,0 +1,86 @@
|
||||
import admin from './admin';
|
||||
import airport from './airport';
|
||||
import atlas from './atlas';
|
||||
import backup from './backup';
|
||||
import budget from './budget';
|
||||
import categories from './categories';
|
||||
import collab from './collab';
|
||||
import common from './common';
|
||||
import dashboard from './dashboard';
|
||||
import day from './day';
|
||||
import dayplan from './dayplan';
|
||||
import files from './files';
|
||||
import inspector from './inspector';
|
||||
import journey from './journey';
|
||||
import login from './login';
|
||||
import map from './map';
|
||||
import members from './members';
|
||||
import memories from './memories';
|
||||
import nav from './nav';
|
||||
import notif from './notif';
|
||||
import notifications from './notifications';
|
||||
import oauth from './oauth';
|
||||
import packing from './packing';
|
||||
import pdf from './pdf';
|
||||
import perm from './perm';
|
||||
import photos from './photos';
|
||||
import places from './places';
|
||||
import planner from './planner';
|
||||
import register from './register';
|
||||
import reservations from './reservations';
|
||||
import settings from './settings';
|
||||
import share from './share';
|
||||
import shared from './shared';
|
||||
import stats from './stats';
|
||||
import system_notice from './system_notice';
|
||||
import todo from './todo';
|
||||
import transport from './transport';
|
||||
import trip from './trip';
|
||||
import trips from './trips';
|
||||
import undo from './undo';
|
||||
import vacay from './vacay';
|
||||
|
||||
const locale = {
|
||||
...common,
|
||||
...trips,
|
||||
...nav,
|
||||
...dashboard,
|
||||
...settings,
|
||||
...admin,
|
||||
...dayplan,
|
||||
...share,
|
||||
...shared,
|
||||
...login,
|
||||
...register,
|
||||
...vacay,
|
||||
...atlas,
|
||||
...trip,
|
||||
...places,
|
||||
...inspector,
|
||||
...reservations,
|
||||
...airport,
|
||||
...map,
|
||||
...budget,
|
||||
...files,
|
||||
...packing,
|
||||
...members,
|
||||
...categories,
|
||||
...backup,
|
||||
...photos,
|
||||
...pdf,
|
||||
...planner,
|
||||
...stats,
|
||||
...day,
|
||||
...memories,
|
||||
...collab,
|
||||
...perm,
|
||||
...undo,
|
||||
...notifications,
|
||||
...todo,
|
||||
...notif,
|
||||
...journey,
|
||||
...oauth,
|
||||
...system_notice,
|
||||
...transport,
|
||||
};
|
||||
export default locale;
|
||||
@@ -0,0 +1,22 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const inspector: TranslationStrings = {
|
||||
'inspector.opened': '営業中',
|
||||
'inspector.closed': '営業時間外',
|
||||
'inspector.openingHours': '営業時間',
|
||||
'inspector.showHours': '営業時間を表示',
|
||||
'inspector.files': 'ファイル',
|
||||
'inspector.remove': '削除',
|
||||
'inspector.filesCount': '{count}件のファイル',
|
||||
'inspector.removeFromDay': 'この日から削除',
|
||||
'inspector.addToDay': '日に追加',
|
||||
'inspector.confirmedRes': '確定済み予約',
|
||||
'inspector.pendingRes': '保留中の予約',
|
||||
'inspector.google': 'Googleマップで開く',
|
||||
'inspector.website': 'Webサイトを開く',
|
||||
'inspector.addRes': '予約',
|
||||
'inspector.editRes': '予約を編集',
|
||||
'inspector.participants': '参加者',
|
||||
'inspector.trackStats': '統計を記録',
|
||||
};
|
||||
export default inspector;
|
||||
@@ -0,0 +1,240 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const journey: TranslationStrings = {
|
||||
'journey.search.placeholder': '日記を検索…',
|
||||
'journey.search.noResults': '「{query}」に一致する日記はありません',
|
||||
'journey.title': '日記',
|
||||
'journey.subtitle': '旅の記録をリアルタイムで残そう',
|
||||
'journey.new': '新しい日記',
|
||||
'journey.create': '作成',
|
||||
'journey.titlePlaceholder': 'どこへ行きますか?',
|
||||
'journey.empty': '日記はまだありません',
|
||||
'journey.emptyHint': '次の旅を記録してみましょう',
|
||||
'journey.deleted': '日記を削除しました',
|
||||
'journey.createError': '日記を作成できませんでした',
|
||||
'journey.deleteError': '日記を削除できませんでした',
|
||||
'journey.deleteConfirmTitle': '削除',
|
||||
'journey.deleteConfirmMessage': '「{title}」を削除しますか?元に戻せません。',
|
||||
'journey.deleteConfirmGeneric': '本当に削除しますか?',
|
||||
'journey.notFound': '日記が見つかりません',
|
||||
'journey.photos': '写真',
|
||||
'journey.timelineEmpty': 'まだ立ち寄りがありません',
|
||||
'journey.timelineEmptyHint': 'チェックインするか、日記を書いて始めましょう',
|
||||
'journey.status.draft': '下書き',
|
||||
'journey.status.active': '進行中',
|
||||
'journey.status.completed': '完了',
|
||||
'journey.status.upcoming': '予定',
|
||||
'journey.status.archived': 'アーカイブ',
|
||||
'journey.checkin.add': 'チェックイン',
|
||||
'journey.checkin.namePlaceholder': '場所名',
|
||||
'journey.checkin.notesPlaceholder': 'メモ(任意)',
|
||||
'journey.checkin.save': '保存',
|
||||
'journey.checkin.error': 'チェックインを保存できませんでした',
|
||||
'journey.entry.add': '日記',
|
||||
'journey.entry.edit': '編集',
|
||||
'journey.entry.titlePlaceholder': 'タイトル(任意)',
|
||||
'journey.entry.bodyPlaceholder': '今日は何がありましたか?',
|
||||
'journey.entry.save': '保存',
|
||||
'journey.entry.error': '日記を保存できませんでした',
|
||||
'journey.photo.add': '写真',
|
||||
'journey.photo.uploadError': 'アップロードに失敗しました',
|
||||
'journey.share.share': '共有',
|
||||
'journey.share.public': '公開',
|
||||
'journey.share.linkCopied': '公開リンクをコピーしました',
|
||||
'journey.share.disabled': '公開共有は無効です',
|
||||
'journey.editor.titlePlaceholder': 'この瞬間に名前をつけて…',
|
||||
'journey.editor.bodyPlaceholder': 'この日のストーリーを書いてみよう…',
|
||||
'journey.editor.placePlaceholder': '場所(任意)',
|
||||
'journey.editor.tagsPlaceholder': 'タグ:穴場、最高の食事、また行きたい…',
|
||||
'journey.visibility.private': '非公開',
|
||||
'journey.visibility.shared': '共有',
|
||||
'journey.visibility.public': '公開',
|
||||
'journey.emptyState.title': 'ここから物語が始まります',
|
||||
'journey.emptyState.subtitle':
|
||||
'場所にチェックインするか、最初の日記を書いてみましょう',
|
||||
'journey.frontpage.subtitle': '旅を、忘れられない物語に',
|
||||
'journey.frontpage.createJourney': '日記を作成',
|
||||
'journey.frontpage.activeJourney': '進行中の日記',
|
||||
'journey.frontpage.allJourneys': 'すべての日記',
|
||||
'journey.frontpage.journeys': '日記',
|
||||
'journey.frontpage.createNew': '新しい日記を作成',
|
||||
'journey.frontpage.createNewSub': '旅を選んで、物語を書き、共有しよう',
|
||||
'journey.frontpage.live': 'ライブ',
|
||||
'journey.frontpage.synced': '同期済み',
|
||||
'journey.frontpage.continueWriting': '続けて書く',
|
||||
'journey.frontpage.updated': '{time}に更新',
|
||||
'journey.frontpage.suggestionLabel': '旅行が終了しました',
|
||||
'journey.frontpage.suggestionText': '<strong>{title}</strong>を日記にしよう',
|
||||
'journey.frontpage.dismiss': '閉じる',
|
||||
'journey.frontpage.journeyName': '日記名',
|
||||
'journey.frontpage.namePlaceholder': '例:東南アジア 2026',
|
||||
'journey.frontpage.selectTrips': '旅行を選択',
|
||||
'journey.frontpage.tripsSelected': '件選択',
|
||||
'journey.frontpage.trips': '旅行',
|
||||
'journey.frontpage.placesImported': '場所がインポートされます',
|
||||
'journey.frontpage.places': '場所',
|
||||
'journey.detail.backToJourney': '日記に戻る',
|
||||
'journey.detail.syncedWithTrips': '旅行と同期済み',
|
||||
'journey.detail.addEntry': 'エントリーを追加',
|
||||
'journey.detail.newEntry': '新しいエントリー',
|
||||
'journey.detail.editEntry': 'エントリーを編集',
|
||||
'journey.detail.noEntries': 'エントリーはまだありません',
|
||||
'journey.detail.noEntriesHint':
|
||||
'旅行を追加して下書きエントリーを作成しましょう',
|
||||
'journey.detail.noPhotos': '写真はまだありません',
|
||||
'journey.detail.noPhotosHint':
|
||||
'エントリーに写真を追加するか、Immich/Synologyライブラリを表示',
|
||||
'journey.detail.journeyTab': '日記',
|
||||
'journey.detail.journeyStats': '統計',
|
||||
'journey.detail.syncedTrips': '同期中の旅行',
|
||||
'journey.detail.noTripsLinked': 'リンクされた旅行はありません',
|
||||
'journey.detail.contributors': '参加者',
|
||||
'journey.detail.readMore': 'もっと見る',
|
||||
'journey.detail.prosCons': '良かった点・気になった点',
|
||||
'journey.detail.photos': '写真',
|
||||
'journey.detail.day': '{number}日目',
|
||||
'journey.detail.places': '場所',
|
||||
'journey.stats.days': '日数',
|
||||
'journey.stats.cities': '都市',
|
||||
'journey.stats.entries': 'エントリー',
|
||||
'journey.stats.photos': '写真',
|
||||
'journey.stats.places': '場所',
|
||||
'journey.skeletons.show': '提案を表示',
|
||||
'journey.skeletons.hide': '提案を非表示',
|
||||
'journey.verdict.lovedIt': '最高だった',
|
||||
'journey.verdict.couldBeBetter': '改善の余地あり',
|
||||
'journey.synced.places': '場所',
|
||||
'journey.synced.synced': '同期済み',
|
||||
'journey.editor.discardChangesConfirm':
|
||||
'未保存の変更があります。破棄しますか?',
|
||||
'journey.editor.uploadPhotos': '写真をアップロード',
|
||||
'journey.editor.uploading': 'アップロード中…',
|
||||
'journey.editor.fromGallery': 'ギャラリーから',
|
||||
'journey.editor.allPhotosAdded': 'すべての写真は追加済みです',
|
||||
'journey.editor.writeStory': 'ストーリーを書く…',
|
||||
'journey.editor.prosCons': '良かった点・気になった点',
|
||||
'journey.editor.pros': '良かった点',
|
||||
'journey.editor.cons': '気になった点',
|
||||
'journey.editor.proPlaceholder': '良かったこと…',
|
||||
'journey.editor.conPlaceholder': 'いまいちだったこと…',
|
||||
'journey.editor.addAnother': '追加',
|
||||
'journey.editor.date': '日付',
|
||||
'journey.editor.location': '場所',
|
||||
'journey.editor.searchLocation': '場所を検索…',
|
||||
'journey.editor.mood': '気分',
|
||||
'journey.editor.weather': '天気',
|
||||
'journey.editor.photoFirst': '1番目',
|
||||
'journey.editor.makeFirst': '1番目にする',
|
||||
'journey.editor.searching': '検索中…',
|
||||
'journey.mood.amazing': '最高',
|
||||
'journey.mood.good': '良い',
|
||||
'journey.mood.neutral': '普通',
|
||||
'journey.mood.rough': '大変',
|
||||
'journey.weather.sunny': '晴れ',
|
||||
'journey.weather.partly': '晴れ時々くもり',
|
||||
'journey.weather.cloudy': 'くもり',
|
||||
'journey.weather.rainy': '雨',
|
||||
'journey.weather.stormy': '嵐',
|
||||
'journey.weather.cold': '雪',
|
||||
'journey.trips.linkTrip': '旅行をリンク',
|
||||
'journey.trips.searchTrip': '旅行を検索',
|
||||
'journey.trips.searchPlaceholder': '旅行名または目的地…',
|
||||
'journey.trips.noTripsAvailable': '利用できる旅行がありません',
|
||||
'journey.trips.link': 'リンク',
|
||||
'journey.trips.tripLinked': '旅行をリンクしました',
|
||||
'journey.trips.linkFailed': 'リンクに失敗しました',
|
||||
'journey.trips.addTrip': '旅行を追加',
|
||||
'journey.trips.unlinkTrip': 'リンク解除',
|
||||
'journey.trips.unlinkMessage':
|
||||
'「{title}」のリンクを解除しますか?この旅行から同期されたエントリーと写真はすべて完全に削除されます。元に戻せません。',
|
||||
'journey.trips.unlink': '解除',
|
||||
'journey.trips.tripUnlinked': 'リンクを解除しました',
|
||||
'journey.trips.unlinkFailed': '解除に失敗しました',
|
||||
'journey.trips.noTripsLinkedSettings': 'リンクされた旅行はありません',
|
||||
'journey.contributors.invite': '参加者を招待',
|
||||
'journey.contributors.searchUser': 'ユーザーを検索',
|
||||
'journey.contributors.searchPlaceholder': 'ユーザー名またはメール…',
|
||||
'journey.contributors.noUsers': 'ユーザーが見つかりません',
|
||||
'journey.contributors.role': '役割',
|
||||
'journey.contributors.added': '参加者を追加しました',
|
||||
'journey.contributors.addFailed': '追加に失敗しました',
|
||||
'journey.contributors.remove': '参加者を削除',
|
||||
'journey.contributors.removeConfirm':
|
||||
'{username}をこの日記から削除しますか?',
|
||||
'journey.contributors.removed': '参加者を削除しました',
|
||||
'journey.contributors.removeFailed': '削除に失敗しました',
|
||||
'journey.share.publicShare': '公開共有',
|
||||
'journey.share.createLink': '共有リンクを作成',
|
||||
'journey.share.linkCreated': '共有リンクを作成しました',
|
||||
'journey.share.createFailed': 'リンク作成に失敗しました',
|
||||
'journey.share.copy': 'コピー',
|
||||
'journey.share.copied': 'コピーしました!',
|
||||
'journey.share.timeline': 'タイムライン',
|
||||
'journey.share.gallery': 'ギャラリー',
|
||||
'journey.share.map': 'マップ',
|
||||
'journey.share.removeLink': '共有リンクを削除',
|
||||
'journey.share.linkDeleted': '共有リンクを削除しました',
|
||||
'journey.share.deleteFailed': '削除に失敗しました',
|
||||
'journey.share.updateFailed': '更新に失敗しました',
|
||||
'journey.invite.role': '役割',
|
||||
'journey.invite.viewer': '閲覧者',
|
||||
'journey.invite.editor': '編集者',
|
||||
'journey.invite.invite': '招待',
|
||||
'journey.invite.inviting': '招待中…',
|
||||
'journey.settings.title': '日記設定',
|
||||
'journey.settings.coverImage': 'カバー画像',
|
||||
'journey.settings.changeCover': 'カバーを変更',
|
||||
'journey.settings.addCover': 'カバー画像を追加',
|
||||
'journey.settings.name': '名前',
|
||||
'journey.settings.subtitle': 'サブタイトル',
|
||||
'journey.settings.subtitlePlaceholder': '例:タイ・ベトナム・カンボジア',
|
||||
'journey.settings.endJourney': '日記をアーカイブ',
|
||||
'journey.settings.reopenJourney': '日記を復元',
|
||||
'journey.settings.archived': '日記をアーカイブしました',
|
||||
'journey.settings.reopened': '日記を復元しました',
|
||||
'journey.settings.endDescription':
|
||||
'Liveバッジを非表示にします。いつでも再開できます。',
|
||||
'journey.settings.delete': '削除',
|
||||
'journey.settings.deleteJourney': '日記を削除',
|
||||
'journey.settings.deleteMessage':
|
||||
'「{title}」を削除しますか?すべてのエントリーと写真が失われます。',
|
||||
'journey.settings.saved': '設定を保存しました',
|
||||
'journey.settings.saveFailed': '保存に失敗しました',
|
||||
'journey.settings.coverUpdated': 'カバーを更新しました',
|
||||
'journey.settings.coverFailed': 'アップロードに失敗しました',
|
||||
'journey.settings.failedToDelete': '削除に失敗しました',
|
||||
'journey.entries.deleteTitle': 'エントリーを削除',
|
||||
'journey.photosUploaded': '{count}枚の写真をアップロード',
|
||||
'journey.photosAdded': '{count}枚の写真を追加',
|
||||
'journey.public.notFound': '見つかりません',
|
||||
'journey.public.notFoundMessage':
|
||||
'この日記は存在しないか、リンクの有効期限が切れています。',
|
||||
'journey.public.readOnly': '閲覧のみ · 公開日記',
|
||||
'journey.public.tagline': '旅の記録&探索キット',
|
||||
'journey.public.sharedVia': '共有元',
|
||||
'journey.public.madeWith': '作成:',
|
||||
'journey.pdf.journeyBook': '日記ブック',
|
||||
'journey.pdf.madeWith': 'Made with TREK',
|
||||
'journey.pdf.day': '日目',
|
||||
'journey.pdf.theEnd': 'おわり',
|
||||
'journey.pdf.saveAsPdf': 'PDFとして保存',
|
||||
'journey.pdf.pages': 'ページ',
|
||||
'journey.picker.tripPeriod': '旅行期間',
|
||||
'journey.picker.dateRange': '日付範囲',
|
||||
'journey.picker.allPhotos': 'すべての写真',
|
||||
'journey.picker.albums': 'アルバム',
|
||||
'journey.picker.selected': '選択中',
|
||||
'journey.picker.addTo': '追加先',
|
||||
'journey.picker.newGallery': '新しいギャラリー',
|
||||
'journey.picker.selectAll': 'すべて選択',
|
||||
'journey.picker.deselectAll': '選択解除',
|
||||
'journey.picker.noAlbums': 'アルバムがありません',
|
||||
'journey.picker.selectDate': '日付を選択',
|
||||
'journey.picker.search': '検索',
|
||||
'journey.editor.uploadingProgress': 'アップロード中 {done}/{total}…',
|
||||
'journey.editor.uploadFailed': '写真のアップロードに失敗しました',
|
||||
'journey.editor.uploadPartialFailed':
|
||||
'{total}枚中{failed}枚の写真がアップロードに失敗しました — もう一度保存して再試行してください',
|
||||
'journey.photosUploadFailed': '一部の写真をアップロードできませんでした',
|
||||
};
|
||||
export default journey;
|
||||
@@ -0,0 +1,95 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const login: TranslationStrings = {
|
||||
'login.error': 'ログインに失敗しました。認証情報を確認してください。',
|
||||
'login.tagline': 'あなたの旅行。\nあなたの計画。',
|
||||
'login.description':
|
||||
'インタラクティブなマップ、予算、リアルタイム同期で、みんなで旅行を計画。',
|
||||
'login.features.maps': 'インタラクティブマップ',
|
||||
'login.features.mapsDesc': 'Google Places、経路、クラスタリング',
|
||||
'login.features.realtime': 'リアルタイム同期',
|
||||
'login.features.realtimeDesc': 'WebSocketで共同計画',
|
||||
'login.features.budget': '予算管理',
|
||||
'login.features.budgetDesc': 'カテゴリ、グラフ、人数別費用',
|
||||
'login.features.collab': 'コラボレーション',
|
||||
'login.features.collabDesc': '複数ユーザーで旅行を共有',
|
||||
'login.features.packing': '持ち物リスト',
|
||||
'login.features.packingDesc': 'カテゴリ、進捗、提案',
|
||||
'login.features.bookings': '予約',
|
||||
'login.features.bookingsDesc': '航空券、ホテル、レストランなど',
|
||||
'login.features.files': 'ドキュメント',
|
||||
'login.features.filesDesc': '書類のアップロードと管理',
|
||||
'login.features.routes': 'スマート経路',
|
||||
'login.features.routesDesc': '自動最適化&Google Maps書き出し',
|
||||
'login.selfHosted': 'セルフホスト · オープンソース · データはあなたのもの',
|
||||
'login.title': 'サインイン',
|
||||
'login.subtitle': 'おかえりなさい',
|
||||
'login.signingIn': 'サインイン中…',
|
||||
'login.signIn': 'サインイン',
|
||||
'login.createAdmin': '管理者アカウントを作成',
|
||||
'login.createAdminHint': 'TREKの最初の管理者アカウントを設定します。',
|
||||
'login.setNewPassword': '新しいパスワードを設定',
|
||||
'login.setNewPasswordHint': '続行する前にパスワードを変更してください。',
|
||||
'login.createAccount': 'アカウントを作成',
|
||||
'login.createAccountHint': '新しいアカウントを登録。',
|
||||
'login.creating': '作成中…',
|
||||
'login.noAccount': 'アカウントをお持ちでないですか?',
|
||||
'login.hasAccount': 'すでにアカウントをお持ちですか?',
|
||||
'login.register': '登録',
|
||||
'login.emailPlaceholder': 'your@email.com',
|
||||
'login.username': 'ユーザー名',
|
||||
'login.oidc.registrationDisabled':
|
||||
'登録は無効です。管理者に連絡してください。',
|
||||
'login.oidc.noEmail': 'プロバイダーからメールが取得できませんでした。',
|
||||
'login.oidc.tokenFailed': '認証に失敗しました。',
|
||||
'login.oidc.invalidState': 'セッションが無効です。もう一度お試しください。',
|
||||
'login.demoFailed': 'デモログインに失敗しました',
|
||||
'login.oidcSignIn': '{name}でサインイン',
|
||||
'login.oidcOnly':
|
||||
'パスワード認証は無効です。SSOプロバイダーでサインインしてください。',
|
||||
'login.oidcLoggedOut':
|
||||
'ログアウトしました。SSOプロバイダーで再度サインインしてください。',
|
||||
'login.demoHint': 'デモを試す — 登録不要',
|
||||
'login.mfaTitle': '二要素認証',
|
||||
'login.mfaSubtitle': '認証アプリの6桁コードを入力してください。',
|
||||
'login.mfaCodeLabel': '確認コード',
|
||||
'login.mfaCodeRequired': '認証アプリのコードを入力してください。',
|
||||
'login.mfaHint':
|
||||
'Google Authenticator、Authy などのTOTPアプリを開いてください。',
|
||||
'login.mfaBack': '← サインインに戻る',
|
||||
'login.mfaVerify': '確認',
|
||||
'login.invalidInviteLink': '無効または期限切れの招待リンクです',
|
||||
'login.oidcFailed': 'OIDCログインに失敗しました',
|
||||
'login.usernameRequired': 'ユーザー名を入力してください',
|
||||
'login.passwordMinLength': 'パスワードは8文字以上である必要があります',
|
||||
'login.forgotPassword': 'パスワードを忘れた場合',
|
||||
'login.forgotPasswordTitle': 'パスワードをリセット',
|
||||
'login.forgotPasswordBody':
|
||||
'登録時のメールアドレスを入力してください。アカウントが存在する場合、リセット用リンクを送信します。',
|
||||
'login.forgotPasswordSubmit': 'リセットリンクを送信',
|
||||
'login.forgotPasswordSentTitle': 'メールを確認してください',
|
||||
'login.forgotPasswordSentBody':
|
||||
'該当するアカウントがある場合、リセットリンクを送信しました。リンクの有効期限は60分です。',
|
||||
'login.forgotPasswordSmtpHintOff':
|
||||
'注意:管理者がSMTPを設定していないため、リセットリンクはメールではなくサーバーコンソールに出力されます。',
|
||||
'login.backToLogin': 'ログインに戻る',
|
||||
'login.newPassword': '新しいパスワード',
|
||||
'login.confirmPassword': '新しいパスワード(確認)',
|
||||
'login.passwordsDontMatch': 'パスワードが一致しません',
|
||||
'login.mfaCode': '2FAコード',
|
||||
'login.resetPasswordTitle': '新しいパスワードを設定',
|
||||
'login.resetPasswordBody':
|
||||
'以前使用していない強力なパスワードを設定してください(8文字以上)。',
|
||||
'login.resetPasswordMfaBody':
|
||||
'2FAコードまたはバックアップコードを入力してリセットを完了してください。',
|
||||
'login.resetPasswordSubmit': 'パスワードをリセット',
|
||||
'login.resetPasswordVerify': '確認してリセット',
|
||||
'login.resetPasswordSuccessTitle': 'パスワードを更新しました',
|
||||
'login.resetPasswordSuccessBody': '新しいパスワードでログインできます。',
|
||||
'login.resetPasswordInvalidLink': '無効なリセットリンク',
|
||||
'login.resetPasswordInvalidLinkBody':
|
||||
'リンクが無効または破損しています。新しいリンクをリクエストしてください。',
|
||||
'login.resetPasswordFailed':
|
||||
'リセットに失敗しました。リンクの有効期限が切れている可能性があります。',
|
||||
};
|
||||
export default login;
|
||||
@@ -0,0 +1,8 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const map: TranslationStrings = {
|
||||
'map.connections': '接続',
|
||||
'map.showConnections': '予約ルートを表示',
|
||||
'map.hideConnections': '予約ルートを非表示',
|
||||
};
|
||||
export default map;
|
||||
@@ -0,0 +1,24 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const members: TranslationStrings = {
|
||||
'members.shareTrip': '旅行を共有',
|
||||
'members.inviteUser': 'ユーザーを招待',
|
||||
'members.selectUser': 'ユーザーを選択…',
|
||||
'members.invite': '招待',
|
||||
'members.allHaveAccess': 'すでに全員がアクセスできます。',
|
||||
'members.access': 'アクセス',
|
||||
'members.person': '人',
|
||||
'members.persons': '人',
|
||||
'members.you': 'あなた',
|
||||
'members.owner': 'オーナー',
|
||||
'members.leaveTrip': '旅行を退出',
|
||||
'members.removeAccess': 'アクセスを削除',
|
||||
'members.confirmLeave': '旅行を退出しますか?アクセスできなくなります。',
|
||||
'members.confirmRemove': 'このユーザーのアクセスを削除しますか?',
|
||||
'members.loadError': 'メンバーの読み込みに失敗しました',
|
||||
'members.added': '追加しました',
|
||||
'members.addError': '追加に失敗しました',
|
||||
'members.removed': 'メンバーを削除しました',
|
||||
'members.removeError': '削除に失敗しました',
|
||||
};
|
||||
export default members;
|
||||
@@ -0,0 +1,79 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const memories: TranslationStrings = {
|
||||
'memories.title': '写真',
|
||||
'memories.notConnected': '{provider_name} が接続されていません',
|
||||
'memories.notConnectedHint':
|
||||
'設定で {provider_name} インスタンスを接続すると、この旅行に写真を追加できます。',
|
||||
'memories.notConnectedMultipleHint':
|
||||
'設定で次の写真プロバイダーのいずれかを接続してください:{provider_names}',
|
||||
'memories.noDates': '写真を読み込むには旅行の日付を追加してください。',
|
||||
'memories.noPhotos': '写真が見つかりません',
|
||||
'memories.noPhotosHint': '{provider_name} にこの旅行期間の写真がありません。',
|
||||
'memories.photosFound': '枚の写真',
|
||||
'memories.fromOthers': '他のユーザーから',
|
||||
'memories.sharePhotos': '写真を共有',
|
||||
'memories.sharing': '共有',
|
||||
'memories.reviewTitle': '写真を確認',
|
||||
'memories.reviewHint': 'クリックして共有から除外できます。',
|
||||
'memories.shareCount': '{count}枚の写真を共有',
|
||||
'memories.providerUrl': 'サーバーURL',
|
||||
'memories.providerApiKey': 'APIキー',
|
||||
'memories.providerUsername': 'ユーザー名',
|
||||
'memories.providerPassword': 'パスワード',
|
||||
'memories.providerOTP': 'MFAコード(有効な場合)',
|
||||
'memories.skipSSLVerification': 'SSL証明書の検証をスキップ',
|
||||
'memories.immichAutoUpload': 'アップロード時に旅程の写真をImmichにミラー',
|
||||
'memories.providerUrlHintSynology':
|
||||
'URLにPhotosアプリのパスを含めてください(例:https://nas:5001/photo)',
|
||||
'memories.testConnection': '接続をテスト',
|
||||
'memories.testFirst': '先に接続をテストしてください',
|
||||
'memories.testShort': 'テスト',
|
||||
'memories.connected': '接続済み',
|
||||
'memories.disconnected': '未接続',
|
||||
'memories.connectionSuccess': '{provider_name} に接続しました',
|
||||
'memories.connectionError': '{provider_name} に接続できませんでした',
|
||||
'memories.saved': '{provider_name} の設定を保存しました',
|
||||
'memories.providerDisconnectedBanner':
|
||||
'{provider_name} との接続が切れています。写真を見るには設定で再接続してください。',
|
||||
'memories.saveError': '{provider_name} の設定を保存できませんでした',
|
||||
'memories.addPhotos': '写真を追加',
|
||||
'memories.linkAlbum': 'アルバムをリンク',
|
||||
'memories.selectAlbum': '{provider_name} のアルバムを選択',
|
||||
'memories.selectAlbumMultiple': 'アルバムを選択',
|
||||
'memories.noAlbums': 'アルバムが見つかりません',
|
||||
'memories.syncAlbum': 'アルバムを同期',
|
||||
'memories.unlinkAlbum': 'アルバムのリンクを解除',
|
||||
'memories.photos': '写真',
|
||||
'memories.selectPhotos': '{provider_name} から写真を選択',
|
||||
'memories.selectPhotosMultiple': '写真を選択',
|
||||
'memories.selectHint': '写真をタップして選択してください。',
|
||||
'memories.selected': '選択済み',
|
||||
'memories.addSelected': '{count} 枚の写真を追加',
|
||||
'memories.alreadyAdded': '追加済み',
|
||||
'memories.private': '非公開',
|
||||
'memories.stopSharing': '共有を停止',
|
||||
'memories.oldest': '古い順',
|
||||
'memories.newest': '新しい順',
|
||||
'memories.allLocations': 'すべての場所',
|
||||
'memories.tripDates': '旅行期間',
|
||||
'memories.allPhotos': 'すべての写真',
|
||||
'memories.confirmShareTitle': '旅行メンバーと共有しますか?',
|
||||
'memories.confirmShareHint':
|
||||
'{count} 枚の写真がこの旅行の全メンバーに表示されます。後から個別に非公開にできます。',
|
||||
'memories.confirmShareButton': '写真を共有',
|
||||
'memories.error.loadAlbums': 'アルバムの読み込みに失敗しました',
|
||||
'memories.error.linkAlbum': 'アルバムのリンクに失敗しました',
|
||||
'memories.error.unlinkAlbum': 'アルバムのリンク解除に失敗しました',
|
||||
'memories.error.syncAlbum': 'アルバムの同期に失敗しました',
|
||||
'memories.error.loadPhotos': '写真の読み込みに失敗しました',
|
||||
'memories.error.addPhotos': '写真の追加に失敗しました',
|
||||
'memories.error.removePhoto': '写真の削除に失敗しました',
|
||||
'memories.error.toggleSharing': '共有設定の更新に失敗しました',
|
||||
'memories.saveRouteNotConfigured':
|
||||
'このプロバイダーでは保存先が設定されていません',
|
||||
'memories.testRouteNotConfigured':
|
||||
'このプロバイダーではテスト用の保存先が設定されていません',
|
||||
'memories.fillRequiredFields': '必須項目をすべて入力してください',
|
||||
};
|
||||
export default memories;
|
||||
@@ -0,0 +1,20 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const nav: TranslationStrings = {
|
||||
'nav.trip': '旅行',
|
||||
'nav.share': '共有',
|
||||
'nav.settings': '設定',
|
||||
'nav.admin': '管理',
|
||||
'nav.logout': 'ログアウト',
|
||||
'nav.lightMode': 'ライトモード',
|
||||
'nav.darkMode': 'ダークモード',
|
||||
'nav.autoMode': '自動',
|
||||
'nav.administrator': '管理者',
|
||||
'nav.myTrips': 'マイ旅行',
|
||||
'nav.profile': 'プロフィール',
|
||||
'nav.bottomSettings': '設定',
|
||||
'nav.bottomAdmin': '管理者設定',
|
||||
'nav.bottomLogout': 'ログアウト',
|
||||
'nav.bottomAdminBadge': '管理者',
|
||||
};
|
||||
export default nav;
|
||||
@@ -0,0 +1,44 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const notif: TranslationStrings = {
|
||||
'notif.test.title': '[テスト] 通知',
|
||||
'notif.test.simple.text': 'これはシンプルなテスト通知です。',
|
||||
'notif.test.boolean.text': 'このテスト通知を承認しますか?',
|
||||
'notif.test.navigate.text':
|
||||
'下をクリックしてダッシュボードに移動してください。',
|
||||
'notif.trip_invite.title': '旅行への招待',
|
||||
'notif.trip_invite.text': '{actor}が「{trip}」に招待しました',
|
||||
'notif.booking_change.title': '予約が更新されました',
|
||||
'notif.booking_change.text': '{actor}が「{trip}」の予約を更新しました',
|
||||
'notif.trip_reminder.title': '旅行リマインド',
|
||||
'notif.trip_reminder.text': '旅行「{trip}」がまもなく始まります!',
|
||||
'notif.todo_due.title': 'ToDoの期限',
|
||||
'notif.todo_due.text': '「{trip}」の{todo}は{due}が期限です',
|
||||
'notif.vacay_invite.title': 'Vacay Fusionへの招待',
|
||||
'notif.vacay_invite.text': '{actor}から旅行プランの統合に招待されました',
|
||||
'notif.photos_shared.title': '写真が共有されました',
|
||||
'notif.photos_shared.text':
|
||||
'{actor}が「{trip}」で{count}枚の写真を共有しました',
|
||||
'notif.collab_message.title': '新しいメッセージ',
|
||||
'notif.collab_message.text': '{actor}が「{trip}」でメッセージを送りました',
|
||||
'notif.packing_tagged.title': '持ち物の割り当て',
|
||||
'notif.packing_tagged.text':
|
||||
'{actor}が「{trip}」の{category}をあなたに割り当てました',
|
||||
'notif.version_available.title': '新しいバージョンがあります',
|
||||
'notif.version_available.text': 'TREK {version}が利用可能です',
|
||||
'notif.action.view_trip': '旅行を見る',
|
||||
'notif.action.view_collab': 'メッセージを見る',
|
||||
'notif.action.view_packing': '持ち物を見る',
|
||||
'notif.action.view_photos': '写真を見る',
|
||||
'notif.action.view_vacay': 'Vacayを見る',
|
||||
'notif.action.view_admin': '管理画面へ',
|
||||
'notif.action.view': '表示',
|
||||
'notif.action.accept': '承認',
|
||||
'notif.action.decline': '拒否',
|
||||
'notif.generic.title': '通知',
|
||||
'notif.generic.text': '新しい通知があります',
|
||||
'notif.dev.unknown_event.title': '[DEV] 不明なイベント',
|
||||
'notif.dev.unknown_event.text':
|
||||
'イベントタイプ「{event}」はEVENT_NOTIFICATION_CONFIGに登録されていません',
|
||||
};
|
||||
export default notif;
|
||||
@@ -0,0 +1,37 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const notifications: TranslationStrings = {
|
||||
'notifications.title': '通知',
|
||||
'notifications.markAllRead': 'すべて既読',
|
||||
'notifications.deleteAll': 'すべて削除',
|
||||
'notifications.showAll': 'すべて表示',
|
||||
'notifications.empty': '通知はありません',
|
||||
'notifications.emptyDescription': 'すべて確認済みです!',
|
||||
'notifications.all': 'すべて',
|
||||
'notifications.unreadOnly': '未読',
|
||||
'notifications.markRead': '既読にする',
|
||||
'notifications.markUnread': '未読にする',
|
||||
'notifications.delete': '削除',
|
||||
'notifications.system': 'システム',
|
||||
'notifications.synologySessionCleared.title':
|
||||
'Synology Photosが切断されました',
|
||||
'notifications.synologySessionCleared.text':
|
||||
'サーバーまたはアカウントが変更されました。設定で接続を再テストしてください。',
|
||||
'notifications.versionAvailable.title': '更新があります',
|
||||
'notifications.versionAvailable.text': 'TREK {version} が利用可能です。',
|
||||
'notifications.versionAvailable.button': '詳細を見る',
|
||||
'notifications.test.title': '{actor} からのテスト通知',
|
||||
'notifications.test.text': 'これはテスト通知です。',
|
||||
'notifications.test.booleanTitle': '{actor} が承認を求めています',
|
||||
'notifications.test.booleanText': 'テスト用の承認通知です。',
|
||||
'notifications.test.accept': '承認',
|
||||
'notifications.test.decline': '却下',
|
||||
'notifications.test.navigateTitle': '確認してください',
|
||||
'notifications.test.navigateText': 'テスト用の遷移通知です。',
|
||||
'notifications.test.goThere': '移動',
|
||||
'notifications.test.adminTitle': '管理者通知',
|
||||
'notifications.test.adminText': '{actor} が管理者全員に通知を送りました。',
|
||||
'notifications.test.tripTitle': '{actor} が旅行に投稿しました',
|
||||
'notifications.test.tripText': '旅行「{trip}」のテスト通知です。',
|
||||
};
|
||||
export default notifications;
|
||||
@@ -0,0 +1,83 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const oauth: TranslationStrings = {
|
||||
'oauth.scope.group.trips': '旅行',
|
||||
'oauth.scope.group.places': '場所',
|
||||
'oauth.scope.group.atlas': '地図',
|
||||
'oauth.scope.group.packing': '持ち物',
|
||||
'oauth.scope.group.todos': 'ToDo',
|
||||
'oauth.scope.group.budget': '予算',
|
||||
'oauth.scope.group.reservations': '予約',
|
||||
'oauth.scope.group.collab': 'コラボ',
|
||||
'oauth.scope.group.notifications': '通知',
|
||||
'oauth.scope.group.vacay': '休暇',
|
||||
'oauth.scope.group.geo': '地図',
|
||||
'oauth.scope.group.weather': '天気',
|
||||
'oauth.scope.group.journey': '日記',
|
||||
'oauth.scope.trips:read.label': '旅行・旅程を表示',
|
||||
'oauth.scope.trips:read.description': '旅行、日程、メモ、メンバーを閲覧',
|
||||
'oauth.scope.trips:write.label': '旅行・旅程を編集',
|
||||
'oauth.scope.trips:write.description':
|
||||
'旅行や日程、メモの作成・更新、メンバー管理',
|
||||
'oauth.scope.trips:delete.label': '旅行を削除',
|
||||
'oauth.scope.trips:delete.description':
|
||||
'旅行全体を完全に削除(元に戻せません)',
|
||||
'oauth.scope.trips:share.label': '共有リンクを管理',
|
||||
'oauth.scope.trips:share.description':
|
||||
'旅行の公開共有リンクを作成・更新・無効化',
|
||||
'oauth.scope.places:read.label': '場所・地図データを表示',
|
||||
'oauth.scope.places:read.description':
|
||||
'場所、日への割り当て、タグ、カテゴリを閲覧',
|
||||
'oauth.scope.places:write.label': '場所を管理',
|
||||
'oauth.scope.places:write.description':
|
||||
'場所、割り当て、タグの作成・更新・削除',
|
||||
'oauth.scope.atlas:read.label': '地図を表示',
|
||||
'oauth.scope.atlas:read.description':
|
||||
'訪問した国・地域、バケットリストを閲覧',
|
||||
'oauth.scope.atlas:write.label': '地図を管理',
|
||||
'oauth.scope.atlas:write.description':
|
||||
'訪問済みの国・地域を管理、バケットリスト編集',
|
||||
'oauth.scope.packing:read.label': '持ち物リストを表示',
|
||||
'oauth.scope.packing:read.description': '持ち物、バッグ、担当者を閲覧',
|
||||
'oauth.scope.packing:write.label': '持ち物リストを管理',
|
||||
'oauth.scope.packing:write.description':
|
||||
'持ち物やバッグの追加・編集・削除・並び替え',
|
||||
'oauth.scope.todos:read.label': 'ToDoリストを表示',
|
||||
'oauth.scope.todos:read.description': '旅行のToDoと担当者を閲覧',
|
||||
'oauth.scope.todos:write.label': 'ToDoリストを管理',
|
||||
'oauth.scope.todos:write.description':
|
||||
'ToDoの作成・編集・完了・削除・並び替え',
|
||||
'oauth.scope.budget:read.label': '予算を表示',
|
||||
'oauth.scope.budget:read.description': '予算項目や内訳を閲覧',
|
||||
'oauth.scope.budget:write.label': '予算を管理',
|
||||
'oauth.scope.budget:write.description': '予算項目の作成・編集・削除',
|
||||
'oauth.scope.reservations:read.label': '予約を表示',
|
||||
'oauth.scope.reservations:read.description': '予約や宿泊情報を閲覧',
|
||||
'oauth.scope.reservations:write.label': '予約を管理',
|
||||
'oauth.scope.reservations:write.description':
|
||||
'予約の作成・編集・削除・並び替え',
|
||||
'oauth.scope.collab:read.label': 'コラボを表示',
|
||||
'oauth.scope.collab:read.description': '共同メモ、投票、メッセージを閲覧',
|
||||
'oauth.scope.collab:write.label': 'コラボを管理',
|
||||
'oauth.scope.collab:write.description': '共同メモ、投票、メッセージを管理',
|
||||
'oauth.scope.notifications:read.label': '通知を表示',
|
||||
'oauth.scope.notifications:read.description': 'アプリ内通知と未読数を閲覧',
|
||||
'oauth.scope.notifications:write.label': '通知を管理',
|
||||
'oauth.scope.notifications:write.description': '通知を既読にする・対応する',
|
||||
'oauth.scope.vacay:read.label': '休暇プランを表示',
|
||||
'oauth.scope.vacay:read.description': '休暇プランのデータや統計を閲覧',
|
||||
'oauth.scope.vacay:write.label': '休暇プランを管理',
|
||||
'oauth.scope.vacay:write.description': '休暇エントリーや予定を管理',
|
||||
'oauth.scope.geo:read.label': '地図・ジオコーディング',
|
||||
'oauth.scope.geo:read.description':
|
||||
'場所検索、地図URL解析、逆ジオコーディング',
|
||||
'oauth.scope.weather:read.label': '天気予報',
|
||||
'oauth.scope.weather:read.description': '旅行先・日程の天気予報を取得',
|
||||
'oauth.scope.journey:read.label': '日記を表示',
|
||||
'oauth.scope.journey:read.description': '日記、エントリー、参加者を閲覧',
|
||||
'oauth.scope.journey:write.label': '日記を管理',
|
||||
'oauth.scope.journey:write.description': '日記やエントリーの作成・編集・削除',
|
||||
'oauth.scope.journey:share.label': '日記共有を管理',
|
||||
'oauth.scope.journey:share.description': '公開共有リンクの作成・更新・無効化',
|
||||
};
|
||||
export default oauth;
|
||||
@@ -0,0 +1,185 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const packing: TranslationStrings = {
|
||||
'packing.title': '持ち物リスト',
|
||||
'packing.empty': '持ち物リストは空です',
|
||||
'packing.import': 'インポート',
|
||||
'packing.importTitle': '持ち物リストをインポート',
|
||||
'packing.importHint':
|
||||
'1行につき1項目。形式:カテゴリ, 名前, 重量(g・任意), バッグ(任意), checked/unchecked(任意)',
|
||||
'packing.importPlaceholder':
|
||||
'衛生用品, 歯ブラシ\n衣類, Tシャツ, 200\n書類, パスポート, , 機内持ち込み\n電子機器, 充電器, 50, スーツケース, checked',
|
||||
'packing.importCsv': 'CSV/TXTを読み込む',
|
||||
'packing.importAction': '{count}件をインポート',
|
||||
'packing.importSuccess': '{count}件インポートしました',
|
||||
'packing.importError': 'インポートに失敗しました',
|
||||
'packing.importEmpty': 'インポートする項目がありません',
|
||||
'packing.progress': '{packed}/{total} 梱包済み({percent}%)',
|
||||
'packing.clearChecked': 'チェック済み{count}件を削除',
|
||||
'packing.clearCheckedShort': '{count}件を削除',
|
||||
'packing.suggestions': 'おすすめ',
|
||||
'packing.suggestionsTitle': 'おすすめを追加',
|
||||
'packing.allSuggested': 'おすすめはすべて追加済み',
|
||||
'packing.allPacked': 'すべて梱包済み!',
|
||||
'packing.addPlaceholder': '新しい項目を追加...',
|
||||
'packing.categoryPlaceholder': 'カテゴリ...',
|
||||
'packing.filterAll': 'すべて',
|
||||
'packing.filterOpen': '未完了',
|
||||
'packing.filterDone': '完了',
|
||||
'packing.emptyTitle': '持ち物リストは空です',
|
||||
'packing.emptyHint': '項目を追加するか、おすすめを使いましょう',
|
||||
'packing.emptyFiltered': 'このフィルターに一致する項目はありません',
|
||||
'packing.menuRename': '名前を変更',
|
||||
'packing.menuCheckAll': 'すべてチェック',
|
||||
'packing.menuUncheckAll': 'すべて解除',
|
||||
'packing.menuDeleteCat': 'カテゴリを削除',
|
||||
'packing.noMembers': '旅行メンバーがいません',
|
||||
'packing.addItem': '項目を追加',
|
||||
'packing.addItemPlaceholder': '項目名...',
|
||||
'packing.addCategory': 'カテゴリを追加',
|
||||
'packing.newCategoryPlaceholder': 'カテゴリ名(例:衣類)',
|
||||
'packing.applyTemplate': 'テンプレートを適用',
|
||||
'packing.template': 'テンプレート',
|
||||
'packing.templateApplied': 'テンプレートから{count}件追加しました',
|
||||
'packing.templateError': 'テンプレートの適用に失敗しました',
|
||||
'packing.saveAsTemplate': 'テンプレートとして保存',
|
||||
'packing.templateName': 'テンプレート名',
|
||||
'packing.templateSaved': '持ち物リストをテンプレートとして保存しました',
|
||||
'packing.bags': 'バッグ',
|
||||
'packing.noBag': '未割り当て',
|
||||
'packing.totalWeight': '総重量',
|
||||
'packing.bagName': 'バッグ名...',
|
||||
'packing.addBag': 'バッグを追加',
|
||||
'packing.changeCategory': 'カテゴリを変更',
|
||||
'packing.confirm.clearChecked': 'チェック済み{count}件を削除しますか?',
|
||||
'packing.confirm.deleteCat':
|
||||
'{count}件の項目があるカテゴリ「{name}」を削除しますか?',
|
||||
'packing.defaultCategory': 'その他',
|
||||
'packing.toast.saveError': '保存に失敗しました',
|
||||
'packing.toast.deleteError': '削除に失敗しました',
|
||||
'packing.toast.renameError': '名前の変更に失敗しました',
|
||||
'packing.toast.addError': '追加に失敗しました',
|
||||
'packing.suggestions.items': [
|
||||
{
|
||||
name: 'パスポート',
|
||||
category: '書類',
|
||||
},
|
||||
{
|
||||
name: '身分証明書',
|
||||
category: '書類',
|
||||
},
|
||||
{
|
||||
name: '海外旅行保険',
|
||||
category: '書類',
|
||||
},
|
||||
{
|
||||
name: '航空券',
|
||||
category: '書類',
|
||||
},
|
||||
{
|
||||
name: 'クレジットカード',
|
||||
category: '金融',
|
||||
},
|
||||
{
|
||||
name: '現金',
|
||||
category: '金融',
|
||||
},
|
||||
{
|
||||
name: 'ビザ',
|
||||
category: '書類',
|
||||
},
|
||||
{
|
||||
name: 'Tシャツ',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: 'ズボン',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: '下着',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: '靴下',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: '上着',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: '寝間着',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: '水着',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: 'レインジャケット',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: '歩きやすい靴',
|
||||
category: '衣類',
|
||||
},
|
||||
{
|
||||
name: '歯ブラシ',
|
||||
category: '洗面用具',
|
||||
},
|
||||
{
|
||||
name: '歯磨き粉',
|
||||
category: '洗面用具',
|
||||
},
|
||||
{
|
||||
name: 'シャンプー',
|
||||
category: '洗面用具',
|
||||
},
|
||||
{
|
||||
name: 'デオドラント',
|
||||
category: '洗面用具',
|
||||
},
|
||||
{
|
||||
name: '日焼け止め',
|
||||
category: '洗面用具',
|
||||
},
|
||||
{
|
||||
name: 'カミソリ',
|
||||
category: '洗面用具',
|
||||
},
|
||||
{
|
||||
name: '充電器',
|
||||
category: '電子機器',
|
||||
},
|
||||
{
|
||||
name: 'モバイルバッテリー',
|
||||
category: '電子機器',
|
||||
},
|
||||
{
|
||||
name: 'ヘッドホン',
|
||||
category: '電子機器',
|
||||
},
|
||||
{
|
||||
name: '変換プラグ',
|
||||
category: '電子機器',
|
||||
},
|
||||
{
|
||||
name: 'カメラ',
|
||||
category: '電子機器',
|
||||
},
|
||||
{
|
||||
name: '鎮痛薬',
|
||||
category: '健康',
|
||||
},
|
||||
{
|
||||
name: '絆創膏',
|
||||
category: '健康',
|
||||
},
|
||||
{
|
||||
name: '消毒液',
|
||||
category: '健康',
|
||||
},
|
||||
],
|
||||
};
|
||||
export default packing;
|
||||
@@ -0,0 +1,10 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const pdf: TranslationStrings = {
|
||||
'pdf.travelPlan': '旅行計画',
|
||||
'pdf.planned': '予定',
|
||||
'pdf.costLabel': '費用(EUR)',
|
||||
'pdf.preview': 'PDFプレビュー',
|
||||
'pdf.saveAsPdf': 'PDFとして保存',
|
||||
};
|
||||
export default pdf;
|
||||
@@ -0,0 +1,51 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const perm: TranslationStrings = {
|
||||
'perm.title': '権限設定',
|
||||
'perm.subtitle': 'アプリ全体の操作権限を管理',
|
||||
'perm.saved': '権限設定を保存しました',
|
||||
'perm.resetDefaults': '既定に戻す',
|
||||
'perm.customized': 'カスタマイズ済み',
|
||||
'perm.level.admin': '管理者のみ',
|
||||
'perm.level.tripOwner': '旅行オーナー',
|
||||
'perm.level.tripMember': '旅行メンバー',
|
||||
'perm.level.everybody': '全員',
|
||||
'perm.cat.trip': '旅行管理',
|
||||
'perm.cat.members': 'メンバー管理',
|
||||
'perm.cat.files': 'ファイル',
|
||||
'perm.cat.content': 'コンテンツと予定',
|
||||
'perm.cat.extras': '予算・持ち物・コラボ',
|
||||
'perm.action.trip_create': '旅行を作成',
|
||||
'perm.action.trip_edit': '旅行詳細を編集',
|
||||
'perm.action.trip_delete': '旅行を削除',
|
||||
'perm.action.trip_archive': '旅行をアーカイブ/復元',
|
||||
'perm.action.trip_cover_upload': 'カバー画像をアップロード',
|
||||
'perm.action.member_manage': 'メンバーを追加/削除',
|
||||
'perm.action.file_upload': 'ファイルをアップロード',
|
||||
'perm.action.file_edit': 'ファイル情報を編集',
|
||||
'perm.action.file_delete': 'ファイルを削除',
|
||||
'perm.action.place_edit': '場所を追加/編集/削除',
|
||||
'perm.action.day_edit': '日・メモ・割り当てを編集',
|
||||
'perm.action.reservation_edit': '予約を管理',
|
||||
'perm.action.budget_edit': '予算を管理',
|
||||
'perm.action.packing_edit': '持ち物を管理',
|
||||
'perm.action.collab_edit': 'コラボ(メモ・投票・チャット)',
|
||||
'perm.action.share_manage': '共有リンクを管理',
|
||||
'perm.actionHint.trip_create': '新しい旅行を作成できる人',
|
||||
'perm.actionHint.trip_edit': '旅行名や日付などを変更できる人',
|
||||
'perm.actionHint.trip_delete': '旅行を完全に削除できる人',
|
||||
'perm.actionHint.trip_archive': '旅行をアーカイブできる人',
|
||||
'perm.actionHint.trip_cover_upload': 'カバー画像を変更できる人',
|
||||
'perm.actionHint.member_manage': 'メンバーを招待/削除できる人',
|
||||
'perm.actionHint.file_upload': 'ファイルをアップロードできる人',
|
||||
'perm.actionHint.file_edit': 'ファイル説明やリンクを編集できる人',
|
||||
'perm.actionHint.file_delete': 'ファイルをゴミ箱へ移動/完全削除できる人',
|
||||
'perm.actionHint.place_edit': '場所を追加・編集・削除できる人',
|
||||
'perm.actionHint.day_edit': '日やメモ、割り当てを編集できる人',
|
||||
'perm.actionHint.reservation_edit': '予約を作成・編集・削除できる人',
|
||||
'perm.actionHint.budget_edit': '予算項目を管理できる人',
|
||||
'perm.actionHint.packing_edit': '持ち物やバッグを管理できる人',
|
||||
'perm.actionHint.collab_edit': 'メモや投票、メッセージを作成できる人',
|
||||
'perm.actionHint.share_manage': '公開共有リンクを管理できる人',
|
||||
};
|
||||
export default perm;
|
||||
@@ -0,0 +1,25 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const photos: TranslationStrings = {
|
||||
'photos.title': '写真',
|
||||
'photos.subtitle': '{trip} の写真 {count} 枚',
|
||||
'photos.dropHere': 'ここに写真をドロップ…',
|
||||
'photos.dropHereActive': 'ここに写真をドロップ',
|
||||
'photos.captionForAll': 'キャプション(全体)',
|
||||
'photos.captionPlaceholder': '任意のキャプション…',
|
||||
'photos.addCaption': 'キャプションを追加…',
|
||||
'photos.allDays': 'すべての日',
|
||||
'photos.noPhotos': 'まだ写真はありません',
|
||||
'photos.uploadHint': '旅行の写真をアップロード',
|
||||
'photos.clickToSelect': 'またはクリックして選択',
|
||||
'photos.linkPlace': '場所を紐づけ',
|
||||
'photos.noPlace': '場所なし',
|
||||
'photos.uploadN': '{n} 枚の写真をアップロード',
|
||||
'photos.linkDay': '日を紐づけ',
|
||||
'photos.noDay': '日付なし',
|
||||
'photos.dayLabel': '{number}日目',
|
||||
'photos.photoSelected': '写真を選択しました',
|
||||
'photos.photosSelected': '写真を選択しました',
|
||||
'photos.fileTypeHint': 'JPG、PNG、WebP · 最大 10 MB · 最大 30 枚',
|
||||
};
|
||||
export default photos;
|
||||
@@ -0,0 +1,93 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const places: TranslationStrings = {
|
||||
'places.addPlace': '場所/アクティビティを追加',
|
||||
'places.importFile': 'ファイルをインポート',
|
||||
'places.sidebarDrop': 'ドロップしてインポート',
|
||||
'places.importFileHint':
|
||||
'Google My Maps、Google Earth、GPSトラッカーなどの .gpx、.kml、.kmz ファイルをインポートできます。',
|
||||
'places.importFileDropHere':
|
||||
'クリックしてファイルを選択、またはここにドラッグ&ドロップ',
|
||||
'places.importFileDropActive': 'ドロップして選択',
|
||||
'places.importFileUnsupported':
|
||||
'対応していないファイル形式です。.gpx、.kml、.kmz を使用してください。',
|
||||
'places.importFileTooLarge':
|
||||
'ファイルが大きすぎます。最大 {maxMb} MB までです。',
|
||||
'places.importFileError': 'インポートに失敗しました',
|
||||
'places.importAllSkipped': 'すべての場所は既に旅行に含まれています。',
|
||||
'places.gpxImported': 'GPXから {count} 件の場所をインポートしました',
|
||||
'places.gpxImportTypes': '何をインポートしますか?',
|
||||
'places.gpxImportWaypoints': 'ウェイポイント',
|
||||
'places.gpxImportRoutes': 'ルート',
|
||||
'places.gpxImportTracks': 'トラック(経路付き)',
|
||||
'places.gpxImportNoneSelected': '少なくとも1つ選択してください。',
|
||||
'places.kmlImportTypes': '何をインポートしますか?',
|
||||
'places.kmlImportPoints': 'ポイント(プレースマーク)',
|
||||
'places.kmlImportPaths': 'パス(ライン)',
|
||||
'places.kmlImportNoneSelected': '少なくとも1つ選択してください。',
|
||||
'places.selectionCount': '{count} 件選択中',
|
||||
'places.deleteSelected': '選択を削除',
|
||||
'places.kmlKmzImported': 'KMZ/KMLから {count} 件の場所をインポートしました',
|
||||
'places.urlResolved': 'URLから場所をインポートしました',
|
||||
'places.importList': 'リストをインポート',
|
||||
'places.kmlKmzSummaryValues':
|
||||
'プレースマーク: {total} • 追加: {created} • スキップ: {skipped}',
|
||||
'places.importGoogleList': 'Google リスト',
|
||||
'places.importNaverList': 'Naver リスト',
|
||||
'places.googleListHint':
|
||||
'共有されたGoogleマップのリストリンクを貼り付けてください。',
|
||||
'places.googleListImported':
|
||||
'「{list}」から {count} 件の場所をインポートしました',
|
||||
'places.googleListError': 'Googleマップのリストをインポートできませんでした',
|
||||
'places.naverListHint':
|
||||
'共有されたNaverマップのリストリンクを貼り付けてください。',
|
||||
'places.naverListImported':
|
||||
'「{list}」から {count} 件の場所をインポートしました',
|
||||
'places.naverListError': 'Naverマップのリストをインポートできませんでした',
|
||||
'places.viewDetails': '詳細を見る',
|
||||
'places.assignToDay': 'どの日に追加しますか?',
|
||||
'places.all': 'すべて',
|
||||
'places.unplanned': '未計画',
|
||||
'places.filterTracks': 'トラック',
|
||||
'places.search': '場所を検索…',
|
||||
'places.allCategories': 'すべてのカテゴリ',
|
||||
'places.categoriesSelected': 'カテゴリ',
|
||||
'places.clearFilter': 'フィルター解除',
|
||||
'places.count': '{count} 件の場所',
|
||||
'places.countSingular': '1 件の場所',
|
||||
'places.allPlanned': 'すべての場所が計画済みです',
|
||||
'places.noneFound': '場所が見つかりません',
|
||||
'places.editPlace': '場所を編集',
|
||||
'places.formName': '名前',
|
||||
'places.formNamePlaceholder': '例:エッフェル塔',
|
||||
'places.formDescription': '説明',
|
||||
'places.formDescriptionPlaceholder': '短い説明…',
|
||||
'places.formAddress': '住所',
|
||||
'places.formAddressPlaceholder': '通り、都市、国',
|
||||
'places.formLat': '緯度(例:48.8566)',
|
||||
'places.formLng': '経度(例:2.3522)',
|
||||
'places.formCategory': 'カテゴリ',
|
||||
'places.noCategory': 'カテゴリなし',
|
||||
'places.categoryNamePlaceholder': 'カテゴリ名',
|
||||
'places.formTime': '時間',
|
||||
'places.startTime': '開始',
|
||||
'places.endTime': '終了',
|
||||
'places.endTimeBeforeStart': '終了時間が開始時間より前です',
|
||||
'places.timeCollision': '時間が重複しています:',
|
||||
'places.formWebsite': 'ウェブサイト',
|
||||
'places.formNotes': 'メモ',
|
||||
'places.formNotesPlaceholder': '個人的なメモ…',
|
||||
'places.formReservation': '予約',
|
||||
'places.reservationNotesPlaceholder': '予約メモ、確認番号など…',
|
||||
'places.mapsSearchPlaceholder': '場所を検索…',
|
||||
'places.mapsSearchError': '場所の検索に失敗しました。',
|
||||
'places.loadingDetails': '詳細を読み込み中…',
|
||||
'places.osmHint':
|
||||
'OpenStreetMapで検索しています(写真・営業時間・評価なし)。設定でGoogle APIキーを追加すると詳細が表示されます。',
|
||||
'places.osmActive':
|
||||
'OpenStreetMapで検索中(写真・評価・営業時間なし)。設定でGoogle APIキーを追加してください。',
|
||||
'places.categoryCreateError': 'カテゴリの作成に失敗しました',
|
||||
'places.nameRequired': '名前を入力してください',
|
||||
'places.saveError': '保存に失敗しました',
|
||||
};
|
||||
export default places;
|
||||
@@ -0,0 +1,67 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const planner: TranslationStrings = {
|
||||
'planner.places': '場所',
|
||||
'planner.bookings': '予約',
|
||||
'planner.packingList': '持ち物リスト',
|
||||
'planner.documents': 'ドキュメント',
|
||||
'planner.dayPlan': '日別計画',
|
||||
'planner.reservations': '予約',
|
||||
'planner.minTwoPlaces': '座標付きの場所が少なくとも2つ必要です',
|
||||
'planner.noGeoPlaces': '座標付きの場所がありません',
|
||||
'planner.routeCalculated': 'ルートを計算しました',
|
||||
'planner.routeCalcFailed': 'ルートを計算できませんでした',
|
||||
'planner.routeError': 'ルート計算中にエラーが発生しました',
|
||||
'planner.icsExportFailed': 'ICSの書き出しに失敗しました',
|
||||
'planner.routeOptimized': 'ルートを最適化しました',
|
||||
'planner.reservationUpdated': '予約を更新しました',
|
||||
'planner.reservationAdded': '予約を追加しました',
|
||||
'planner.confirmDeleteReservation': '予約を削除しますか?',
|
||||
'planner.reservationDeleted': '予約を削除しました',
|
||||
'planner.days': '日',
|
||||
'planner.allPlaces': 'すべての場所',
|
||||
'planner.totalPlaces': '合計{n}件の場所',
|
||||
'planner.noDaysPlanned': '計画された日がありません',
|
||||
'planner.editTrip': '旅行を編集 →',
|
||||
'planner.placeOne': '1件の場所',
|
||||
'planner.placeN': '{n}件の場所',
|
||||
'planner.addNote': 'メモを追加',
|
||||
'planner.noEntries': 'この日の予定はありません',
|
||||
'planner.addPlace': '場所/アクティビティを追加',
|
||||
'planner.addPlaceShort': '+ 場所/アクティビティ',
|
||||
'planner.resPending': '予約保留 · ',
|
||||
'planner.resConfirmed': '予約確定 · ',
|
||||
'planner.notePlaceholder': 'メモ…',
|
||||
'planner.noteTimePlaceholder': '時刻(任意)',
|
||||
'planner.noteExamplePlaceholder':
|
||||
'例:中央駅から14:30発のS3、7番桟橋からフェリー、昼食休憩…',
|
||||
'planner.totalCost': '合計費用',
|
||||
'planner.searchPlaces': '場所を検索…',
|
||||
'planner.allCategories': 'すべてのカテゴリ',
|
||||
'planner.noPlacesFound': '場所が見つかりません',
|
||||
'planner.addFirstPlace': '最初の場所を追加',
|
||||
'planner.noReservations': '予約はありません',
|
||||
'planner.addFirstReservation': '最初の予約を追加',
|
||||
'planner.new': '新規',
|
||||
'planner.addToDay': '+ 日',
|
||||
'planner.calculating': '計算中…',
|
||||
'planner.route': 'ルート',
|
||||
'planner.optimize': '最適化',
|
||||
'planner.openGoogleMaps': 'Googleマップで開く',
|
||||
'planner.selectDayHint': '左の一覧から日を選択すると、日別計画が表示されます',
|
||||
'planner.noPlacesForDay': 'この日の場所はまだありません',
|
||||
'planner.addPlacesLink': '場所を追加 →',
|
||||
'planner.minTotal': '最短合計',
|
||||
'planner.noReservation': '予約なし',
|
||||
'planner.removeFromDay': 'この日から削除',
|
||||
'planner.addToThisDay': 'この日に追加',
|
||||
'planner.overview': '概要',
|
||||
'planner.noDays': '日がありません',
|
||||
'planner.editTripToAddDays': '旅行を編集して日を追加',
|
||||
'planner.dayCount': '{n}日間',
|
||||
'planner.clickToUnlock': 'クリックして解除',
|
||||
'planner.keepPosition': '最適化中も位置を保持',
|
||||
'planner.dayDetails': '日詳細',
|
||||
'planner.dayN': '{n}日目',
|
||||
};
|
||||
export default planner;
|
||||
@@ -0,0 +1,25 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const register: TranslationStrings = {
|
||||
'register.passwordMismatch': 'パスワードが一致しません',
|
||||
'register.passwordTooShort': 'パスワードは8文字以上必要です',
|
||||
'register.failed': '登録に失敗しました',
|
||||
'register.getStarted': '始める',
|
||||
'register.subtitle': 'アカウントを作成して、理想の旅行計画を始めましょう。',
|
||||
'register.feature1': '無制限の旅行プラン',
|
||||
'register.feature2': 'インタラクティブなマップ表示',
|
||||
'register.feature3': '場所とカテゴリを管理',
|
||||
'register.feature4': '予約を管理',
|
||||
'register.feature5': '持ち物リストを作成',
|
||||
'register.feature6': '写真・ファイルを保存',
|
||||
'register.createAccount': 'アカウントを作成',
|
||||
'register.startPlanning': '旅行計画を始める',
|
||||
'register.minChars': '最小6文字',
|
||||
'register.confirmPassword': 'パスワード確認',
|
||||
'register.repeatPassword': 'パスワードを再入力',
|
||||
'register.registering': '登録中...',
|
||||
'register.register': '登録',
|
||||
'register.hasAccount': 'すでにアカウントをお持ちですか?',
|
||||
'register.signIn': 'サインイン',
|
||||
};
|
||||
export default register;
|
||||
@@ -0,0 +1,116 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const reservations: TranslationStrings = {
|
||||
'reservations.title': '予約',
|
||||
'reservations.empty': '予約はまだありません',
|
||||
'reservations.emptyHint': '航空券、ホテルなどの予約を追加しましょう',
|
||||
'reservations.add': '予約を追加',
|
||||
'reservations.addManual': '手動予約',
|
||||
'reservations.placeHint':
|
||||
'ヒント:予約は場所から直接作成すると、日別計画に紐づけやすくなります。',
|
||||
'reservations.confirmed': '確定',
|
||||
'reservations.pending': '保留',
|
||||
'reservations.summary': '確定 {confirmed}件、保留 {pending}件',
|
||||
'reservations.fromPlan': '計画から',
|
||||
'reservations.showFiles': 'ファイルを表示',
|
||||
'reservations.editTitle': '予約を編集',
|
||||
'reservations.status': 'ステータス',
|
||||
'reservations.datetime': '日時',
|
||||
'reservations.startTime': '開始時刻',
|
||||
'reservations.endTime': '終了時刻',
|
||||
'reservations.date': '日付',
|
||||
'reservations.time': '時間',
|
||||
'reservations.timeAlt': '時間(代替、例:19:30)',
|
||||
'reservations.notes': 'メモ',
|
||||
'reservations.notesPlaceholder': '追加のメモ...',
|
||||
'reservations.meta.airline': '航空会社',
|
||||
'reservations.meta.flightNumber': '便名',
|
||||
'reservations.meta.from': '出発地',
|
||||
'reservations.meta.to': '到着地',
|
||||
'reservations.needsReview': '要確認',
|
||||
'reservations.needsReviewHint':
|
||||
'空港を自動で特定できませんでした。場所を確認してください。',
|
||||
'reservations.searchLocation': '駅・港・住所を検索…',
|
||||
'reservations.meta.trainNumber': '列車番号',
|
||||
'reservations.meta.platform': 'ホーム',
|
||||
'reservations.meta.seat': '座席',
|
||||
'reservations.meta.checkIn': 'チェックイン',
|
||||
'reservations.meta.checkOut': 'チェックアウト',
|
||||
'reservations.meta.linkAccommodation': '宿泊先',
|
||||
'reservations.meta.checkInUntil': 'チェックイン期限',
|
||||
'reservations.meta.pickAccommodation': '宿泊先にリンク',
|
||||
'reservations.meta.noAccommodation': 'なし',
|
||||
'reservations.meta.hotelPlace': '宿泊先',
|
||||
'reservations.meta.pickHotel': '宿泊先を選択',
|
||||
'reservations.meta.fromDay': '開始',
|
||||
'reservations.meta.toDay': '終了',
|
||||
'reservations.meta.selectDay': '日を選択',
|
||||
'reservations.type.flight': '航空便',
|
||||
'reservations.type.hotel': '宿泊',
|
||||
'reservations.type.restaurant': 'レストラン',
|
||||
'reservations.type.train': '列車',
|
||||
'reservations.type.car': 'レンタカー',
|
||||
'reservations.type.cruise': 'クルーズ',
|
||||
'reservations.type.event': 'イベント',
|
||||
'reservations.type.tour': 'ツアー',
|
||||
'reservations.type.other': 'その他',
|
||||
'reservations.confirm.delete': '予約「{name}」を削除しますか?',
|
||||
'reservations.confirm.deleteTitle': '予約を削除しますか?',
|
||||
'reservations.confirm.deleteBody': '「{name}」は完全に削除されます。',
|
||||
'reservations.toast.updated': '予約を更新しました',
|
||||
'reservations.toast.removed': '予約を削除しました',
|
||||
'reservations.toast.fileUploaded': 'ファイルをアップロードしました',
|
||||
'reservations.toast.uploadError': 'アップロードに失敗しました',
|
||||
'reservations.newTitle': '新しい予約',
|
||||
'reservations.bookingType': '予約タイプ',
|
||||
'reservations.titleLabel': 'タイトル',
|
||||
'reservations.titlePlaceholder': '例:Lufthansa LH123、Hotel Adlon',
|
||||
'reservations.locationAddress': '場所/住所',
|
||||
'reservations.locationPlaceholder': '住所、空港、ホテル...',
|
||||
'reservations.confirmationCode': '予約コード',
|
||||
'reservations.confirmationPlaceholder': '例:ABC12345',
|
||||
'reservations.day': '日',
|
||||
'reservations.noDay': '日なし',
|
||||
'reservations.place': '場所',
|
||||
'reservations.noPlace': '場所なし',
|
||||
'reservations.pendingSave': '保存されます…',
|
||||
'reservations.uploading': 'アップロード中...',
|
||||
'reservations.attachFile': 'ファイルを添付',
|
||||
'reservations.linkExisting': '既存ファイルをリンク',
|
||||
'reservations.toast.saveError': '保存に失敗しました',
|
||||
'reservations.toast.updateError': '更新に失敗しました',
|
||||
'reservations.toast.deleteError': '削除に失敗しました',
|
||||
'reservations.confirm.remove': '「{name}」の予約を削除しますか?',
|
||||
'reservations.linkAssignment': '日への割り当てにリンク',
|
||||
'reservations.pickAssignment': '計画から割り当てを選択...',
|
||||
'reservations.noAssignment': 'リンクなし(単独)',
|
||||
'reservations.price': '価格',
|
||||
'reservations.budgetCategory': '予算カテゴリ',
|
||||
'reservations.budgetCategoryPlaceholder': '例:交通、宿泊',
|
||||
'reservations.budgetCategoryAuto': '自動(予約タイプから)',
|
||||
'reservations.budgetHint': '保存時に予算エントリが自動で作成されます。',
|
||||
'reservations.departureDate': '出発',
|
||||
'reservations.arrivalDate': '到着',
|
||||
'reservations.departureTime': '出発時刻',
|
||||
'reservations.arrivalTime': '到着時刻',
|
||||
'reservations.pickupDate': '受取',
|
||||
'reservations.returnDate': '返却',
|
||||
'reservations.pickupTime': '受取時刻',
|
||||
'reservations.returnTime': '返却時刻',
|
||||
'reservations.endDate': '終了日',
|
||||
'reservations.meta.departureTimezone': '出発TZ',
|
||||
'reservations.meta.arrivalTimezone': '到着TZ',
|
||||
'reservations.span.departure': '出発',
|
||||
'reservations.span.arrival': '到着',
|
||||
'reservations.span.inTransit': '移動中',
|
||||
'reservations.span.pickup': '受取',
|
||||
'reservations.span.return': '返却',
|
||||
'reservations.span.active': '有効',
|
||||
'reservations.span.start': '開始',
|
||||
'reservations.span.end': '終了',
|
||||
'reservations.span.ongoing': '進行中',
|
||||
'reservations.validation.endBeforeStart':
|
||||
'終了日時は開始日時より後である必要があります',
|
||||
'reservations.addBooking': '予約を追加',
|
||||
};
|
||||
export default reservations;
|
||||
@@ -0,0 +1,278 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const settings: TranslationStrings = {
|
||||
'settings.title': '設定',
|
||||
'settings.subtitle': '個人設定を管理',
|
||||
'settings.tabs.display': '表示',
|
||||
'settings.tabs.map': '地図',
|
||||
'settings.tabs.notifications': '通知',
|
||||
'settings.tabs.integrations': '連携',
|
||||
'settings.tabs.account': 'アカウント',
|
||||
'settings.tabs.offline': 'オフライン',
|
||||
'settings.tabs.about': '情報',
|
||||
'settings.map': '地図',
|
||||
'settings.mapTemplate': '地図テンプレート',
|
||||
'settings.mapTemplatePlaceholder.select': 'テンプレートを選択…',
|
||||
'settings.mapDefaultHint': '空欄の場合は OpenStreetMap(既定)を使用',
|
||||
'settings.mapTemplatePlaceholder':
|
||||
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
'settings.mapHint': '地図タイルのURLテンプレート',
|
||||
'settings.mapProvider': '地図プロバイダー',
|
||||
'settings.mapProviderHint':
|
||||
'旅程プランナーと日記地図に影響します。Atlas は常に Leaflet を使用します。',
|
||||
'settings.mapLeafletSubtitle': 'クラシックな2D、任意のラスタータイル',
|
||||
'settings.mapMapboxSubtitle': 'ベクタータイル、3D建物・地形',
|
||||
'settings.mapExperimental': '実験的',
|
||||
'settings.mapMapboxToken': 'Mapbox アクセストークン',
|
||||
'settings.mapMapboxTokenHint': 'mapbox.com の公開トークン(pk.*)',
|
||||
'settings.mapMapboxTokenLink': 'mapbox.com → Access tokens',
|
||||
'settings.mapStyle': '地図スタイル',
|
||||
'settings.mapStylePlaceholder': 'Mapboxスタイルを選択',
|
||||
'settings.mapStyleHint': 'プリセットまたは mapbox://styles/USER/ID のURL',
|
||||
'settings.map3dBuildings': '3D建物・地形',
|
||||
'settings.map3dHint':
|
||||
'ピッチ+実際の3D押し出し表示。衛星含む全スタイルで動作。',
|
||||
'settings.mapHighQuality': '高品質モード',
|
||||
'settings.mapHighQualityHint':
|
||||
'アンチエイリアス+地球投影で、より鮮明でリアルに表示。',
|
||||
'settings.mapHighQualityWarning':
|
||||
'低性能デバイスではパフォーマンスに影響する場合があります。',
|
||||
'settings.mapTipLabel': 'ヒント:',
|
||||
'settings.mapTip':
|
||||
'右クリック+ドラッグで回転/傾き。中クリックで場所を追加(右クリックは回転用)。',
|
||||
'settings.latitude': '緯度',
|
||||
'settings.longitude': '経度',
|
||||
'settings.saveMap': '地図を保存',
|
||||
'settings.apiKeys': 'APIキー',
|
||||
'settings.mapsKey': 'Google Maps APIキー',
|
||||
'settings.mapsKeyHint':
|
||||
'場所検索用。Places API(新)が必要。console.cloud.google.com で取得',
|
||||
'settings.weatherKey': 'OpenWeatherMap APIキー',
|
||||
'settings.weatherKeyHint': '天気情報用。openweathermap.org/api で無料取得',
|
||||
'settings.keyPlaceholder': 'キーを入力…',
|
||||
'settings.configured': '設定済み',
|
||||
'settings.saveKeys': 'キーを保存',
|
||||
'settings.display': '表示',
|
||||
'settings.colorMode': 'カラーモード',
|
||||
'settings.light': 'ライト',
|
||||
'settings.dark': 'ダーク',
|
||||
'settings.auto': '自動',
|
||||
'settings.language': '言語',
|
||||
'settings.temperature': '温度単位',
|
||||
'settings.timeFormat': '時刻形式',
|
||||
'settings.bookingLabels': '予約ルートのラベル',
|
||||
'settings.bookingLabelsHint':
|
||||
'地図に駅・空港名を表示。オフ時はアイコンのみ。',
|
||||
'settings.blurBookingCodes': '予約コードをぼかす',
|
||||
'settings.notifications': '通知',
|
||||
'settings.notifyTripInvite': '旅行の招待',
|
||||
'settings.notifyBookingChange': '予約の変更',
|
||||
'settings.notifyTripReminder': '旅行リマインダー',
|
||||
'settings.notifyTodoDue': 'ToDoの期限',
|
||||
'settings.notifyVacayInvite': 'Vacay fusion の招待',
|
||||
'settings.notifyPhotosShared': '共有写真(Immich)',
|
||||
'settings.notifyCollabMessage': 'チャットメッセージ(Collab)',
|
||||
'settings.notifyPackingTagged': '持ち物リスト:割り当て',
|
||||
'settings.notifyWebhook': 'Webhook通知',
|
||||
'settings.notifyVersionAvailable': '新しいバージョン',
|
||||
'settings.notificationPreferences.email': 'メール',
|
||||
'settings.notificationPreferences.webhook': 'Webhook',
|
||||
'settings.notificationPreferences.inapp': 'アプリ内',
|
||||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||||
'settings.notificationPreferences.noChannels':
|
||||
'通知チャネルが未設定です。管理者に設定を依頼してください。',
|
||||
'settings.webhookUrl.label': 'Webhook URL',
|
||||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||||
'settings.webhookUrl.hint':
|
||||
'Discord、Slack、または独自のWebhook URLを入力してください。',
|
||||
'settings.webhookUrl.saved': 'Webhook URLを保存しました',
|
||||
'settings.webhookUrl.test': 'テスト',
|
||||
'settings.webhookUrl.testSuccess': 'テストWebhookを送信しました',
|
||||
'settings.webhookUrl.testFailed': 'テストWebhookに失敗しました',
|
||||
'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': 'テスト通知を送信しました',
|
||||
'settings.ntfyUrl.testFailed': 'テスト通知に失敗しました',
|
||||
'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トークンに置き換えてください。',
|
||||
'settings.mcp.clientConfigHintOAuth':
|
||||
'<your_client_id> と <your_client_secret> をOAuth 2.1の認証情報に置き換えてください。',
|
||||
'settings.mcp.copy': 'コピー',
|
||||
'settings.mcp.copied': 'コピーしました!',
|
||||
'settings.mcp.apiTokens': 'APIトークン',
|
||||
'settings.mcp.createToken': '新しいトークン',
|
||||
'settings.mcp.noTokens': 'トークンがありません。作成してください。',
|
||||
'settings.mcp.tokenCreatedAt': '作成日',
|
||||
'settings.mcp.tokenUsedAt': '最終使用',
|
||||
'settings.mcp.deleteTokenTitle': 'トークン削除',
|
||||
'settings.mcp.deleteTokenMessage': 'このトークンは即時無効になります。',
|
||||
'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': '第三者アプリが接続できるよう登録します。',
|
||||
'settings.oauth.createClient': '新規クライアント',
|
||||
'settings.oauth.noClients': '登録されたクライアントはありません。',
|
||||
'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': '有効なセッション',
|
||||
'settings.oauth.sessionScopes': 'スコープ',
|
||||
'settings.oauth.sessionExpires': '有効期限',
|
||||
'settings.oauth.revoke': '取り消し',
|
||||
'settings.oauth.revokeSession': 'セッション取り消し',
|
||||
'settings.oauth.revokeSessionMessage':
|
||||
'このセッションのアクセスを即時無効にします。',
|
||||
'settings.oauth.modal.createTitle': 'OAuthクライアント登録',
|
||||
'settings.oauth.modal.presets': '簡単設定',
|
||||
'settings.oauth.modal.clientName': 'アプリ名',
|
||||
'settings.oauth.modal.clientNamePlaceholder': '例:Claude Web',
|
||||
'settings.oauth.modal.redirectUris': 'リダイレクトURI',
|
||||
'settings.oauth.modal.redirectUrisPlaceholder':
|
||||
'https://your-app.com/callback',
|
||||
'settings.oauth.modal.redirectUrisHint': '1行につき1つ。HTTPS必須。',
|
||||
'settings.oauth.modal.scopes': '許可スコープ',
|
||||
'settings.oauth.modal.scopesHint':
|
||||
'list_trips と get_trip_summary は常に利用可能です。',
|
||||
'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': '登録に失敗しました',
|
||||
'settings.oauth.toast.deleted': 'クライアントを削除しました',
|
||||
'settings.oauth.toast.deleteError': '削除に失敗しました',
|
||||
'settings.oauth.toast.revoked': 'セッションを取り消しました',
|
||||
'settings.oauth.toast.revokeError': '取り消しに失敗しました',
|
||||
'settings.oauth.toast.rotateError': '更新に失敗しました',
|
||||
'settings.account': 'アカウント',
|
||||
'settings.about': '情報',
|
||||
'settings.about.reportBug': '不具合報告',
|
||||
'settings.about.reportBugHint': '問題を見つけたらお知らせください',
|
||||
'settings.about.featureRequest': '機能リクエスト',
|
||||
'settings.about.featureRequestHint': '新機能を提案',
|
||||
'settings.about.wikiHint': 'ドキュメント・ガイド',
|
||||
'settings.about.supporters.badge': '月額サポーター',
|
||||
'settings.about.supporters.title': 'TREKの旅仲間',
|
||||
'settings.about.supporters.subtitle':
|
||||
'皆さんの支援がTREKの未来を支えています。',
|
||||
'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': 'Made with',
|
||||
'settings.about.madeBy': 'by Maurice とオープンソースコミュニティ。',
|
||||
'settings.username': 'ユーザー名',
|
||||
'settings.email': 'メール',
|
||||
'settings.role': '役割',
|
||||
'settings.roleAdmin': '管理者',
|
||||
'settings.oidcLinked': '連携先',
|
||||
'settings.changePassword': 'パスワード変更',
|
||||
'settings.currentPassword': '現在のパスワード',
|
||||
'settings.currentPasswordRequired': '現在のパスワードが必要です',
|
||||
'settings.newPassword': '新しいパスワード',
|
||||
'settings.confirmPassword': '新しいパスワード(確認)',
|
||||
'settings.updatePassword': 'パスワード更新',
|
||||
'settings.passwordRequired': '現在と新しいパスワードを入力してください',
|
||||
'settings.passwordTooShort': '8文字以上必要です',
|
||||
'settings.passwordMismatch': 'パスワードが一致しません',
|
||||
'settings.passwordWeak': '大文字・小文字・数字・記号を含めてください',
|
||||
'settings.passwordChanged': 'パスワードを変更しました',
|
||||
'settings.mustChangePassword': '続行するにはパスワード変更が必要です。',
|
||||
'settings.deleteAccount': 'アカウント削除',
|
||||
'settings.deleteAccountTitle': 'アカウントを削除しますか?',
|
||||
'settings.deleteAccountWarning': 'すべてのデータが完全に削除されます。',
|
||||
'settings.deleteAccountConfirm': '完全に削除',
|
||||
'settings.deleteBlockedTitle': '削除できません',
|
||||
'settings.deleteBlockedMessage':
|
||||
'唯一の管理者です。別のユーザーを管理者にしてください。',
|
||||
'settings.roleUser': 'ユーザー',
|
||||
'settings.saveProfile': 'プロフィールを保存',
|
||||
'settings.toast.mapSaved': '地図設定を保存しました',
|
||||
'settings.toast.keysSaved': 'APIキーを保存しました',
|
||||
'settings.toast.displaySaved': '表示設定を保存しました',
|
||||
'settings.toast.profileSaved': 'プロフィールを保存しました',
|
||||
'settings.uploadAvatar': 'プロフィール画像をアップロード',
|
||||
'settings.removeAvatar': 'プロフィール画像を削除',
|
||||
'settings.avatarUploaded': 'プロフィール画像を更新しました',
|
||||
'settings.avatarRemoved': 'プロフィール画像を削除しました',
|
||||
'settings.avatarError': 'アップロードに失敗しました',
|
||||
'settings.mfa.title': '二要素認証(2FA)',
|
||||
'settings.mfa.description': 'サインイン時に追加の認証を行います。',
|
||||
'settings.mfa.requiredByPolicy': '管理者により2FAが必須です。',
|
||||
'settings.mfa.backupTitle': 'バックアップコード',
|
||||
'settings.mfa.backupDescription': '認証アプリが使えない場合に使用します。',
|
||||
'settings.mfa.backupWarning':
|
||||
'今すぐ保存してください。各コードは1回限りです。',
|
||||
'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': '2FAを有効にしました',
|
||||
'settings.mfa.toastDisabled': '2FAを無効にしました',
|
||||
'settings.mfa.demoBlocked': 'デモモードでは利用できません',
|
||||
'settings.oauth.modal.machineClient':
|
||||
'マシンクライアント(ブラウザログインなし)',
|
||||
'settings.oauth.modal.machineClientHint':
|
||||
'client_credentials グラントを使用します — リダイレクト URI は不要です。トークンは client_id + client_secret を介して直接発行され、選択したスコープ内であなたとして動作します。',
|
||||
'settings.oauth.modal.machineClientUsage':
|
||||
'トークンを取得するには、grant_type=client_credentials、client_id、client_secret を指定して POST /oauth/token を呼び出します。ブラウザもリフレッシュトークンも不要です。',
|
||||
'settings.oauth.badge.machine': 'マシン',
|
||||
};
|
||||
export default settings;
|
||||
@@ -0,0 +1,15 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const share: TranslationStrings = {
|
||||
'share.linkTitle': '公開リンク',
|
||||
'share.linkHint': 'ログイン不要で閲覧できるリンクを作成します(閲覧のみ)。',
|
||||
'share.createLink': 'リンク作成',
|
||||
'share.deleteLink': 'リンク削除',
|
||||
'share.createError': 'リンクを作成できませんでした',
|
||||
'share.permMap': '地図・プラン',
|
||||
'share.permBookings': '予約',
|
||||
'share.permPacking': '持ち物',
|
||||
'share.permBudget': '予算',
|
||||
'share.permCollab': 'チャット',
|
||||
};
|
||||
export default share;
|
||||
@@ -0,0 +1,21 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const shared: TranslationStrings = {
|
||||
'shared.expired': 'リンクが無効',
|
||||
'shared.expiredHint': 'この共有リンクは無効です。',
|
||||
'shared.readOnly': '読み取り専用',
|
||||
'shared.tabPlan': 'プラン',
|
||||
'shared.tabBookings': '予約',
|
||||
'shared.tabPacking': '持ち物',
|
||||
'shared.tabBudget': '予算',
|
||||
'shared.tabChat': 'チャット',
|
||||
'shared.days': '日',
|
||||
'shared.places': '場所',
|
||||
'shared.other': 'その他',
|
||||
'shared.totalBudget': '合計予算',
|
||||
'shared.messages': 'メッセージ',
|
||||
'shared.sharedVia': '共有元',
|
||||
'shared.confirmed': '確定',
|
||||
'shared.pending': '保留',
|
||||
};
|
||||
export default shared;
|
||||
@@ -0,0 +1,13 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const stats: TranslationStrings = {
|
||||
'stats.countries': '国',
|
||||
'stats.cities': '都市',
|
||||
'stats.trips': '旅行',
|
||||
'stats.places': '場所',
|
||||
'stats.worldProgress': '世界進捗',
|
||||
'stats.visited': '訪問済み',
|
||||
'stats.remaining': '未訪問',
|
||||
'stats.visitedCountries': '訪問国',
|
||||
};
|
||||
export default stats;
|
||||
@@ -0,0 +1,53 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const system_notice: TranslationStrings = {
|
||||
'system_notice.v3_photos.title': '写真の場所が3.0で変更されました',
|
||||
'system_notice.v3_photos.body':
|
||||
'旅行プランナー内の写真は削除されましたが、写真データは安全です。TREKがImmichやSynologyのライブラリを変更することはありません。\n\n写真は現在日記アドオンにあります。日記は任意機能です。未有効の場合は、管理画面 → アドオンで有効にしてください。',
|
||||
'system_notice.v3_journey.title': '日記登場 — 旅の日記',
|
||||
'system_notice.v3_journey.body':
|
||||
'タイムライン、写真ギャラリー、インタラクティブな地図で旅を物語に。',
|
||||
'system_notice.v3_journey.cta_label': '日記を開く',
|
||||
'system_notice.v3_journey.highlight_timeline':
|
||||
'日ごとのタイムラインとギャラリー',
|
||||
'system_notice.v3_journey.highlight_photos': 'ImmichやSynologyからインポート',
|
||||
'system_notice.v3_journey.highlight_share': 'ログイン不要で公開共有',
|
||||
'system_notice.v3_journey.highlight_export': 'PDFフォトブックとして書き出し',
|
||||
'system_notice.v3_features.title': '3.0のその他の注目点',
|
||||
'system_notice.v3_features.body': '今回のリリースで知っておきたいポイント。',
|
||||
'system_notice.v3_features.highlight_dashboard':
|
||||
'モバイル重視のダッシュボード刷新',
|
||||
'system_notice.v3_features.highlight_offline': 'PWAとして完全オフライン対応',
|
||||
'system_notice.v3_features.highlight_search': 'リアルタイム場所検索',
|
||||
'system_notice.v3_features.highlight_import': 'KMZ/KMLから場所をインポート',
|
||||
'system_notice.v3_mcp.title': 'MCP:OAuth 2.1に更新',
|
||||
'system_notice.v3_mcp.body':
|
||||
'MCP連携が全面的に刷新されました。OAuth 2.1が推奨認証方式です。従来の静的トークン(trek_…)は非推奨となり、将来削除されます。',
|
||||
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1推奨(mcp-remote)',
|
||||
'system_notice.v3_mcp.highlight_scopes': '24の詳細な権限スコープ',
|
||||
'system_notice.v3_mcp.highlight_deprecated': '静的trek_トークンは非推奨',
|
||||
'system_notice.v3_mcp.highlight_tools': 'ツールとプロンプトを拡張',
|
||||
'system_notice.v3_thankyou.title': '開発者より一言',
|
||||
'system_notice.v3_thankyou.body':
|
||||
'少しだけお時間をください。\n\nTREKは、自分の旅のために作った小さな個人プロジェクトでした。それが今では4,000人以上に使ってもらえるとは思ってもいませんでした。スターも、Issueも、機能要望も、すべて目を通しています。\n\nTREKはこれからもオープンソース、自分でホストでき、あなたのものです。トラッキングなし、サブスクなし。旅が好きな人が作ったツールです。\n\nhttps://github.com/jubnlにも感謝を。3.0の多くはあなたのおかげです。\n\nバグ報告、翻訳、共有、利用してくれたすべての方へ—本当にありがとうございます。\n\nこれからも一緒に旅を。\n\n— Maurice',
|
||||
'system_notice.v3014_whitespace_collision.title':
|
||||
'対応が必要:ユーザーアカウントの競合',
|
||||
'system_notice.v3014_whitespace_collision.body':
|
||||
'3.0.14 へのアップグレードにより、保存されているアカウントの先頭または末尾の空白が原因で、ユーザー名またはメールアドレスの競合が1件以上検出されました。影響を受けたアカウントは自動的にリネームされています。対象となるアカウントを特定するには、サーバーログで **[migration] WHITESPACE COLLISION** で始まる行を確認してください。',
|
||||
'system_notice.welcome_v1.title': 'TREKへようこそ',
|
||||
'system_notice.welcome_v1.body':
|
||||
'オールインワンの旅行プランナー。旅程作成、共有、整理をオンライン・オフラインで。',
|
||||
'system_notice.welcome_v1.cta_label': '旅行を計画',
|
||||
'system_notice.welcome_v1.hero_alt': 'TREKのUIが重なった風景写真',
|
||||
'system_notice.welcome_v1.highlight_plan': '日ごとの旅程作成',
|
||||
'system_notice.welcome_v1.highlight_share': '仲間と共同編集',
|
||||
'system_notice.welcome_v1.highlight_offline': 'モバイルでオフライン対応',
|
||||
'system_notice.dev_test_modal.title': '[Dev] テスト通知',
|
||||
'system_notice.dev_test_modal.body': 'これは開発用テスト通知です。',
|
||||
'system_notice.pager.prev': '前へ',
|
||||
'system_notice.pager.next': '次へ',
|
||||
'system_notice.pager.counter': '{current} / {total}',
|
||||
'system_notice.pager.goto': '通知{n}へ',
|
||||
'system_notice.pager.position': '{total}件中{current}件目',
|
||||
};
|
||||
export default system_notice;
|
||||
@@ -0,0 +1,40 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const todo: TranslationStrings = {
|
||||
'todo.subtab.packing': '持ち物リスト',
|
||||
'todo.subtab.todo': 'ToDo',
|
||||
'todo.completed': '完了',
|
||||
'todo.filter.all': 'すべて',
|
||||
'todo.filter.open': '未完了',
|
||||
'todo.filter.done': '完了',
|
||||
'todo.uncategorized': '未分類',
|
||||
'todo.namePlaceholder': 'タスク名',
|
||||
'todo.descriptionPlaceholder': '説明(任意)',
|
||||
'todo.unassigned': '未割り当て',
|
||||
'todo.noCategory': 'カテゴリなし',
|
||||
'todo.hasDescription': '説明あり',
|
||||
'todo.addItem': '新しいタスクを追加...',
|
||||
'todo.sidebar.sortBy': '並び替え',
|
||||
'todo.priority': '優先度',
|
||||
'todo.newCategoryLabel': '新規',
|
||||
'todo.newCategory': 'カテゴリ名',
|
||||
'todo.addCategory': 'カテゴリを追加',
|
||||
'todo.newItem': '新しいタスク',
|
||||
'todo.empty': 'タスクはまだありません。追加して始めましょう!',
|
||||
'todo.filter.my': '自分のタスク',
|
||||
'todo.filter.overdue': '期限切れ',
|
||||
'todo.sidebar.tasks': 'タスク',
|
||||
'todo.sidebar.categories': 'カテゴリ',
|
||||
'todo.detail.title': 'タスク',
|
||||
'todo.detail.description': '説明',
|
||||
'todo.detail.category': 'カテゴリ',
|
||||
'todo.detail.dueDate': '期限',
|
||||
'todo.detail.assignedTo': '担当者',
|
||||
'todo.detail.delete': '削除',
|
||||
'todo.detail.save': '変更を保存',
|
||||
'todo.sortByPrio': '優先度',
|
||||
'todo.detail.priority': '優先度',
|
||||
'todo.detail.noPriority': 'なし',
|
||||
'todo.detail.create': 'タスクを作成',
|
||||
};
|
||||
export default todo;
|
||||
@@ -0,0 +1,10 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const transport: TranslationStrings = {
|
||||
'transport.addTransport': '移動手段を追加',
|
||||
'transport.modalTitle.create': '移動手段を追加',
|
||||
'transport.modalTitle.edit': '移動手段を編集',
|
||||
'transport.title': '移動手段',
|
||||
'transport.addManual': '手動で追加',
|
||||
};
|
||||
export default transport;
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const trip: TranslationStrings = {
|
||||
'trip.tabs.plan': '計画',
|
||||
'trip.tabs.transports': '移動',
|
||||
'trip.tabs.reservations': '予約',
|
||||
'trip.tabs.reservationsShort': '予約',
|
||||
'trip.tabs.packing': '持ち物リスト',
|
||||
'trip.tabs.packingShort': '持ち物',
|
||||
'trip.tabs.lists': 'リスト',
|
||||
'trip.tabs.listsShort': 'リスト',
|
||||
'trip.tabs.budget': '予算',
|
||||
'trip.tabs.files': 'ファイル',
|
||||
'trip.loading': '旅行を読み込み中...',
|
||||
'trip.loadingPhotos': '場所の写真を読み込み中...',
|
||||
'trip.mobilePlan': '計画',
|
||||
'trip.mobilePlaces': '場所',
|
||||
'trip.toast.placeUpdated': '場所を更新しました',
|
||||
'trip.toast.placeAdded': '場所を追加しました',
|
||||
'trip.toast.placeDeleted': '場所を削除しました',
|
||||
'trip.toast.selectDay': 'まず日を選択してください',
|
||||
'trip.toast.assignedToDay': '場所を日に割り当てました',
|
||||
'trip.toast.reorderError': '並び替えに失敗しました',
|
||||
'trip.toast.reservationUpdated': '予約を更新しました',
|
||||
'trip.toast.reservationAdded': '予約を追加しました',
|
||||
'trip.toast.deleted': '削除しました',
|
||||
'trip.confirm.deletePlace': 'この場所を削除してもよろしいですか?',
|
||||
'trip.confirm.deletePlaces': '{count}件の場所を削除してもよろしいですか?',
|
||||
'trip.toast.placesDeleted': '{count}件の場所を削除しました',
|
||||
};
|
||||
export default trip;
|
||||
@@ -0,0 +1,17 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const trips: TranslationStrings = {
|
||||
'trips.memberRemoved': '{username} を削除しました',
|
||||
'trips.memberRemoveError': '削除に失敗しました',
|
||||
'trips.memberAdded': '{username} を追加しました',
|
||||
'trips.memberAddError': '追加に失敗しました',
|
||||
'trips.reminder': 'リマインダー',
|
||||
'trips.reminderNone': 'なし',
|
||||
'trips.reminderDay': '日',
|
||||
'trips.reminderDays': '日',
|
||||
'trips.reminderCustom': 'カスタム',
|
||||
'trips.reminderDaysBefore': '出発前',
|
||||
'trips.reminderDisabledHint':
|
||||
'旅行のリマインダーは無効です。管理 > 設定 > 通知から有効にしてください。',
|
||||
};
|
||||
export default trips;
|
||||
@@ -0,0 +1,21 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const undo: TranslationStrings = {
|
||||
'undo.button': '元に戻す',
|
||||
'undo.tooltip': '元に戻す: {action}',
|
||||
'undo.assignPlace': '場所を日に割り当て',
|
||||
'undo.removeAssignment': '日の割り当てを解除',
|
||||
'undo.reorder': '場所を並び替え',
|
||||
'undo.optimize': 'ルートを最適化',
|
||||
'undo.deletePlace': '場所を削除',
|
||||
'undo.deletePlaces': '場所を削除',
|
||||
'undo.moveDay': '場所を別の日に移動',
|
||||
'undo.lock': '場所のロックを切り替え',
|
||||
'undo.importGpx': 'GPXをインポート',
|
||||
'undo.importKeyholeMarkup': 'KMZ/KMLをインポート',
|
||||
'undo.importGoogleList': 'Googleマップをインポート',
|
||||
'undo.importNaverList': 'Naverマップをインポート',
|
||||
'undo.addPlace': '場所を追加',
|
||||
'undo.done': '元に戻しました: {action}',
|
||||
};
|
||||
export default undo;
|
||||
@@ -0,0 +1,97 @@
|
||||
import type { TranslationStrings } from '../types';
|
||||
|
||||
const vacay: TranslationStrings = {
|
||||
'vacay.subtitle': '休暇日数の計画と管理',
|
||||
'vacay.settings': '設定',
|
||||
'vacay.year': '年',
|
||||
'vacay.addYear': '翌年を追加',
|
||||
'vacay.addPrevYear': '前年を追加',
|
||||
'vacay.removeYear': '年を削除',
|
||||
'vacay.removeYearConfirm': '{year}年を削除しますか?',
|
||||
'vacay.removeYearHint':
|
||||
'この年の休暇データと会社休日はすべて完全に削除されます。',
|
||||
'vacay.remove': '削除',
|
||||
'vacay.persons': '人物',
|
||||
'vacay.noPersons': '人物が追加されていません',
|
||||
'vacay.addPerson': '人物を追加',
|
||||
'vacay.editPerson': '人物を編集',
|
||||
'vacay.removePerson': '人物を削除',
|
||||
'vacay.removePersonConfirm': '{name}を削除しますか?',
|
||||
'vacay.removePersonHint':
|
||||
'この人物のすべての休暇データが完全に削除されます。',
|
||||
'vacay.personName': '名前',
|
||||
'vacay.personNamePlaceholder': '名前を入力',
|
||||
'vacay.color': '色',
|
||||
'vacay.add': '追加',
|
||||
'vacay.legend': '凡例',
|
||||
'vacay.publicHoliday': '祝日',
|
||||
'vacay.companyHoliday': '会社休日',
|
||||
'vacay.weekend': '週末',
|
||||
'vacay.modeVacation': '休暇',
|
||||
'vacay.modeCompany': '会社休日',
|
||||
'vacay.entitlement': '付与日数',
|
||||
'vacay.entitlementDays': '日',
|
||||
'vacay.used': '使用済み',
|
||||
'vacay.remaining': '残り',
|
||||
'vacay.carriedOver': '{year}年から繰越',
|
||||
'vacay.blockWeekends': '週末を除外',
|
||||
'vacay.blockWeekendsHint': '週末に休暇を登録できないようにします',
|
||||
'vacay.weekendDays': '週末',
|
||||
'vacay.mon': '月',
|
||||
'vacay.tue': '火',
|
||||
'vacay.wed': '水',
|
||||
'vacay.thu': '木',
|
||||
'vacay.fri': '金',
|
||||
'vacay.sat': '土',
|
||||
'vacay.sun': '日',
|
||||
'vacay.publicHolidays': '祝日',
|
||||
'vacay.publicHolidaysHint': 'カレンダーに祝日を表示',
|
||||
'vacay.selectCountry': '国を選択',
|
||||
'vacay.selectRegion': '地域を選択(任意)',
|
||||
'vacay.addCalendar': 'カレンダーを追加',
|
||||
'vacay.calendarLabel': 'ラベル(任意)',
|
||||
'vacay.calendarColor': '色',
|
||||
'vacay.noCalendars': '祝日カレンダーはまだありません',
|
||||
'vacay.companyHolidays': '会社休日',
|
||||
'vacay.companyHolidaysHint': '会社全体の休日を設定できます',
|
||||
'vacay.companyHolidaysNoDeduct': '会社休日は休暇日数に含まれません。',
|
||||
'vacay.weekStart': '週の開始',
|
||||
'vacay.weekStartHint':
|
||||
'カレンダーの週を月曜始まりにするか日曜始まりにするかを選択します',
|
||||
'vacay.carryOver': '繰越',
|
||||
'vacay.carryOverHint': '残りの休暇日数を翌年に自動で繰り越します',
|
||||
'vacay.sharing': '共有',
|
||||
'vacay.sharingHint': '他のTREKユーザーと休暇計画を共有',
|
||||
'vacay.owner': '所有者',
|
||||
'vacay.shareEmailPlaceholder': 'TREKユーザーのメール',
|
||||
'vacay.shareSuccess': '計画を共有しました',
|
||||
'vacay.shareError': '共有できませんでした',
|
||||
'vacay.dissolve': '統合を解除',
|
||||
'vacay.dissolveHint': 'カレンダーを分離します。データは保持されます。',
|
||||
'vacay.dissolveAction': '解除',
|
||||
'vacay.dissolved': 'カレンダーを分離しました',
|
||||
'vacay.fusedWith': '統合相手',
|
||||
'vacay.you': 'あなた',
|
||||
'vacay.noData': 'データなし',
|
||||
'vacay.changeColor': '色を変更',
|
||||
'vacay.inviteUser': 'ユーザーを招待',
|
||||
'vacay.inviteHint':
|
||||
'別のTREKユーザーを招待して、休暇カレンダーを共有します。',
|
||||
'vacay.selectUser': 'ユーザーを選択',
|
||||
'vacay.sendInvite': '招待を送信',
|
||||
'vacay.inviteSent': '招待を送信しました',
|
||||
'vacay.inviteError': '招待を送信できませんでした',
|
||||
'vacay.pending': '保留中',
|
||||
'vacay.noUsersAvailable': '利用可能なユーザーがいません',
|
||||
'vacay.accept': '承認',
|
||||
'vacay.decline': '拒否',
|
||||
'vacay.acceptFusion': '承認して統合',
|
||||
'vacay.inviteTitle': '統合の招待',
|
||||
'vacay.inviteWantsToFuse': 'が休暇カレンダーの共有を希望しています。',
|
||||
'vacay.fuseInfo1': '双方が1つの共有カレンダーですべての休暇を確認できます。',
|
||||
'vacay.fuseInfo2': '双方が互いの予定を作成・編集できます。',
|
||||
'vacay.fuseInfo3': '双方が予定の削除や付与日数の変更を行えます。',
|
||||
'vacay.fuseInfo4': '祝日や会社休日などの設定は共有されます。',
|
||||
'vacay.fuseInfo5': '統合はいつでも解除できます。データは保持されます。',
|
||||
};
|
||||
export default vacay;
|
||||
Reference in New Issue
Block a user