{
  "app": {
    "name": "トレーニング日記",
    "title": "トレーニング日記"
  },
  "common": {
    "loading": "読み込み中...",
    "save": "保存",
    "saved": "保存済み",
    "cancel": "キャンセル",
    "delete": "削除",
    "edit": "編集",
    "add": "追加",
    "close": "閉じる",
    "confirm": "確認",
    "yes": "はい",
    "no": "いいえ",
    "search": "検索",
    "filter": "フィルター",
    "actions": "アクション",
    "back": "戻る",
    "next": "次へ",
    "previous": "前へ",
    "submit": "送信",
    "reset": "リセット"
  },
  "navigation": {
    "home": "ホーム",
    "members": "メンバー",
    "diary": "日記",
    "approvals": "承認",
    "statistics": "トレーニング統計",
    "tournaments": "トーナメント",
    "clubTournaments": "クラブ大会",
    "tournamentParticipations": "大会参加",
    "schedule": "スケジュール",
    "clubSettings": "クラブ設定",
    "predefinedActivities": "事前定義された活動",
    "teamManagement": "チーム管理",
    "permissions": "権限",
    "logs": "システムログ",
    "memberTransfer": "メンバー転送",
    "myTischtennisAccount": "myTischtennisアカウント",
    "personalSettings": "個人設定",
    "logout": "ログアウト",
    "login": "ログイン",
    "register": "登録",
    "dailyBusiness": "日常業務",
    "competitions": "競技",
    "settings": "設定"
  },
  "club": {
    "select": "クラブを選択",
    "selectPlaceholder": "クラブを選択...",
    "new": "新しいクラブ",
    "load": "読み込む",
    "name": "クラブ名",
    "create": "クラブを作成",
    "accessRequestPending": "Access to this club has been requested. Please be patient."
  },
  "auth": {
    "login": "ログイン",
    "logout": "ログアウト",
    "register": "登録",
    "email": "メール",
    "password": "パスワード",
    "forgotPassword": "パスワードをお忘れですか？",
    "rememberMe": "ログイン状態を保持",
    "loginSuccess": "ログインに成功しました",
    "logoutSuccess": "ログアウトに成功しました",
    "sessionExpired": "セッションが期限切れです。ログアウトされます。",
    "noAccount": "アカウントをお持ちでないですか？",
    "toLogin": "ログインへ",
    "loginFailed": "ログインに失敗しました。認証情報を確認してください。",
    "activationFailed": "アクティベーションに失敗しました。リンクを確認してください。",
    "forgotPasswordDescription": "メールアドレスを入力してください。パスワードリセット用のリンクが送信されます。",
    "sendResetLink": "リンクを送信",
    "sending": "送信中...",
    "resetEmailSent": "このメールアドレスのアカウントが存在する場合、リセットリンクが送信されました。受信トレイ（迷惑メールフォルダも）を確認してください。",
    "resetRequestFailed": "リクエストに失敗しました。再試行してください。",
    "resetPassword": "新しいパスワードを設定",
    "newPassword": "新しいパスワード",
    "confirmPassword": "パスワードを確認",
    "saveNewPassword": "パスワードを保存",
    "saving": "保存中...",
    "passwordResetSuccess": "パスワードが正常に変更されました。新しいパスワードでログインできます。",
    "passwordsDoNotMatch": "パスワードが一致しません。",
    "passwordTooShort": "パスワードは6文字以上必要です。",
    "resetFailed": "パスワードを変更できませんでした。リンクの有効期限が切れている可能性があります。"
  },
  "settings": {
    "title": "設定",
    "personalSettings": "個人設定",
    "language": "言語",
    "languageDescription": "アプリケーションの優先言語を選択してください",
    "languageChanged": "言語が正常に変更されました",
    "selectLanguage": "言語を選択"
  },
  "languages": {
    "de": "Deutsch (ドイツ語)",
    "en-GB": "English (英語（GB）)",
    "en-US": "English (英語（US）)",
    "en-AU": "English (英語（AU）)",
    "de-CH": "Schwiizerdütsch (スイスドイツ語)",
    "fr": "Français (フランス語)",
    "es": "Español (スペイン語)",
    "it": "Italiano (イタリア語)",
    "pl": "Polski (ポーランド語)",
    "ja": "日本語",
    "zh": "中文 (中国語)",
    "tl": "Tagalog (タガログ語)",
    "th": "ไทย (タイ語)",
    "fil": "Filipino (フィリピン語)"
  },
  "messages": {
    "success": "成功",
    "error": "エラー",
    "warning": "警告",
    "info": "情報",
    "confirm": "確認",
    "cancel": "キャンセル"
  },
  "tournaments": {
    "numberOfTables": "卓数",
    "table": "卓",
    "playerOne": "選手 1",
    "playerTwo": "選手 2",
    "groupsLabel": "グループ",
    "knockoutLabel": "KO",
    "distributeTables": "空き卓を割り当て",
    "distributeTablesResult": "卓の割り当て",
    "noFreeTables": "空き卓がありません。",
    "noAssignableMatches": "両選手が空いている試合がありません。",
    "tablesDistributed": "卓が割り当てられました。",
    "errorDistributingTables": "卓の割り当て中にエラーが発生しました。",
    "missingDataPDF": "不足データをPDFで",
    "missingDataPDFTitle": "参加者の不足データ – ミニ選手権",
    "missingDataPDFSubtitle": "不足しているデータ（____で表示）を参加者から収集し、ここに記入してください。",
    "allDataComplete": "すべての参加者データが揃っています。",
    "allDataCompleteTop3": "上位3名のデータはすべて揃っています。",
    "noTop3Yet": "上位3名がまだ確定していません。",
    "missingDataPDFTitleTop3": "不足データ – トップ3 ミニ選手権",
    "missingDataPDFSubtitleTop3": "トップ3の不足データ（____で表示）を収集し、ここに記入してください。",
    "address": "住所",
    "phone": "電話",
    "generatingPDF": "PDF作成中...",
    "page": "ページ",
    "statusOpen": "未開始",
    "statusLive": "進行中",
    "statusFinished": "終了",
    "dataNotRecorded": "未登録",
    "resultsRanking": "順位",
    "newSetPlaceholder": "新しいセット 例: 11:7",
    "finishMatch": "終了",
    "correctMatch": "修正",
    "markMatchLive": "進行中としてマーク",
    "unmarkMatchLive": "進行中マークを解除",
    "stageConfigTitle": "中間ラウンドと決勝ラウンド",
    "stageConfigLoading": "ラウンド設定を読み込み中…",
    "stageConfigIntro": "中間ラウンドは任意です。有効にすると、その後に必ず決勝ラウンドがあります。ノックアウト決勝ラウンドは単一ブラケットとして作成されます。",
    "useIntermediateStage": "中間ラウンドを使用",
    "intermediateRound": "中間ラウンド（ラウンド2）",
    "finalRound": "決勝ラウンド",
    "playThirdPlace": "3位決定戦を行う",
    "roundMode": "モード",
    "roundGroupCount": "グループ数",
    "promotionRule12": "進出: 予選 → 中間ラウンド (1→2)",
    "promotionRuleFinal": "進出: ラウンド {from} → ラウンド {to}",
    "addPoolRule": "プールルールを追加",
    "noPoolRulesYet12": "まだルールがありません。例: 1位と2位 -> ラウンド2上位グループ。",
    "noPoolRulesYetFinal": "まだルールがありません。例: 1位と2位 -> 決勝ラウンド。",
    "placesFromEachGroup": "各グループからの順位（例: 1,2）",
    "target": "対象",
    "targetGroupCount": "対象グループ数",
    "saveRounds": "ラウンドを保存",
    "createFinalFromPreliminary": "予選から決勝ラウンドを作成",
    "createIntermediateFromPreliminary": "予選から中間ラウンドを作成",
    "createFinalFromIntermediate": "中間ラウンドから決勝ラウンドを作成",
    "stageConfigMissingIds": "保存できません: クラブIDまたは大会IDがありません。",
    "stageConfigLoadError": "ラウンド設定の読み込みエラー。",
    "stageConfigBadServerResponse": "サーバー応答が無効です。",
    "stageCreated": "ラウンド {round} を作成しました。",
    "atLeastOnePoolRule": "{label} に対して少なくとも1つのプールルールを追加してください（例: 1,2位）。",
    "enterMiniLocation": "場所を入力してください。",
    "selectTournamentFirst": "先に大会を選択してください。",
    "errorGeneratingPdf": "PDF生成エラー。",
    "orphanedMatchesRemoved": "孤立した試合を {count} 件削除しました。",
    "noOrphanedMatchesFound": "孤立した試合は見つかりませんでした。",
    "enterClassName": "クラス名を入力してください。",
    "deleteClassTitle": "クラスを削除",
    "deleteClassConfirm": "クラス「{name}」を本当に削除しますか？",
    "deleteClassParticipantsDetached": "すべての参加者がこのクラスから外されます。",
    "enterExternalParticipantName": "少なくとも名と姓を入力してください。",
    "noTournamentDate": "大会日がありません。",
    "noValidTrainingParticipants": "この日付の練習セッションに有効な参加者が見つかりませんでした。",
    "noTrainingParticipants": "この日付の練習セッションに参加者が見つかりませんでした。",
    "noTrainingOnDate": "{date} の練習セッションが見つかりませんでした。",
    "selectTwoDifferentPlayers": "異なる2人の選手を選択してください。",
    "pairingAlreadyExists": "このペアは既に存在します。",
    "participantNotFound": "参加者が見つかりません。",
    "minimumParticipantsForPairings": "ペアリングには少なくとも2人の参加者が必要です。",
    "deleteExistingPairingsConfirm": "既存のペアリングは削除されます。続行しますか？",
    "pairingsCreatedWithErrors": "{successCount} 件のペアリングを作成、{errorCount} 件のエラー。",
    "participantConflicts": "競合",
    "unpairedDoubles": "ペアのいないダブルス",
    "noEligibleClass": "適切なクラスが見つかりません。",
    "eligibleClassesHint": "参加可能: {classes}",
    "warningClassMissing": "クラスが見つかりません",
    "warningGenderMismatch": "性別がクラス条件と一致しません",
    "warningGenderMissing": "このクラスには性別情報が必要です",
    "warningBirthDateMissing": "このクラスには生年月日が必要です",
    "warningTooOldForClass": "このクラスには年齢が高すぎます",
    "warningTooYoungForClass": "このクラスには年齢が低すぎます",
    "warningMissingPairing": "ダブルスのパートナーがいません",
    "autoAssignableParticipantsHint": "{count} of them can be assigned automatically.",
    "assignmentReviewTitle": "{count} participants need a choice:",
    "conflictSuggestionLabel": "Suggestions:",
    "workspaceProblemsTitle": "{count} open issues",
    "problemConfigTitle": "Configuration incomplete",
    "problemConfigDescription": "Check date, name, winning sets and at least one class.",
    "problemUnassignedTitle": "{count} participants without class",
    "problemUnassignedDescription": "These participants still need a manual class assignment.",
    "problemUnassignedAutoDescription": "{count} of them can be assigned automatically right away.",
    "problemConflictsTitle": "{count} participants with conflicts",
    "problemConflictsDescription": "Review invalid classes, missing data or unclear assignments.",
    "problemDoublesTitle": "{count} open doubles partners",
    "problemDoublesDescription": "One or more doubles classes still need partner assignments.",
    "problemDoublesAutoDescription": "The open doubles class can be paired automatically right away.",
    "problemGroupsMissingTitle": "Groups not created yet",
    "problemGroupsMissingDescription": "The group tournament needs groups to be created first.",
    "problemGroupMatchesTitle": "Group matches not generated yet",
    "problemGroupMatchesDescription": "The groups are ready, but the matches have not been created yet.",
    "problemKnockoutReadyTitle": "Knockout can be started",
    "problemKnockoutReadyDescription": "The group stage is complete and the final round can be generated now.",
    "autoAssignEligible": "Assign automatically",
    "autoAssignEligibleNone": "There are currently no participants with a single automatic class assignment.",
    "autoAssignEligibleDone": "{count} participants were assigned automatically.",
    "autoAssignEligiblePartial": "{successCount} participants were assigned automatically, {errorCount} failed.",
    "doublesPairingHint": "{count} participants in this doubles class still need a partner.",
    "createSuggestedPairings": "Create pairings",
    "statusUnpairedDoubles": "{count} doubles without partner",
    "statusActionPair": "Pair",
    "stageConfigCurrentSetup": "Current structure",
    "stageFlowWithIntermediate": "Preliminary round -> intermediate round ({stage2}) -> final round ({final})",
    "stageFlowDirectFinal": "Preliminary round -> final round ({final})",
    "stageStep1": "Step 1",
    "stageStep2": "Step 2",
    "stageStep3": "Step 3",
    "stageStep1Title": "Decide on an intermediate round",
    "stageStep1Description": "First decide whether there should be an additional round after the preliminary round.",
    "stageStep2Description": "Define what the intermediate round should look like and how many groups it needs.",
    "stageFinalDescription": "Decide whether the final round should be played as groups or directly as a knockout bracket.",
    "promotionRuleDescription12": "Define which places from each preliminary group advance to the intermediate round.",
    "promotionRuleDescriptionFinalKnockout": "Define which places from the previous round advance to the knockout bracket.",
    "promotionRuleDescriptionFinalGroups": "Define which places from the previous round advance to the final-round groups.",
    "poolRuleLabel": "Rule {number}",
    "poolRuleSummary": "Places {places} go to {target}",
    "poolRulePlacesLabel": "Which places advance?",
    "poolRulePlacesHelp": "Example: 1 or 1,2",
    "poolRuleTargetLabel": "Where do these places go?",
    "poolRuleQuickExamples": "Quick examples:",
    "targetGroupsLabel": "{count} groups",
    "transferQualifiedToFinalFromPreliminary": "Move qualified players straight into the final round",
    "transferQualifiedToIntermediate": "Move qualified players into the intermediate round",
    "transferQualifiedToFinalFromIntermediate": "Move qualified players into the final round",
    "stageParticipantsTransferred": "Qualified players were moved into {round}.",
    "transferQualifiedToFinalFromPreliminaryDesc": "Uses the preliminary-round to final-round rules and creates the qualified players directly there.",
    "transferQualifiedToIntermediateDesc": "Uses the preliminary-round to intermediate-round rules and moves the qualified players across.",
    "transferQualifiedToFinalFromIntermediateDesc": "Uses the intermediate-round to final-round rules and moves the qualified players across.",
    "stageActionsTitle": "Next actions",
    "stageActionsDescription": "These steps move qualified players into the next round.",
    "stageActionRun": "Run now",
    "stageActionMissingRulesHint": "Create at least one advancement rule first before moving players into the next round.",
    "poolRulePreview": "From each group, places {places} advance to {target}.",
    "poolRuleTargetKnockout": "the knockout bracket",
    "poolRuleTargetGroupsDetailed": "{count} target groups",
    "stageValidationTitle": "Review configuration",
    "stageValidationDescription": "Fix these points before saving or moving players into the next round.",
    "stageValidationGroupCountRequired": "Please set at least one valid group count.",
    "stageValidationNoRules": "There is no advancement rule yet for {stage}.",
    "stageValidationRulePlacesRequired": "Enter at least one place that should advance.",
    "stageValidationRulePlacesInvalid": "The place definition is invalid. Only positive whole numbers such as 1 or 1,2 are allowed.",
    "stageValidationRulePlacesDuplicate": "A single rule must not contain the same place more than once.",
    "stageValidationRulesOverlap": "Place {place} is assigned twice, in rule {first} and rule {second}.",
    "stageValidationTargetGroupsRequired": "Please enter a valid number of target groups.",
    "stageValidationKnockoutTargetOnly": "For a knockout final round, only the knockout bracket is allowed as the target here.",
    "stageValidationSaveBlocked": "Please fix the highlighted configuration errors first.",
    "stageValidationSuggestion": "Suggestion: {value}",
    "stageValidationRulePlacesGap": "The place definition has gaps. Usually a continuous order such as 1,2 or 1,2,3 is intended.",
    "stageValidationTargetGroupCountMismatch": "The number of target groups must match the target round. Expected: {expected}.",
    "stageValidationTargetTypeMismatch": "The target of this rule must match the target round. Expected: {target}.",
    "stageValidationApplyFix": "Apply",
    "stageValidationApplyTargetTypeFix": "Switch to {target}",
    "stageValidationApplyTargetGroupFix": "Set to {count} target groups",
    "ruleStatusOk": "Looks good",
    "ruleStatusReview": "Review",
    "ruleStatusBlocked": "Blocked",
    "ruleStatusOkDescription": "This rule matches the current target round and can be used as-is.",
    "stageFlowHealthOk": "Round logic looks good",
    "stageFlowHealthOkDescription": "The transitions between rounds are fully configured and currently coherent.",
    "stageFlowHealthIncomplete": "Round logic is incomplete",
    "stageFlowHealthMissingRules": "At least one transition does not yet have a complete advancement rule.",
    "stageFlowHealthReviewDescription": "The round logic is basically usable, but should still be reviewed because of open hints.",
    "stageFlowHealthBlocked": "Round logic is contradictory",
    "stageFlowHealthBlockedDescription": "At least one rule currently does not match the target round or contains blocking configuration errors.",
    "stageFlowBreakdownOk": "Configuration looks good",
    "stageFlowBreakdownWarnings": "{count} warning(s) open",
    "stageFlowBreakdownErrors": "{count} blocking error(s)",
    "stageFlowBreakdownMissingRule": "No complete rule has been added yet",
    "stageFlowBreakdownActionAddRule": "Add rule",
    "stageFlowBreakdownActionReview": "Review issues",
    "stageFlowBreakdownActionOpen": "Open rule",
    "stageValidationApplyAllFixes": "Apply {count} quick fix(es)",
    "stageFlowRecommendationTitle": "Recommended next step",
    "stageFlowRecommendationFixes": "The typical configuration problems can be cleaned up automatically right away.",
    "stageFlowRecommendationMissingRule": "A complete rule is still missing for {label}. That is the best place to continue.",
    "stageFlowRecommendationError": "Review the first blocking error in the round logic first.",
    "stageFlowRecommendationWarnings": "There are still warnings that should be reviewed before saving.",
    "stageFlowRecommendationSave": "The round logic is coherent. You can save the configuration now.",
    "stageFlowPreviewMissing": "No rule has been configured yet.",
    "stageFlowPreviewRule": "Places {places} go to {target}",
    "stageValidationKnockoutNeedsTwoPlayers": "A knockout bracket needs at least 2 qualified players.",
    "stageValidationKnockoutByesLikely": "With an expected {count} qualifiers, the knockout bracket will very likely include byes.",
    "stageValidationNotEnoughQualifiersForGroups": "With only {count} qualifiers for {groups} target groups, empty groups would be created.",
    "stageValidationThinGroupsLikely": "With {count} qualifiers across {groups} target groups, the groups will likely be very small.",
    "stageFlowPreviewRuleWithCount": "{base} (expected qualifiers: {count})",
    "stageFlowReadinessNoGroups": "No matching groups exist yet",
    "stageFlowReadinessIncompleteGroups": "{count} group(s) are not fully decided yet",
    "stageFlowReadinessReady": "Transition is ready to start",
    "stageFlowQualifiedPreviewTitle": "Currently qualified",
    "stageFlowQualifiedPreviewEntry": "G{group} · Place {position} · {name}"
  },
  "members": {
    "subtitle": "Search, filter and edit members directly.",
    "closeEditor": "Close editor",
    "visibleMembers": "Visible members",
    "search": "Search",
    "searchPlaceholder": "Search by name, city, phone or email",
    "memberScope": "Member scope",
    "scopeAll": "All",
    "scopeActive": "Active",
    "scopeTest": "Trial",
    "scopeNeedsForm": "Form unverified",
    "scopeInactive": "Inactive",
    "resultsVisible": "members visible",
    "editHint": "Click a row to open the editor.",
    "editorCreateHint": "Create a new member and capture contact details directly.",
    "editorEditHint": "Edit the details for {name}.",
    "transferSuccessTitle": "Transfer successful",
    "transferErrorTitle": "Transfer error",
    "clickTtRequestPending": "Click-TT request in progress",
    "clickTtRequestAction": "Request click-TT eligibility",
    "clickTtRequestTitle": "Start Click-TT request",
    "clickTtRequestConfirm": "Start the automated Click-TT request for {name}?",
    "clickTtRequestHint": "The request is processed automatically by the backend Click-TT workflow.",
    "clickTtRequestSuccess": "Please sign in to click-tt and submit the request there.",
    "clickTtRequestError": "The Click-TT request could not be submitted.",
    "clickTtRequestFailedLog": "Click-TT request failed",
    "deleteImageTitle": "Delete image",
    "deleteImageConfirm": "Do you really want to delete this image?",
    "parentFallback": "Parent",
    "loadingMembers": "Loading members...",
    "errorLoadingMembers": "Failed to load the member list.",
    "scopeNotTraining": "No longer training",
    "notInTrainingTooltip": "No participation for {weeks} training weeks",
    "status": "Status",
    "contact": "Contact",
    "noPhoneShort": "No phone",
    "noEmailShort": "No email",
    "noAddressShort": "No address",
    "clickTtSubmitted": "Click-TT submitted",
    "markRegular": "Mark regular",
    "markFormReceived": "Mark form verified",
    "clickTtRequestShort": "Click-TT",
    "clickTtRequestPendingShort": "Pending ...",
    "memberDetails": "Member details",
    "previewLastTraining": "Last training",
    "previewNoLastTraining": "No participation yet",
    "phoneListForSelection": "Phone list for selection",
    "markFormsForSelection": "Verify forms for selection",
    "markRegularForSelection": "Mark selection regular",
    "phoneListSelectionFile": "phone-list-selection.pdf",
    "batchFormsMarkedSuccess": "Marked {count} form(s) as verified.",
    "batchFormsMarkedEmpty": "There are no unverified forms in the current selection.",
    "batchMarkedRegularSuccess": "Marked {count} trial member(s) as regular.",
    "batchMarkedRegularEmpty": "There are no trial members in the current selection.",
    "batchPartialFailure": "{success} succeeded, {failed} failed.",
    "sortBy": "Sort by",
    "sortLastName": "Last name",
    "sortFirstName": "First name",
    "sortBirthday": "Birthday",
    "sortAge": "Age",
    "age": "Age",
    "openTasks": "Open tasks",
    "noOpenTasks": "No open tasks",
    "taskVerifyForm": "Verify form",
    "taskReviewTrialStatus": "Review trial status",
    "taskCheckTrainingStatus": "Review training status",
    "taskCheckClickTt": "Review Click-TT eligibility",
    "taskActionVerify": "Verify",
    "taskActionMarkRegular": "Mark regular",
    "taskActionRequest": "Request",
    "toggleSortDirection": "Toggle sort direction",
    "sortLastTraining": "Last training",
    "sortOpenTasks": "Open tasks",
    "exportPreview": "Export preview",
    "exportMembersSelected": "members currently selected",
    "exportPhones": "Phone",
    "exportReachableByPhone": "with phone number",
    "exportEmails": "Email",
    "exportReachableByEmail": "with email address",
    "exportPreviewNames": "Preview",
    "exportPreviewEmpty": "No members in the current selection",
    "exportCsv": "Export CSV",
    "exportCsvFile": "member-selection.csv",
    "copyPhones": "Copy phones",
    "copyEmails": "Copy emails",
    "copyPhonesSuccess": "Phone list copied to clipboard.",
    "copyPhonesEmpty": "There are no phone numbers in the current selection.",
    "copyEmailsSuccess": "Email list copied to clipboard.",
    "copyEmailsEmpty": "There are no email addresses in the current selection.",
    "composeEmail": "Compose email",
    "copyContactSummary": "Copy contact summary",
    "copyContactSummarySuccess": "Contact summary copied to clipboard."
  }
}
