2860 lines
167 KiB
JSON
2860 lines
167 KiB
JSON
{
|
||
"child.tap_to_undo": "Tap to undo",
|
||
"common.design.field_label": "Card design",
|
||
"common.design.use_global": "Use global default",
|
||
"common.design.classic": "Classic",
|
||
"common.design.playroom": "Playroom",
|
||
"common.design.console": "Console",
|
||
"common.design.cleanpro": "Clean Pro",
|
||
"common.design.graphite": "Graphite",
|
||
"panel.settings_card_design_label": "Default card design",
|
||
"panel.settings_card_design_hint": "The style new cards use unless overridden per card.",
|
||
"activity.a_chore": "a chore",
|
||
"activity.a_reward": "a reward",
|
||
"activity.awaiting_approval": "awaiting approval",
|
||
"activity.card_description": "Timeline of recent chore completions and reward claims",
|
||
"activity.card_name": "TaskMate Activity Feed",
|
||
"activity.claimed": "claimed",
|
||
"activity.completed": "completed",
|
||
"activity.completed_chores_will_appear": "Completed chores will appear here",
|
||
"activity.days_ago": "{count}d ago",
|
||
"activity.default_title": "Activity",
|
||
"activity.recent_events": "Recent events",
|
||
"activity.undo": "Undo",
|
||
"activity.rated": "Rated {count} of 3 stars",
|
||
"activity.undo_confirm_title": "Undo this action?",
|
||
"activity.undo_confirm_chore": "Undo the approval of “{detail}” for {child}? This removes {points} points and returns it to pending.",
|
||
"activity.undo_confirm_txn": "Undo “{detail}” for {child}? This reverses {points} points.",
|
||
"activity.undo_error_title": "TaskMate — undo failed",
|
||
"activity.undo_error_body": "Couldn't undo: {message}",
|
||
"activity.editor.accent_stripes_helper": "Show the 4px coloured stripe at the left of each row indicating event type",
|
||
"activity.editor.accent_stripes": "Coloured event stripes",
|
||
"activity.editor.filter_child_helper": "Only show activity for this child",
|
||
"activity.editor.max_items": "Max Items",
|
||
"activity.editor.max_items_helper": "Maximum number of events to show (default: 30)",
|
||
"activity.editor.show_relative_time_helper": "Show 'just now' / '5m ago' alongside the absolute time on each row",
|
||
"activity.editor.show_relative_time": "Relative time labels",
|
||
"activity.editor.show_filter_chips_helper": "Show the All / Chores / Rewards / Adjustments chip bar below the header",
|
||
"activity.editor.show_filter_chips": "Show filter chips",
|
||
"activity.editor.show_undo": "Show undo buttons",
|
||
"activity.editor.show_undo_helper": "Show the undo button on each row. Turn off for a kid-friendly dashboard so children can't reverse their own activity.",
|
||
"activity.events_count": "{count} events",
|
||
"activity.just_now": "just now",
|
||
"activity.hours_ago": "{count}h ago",
|
||
"activity.filter_rewards": "Rewards",
|
||
"activity.filter_chores": "Chores",
|
||
"activity.filter_aria_label": "Filter activity by type",
|
||
"activity.filter_all": "All",
|
||
"activity.filter_adjustments": "Adjustments",
|
||
"activity.feed_end": "— end of feed —",
|
||
"activity.lost": "lost",
|
||
"activity.minutes_ago": "{count}m ago",
|
||
"activity.no_activity_yet": "No activity yet",
|
||
"activity.no_events_for_filter": "No matching events",
|
||
"activity.points_manually": "points manually",
|
||
"activity.reason_allocated_to_pool": "Allocated to pool: {name}",
|
||
"activity.reason_admin_adjustment": "Manual adjustment",
|
||
"activity.reason_bonus": "Bonus: {name}",
|
||
"activity.reason_penalty": "Penalty: {name}",
|
||
"activity.reason_perfect_week": "Perfect week bonus!",
|
||
"activity.reason_pool_refund_assignment_changed": "Pool refund (reward assignment changed): {name}",
|
||
"activity.reason_pool_refund_cost_reduced": "Pool refund (reward cost reduced): {name}",
|
||
"activity.reason_pool_refund_deleted": "Pool refund (reward deleted): {name}",
|
||
"activity.reason_pool_refund_expired": "Pool refund (reward expired): {name}",
|
||
"activity.reason_pool_refund_funding_changed": "Pool refund (reward funding changed): {name}",
|
||
"activity.reason_pool_refund_sold_out": "Pool refund (reward sold out): {name}",
|
||
"activity.reason_streak_milestone": "Streak milestone bonus ({days} day streak!)",
|
||
"activity.reason_streak_freeze_used": "Streak freeze used ({date})",
|
||
"activity.reason_streak_freeze_earned": "Streak freeze earned ({days} day streak!)",
|
||
"activity.reason_streak_freeze_adjusted": "Streak freezes adjusted ({delta})",
|
||
"activity.reason_streak_freeze_reversed": "Streak freeze taken back (completion undone)",
|
||
"activity.reason_weekend_bonus": "Weekend bonus (×{multiplier})",
|
||
"activity.reason_wish_savings": "Saved towards wish: {name}",
|
||
"activity.reason_wish_taken_back": "Taken back from wish: {name}",
|
||
"activity.reason_wish_refund_declined": "Wish declined, savings returned: {name}",
|
||
"activity.reason_wish_refund_removed": "Wish removed, savings returned: {name}",
|
||
"activity.reason_wish_pledge": "{who} pledged {points} towards {name}",
|
||
"activity.reason_wish_pledge_removed": "Pledge from {who} ({points}) removed: {name}",
|
||
"activity.reason_wish_pledge_voided": "Pledge from {who} ({points}) returned: {name}",
|
||
"activity.reason_wish_redeemed": "Wish redeemed: {name}",
|
||
"activity.received": "received",
|
||
"activity.redeemed": "redeemed",
|
||
"activity.spent": "spent",
|
||
"activity.try_different_filter": "Try a different filter",
|
||
"activity.unknown_child": "Unknown",
|
||
"approvals.all_caught_up": "All caught up!",
|
||
"approvals.approve": "Approve",
|
||
"approvals.approve_all": "Approve all",
|
||
"approvals.child_said": "They said",
|
||
"approvals.suggested": "Suggested: {points}",
|
||
"approvals.award_label": "Award",
|
||
"approvals.rating_label": "Quality rating",
|
||
"approvals.rating_star_title": "{count}★ — pays {percent}% of the points",
|
||
"approvals.approve_all_busy": "Approving…",
|
||
"approvals.approve_all_confirm": "Approve {count} pending chores?",
|
||
"approvals.card_description": "A card to manage pending chore approvals for TaskMate",
|
||
"approvals.card_name": "TaskMate Approvals",
|
||
"approvals.default_title": "Pending Approvals",
|
||
"approvals.editor.child_id": "Child ID (optional)",
|
||
"approvals.editor.child_id_helper": "Filter approvals to a specific child",
|
||
"approvals.editor.child_id_placeholder": "Leave empty to show all children",
|
||
"approvals.editor.entity_helper": "The pending approvals sensor entity",
|
||
"approvals.error_failed_service": "Failed to {service}: {message}",
|
||
"approvals.error_title": "TaskMate Error",
|
||
"approvals.no_pending_approvals": "No pending approvals",
|
||
"approvals.please_define_entity": "Please define an entity (pending_approvals sensor)",
|
||
"approvals.reject": "Reject",
|
||
"approvals.reward_claims_section": "Reward claims",
|
||
"approvals.mandatory_section": "Mandatory — needs review",
|
||
"approvals.apply_penalty": "Apply penalty",
|
||
"approvals.postpone": "Postpone",
|
||
"approvals.dismiss": "Dismiss",
|
||
"approvals.penalty_points": "Penalty: −{points} pts",
|
||
"approvals.no_penalty": "No penalty set",
|
||
"approvals.timed_duration": "{count} min",
|
||
"badge.criteria_and": "AND",
|
||
"badge.criteria_or": "OR",
|
||
"badge.criteria_best_streak": "Best Streak",
|
||
"badge.criteria_current_streak": "Current Streak",
|
||
"badge.criteria_first_chore": "First Chore",
|
||
"badge.criteria_first_reward": "First Reward",
|
||
"badge.criteria_perfect_weeks": "Perfect Weeks",
|
||
"badge.criteria_total_chores": "Total Chores",
|
||
"badge.criteria_total_points": "Total Points",
|
||
"badge.criteria_total_rewards": "Total Rewards",
|
||
"badge.desc_1000_points": "Earn 1000 lifetime points",
|
||
"badge.desc_100_chores": "Complete 100 chores",
|
||
"badge.desc_100_points": "Earn 100 lifetime points",
|
||
"badge.desc_10_chores": "Complete 10 chores",
|
||
"badge.desc_10_perfect_weeks": "Achieve 10 perfect weeks",
|
||
"badge.desc_30_day_streak": "Complete chores 30 days in a row",
|
||
"badge.desc_3_day_streak": "Complete chores 3 days in a row",
|
||
"badge.desc_5000_points": "Earn 5000 lifetime points",
|
||
"badge.desc_500_points": "Earn 500 lifetime points",
|
||
"badge.desc_50_chores": "Complete 50 chores",
|
||
"badge.desc_5_perfect_weeks": "Achieve 5 perfect weeks",
|
||
"badge.desc_7_day_streak": "Complete chores 7 days in a row",
|
||
"badge.desc_first_chore": "Complete your very first chore",
|
||
"badge.desc_first_perfect_week": "Complete a perfect week",
|
||
"badge.desc_first_reward": "Claim your first reward",
|
||
"badge.desc_birthday": "Celebrate your birthday",
|
||
"badge.earned_date": "Earned {date}",
|
||
"badge.manual_award_only": "Manual award only",
|
||
"badge.metric_best_streak": "Best streak",
|
||
"badge.metric_current_streak": "Current streak",
|
||
"badge.metric_first_chore": "First chore (bool)",
|
||
"badge.metric_first_reward": "First reward (bool)",
|
||
"badge.metric_perfect_weeks": "Perfect weeks",
|
||
"badge.metric_total_chores": "Total chores",
|
||
"badge.metric_total_points": "Total points",
|
||
"badge.metric_total_rewards": "Total rewards",
|
||
"badge.metric_birthday": "Birthday today (bool)",
|
||
"badge.name_1000_points": "1000 Points",
|
||
"badge.name_100_chores": "100 Chores Completed",
|
||
"badge.name_100_points": "100 Points",
|
||
"badge.name_10_chores": "10 Chores Completed",
|
||
"badge.name_10_perfect_weeks": "10 Perfect Weeks",
|
||
"badge.name_30_day_streak": "30-Day Streak",
|
||
"badge.name_3_day_streak": "3-Day Streak",
|
||
"badge.name_5000_points": "5000 Points",
|
||
"badge.name_500_points": "500 Points",
|
||
"badge.name_50_chores": "50 Chores Completed",
|
||
"badge.name_5_perfect_weeks": "5 Perfect Weeks",
|
||
"badge.name_7_day_streak": "7-Day Streak",
|
||
"badge.name_first_chore": "First Chore",
|
||
"badge.name_first_perfect_week": "First Perfect Week",
|
||
"badge.name_first_reward": "First Reward",
|
||
"badge.name_birthday": "Birthday",
|
||
"badge.source_auto": "AUTO",
|
||
"badge.source_manual": "MANUAL",
|
||
"badge.source_silent": "SILENT",
|
||
"badge.tier_bronze": "Bronze",
|
||
"badge.tier_gold": "Gold",
|
||
"badge.tier_platinum": "Platinum",
|
||
"badge.tier_silver": "Silver",
|
||
"badges.all_tiers": "All tiers",
|
||
"badges.count_label": "{earned} of {total} earned",
|
||
"badges.count_label_latest": "{earned} of {total} earned · Latest: {latest}",
|
||
"badges.default_title": "Badges",
|
||
"badges.editor_help": "Configure via YAML: set entity to your badges sensor (e.g. sensor.taskmate_badges_mia).",
|
||
"badges.entity_not_found": "{entity} not found",
|
||
"badges.label": "Badges",
|
||
"badges.next_up": "Next up",
|
||
"badges.one_more": "One more and it's yours!",
|
||
"badges.title_with_name": "{name}'s Badges",
|
||
"bonuses.add_bonus": "Add Bonus",
|
||
"bonuses.applying_to": "Applying to {childName} — current balance: {points} {pointsName}",
|
||
"bonuses.btn_delete_title": "Delete",
|
||
"bonuses.btn_edit_title": "Edit",
|
||
"bonuses.card_description": "Apply point-awarding bonuses to children",
|
||
"bonuses.card_name": "TaskMate Bonuses",
|
||
"bonuses.default_title": "Bonuses",
|
||
"bonuses.editor.manage_note": "Add, edit, and delete bonus templates directly on the card itself — tap the pencil icon in the card header. This editor only controls the card's appearance.",
|
||
"bonuses.empty_sub": "Tap the pencil icon to add bonuses",
|
||
"bonuses.empty_title": "No bonuses yet",
|
||
"bonuses.form_description_label": "Description (optional)",
|
||
"bonuses.form_description_placeholder": "Short description",
|
||
"bonuses.form_icon_label": "Icon (MDI)",
|
||
"bonuses.form_name_label": "Name",
|
||
"bonuses.form_name_placeholder": "e.g. Tidied bedroom",
|
||
"bonuses.form_points_label": "Points",
|
||
"bonuses.manage_title": "Manage bonuses",
|
||
"bonuses.new_bonus": "New Bonus",
|
||
"bonuses.toast_add_failed": "Failed to add bonus",
|
||
"bonuses.toast_applied": "+{points} {pointsName} to {childName}",
|
||
"bonuses.toast_apply_failed": "Failed to apply bonus",
|
||
"bonuses.toast_delete_failed": "Failed to delete bonus",
|
||
"bonuses.toast_save_failed": "Failed to save changes",
|
||
"bonuses.toast_saved": "Bonus saved",
|
||
"calendar.card_description": "One-day view of chores assigned to each child",
|
||
"calendar.card_name": "TaskMate Calendar",
|
||
"calendar.child_summary": "{done} of {total} done",
|
||
"calendar.default_title": "Task Calendar",
|
||
"calendar.editor.child_helper": "Show the calendar for a specific child only",
|
||
"calendar.editor.title": "Title",
|
||
"calendar.error.entity_required": "Please define an entity",
|
||
"calendar.legend_due": "Due",
|
||
"calendar.next_day": "Next day",
|
||
"calendar.no_chores_today": "No chores for this day",
|
||
"calendar.prev_day": "Previous day",
|
||
"calendar.rotating": "Rotating assignment",
|
||
"child.afternoon_chores": "Afternoon Chores",
|
||
"child.all_done": "All Done!",
|
||
"child.bonus_label": "BONUS",
|
||
"child.bonus_tooltip": "Bonus: {name}",
|
||
"child.card_description": "A fun, kid-friendly card for children to complete their chores!",
|
||
"child.card_name": "TaskMate Child Card",
|
||
"child.celebration_message": "You did it! Keep up the great work!",
|
||
"child.celebration_title": "AWESOME!",
|
||
"child.on_vacation": "On a break — chores are paused 🌴",
|
||
"birthday.banner": "Happy birthday, {name}! 🎂",
|
||
"birthday.banner_age": "Happy birthday, {name} — {age} today! 🎂",
|
||
"birthday.multiplier": "Every chore pays {multiplier}× today",
|
||
"birthday.day_off": "Day off — only mandatory chores today",
|
||
"child.child_not_found": "Child not found: {child_id}",
|
||
"child.chore_locked_until": "Available at {time}",
|
||
"child.chore_locked_until_generic": "Available later",
|
||
"child.chores_reset_hours_mins": "Chores reset in {hours}h {mins}m",
|
||
"child.chores_reset_mins": "Chores reset in {mins}m",
|
||
"child.chores_resetting_soon": "Chores resetting soon!",
|
||
"child.click_to_complete": "Click to complete",
|
||
"child.click_to_undo": "Click to undo",
|
||
"child.claimed_by_another": "Already done by {name}",
|
||
"child.claimed_by_another_generic": "Already claimed today",
|
||
"child.difficulty_easy": "Easy",
|
||
"child.difficulty_medium": "Medium",
|
||
"child.difficulty_hard": "Hard",
|
||
"child.mandatory": "Mandatory",
|
||
"child.swap_section_title": "Take over a chore",
|
||
"child.swap_request": "Request",
|
||
"child.swap_requested": "Requested",
|
||
"child.photo_needed": "Photo needed",
|
||
"child.photo_required_title": "Add a photo",
|
||
"child.extra_title": "What did you do?",
|
||
"child.extra_hint": "Tell them what you did, and what you think it's worth.",
|
||
"child.extra_desc_placeholder": "I tidied the porch",
|
||
"child.extra_points_label": "Points you think it's worth",
|
||
"child.extra_submit": "Send",
|
||
"child.extra_needs_desc": "Write what you did first.",
|
||
"child.open_ended_tag": "Describe it",
|
||
"child.weekly_target_done": "Done for this week",
|
||
"child.weekly_target_progress": "{done}/{target} this week",
|
||
"child.team_progress": "{joined} / {size} joined",
|
||
"child.team_you_joined": "You're in",
|
||
"child.team_join": "Join",
|
||
"child.team_leave": "Leave",
|
||
"child.team_tap_to_join": "Tap to join the team",
|
||
"child.team_tap_to_leave": "Tap to leave the team",
|
||
"child.photo_take": "Take a photo",
|
||
"child.photo_hint": "Show your finished chore",
|
||
"child.photo_retake": "Retake",
|
||
"child.photo_confirm": "Confirm",
|
||
"child.photo_uploading": "Uploading photo…",
|
||
"child.photo_cancel": "Cancel",
|
||
"child.photo_not_image": "That file isn't an image. Please try again.",
|
||
"child.photo_process_failed": "Couldn't read that photo. Please try again.",
|
||
"child.photo_upload_failed": "Upload failed. Check your connection and try again.",
|
||
"child.done": "Done",
|
||
"child.editor.child": "Child",
|
||
"child.editor.child_helper": "Which child is this card for?",
|
||
"child.editor.chores_not_due_today": "Chores Not Due Today",
|
||
"child.editor.dependency_mode": "Chores Waiting On Another",
|
||
"child.editor.dependency_hide": "Hide — don't show until unlocked",
|
||
"child.editor.dependency_dim": "Dim — show greyed out, non-interactive",
|
||
"child.editor.dependency_show": "Show — show normally (still not tappable)",
|
||
"child.editor.dependency_helper": "What to show when a chore depends on another that isn't approved yet today",
|
||
"child.blocked_by_dependency": "Do {chores} first",
|
||
"child.parent": "Parent",
|
||
"child.editor.due_days_dim": "Dim — show greyed out, non-interactive",
|
||
"child.editor.due_days_helper": "Applies to chores with due_days set when today isn't scheduled",
|
||
"child.editor.due_days_hide": "Hide — don't show",
|
||
"child.editor.due_days_show": "Show — show normally regardless",
|
||
"child.editor.first_come_dim": "Dim — show greyed out for everyone except the child who completed it",
|
||
"child.editor.first_come_helper": "What to show to the rest of the pool once a first-come chore has been claimed by one child",
|
||
"child.editor.first_come_hide": "Hide — remove once claimed (default, matches prior behavior)",
|
||
"child.editor.first_come_show": "Show — keep fully visible for everyone (still not tappable once claimed)",
|
||
"child.editor.first_come_when_completed": "First-Come Chores — When Claimed",
|
||
"child.editor.elapsed_dim": "Dim — show greyed out, non-interactive",
|
||
"child.editor.elapsed_helper": "What to show when a morning/afternoon/evening/night chore wasn't completed and that time has passed",
|
||
"child.editor.elapsed_hide": "Hide — don't show",
|
||
"child.editor.elapsed_show": "Show — show normally regardless",
|
||
"child.editor.missed_time_chores": "Missed Time-of-Day Chores",
|
||
"child.editor.recurrence_dim": "Dim — show greyed out, non-interactive",
|
||
"child.editor.recurrence_helper": "What to show when a recurring chore has been completed and the window hasn't reset yet",
|
||
"child.editor.recurrence_hide": "Hide — don't show until available again",
|
||
"child.editor.recurrence_show": "Show — show normally (still not tappable)",
|
||
"child.editor.recurring_when_completed": "Recurring Chores — When Completed",
|
||
"child.editor.select_child": "Select a child...",
|
||
"child.editor.show_countdown": "Show reset countdown beside \"Today's Chores\"",
|
||
"child.editor.show_debug": "Show debug panel",
|
||
"child.editor.show_description": "Show chore description",
|
||
"child.editor.time_category": "Time Category",
|
||
"child.editor.time_category_afternoon": "Afternoon Chores",
|
||
"child.editor.time_category_all": "Today's Chores (All)",
|
||
"child.editor.time_category_current": "Current Time Period (Live)",
|
||
"child.editor.time_category_anytime": "Today's Chores (Anytime)",
|
||
"child.editor.time_category_evening": "Evening Chores",
|
||
"child.editor.time_category_helper": "Which time of day to show chores for — also sets the card title",
|
||
"child.editor.time_category_morning": "Morning Chores",
|
||
"child.editor.time_category_night": "Night Chores",
|
||
"child.error_complete": "Something went wrong: {message}",
|
||
"child.error_title": "Oops!",
|
||
"child.error_undo": "Couldn't undo: {message}",
|
||
"child.undo_not_allowed": "Only a parent can undo a completed chore.",
|
||
"child.undo_named": "Undo {name}",
|
||
"child.undo_recent": "Undo a chore you just did",
|
||
"child.evening_chores": "Evening Chores",
|
||
"child.morning_chores": "Morning Chores",
|
||
"child.night_chores": "Night Chores",
|
||
"child.no_chores_right_now": "No chores right now. Great job!",
|
||
"child.not_scheduled_for_today": "Not scheduled for today",
|
||
"child.pause": "Pause",
|
||
"child.paused": "Paused",
|
||
"child.please_define_child_id": "Please define a child_id",
|
||
"child.please_define_entity": "Please define an entity (taskmate overview sensor)",
|
||
"child.pts_per_min": "pts/min",
|
||
"child.pts_per_n_min": "pts/{count} min",
|
||
"child.recurring": "Recurring",
|
||
"child.resume": "Resume",
|
||
"child.start": "Start",
|
||
"child.time_has_passed": "Time has passed for this chore",
|
||
"child.timed_cap_label": "{used} / {max} min",
|
||
"child.todays_chores": "Today's Chores",
|
||
"common.afternoon": "Afternoon",
|
||
"common.all": "All",
|
||
"common.all_children": "All Children",
|
||
"common.anytime": "Anytime",
|
||
"common.apply": "Apply",
|
||
"common.approve": "Approve",
|
||
"common.approved": "Approved",
|
||
"common.cancel": "Cancel",
|
||
"common.close": "Close",
|
||
"common.chores": "Chores",
|
||
"common.complete_on_behalf": "Complete",
|
||
"common.complete_on_behalf_all_done": "All chores done today",
|
||
"common.complete_on_behalf_heading": "Outstanding today",
|
||
"common.complete_on_behalf_tooltip": "Complete for {name}",
|
||
"common.d_streak": "{count}d streak",
|
||
"common.day_streak": "day streak",
|
||
"common.default": "Default",
|
||
"common.editor.card_title": "Card Title",
|
||
"common.editor.filter_by_child": "Filter by Child (optional)",
|
||
"common.editor.filter_by_child_all": "All Children",
|
||
"common.editor.header_colour": "Header Colour",
|
||
"common.editor.header_colour_helper": "Card header background colour",
|
||
"common.editor.overview_entity": "Overview Entity",
|
||
"common.editor.overview_entity_helper": "The TaskMate overview sensor entity",
|
||
"common.entity": "Entity",
|
||
"common.entity_not_found": "Entity not found: {entity}",
|
||
"common.error": "Error",
|
||
"common.evening": "Evening",
|
||
"common.goal": "Goal",
|
||
"common.morning": "Morning",
|
||
"common.night": "Night",
|
||
"common.no_children": "No children found",
|
||
"common.no_chores_today": "No chores today",
|
||
"common.pending": "Pending",
|
||
"common.please_define_entity": "Please define an entity",
|
||
"common.points": "Points",
|
||
"common.reject": "Reject",
|
||
"common.rejected": "Rejected",
|
||
"reject.title": "Reject “{name}”",
|
||
"reject.reason_label": "Why? (optional)",
|
||
"reject.reason_placeholder": "Tell them what to fix…",
|
||
"reject.reason_hint": "Shown to the child. Leave it empty to reject without a reason.",
|
||
"reject.chip_not_finished": "Not finished",
|
||
"reject.chip_redo": "Needs redoing",
|
||
"reject.chip_not_today": "Not today",
|
||
"reject.confirm": "Reject",
|
||
"child.rejected_note": "Sent back: {reason}",
|
||
"rewards.rejected_note": "Not approved: {reason}",
|
||
"activity.rejected_reason": "Reason: {reason}",
|
||
"notification.item_rejected.name": "Chore or reward sent back",
|
||
"notification.item_rejected.description": "Tells a child when a parent rejects their chore or reward claim, with the reason when one was given. Off by default.",
|
||
"inspection.coming_title": "Inspection coming!",
|
||
"inspection.coming_sub": "A grown-up will check {name} in the next {time}. Keep it looking great for +{bonus} {points_name}!",
|
||
"inspection.passed_title": "Inspection passed! +{bonus} {points_name}",
|
||
"inspection.passed_sub": "{name} looked great",
|
||
"inspection.passed_sub_note": "{name} looked great: “{note}”",
|
||
"inspection.redo_title": "{name} needs another go",
|
||
"inspection.redo_sub": "You keep your {points} {points_name}. Finish it again and tick it off.",
|
||
"inspection.nope_title": "Not this time",
|
||
"inspection.nope_sub": "{name} didn't pass the spot-check. No points lost.",
|
||
"inspection.tag_open": "Inspection",
|
||
"inspection.tag_passed": "Passed +{bonus}",
|
||
"inspection.tag_redo": "Redo",
|
||
"inspection.tag_failed": "Inspected",
|
||
"inspection.celebrate_title": "Inspection passed!",
|
||
"inspection.celebrate_sub": "{name} looked amazing",
|
||
"inspection.celebrate_ok": "Yay!",
|
||
"activity.inspection_started": "Inspection started",
|
||
"activity.inspection_passed": "Inspection passed",
|
||
"activity.inspection_failed": "Inspection: not this time",
|
||
"activity.inspection_redo": "Sent back to redo",
|
||
"activity.reason_inspection_passed": "Inspection passed: {name}",
|
||
"notification.inspection_started.name": "Inspection coming",
|
||
"notification.inspection_started.description": "Tells a child a parent will inspect one of their finished chores, when the child is told about it. Off by default.",
|
||
"notification.inspection_passed.name": "Inspection passed",
|
||
"notification.inspection_passed.description": "Tells a child their chore passed a surprise inspection, with the bonus and the parent's note. Off by default.",
|
||
"notification.inspection_reminder.name": "Inspection closing soon",
|
||
"notification.inspection_reminder.description": "Reminds parents 30 minutes before an undecided surprise inspection closes quietly.",
|
||
"panel.insp_flag_tooltip": "Start an inspection",
|
||
"panel.insp_start_title": "Start an inspection",
|
||
"panel.insp_pass_title": "Pass the inspection",
|
||
"panel.insp_fail_title": "Didn't pass",
|
||
"panel.insp_ctx": "Approved {time} · earned {points} {points_name}",
|
||
"panel.insp_window_label": "Check it within",
|
||
"panel.insp_window_1h": "1 hour",
|
||
"panel.insp_window_2h": "2 hours",
|
||
"panel.insp_window_4h": "4 hours",
|
||
"panel.insp_window_bed": "Until {time}",
|
||
"panel.insp_window_bed_soon": "Bedtime ({bedtime}) is less than {minutes} minutes away, so this closes at {time} instead.",
|
||
"panel.insp_bonus_label": "Bonus if it passes",
|
||
"panel.insp_bonus": "Bonus",
|
||
"panel.insp_tell_label": "Tell {name} now",
|
||
"panel.insp_tell_hint": "Shows \"Inspection coming\" on {name}'s card. Turn off for a secret check.",
|
||
"panel.insp_start_btn": "Start inspection",
|
||
"panel.insp_note_pass_label": "Note for {name} (optional)",
|
||
"panel.insp_note_pass_placeholder": "Brilliant job, it looks perfect!",
|
||
"panel.insp_pass_btn": "Pass · +{bonus}",
|
||
"panel.insp_fail_note_label": "Just note it",
|
||
"panel.insp_fail_note_hint": "No bonus. {name} keeps the {points} {points_name}. It shows as \"didn't pass\" in activity.",
|
||
"panel.insp_fail_redo_label": "Send it back to redo",
|
||
"panel.insp_fail_redo_hint": "It goes back on {name}'s card as not done for today. The {points} {points_name} are kept. Redoing it goes through approval as usual and earns nothing extra.",
|
||
"panel.insp_fail_redo_unavailable": "Only a regular chore finished today can be sent back.",
|
||
"panel.insp_fail_fix_label": "What needs fixing (shown to {name})",
|
||
"panel.insp_fail_no_penalty": "No points are taken off. To take points, apply a penalty separately.",
|
||
"panel.insp_fail_save": "Save",
|
||
"panel.insp_fail_send_back": "Send back",
|
||
"panel.insp_needs_line": "Inspect {child}'s {chore}",
|
||
"panel.insp_needs_meta": "bonus +{bonus} if it passes · closes in {time}",
|
||
"panel.insp_told": "{name} has been told",
|
||
"panel.insp_secret": "secret",
|
||
"panel.insp_pass": "Pass",
|
||
"panel.insp_fail": "Fail",
|
||
"panel.insp_cancel": "Cancel inspection",
|
||
"panel.insp_cancel_confirm": "Cancel this inspection? No bonus is paid and the chore can be inspected again.",
|
||
"panel.insp_tag_open": "Inspecting · {time}",
|
||
"panel.insp_tag_passed": "Passed · +{bonus}",
|
||
"panel.insp_tag_redo": "Sent back to redo",
|
||
"panel.insp_tag_failed": "Inspected · didn't pass",
|
||
"panel.insp_tag_expired": "Inspection closed",
|
||
"panel.insp_event_started": "Inspection started: {chore}",
|
||
"panel.insp_event_passed": "Inspection passed: {chore}",
|
||
"panel.insp_event_failed": "Inspection didn't pass: {chore}",
|
||
"panel.insp_event_redo": "Sent back to redo: {chore}",
|
||
"panel.insp_event_expired": "Inspection closed without a check: {chore}",
|
||
"panel.insp_redo_queue": "redo after an inspection, earns nothing extra",
|
||
"panel.insp_toast_started": "Inspection started.",
|
||
"panel.insp_toast_started_told": "Inspection started. {name} has been told.",
|
||
"panel.insp_toast_passed": "Passed. {name} gets +{bonus}",
|
||
"panel.insp_toast_noted": "Noted. No points taken.",
|
||
"panel.insp_toast_sent_back": "Sent back to {name} to redo",
|
||
"panel.insp_toast_cancelled": "Inspection cancelled",
|
||
"panel.insp_toast_failed": "Couldn't update the inspection: {error}",
|
||
"panel.settings_insp_title": "Surprise inspections",
|
||
"panel.settings_insp_hint": "Spot-check a recently approved chore. A pass pays a bonus.",
|
||
"panel.settings_insp_enabled_label": "Inspections",
|
||
"panel.settings_insp_enabled_hint": "Shows a magnifier on chores approved in the last 24 hours, in Today and Activity.",
|
||
"panel.settings_insp_bonus_label": "Bonus for a pass",
|
||
"panel.settings_insp_bonus_hint": "Can be changed for each inspection.",
|
||
"panel.settings_insp_window_label": "Time to check",
|
||
"panel.settings_insp_window_hint": "How long you have to pass or fail it. Unchecked inspections close with no bonus.",
|
||
"panel.settings_insp_bedtime_label": "Bedtime",
|
||
"panel.settings_insp_bedtime_hint": "Used by \"Until bedtime\". Less than 30 minutes before it, the window is an hour.",
|
||
"panel.settings_insp_fail_label": "If it fails",
|
||
"panel.settings_insp_fail_hint": "No points are taken either way.",
|
||
"panel.settings_insp_fail_note": "Just note it",
|
||
"panel.settings_insp_fail_redo": "Send it back to redo",
|
||
"panel.settings_insp_fail_ask": "Ask me each time",
|
||
"panel.settings_insp_tell_label": "Tell the child when it starts",
|
||
"panel.settings_insp_tell_hint": "Shows \"Inspection coming\" on their card.",
|
||
"panel.settings_insp_pick_label": "Random daily pick",
|
||
"panel.settings_insp_pick_hint": "TaskMate picks one approved chore for you to inspect. It shows up in Needs you.",
|
||
"panel.settings_insp_pick_when_label": "When and how often",
|
||
"panel.settings_insp_pick_when_hint": "Same idea as the surprise bonus: a daily time and a chance.",
|
||
"panel.settings_insp_pick_time": "Time",
|
||
"panel.settings_insp_pick_chance": "Chance %",
|
||
"panel.settings_insp_pick_children_label": "Children",
|
||
"panel.settings_insp_pick_children_hint": "Only chores approved today can be picked, and never the same child two days running. None ticked means every child.",
|
||
"common.reset": "Reset",
|
||
"common.save": "Save",
|
||
"common.stars": "Stars",
|
||
"common.this_week": "this week",
|
||
"common.title": "Title",
|
||
"common.today": "Today",
|
||
"common.total": "total",
|
||
"common.unavailable": "TaskMate is unavailable",
|
||
"common.unknown": "Unknown",
|
||
"common.yesterday": "Yesterday",
|
||
"dashboard.btn_add_points_title": "Add {amount} {pointsName}",
|
||
"dashboard.btn_remove_points_title": "Remove {amount} {pointsName}",
|
||
"dashboard.card_description": "Unified parent view with approvals, child progress, and quick point controls",
|
||
"dashboard.card_name": "TaskMate Parent Dashboard",
|
||
"dashboard.default_title": "Parent Dashboard",
|
||
"dashboard.editor.entity_helper": "The TaskMate overview sensor",
|
||
"dashboard.editor.entity_label": "Overview Entity",
|
||
"dashboard.editor.header_colour_helper": "Card header background colour",
|
||
"dashboard.editor.header_colour_label": "Header Colour",
|
||
"dashboard.editor.quick_points_helper": "How many points the +/- buttons add or remove",
|
||
"dashboard.editor.quick_points_label": "Quick Points Amount",
|
||
"dashboard.editor.show_claims": "Show Reward Claims tab",
|
||
"dashboard.editor.title_label": "Card Title",
|
||
"dashboard.empty_approvals": "All caught up! No pending approvals.",
|
||
"dashboard.empty_claims": "No pending reward claims.",
|
||
"dashboard.empty_no_children": "No children found",
|
||
"dashboard.empty_rotation": "No rotating chores configured",
|
||
"dashboard.paused_tag": "PAUSED",
|
||
"dashboard.rotation_skip_confirm": "Skip today's assignee for this chore?",
|
||
"dashboard.rotation_skip_hint": "Skip current child and move to the next in rotation (today only)",
|
||
"dashboard.rotation_unassigned": "Nobody",
|
||
"dashboard.tab_approvals": "Approvals",
|
||
"dashboard.tab_claims": "Claims",
|
||
"dashboard.tab_overview": "Overview",
|
||
"dashboard.chores_done": "{done} / {total} chores done",
|
||
"dashboard.tab_points": "Points",
|
||
"dashboard.tab_rotation": "Rotation",
|
||
"graph.all_children": "All Children",
|
||
"graph.card_description": "Line graph tracking daily or cumulative points over time",
|
||
"graph.card_name": "TaskMate Points Graph",
|
||
"graph.career_growth": "Career",
|
||
"graph.daily": "Daily",
|
||
"graph.default_title": "Points Graph",
|
||
"graph.editor.child_filter_helper": "Show one child's line or all children together",
|
||
"graph.editor.days_helper": "Number of days to display (3–90)",
|
||
"graph.editor.days_to_show": "Days to show",
|
||
"graph.graph_error": "Graph error: {message}",
|
||
"graph.no_data_submessage": "Complete and approve chores to see the graph",
|
||
"graph.no_data_yet": "No data yet",
|
||
"graph.total": "Total",
|
||
"leaderboard.best_streak": "Best streak",
|
||
"leaderboard.best_streak_value": "{count} days",
|
||
"leaderboard.card_description": "Multi-child competitive ranking by points, streak, or weekly activity",
|
||
"leaderboard.card_name": "TaskMate Leaderboard",
|
||
"leaderboard.career_label": "career",
|
||
"leaderboard.career_score": "Career Score",
|
||
"leaderboard.default_title": "Leaderboard",
|
||
"leaderboard.editor.entity_helper": "The TaskMate overview sensor",
|
||
"leaderboard.editor.entity_label": "Overview Entity",
|
||
"leaderboard.editor.header_colour_helper": "Card header background colour",
|
||
"leaderboard.editor.header_colour_label": "Header Colour",
|
||
"leaderboard.editor.rank_by_helper": "What to rank children by",
|
||
"leaderboard.editor.rank_by_label": "Rank by",
|
||
"leaderboard.editor.show_career": "Show career score in sub-stats",
|
||
"leaderboard.editor.show_streak": "Show streak in sub-stats",
|
||
"leaderboard.editor.show_weekly": "Show weekly points in sub-stats",
|
||
"leaderboard.editor.sort_option_career": "Career Score",
|
||
"leaderboard.editor.sort_option_points": "All-time Points",
|
||
"leaderboard.editor.sort_option_streak": "Current Streak",
|
||
"leaderboard.editor.sort_option_weekly": "This Week's Points",
|
||
"leaderboard.editor.title_label": "Card Title",
|
||
"leaderboard.ordinal_4": "4th",
|
||
"leaderboard.ordinal_5": "5th",
|
||
"leaderboard.personal_bests": "Personal Bests",
|
||
"leaderboard.points_this_week": "Points this week",
|
||
"leaderboard.ranked_by": "Ranked by {period}",
|
||
"leaderboard.sort_all_time_points": "All-time Points",
|
||
"leaderboard.sort_career_score": "Career Score",
|
||
"leaderboard.sort_current_streak": "Current Streak",
|
||
"leaderboard.sort_this_week": "This Week",
|
||
"leaderboard.tie": "TIE",
|
||
"leaderboard.total_chores_completed": "Total chores completed",
|
||
"leaderboard.total_points_earned": "Total points earned",
|
||
"overview.card_description": "At-a-glance parent dashboard for all children",
|
||
"overview.card_name": "TaskMate Overview",
|
||
"overview.default_title": "TaskMate",
|
||
"overview.designed.action_required": "ACTION REQUIRED ●",
|
||
"overview.designed.approvals_waiting": "{count} approvals waiting",
|
||
"overview.designed.daily_completion": "DAILY COMPLETION",
|
||
"overview.designed.pending_review": "{count} PENDING REVIEW",
|
||
"overview.designed.progress_detail": "{done} / {total} chores · {pct}%",
|
||
"overview.designed.review": "Review",
|
||
"overview.designed.sub_cleanpro": "Updated just now",
|
||
"overview.designed.sub_console": "FAMILY · LIVE FEED",
|
||
"overview.designed.sub_playroom": "Look how busy we are!",
|
||
"overview.designed.tap_to_check": "Tap Approvals to check them off",
|
||
"overview.designed.todays_progress": "Today's progress",
|
||
"overview.designed.waiting_for_you": "{count} waiting for you",
|
||
"overview.editor.approvals_entity_helper": "sensor.pending_approvals — for accurate pending count",
|
||
"overview.editor.approvals_entity_label": "Approvals Entity (optional)",
|
||
"overview.editor.entity_helper": "The TaskMate overview sensor entity",
|
||
"overview.editor.entity_label": "Overview Entity",
|
||
"overview.editor.header_colour_helper": "Card header background colour",
|
||
"overview.editor.header_colour_label": "Header Colour",
|
||
"overview.editor.title_label": "Title",
|
||
"overview.footer_children": "Children",
|
||
"overview.footer_done_today": "Done Today",
|
||
"overview.footer_total_points": "Total {pointsName}",
|
||
"overview.pending_count": "{count} pending",
|
||
"panel.activity_approve": "Approve",
|
||
"panel.activity_approve_all": "Approve all",
|
||
"panel.activity_approve_all_busy": "Approving…",
|
||
"panel.activity_approve_all_confirm": "Approve {count} pending chores?",
|
||
"panel.activity_approve_all_done": "Approved {count} chores",
|
||
"panel.activity_audit_log": "Audit log",
|
||
"panel.audit_action": "Action",
|
||
"panel.audit_clear": "Clear log",
|
||
"panel.audit_clear_confirm": "Clear the entire audit log? This cannot be undone.",
|
||
"panel.audit_cleared": "Audit log cleared",
|
||
"panel.audit_empty": "No admin actions recorded yet.",
|
||
"panel.audit_hint": "Recent admin changes — who changed what, and when.",
|
||
"panel.audit_target": "Target",
|
||
"panel.audit_user": "User",
|
||
"panel.audit_when": "When",
|
||
"panel.activity_claimed_reward": "Claimed: {name}",
|
||
"panel.activity_claimed_text": "{child} claimed reward {reward}",
|
||
"panel.activity_completed_chore": "Completed: {name}",
|
||
"panel.activity_completed_text": "{child} completed {chore}",
|
||
"panel.activity_deleted_chore": "(deleted chore)",
|
||
"panel.activity_deleted_reward": "(deleted reward)",
|
||
"panel.activity_manual_addition": "Manual addition",
|
||
"panel.activity_manual_deduction": "Manual deduction",
|
||
"panel.activity_no_items": "No items waiting for review.",
|
||
"panel.activity_no_points_transactions": "No points transactions yet.",
|
||
"panel.activity_no_recent": "Nothing here yet — activity will appear as chores are completed and rewards claimed.",
|
||
"panel.activity_pending_all_clear": "All clear",
|
||
"panel.activity_pending_approvals": "Pending approvals",
|
||
"panel.activity_points": "points",
|
||
"panel.activity_recent": "Recent activity",
|
||
"panel.activity_reject": "Reject",
|
||
"panel.activity_table_child": "Child",
|
||
"panel.activity_table_points": "Points",
|
||
"panel.activity_table_reason": "Reason",
|
||
"panel.activity_undo": "Undo",
|
||
"panel.activity_undo_confirm": "Reverse this penalty/bonus? The points change will be undone.",
|
||
"panel.activity_undone": "Transaction undone",
|
||
"panel.activity_table_when": "When",
|
||
"panel.activity_title": "Activity",
|
||
"panel.activity_transaction_count": "{count} transaction",
|
||
"panel.activity_transaction_count_plural": "{count} transactions",
|
||
"panel.assign_alternating": "Alternating — rotate through children, one per day",
|
||
"panel.assign_alternating_short": "Alternating",
|
||
"panel.assign_balanced": "Balanced — split today's chores evenly across children",
|
||
"panel.assign_balanced_short": "Balanced",
|
||
"panel.assign_first_come": "First come — first child to finish wins; it hides for the rest",
|
||
"panel.assign_first_come_short": "First come",
|
||
"panel.assign_everyone": "Everyone — every assigned child sees the chore",
|
||
"panel.assign_random": "Random — pick one assigned child each day",
|
||
"panel.assign_random_short": "Random",
|
||
"panel.assign_unassigned": "Unassigned — no child sees this chore",
|
||
"panel.assign_unassigned_short": "Unassigned",
|
||
"panel.backup_export": "Export backup",
|
||
"panel.backup_exported": "Backup downloaded",
|
||
"panel.backup_hint": "Download a full backup of your TaskMate setup, or restore from one. Restore replaces everything — reload the integration afterwards so per-child entities refresh.",
|
||
"panel.backup_import": "Restore backup",
|
||
"panel.backup_import_bad_file": "That file isn't a valid TaskMate backup.",
|
||
"panel.backup_import_confirm": "Restore this backup? It REPLACES all current TaskMate data. This cannot be undone.",
|
||
"panel.backup_imported": "Backup restored — reload the integration to refresh entities.",
|
||
"panel.backup_title": "Backup & restore",
|
||
"panel.badge_add_btn": "+ Add custom badge",
|
||
"panel.badge_add_criterion_btn": "+ Add criterion",
|
||
"panel.badge_combinator_all": "Require all (AND)",
|
||
"panel.badge_combinator_any": "Require any (OR)",
|
||
"panel.badge_combinator_label": "When the badge has several criteria:",
|
||
"panel.badge_assigned_hint": "Leave all unselected for all children",
|
||
"panel.badge_assigned_label": "Assigned to",
|
||
"panel.badge_award_btn": "Award",
|
||
"panel.badge_award_select_child": "— Select child —",
|
||
"panel.badge_award_to_label": "Award to",
|
||
"panel.badge_bonus_label": "Point Bonus",
|
||
"panel.badge_builtin_hint": "Built-in — only point bonus, tier, assigned to, and notify can be changed",
|
||
"panel.badge_builtin_pill": "Built-in",
|
||
"panel.badge_cancel_btn": "Cancel",
|
||
"panel.badge_confirm_delete": "Delete badge \"{name}\"? This cannot be undone.",
|
||
"panel.badge_confirm_rebuild": "Run a silent retroactive badge sweep across all children? No notifications or point bonuses will be sent.",
|
||
"panel.badge_confirm_revoke": "Revoke badge \"{name}\"? Any point bonus will be reversed.",
|
||
"panel.badge_criteria_label": "Criteria — Award when ALL are true",
|
||
"panel.badge_delete_btn": "Delete",
|
||
"panel.badge_description_label": "Description",
|
||
"panel.badge_dialog_add_title": "Add Custom Badge",
|
||
"panel.badge_dialog_award_title": "Award \"{name}\"",
|
||
"panel.badge_dialog_edit_title": "Edit Badge — {name}",
|
||
"panel.badge_edit_btn": "Edit",
|
||
"panel.badge_empty_catalogue": "No built-in badges found.",
|
||
"panel.badge_empty_custom_desc": "Create your own badges with custom criteria or for manual awarding.",
|
||
"panel.badge_empty_custom_title": "No custom badges yet",
|
||
"panel.badge_empty_history": "No badges have been awarded yet.",
|
||
"panel.badge_icon_label": "Icon",
|
||
"panel.badge_name_label": "Name",
|
||
"panel.badge_no_criteria_hint": "No criteria — this badge will be manual-award only.",
|
||
"panel.badge_notify_label": "Notify on Earn",
|
||
"panel.badge_notify_no": "No",
|
||
"panel.badge_notify_yes": "Yes",
|
||
"panel.badge_rebuild_btn": "Rebuild Badges",
|
||
"panel.badge_rebuild_tooltip": "Re-evaluate all badges silently (no notifications)",
|
||
"panel.badge_remove_criterion_btn": "Remove",
|
||
"panel.badge_revoke_btn": "Revoke",
|
||
"panel.badge_save_btn": "Save badge",
|
||
"panel.badge_subtab_catalogue": "Catalogue ({count})",
|
||
"panel.badge_subtab_custom": "Custom ({count})",
|
||
"panel.badge_subtab_history": "History",
|
||
"panel.badge_tab_title": "Badges",
|
||
"panel.badge_table_badge": "Badge",
|
||
"panel.badge_table_bonus": "Bonus",
|
||
"panel.badge_table_child": "Child",
|
||
"panel.badge_table_criteria": "Criteria",
|
||
"panel.badge_table_enabled": "Enabled",
|
||
"panel.badge_table_source": "Source",
|
||
"panel.badge_table_tier": "Tier",
|
||
"panel.badge_table_when": "When",
|
||
"panel.badge_tier_label": "Tier",
|
||
"panel.badge_toggle_disable": "Disable",
|
||
"panel.badge_toggle_enable": "Enable",
|
||
"panel.bonus_apply_text": "Choose which child to award this bonus to (will add {points} points).",
|
||
"panel.bonus_empty_description": "Add a bonus to award points for going above and beyond.",
|
||
"panel.bonus_empty_title": "No bonuses yet",
|
||
"panel.bonus_points_label": "Points to award",
|
||
"panel.bonus_title": "Bonuses",
|
||
"panel.btn_activate_chore": "Activate chore",
|
||
"panel.btn_add_bonus": "+ Add bonus",
|
||
"panel.btn_add_bonus_subtask": "+ Add bonus sub-task",
|
||
"panel.btn_add_child": "+ Add child",
|
||
"panel.btn_add_chore": "+ Add chore",
|
||
"panel.btn_add_chore_template": "+ Add chore",
|
||
"panel.btn_add_group": "+ Add group",
|
||
"panel.btn_add_penalty": "+ Add penalty",
|
||
"panel.btn_add_reward": "+ Add reward",
|
||
"panel.btn_apply": "Apply…",
|
||
"panel.btn_back": "← Back",
|
||
"panel.btn_bulk_add": "Bulk add",
|
||
"panel.btn_cancel": "Cancel",
|
||
"panel.btn_close": "Close",
|
||
"panel.btn_create_chores": "Create chores",
|
||
"panel.btn_create_template": "Create Template",
|
||
"panel.btn_create_template_toolbar": "+ Create template",
|
||
"panel.btn_deactivate_chore": "Deactivate chore",
|
||
"panel.btn_delete": "Delete",
|
||
"panel.btn_edit": "Edit",
|
||
"panel.btn_clone_chore": "Duplicate",
|
||
"panel.btn_from_template": "Create from template",
|
||
"panel.btn_reorder_chores": "Reorder",
|
||
"panel.btn_retry": "Retry",
|
||
"panel.btn_review": "Review",
|
||
"panel.btn_save": "Save",
|
||
"panel.btn_save_as_template": "Save as template",
|
||
"panel.btn_save_changes": "Save Changes",
|
||
"panel.btn_save_order": "Save order",
|
||
"panel.btn_save_settings": "Save settings",
|
||
"panel.btn_save_template": "Save template",
|
||
"panel.btn_skip_chore": "Skip rotation (advance to next child)",
|
||
"panel.bulk_assigned_to": "Assigned to",
|
||
"panel.bulk_chore_names_hint": "All chores will share the settings below.",
|
||
"panel.bulk_chore_names_label": "Chore names (one per line, or comma-separated)",
|
||
"panel.bulk_chore_names_placeholder": "Make bed\nEmpty dishwasher\nFeed dog",
|
||
"panel.bulk_days_label": "Days of week (empty = every day)",
|
||
"panel.bulk_leave_empty_hint": "Leave empty to assign to all children.",
|
||
"panel.bulk_points_label": "Points (each)",
|
||
"panel.bulk_title": "Bulk add chores",
|
||
"panel.child_add_tile": "Add child",
|
||
"panel.child_availability_hint": "States <code>on</code>, <code>home</code>, <code>available</code>, <code>present</code>, <code>true</code> mean available. Leave blank to treat as always available.",
|
||
"panel.child_availability_label": "Availability sensor (optional)",
|
||
"panel.child_avatar_label": "Avatar",
|
||
"panel.child_busy_label": "Busy:",
|
||
"panel.child_invert_hint": "Turn on for calendar or schedule sensors where an active state means the child is busy.",
|
||
"panel.child_invert_label": "Invert logic (ON = unavailable)",
|
||
"panel.child_inverted": "(inverted)",
|
||
"panel.child_link_user_label": "Link to Home Assistant user (optional)",
|
||
"panel.child_link_user_hint": "When set, only this Home Assistant user (or an admin) can complete chores, claim rewards, or run timers as this child via service calls. Leave as \"Anyone\" for a shared family tablet.",
|
||
"panel.child_kiosk_pin_label": "Kiosk PIN",
|
||
"panel.child_kiosk_pin_hint": "Optional. 4 digits this child types on a shared kiosk tablet. Stored hashed, so it can't be read back — leave blank to keep the current PIN.",
|
||
"panel.child_kiosk_pin_set": "A PIN is set.",
|
||
"panel.child_kiosk_pin_remove": "Remove the kiosk PIN",
|
||
"panel.toast_kiosk_pin_invalid": "The kiosk PIN must be exactly 4 digits",
|
||
"panel.toast_kiosk_pin_failed": "Child saved, but the kiosk PIN wasn't: {error}",
|
||
"panel.child_birthday_label": "Birthday",
|
||
"panel.child_birthday_hint": "YYYY-MM-DD, or MM-DD to leave the age off. On the day: bonus points, a badge and a celebration. 29 Feb is celebrated on 28 Feb in non-leap years.",
|
||
"panel.child_link_user_none": "Anyone (shared / kiosk)",
|
||
"panel.child_name_label": "Name",
|
||
"panel.child_name_placeholder": "e.g. Malia",
|
||
"panel.child_no_availability": "No availability sensor",
|
||
"panel.child_stat_done": "Done",
|
||
"panel.child_stat_earned": "Earned",
|
||
"panel.child_title": "Children",
|
||
"panel.child_unavailability_hint": "A second sensor where <code>on</code>/<code>active</code> means the child is busy. Useful for school calendars. The child is available only when the availability sensor says available AND this sensor does not say busy.",
|
||
"panel.child_unavailability_label": "Unavailability sensor (optional)",
|
||
"panel.child_pause_streak_label": "Pause streak while away",
|
||
"panel.child_pause_streak_hint": "When this child's availability or unavailability sensor (which can be a <code>calendar.*</code> entity) reports them away, freeze their streak and hide their chores until they're back.",
|
||
"panel.child_presence_label": "Presence (for reminders)",
|
||
"panel.child_presence_hint": "A <code>person.*</code> or <code>device_tracker.*</code> entity. While it isn't <code>home</code>, this child's chore reminders and escalations wait, and they get one \"You're home\" nudge when they arrive instead. Only affects notifications — chores stay visible. Turn on <em>Arrived home</em> in Notifications to get the nudge.",
|
||
"panel.child_unnamed": "(unnamed)",
|
||
"panel.chore_advanced_bonus_subtasks": "Bonus sub-tasks (optional)",
|
||
"panel.chore_advanced_bonus_subtasks_hint": "Optional extra-credit tasks that unlock after the main chore is completed.",
|
||
"panel.chore_advanced_visibility": "Advanced — visibility & calendar publishing",
|
||
"panel.chore_approval_label": "Requires parent approval",
|
||
"panel.chore_assign_hint": "Leave empty to assign to <strong>all children</strong>.",
|
||
"panel.chore_assign_label": "Assigned to",
|
||
"panel.chore_assign_no_children": "Add some children first to assign chores to them.",
|
||
"panel.chore_assignment_mode_hint": "Everyone = all assigned children see it. Alternating = rotate one per day. Random = pick one daily. Balanced = split evenly across the day.",
|
||
"panel.chore_assignment_mode_label": "Assignment mode",
|
||
"panel.chore_calendar_hint": "Today's assignment will be added as a calendar event on each selected calendar.",
|
||
"panel.chore_calendar_label": "Publish to calendars (optional)",
|
||
"panel.chore_calendar_no_entities": "No calendar entities found in Home Assistant. Set one up first.",
|
||
"panel.chore_claim_allowance_hint": "Extra minutes after the time-of-day window ends during which the chore stays claimable. 0 = no grace. Night chores still cap at midnight.",
|
||
"panel.chore_claim_allowance_label": "Claim allowance (minutes)",
|
||
"panel.chore_completion_sound_label": "Completion sound",
|
||
"panel.chore_difficulty_label": "Difficulty",
|
||
"panel.difficulty_easy": "Easy",
|
||
"panel.difficulty_hard": "Hard",
|
||
"panel.difficulty_medium": "Medium",
|
||
"panel.chore_daily_cap_label": "Daily cap (minutes, 0 = unlimited)",
|
||
"panel.chore_daily_limit_label": "Daily limit",
|
||
"panel.chore_days_label": "Days of week (leave empty = every day)",
|
||
"panel.chore_weekly_target_pill": "{count}×/week",
|
||
"panel.chore_weekly_target_hint": "How many times a week this has to be done, on any of the chosen days. It stops being offered once the count is reached, and resets on Monday.",
|
||
"panel.chore_weekly_target_label": "Weekly target (0 = off)",
|
||
"panel.chore_team_section": "Teamwork (optional)",
|
||
"panel.chore_team_hint": "A teamwork chore only counts once this many different children have joined it. Each child's Done tap joins, and when the team is full it's submitted for all of them. Joins reset each day. Needs the \"Everyone\" assignment and can't be open-ended.",
|
||
"panel.chore_team_size_label": "Team size (0 = off)",
|
||
"panel.chore_team_points_label": "Team points",
|
||
"panel.chore_team_points_each": "Everyone gets the full points",
|
||
"panel.chore_team_points_split": "Split the points evenly (rounded down)",
|
||
"panel.chore_team_bonus_label": "Team bonus (per child)",
|
||
"panel.chore_team_pill": "Team of {count}",
|
||
"panel.chore_team_size_invalid": "Team size must be 0 (off) or between 2 and 10.",
|
||
"panel.chore_team_conflict": "A teamwork chore must be assigned to everyone — not first-come or a rotation — and can't be open-ended.",
|
||
"panel.chore_description_label": "Description (optional)",
|
||
"panel.chore_enabled_label": "Enabled",
|
||
"panel.chore_first_occurrence_label": "First occurrence",
|
||
"panel.chore_group_hint": "Member of task group: {name} ({policy}). Manage membership on the Groups tab.",
|
||
"panel.chore_name_label": "Name",
|
||
"panel.chore_order_title": "Chore Order",
|
||
"panel.chore_points_label": "Points",
|
||
"panel.chore_points_per_window_label": "Points per window",
|
||
"panel.chore_recurrence_day_hint": "e.g. monday — leave blank for any day",
|
||
"panel.chore_recurrence_day_label": "Day of week (weekly only)",
|
||
"panel.chore_recurrence_label": "Recurrence",
|
||
"panel.chore_recurrence_start_hint": "Anchor date — blank = today",
|
||
"panel.chore_recurrence_start_label": "Start date (every-2-days only)",
|
||
"panel.chore_require_availability": "Skip unavailable children",
|
||
"panel.chore_require_availability_hint": "Uses each child's availability sensor (set on their profile).",
|
||
"panel.chore_mandatory_label": "Mandatory chore",
|
||
"panel.chore_mandatory_hint": "If not done before its time period ends, the parent reviews it (apply penalty, postpone, or dismiss).",
|
||
"panel.chore_mandatory_penalty_label": "Penalty points if missed",
|
||
"panel.chore_mandatory_penalty_hint": "Points the parent can deduct if the chore is missed. 0 = no penalty option.",
|
||
"panel.chore_rotation_hint": "Alternating mode: permanently reorders the pool. Random/Balanced: only overrides today; tomorrow resumes normally.",
|
||
"panel.chore_rotation_label": "Start rotation with (optional)",
|
||
"panel.chore_rotation_no_override": "(no override)",
|
||
"panel.chore_schedule_mode_label": "Schedule mode",
|
||
"panel.chore_subtask_name_placeholder": "Sub-task name",
|
||
"panel.chore_subtask_points_placeholder": "Pts",
|
||
"panel.chore_table_approval": "Approval",
|
||
"panel.chore_table_assigned": "Assigned",
|
||
"panel.chore_table_current": "Current",
|
||
"panel.chore_table_name": "Name",
|
||
"panel.chore_table_period": "Period",
|
||
"panel.chore_table_points": "Points",
|
||
"panel.chore_table_schedule": "Schedule",
|
||
"panel.chore_task_type_label": "Task type",
|
||
"panel.chore_task_type_standard": "Standard — fixed points on completion",
|
||
"panel.chore_task_type_timed": "Timed — points per minute",
|
||
"panel.chore_time_category_label": "Time category",
|
||
"panel.chore_tip_rename": "Tip: double-click a chore name to rename it inline.",
|
||
"panel.chore_title": "Chores",
|
||
"panel.chore_vis_entity_hint": "Chore only shows when its state matches the rule below. Leave blank for always-show.",
|
||
"panel.chore_vis_entity_label": "Visibility entity (optional)",
|
||
"panel.chore_vis_operator_label": "Visibility operator",
|
||
"panel.chore_vis_value_hint": "e.g. \"on\", \"home\", \"30\"",
|
||
"panel.chore_vis_value_label": "Visibility value",
|
||
"panel.chore_window_minutes_label": "Window (minutes)",
|
||
"panel.common_all_children": "All children",
|
||
"panel.common_daily": "Daily",
|
||
"panel.common_disabled": "disabled",
|
||
"panel.common_name": "Name",
|
||
"panel.common_no": "No",
|
||
"panel.common_one_shot": "One-shot",
|
||
"panel.common_points": "Points",
|
||
"panel.common_yes": "Yes",
|
||
"panel.confirm_delete_bonus_extra": "",
|
||
"panel.confirm_delete_child_extra": "This also removes all of their completion history, reward claims, points transactions, and pool allocations. Chores assigned to them will be updated.",
|
||
"panel.confirm_delete_chore_extra": "This also removes the chore from any task groups it belonged to.",
|
||
"panel.confirm_delete_prompt": "Delete {kind} \"{name}\"?",
|
||
"panel.confirm_delete_reward_extra": "Any points children have pooled for this reward will be refunded to their balance.",
|
||
"panel.confirm_delete_suffix": "This cannot be undone.",
|
||
"panel.confirm_delete_template": "Delete template \"{name}\"? This cannot be undone.",
|
||
"panel.confirm_unsaved": "You have unsaved changes — discard them?",
|
||
"panel.day_fri": "Fri",
|
||
"panel.day_mon": "Mon",
|
||
"panel.day_sat": "Sat",
|
||
"panel.day_sun": "Sun",
|
||
"panel.day_thu": "Thu",
|
||
"panel.day_tue": "Tue",
|
||
"panel.day_wed": "Wed",
|
||
"panel.dialog_add_bonus": "Add bonus",
|
||
"panel.dialog_add_child": "Add child",
|
||
"panel.dialog_add_chore": "Add chore",
|
||
"panel.dialog_add_group": "Add task group",
|
||
"panel.dialog_add_penalty": "Add penalty",
|
||
"panel.dialog_add_reward": "Add reward",
|
||
"panel.dialog_apply_bonus": "Apply bonus: {name}",
|
||
"panel.dialog_apply_penalty": "Apply penalty: {name}",
|
||
"panel.dialog_edit_bonus": "Edit bonus",
|
||
"panel.dialog_edit_child": "Edit child",
|
||
"panel.dialog_edit_chore": "Edit chore",
|
||
"panel.chore_sec_basics": "Basics",
|
||
"panel.chore_sec_who": "Who does it",
|
||
"panel.chore_sec_when": "When",
|
||
"panel.chore_sec_checking": "Checking",
|
||
"panel.chore_sec_more": "More options",
|
||
"panel.dialog_edit_group": "Edit task group",
|
||
"panel.dialog_edit_penalty": "Edit penalty",
|
||
"panel.dialog_edit_reward": "Edit reward",
|
||
"panel.empty_children_copy": "Add your first child to get started.",
|
||
"panel.empty_children_title": "No children yet",
|
||
"panel.empty_chores_copy": "Add a chore — it'll show on the assigned children's cards.",
|
||
"panel.empty_chores_title": "No chores yet",
|
||
"panel.empty_groups_copy": "Create a group to make chores rotate together (e.g. all kitchen chores stay with one child each day).",
|
||
"panel.empty_groups_title": "No task groups yet",
|
||
"panel.empty_no_match": "No {kind} match \"{filter}\".",
|
||
"panel.empty_rewards_copy": "Add a reward children can spend their {points_name} on.",
|
||
"panel.empty_rewards_title": "No rewards yet",
|
||
"panel.empty_template_all_removed": "All chores removed — go back and pick a different template.",
|
||
"panel.child_age_group_label": "Age group",
|
||
"panel.child_age_group_none": "Not set",
|
||
"panel.child_age_group_hint": "Decides which chores the setup wizard suggests. Changes nothing else.",
|
||
"wizard.title": "Setup wizard",
|
||
"wizard.run_btn": "Run setup wizard",
|
||
"wizard.open_btn": "Open wizard",
|
||
"wizard.start_btn": "Start setup",
|
||
"wizard.add_child_myself": "Add a child myself",
|
||
"wizard.empty_title": "Set up your family in about three minutes",
|
||
"wizard.empty_copy": "Add your children and we'll suggest chores that suit their ages, plus a few rewards to work towards. Or add everything yourself from Children, Chores and Rewards.",
|
||
"wizard.settings_hint": "Add children, chores suggested for their ages and starter rewards in a few steps. Only adds, never changes what you have.",
|
||
"wizard.intro_existing": "Add children, pick chores suggested for their ages and a few rewards to work towards.",
|
||
"wizard.close_hint": "Close. You can reopen it from Settings.",
|
||
"wizard.skip": "Skip, I'll set it up myself",
|
||
"wizard.restore": "Restore a backup instead",
|
||
"wizard.back": "Back",
|
||
"wizard.step_of": "Step {n} of {total} · {name}",
|
||
"wizard.step_welcome": "Welcome",
|
||
"wizard.step_children": "Children",
|
||
"wizard.step_chores": "Chores",
|
||
"wizard.step_rewards": "Rewards",
|
||
"wizard.step_review": "Review",
|
||
"wizard.step_done": "Done",
|
||
"wizard.next_welcome": "Let's go",
|
||
"wizard.next_children": "Next: chores",
|
||
"wizard.next_chores": "Next: rewards",
|
||
"wizard.next_rewards": "Next: review",
|
||
"wizard.create": "Create everything",
|
||
"wizard.create_existing": "Add everything",
|
||
"wizard.creating": "Creating…",
|
||
"wizard.foot_will_add": "{name} will be added when you continue",
|
||
"wizard.existing_banner": "You already have {children}, {chores} and {rewards}. The wizard only adds: nothing you already have is changed or removed.",
|
||
"wizard.welcome_title": "Welcome to TaskMate",
|
||
"wizard.welcome_title_existing": "Add more with the setup wizard",
|
||
"wizard.welcome_copy": "Let's get your family going. Add your children, pick chores that suit their ages and choose a few rewards to work towards. It takes about three minutes, and you can change everything afterwards.",
|
||
"wizard.welcome_copy_existing": "Add children, pick chores suggested for their ages and a few rewards to work towards.",
|
||
"wizard.tile_children": "Names, ages and an avatar",
|
||
"wizard.tile_chores": "Suggestions that suit each age",
|
||
"wizard.tile_rewards": "Things to save up for",
|
||
"wizard.pname_question": "What should points be called?",
|
||
"wizard.pname_points": "Points",
|
||
"wizard.pname_stars": "Stars",
|
||
"wizard.pname_coins": "Coins",
|
||
"wizard.pname_gems": "Gems",
|
||
"wizard.pname_custom": "Custom…",
|
||
"wizard.pname_hint": "Shown on every card. You can change it later in Settings.",
|
||
"wizard.children_title": "Who's joining in?",
|
||
"wizard.children_copy": "Add each child. Their age decides which chores are suggested next, and a birthday also turns on birthday mode (bonus points on the day).",
|
||
"wizard.already_set_up": "Already set up",
|
||
"wizard.no_age_yet": "No age yet. Pick an age group so we can suggest chores:",
|
||
"wizard.remove": "Remove",
|
||
"wizard.add_child": "Add a child",
|
||
"wizard.name": "Name",
|
||
"wizard.name_placeholder": "e.g. Isla",
|
||
"wizard.age": "Age",
|
||
"wizard.age_mode_bday": "Birthday",
|
||
"wizard.age_mode_age": "Just the age",
|
||
"wizard.age_mode_none": "Rather not say",
|
||
"wizard.bday_hint": "Also turns on birthday mode. You can take the year off later in Children if you'd rather not store it.",
|
||
"wizard.group_hint": "Only used to suggest chores.",
|
||
"wizard.avatar": "Avatar",
|
||
"wizard.colour": "Colour",
|
||
"wizard.add_named": "Add {name}",
|
||
"wizard.child_word": "child",
|
||
"wizard.preview": "Preview on their card",
|
||
"wizard.new_child": "New child",
|
||
"wizard.ready_for_chores": "Ready for chores",
|
||
"wizard.preview_chores": "Their chores appear here",
|
||
"wizard.preview_rewards": "and rewards to save for",
|
||
"wizard.preview_hint": "The colour goes on their card in the Family chores dashboard. Change the avatar or add a photo later in Children.",
|
||
"wizard.age_n": "Age {age}",
|
||
"wizard.group_chores": "{group} chores",
|
||
"wizard.toast_child_exists": "{name} is already on the list",
|
||
"wizard.toast_need_child": "Add at least one child first",
|
||
"wizard.toast_bad_birthday": "Pick a birthday that isn't in the future",
|
||
"wizard.toast_invalid_birthday": "That birthday isn't a real date. Check the day and month",
|
||
"wizard.toast_load_failed": "Couldn't open the setup wizard: {error}",
|
||
"wizard.toast_create_failed": "Nothing was created: {error}",
|
||
"wizard.chores_title": "Pick some chores",
|
||
"wizard.chores_copy": "Suggested for each child's age. Tick what fits your house and set the points. Tap a face to give a chore to an older sibling too. Nothing is final: everything can be edited in Chores later.",
|
||
"wizard.nobody_in_group": "Nobody in this age group",
|
||
"wizard.show_anyway": "Show anyway",
|
||
"wizard.picked_n": "{count} picked",
|
||
"wizard.pick_all": "Pick all",
|
||
"wizard.clear": "Clear",
|
||
"wizard.have_chore": "You already have this chore",
|
||
"wizard.already_have": "Already have",
|
||
"wizard.nobody_old_enough": "Nobody old enough yet",
|
||
"wizard.template_pack": "template pack",
|
||
"wizard.pack_sub": "Everyone · from Templates",
|
||
"wizard.pack_dupe": "Already in your list, added once",
|
||
"wizard.per_week": "Per week, roughly",
|
||
"wizard.per_week_hint": "If every ticked chore gets done. Used on the next step to suggest reward costs.",
|
||
"wizard.packs_title": "Or add a ready-made pack",
|
||
"wizard.packs_hint": "The built-in packs from Templates, given to everyone.",
|
||
"wizard.freq_daily": "Every day",
|
||
"wizard.freq_weekdays": "Weekdays",
|
||
"wizard.freq_weekly": "Once a week",
|
||
"wizard.freq_every_2_weeks": "Every 2 weeks",
|
||
"wizard.freq_monthly": "Monthly",
|
||
"wizard.rewards_title": "Something to work towards",
|
||
"wizard.rewards_copy": "Pick a few starter rewards. Costs are fixed, so a reward always costs what it says here.",
|
||
"wizard.rewards_earns": "With the chores you picked, {name} earns about {amount} a week.",
|
||
"wizard.every_day": "≈ every day",
|
||
"wizard.every_n_days": "≈ every {count} days",
|
||
"wizard.tier.small": "Small treats",
|
||
"wizard.tier.saving": "Worth saving for",
|
||
"wizard.tier.big": "Big goals",
|
||
"wizard.tier.custom": "Your own",
|
||
"wizard.own_reward_placeholder": "Add your own reward",
|
||
"wizard.own_reward_add": "Add",
|
||
"wizard.cost": "Cost",
|
||
"wizard.tips": "Tips",
|
||
"wizard.tip_1": "Have one reward they can get in a day or two, so they see it working.",
|
||
"wizard.tip_2": "Big goals work best at 2–4 weeks of chores.",
|
||
"wizard.tip_3": "Rewards are shared by default. Limit one to a child later in Rewards.",
|
||
"wizard.review_title": "Check and create",
|
||
"wizard.review_fresh": "This creates {children}, {chores} and {rewards}. Change anything afterwards in the panel.",
|
||
"wizard.review_existing": "This adds {children}, {chores} and {rewards}. It keeps your {have_chores} and {have_rewards} exactly as they are.",
|
||
"wizard.review_existing_no_children": "This adds {chores} and {rewards}. It keeps your {have_chores} and {have_rewards} exactly as they are.",
|
||
"wizard.review_nothing": "Everything you picked is already in TaskMate, so there's nothing new to add. Go back to pick something else, or close the wizard.",
|
||
"wizard.count_children_one": "1 child",
|
||
"wizard.count_children_many": "{count} children",
|
||
"wizard.count_chores_one": "1 chore",
|
||
"wizard.count_chores_many": "{count} chores",
|
||
"wizard.count_rewards_one": "1 reward",
|
||
"wizard.count_rewards_many": "{count} rewards",
|
||
"wizard.kid_existing": "existing",
|
||
"wizard.kid_new": "new",
|
||
"wizard.per_week_short": "{amount} /wk",
|
||
"wizard.no_new_chores": "No new chores",
|
||
"wizard.n_more": "+ {count} more",
|
||
"wizard.defaults": "A few defaults",
|
||
"wizard.appr_title": "Chores that need a parent's OK",
|
||
"wizard.appr_hint": "Points are paid after you approve. Change per chore later.",
|
||
"wizard.appr_none": "None",
|
||
"wizard.appr_big": "Big jobs (4+)",
|
||
"wizard.appr_all": "All",
|
||
"wizard.dash_toggle": "Create a \"Family chores\" dashboard",
|
||
"wizard.dash_hint": "One child card per child plus the rewards card. Skipped if the dashboard already exists.",
|
||
"wizard.notify_toggle": "Tell me when something needs approving",
|
||
"wizard.notify_hint": "Uses your existing Notifications settings.",
|
||
"wizard.rewards_n": "Rewards ({count})",
|
||
"wizard.no_rewards": "No rewards picked",
|
||
"wizard.dash_title": "Family chores",
|
||
"wizard.done_title": "You're all set!",
|
||
"wizard.done_copy": "TaskMate is ready for your family.",
|
||
"wizard.done_copy_existing": "The new chores and rewards have been added. Nothing else was changed.",
|
||
"wizard.done_copy_nothing": "Everything you picked was already there, so nothing new was added. Nothing else was changed.",
|
||
"wizard.one_dashboard": "1 dashboard",
|
||
"wizard.dash_existed": "A \"Family chores\" dashboard already exists, so it was left as it is.",
|
||
"wizard.dash_failed": "The dashboard couldn't be created. Everything else was.",
|
||
"wizard.next_tablet_title": "Put it where they'll see it",
|
||
"wizard.next_tablet": "Open the \"Family chores\" dashboard on a tablet or their phones.",
|
||
"wizard.next_today_title": "Check in on Today",
|
||
"wizard.next_today": "Approvals, who's done what and quick bonuses, all on one page.",
|
||
"wizard.next_change_title": "Change anything",
|
||
"wizard.next_change": "Edit chores, points and rewards any time. Run this again from Settings.",
|
||
"wizard.open_dashboard": "Open the dashboard",
|
||
"wizard.go_today": "Go to Today",
|
||
"wizard.confirm_title": "Run the setup wizard?",
|
||
"wizard.confirm_have": "You already have {children}, {chores} and {rewards}. The wizard will:",
|
||
"wizard.confirm_add": "only add new children, chores and rewards",
|
||
"wizard.confirm_have_shown": "show chores and rewards you already have as \"Already have\"",
|
||
"wizard.confirm_never": "never rename, edit or delete anything",
|
||
"wizard.nudge_text": "{name} is {age} now. See new chore ideas for their age?",
|
||
"wizard.nudge_btn": "See chore ideas",
|
||
"wizard.nudge_dismiss": "Not now",
|
||
"wizard.age_group.3_5": "Ages 3–5",
|
||
"wizard.age_group.6_8": "Ages 6–8",
|
||
"wizard.age_group.9_12": "Ages 9–12",
|
||
"wizard.age_group.13_plus": "Ages 13+",
|
||
"wizard.age_group_sub.3_5": "Little helpers · one-step jobs, lots of praise",
|
||
"wizard.age_group_sub.6_8": "Building routines · they tick them off themselves",
|
||
"wizard.age_group_sub.9_12": "Real household jobs · bigger points",
|
||
"wizard.age_group_sub.13_plus": "Life skills · weekly jobs worth real rewards",
|
||
"wizard.chore.toys_away": "Put toys away",
|
||
"wizard.chore.clothes_basket": "Dirty clothes in the basket",
|
||
"wizard.chore.brush_teeth_help": "Brush teeth (with help)",
|
||
"wizard.chore.shoes_coat": "Put shoes and coat away",
|
||
"wizard.chore.help_feed_pet": "Help feed the pet",
|
||
"wizard.chore.match_socks": "Match the socks",
|
||
"wizard.chore.napkins": "Put napkins on the table",
|
||
"wizard.chore.water_plant": "Water a plant",
|
||
"wizard.chore.make_bed": "Make bed",
|
||
"wizard.chore.get_dressed": "Get dressed by yourself",
|
||
"wizard.chore.pack_school_bag": "Pack school bag",
|
||
"wizard.chore.set_clear_table": "Set and clear the table",
|
||
"wizard.chore.tidy_bedroom": "Tidy bedroom",
|
||
"wizard.chore.feed_pet": "Feed the pet",
|
||
"wizard.chore.put_away_laundry": "Put away clean laundry",
|
||
"wizard.chore.read_15": "Read for 15 minutes",
|
||
"wizard.chore.dishwasher": "Load or empty the dishwasher",
|
||
"wizard.chore.bins_out": "Take the bins out",
|
||
"wizard.chore.hoover_room": "Hoover a room",
|
||
"wizard.chore.walk_dog": "Walk the dog",
|
||
"wizard.chore.help_cook": "Help cook dinner",
|
||
"wizard.chore.clean_sink": "Clean the bathroom sink",
|
||
"wizard.chore.homework_no_reminders": "Homework without reminders",
|
||
"wizard.chore.change_sheets": "Change your bed sheets",
|
||
"wizard.chore.cook_meal": "Cook a family meal",
|
||
"wizard.chore.own_laundry": "Do your own laundry",
|
||
"wizard.chore.mow_lawn": "Mow the lawn",
|
||
"wizard.chore.clean_bathroom": "Clean the bathroom",
|
||
"wizard.chore.wash_car": "Wash the car",
|
||
"wizard.chore.babysit": "Babysit for an hour",
|
||
"wizard.chore.food_shop": "Help with the food shop",
|
||
"wizard.chore.recycling": "Sort the recycling",
|
||
"wizard.reward.screen_time": "15 min extra screen time",
|
||
"wizard.reward.pick_pudding": "Pick the pudding",
|
||
"wizard.reward.car_music": "Choose the music in the car",
|
||
"wizard.reward.choose_dinner": "Choose what's for dinner",
|
||
"wizard.reward.stay_up_late": "Stay up 30 minutes later",
|
||
"wizard.reward.family_film": "Pick the family film",
|
||
"wizard.reward.ice_cream_trip": "Trip out for ice cream",
|
||
"wizard.reward.spending_money": "£5 to spend",
|
||
"wizard.reward.sleepover": "Friend sleepover",
|
||
"wizard.pack.morning_routine.name": "Morning routine",
|
||
"wizard.pack.morning_routine.chore_0": "Make bed",
|
||
"wizard.pack.morning_routine.chore_1": "Brush teeth",
|
||
"wizard.pack.morning_routine.chore_2": "Get dressed",
|
||
"wizard.pack.morning_routine.chore_3": "Pack school bag",
|
||
"wizard.pack.evening_routine.name": "Evening routine",
|
||
"wizard.pack.evening_routine.chore_0": "Brush teeth",
|
||
"wizard.pack.evening_routine.chore_1": "Put on pyjamas",
|
||
"wizard.pack.evening_routine.chore_2": "Tidy room",
|
||
"wizard.pack.evening_routine.chore_3": "Set out clothes for tomorrow",
|
||
"wizard.pack.kitchen_helper.name": "Kitchen helper",
|
||
"wizard.pack.kitchen_helper.chore_0": "Set table",
|
||
"wizard.pack.kitchen_helper.chore_1": "Clear plates",
|
||
"wizard.pack.kitchen_helper.chore_2": "Load dishwasher",
|
||
"wizard.pack.kitchen_helper.chore_3": "Wipe counters",
|
||
"wizard.pack.weekend_helper.name": "Weekend helper",
|
||
"wizard.pack.weekend_helper.chore_0": "Tidy bedroom",
|
||
"wizard.pack.weekend_helper.chore_1": "Hoover",
|
||
"wizard.pack.weekend_helper.chore_2": "Help with laundry",
|
||
"wizard.pack.weekend_helper.chore_3": "Take bins out",
|
||
"wizard.pack.pet_care.name": "Pet care",
|
||
"wizard.pack.pet_care.chore_0": "Feed pet",
|
||
"wizard.pack.pet_care.chore_1": "Fill water bowl",
|
||
"wizard.pack.pet_care.chore_2": "Walk dog",
|
||
"wizard.pack.pet_care.chore_3": "Clean litter tray",
|
||
"wizard.pack.homework_reading.name": "Homework & reading",
|
||
"wizard.pack.homework_reading.chore_0": "Do homework",
|
||
"wizard.pack.homework_reading.chore_1": "Read for 20 minutes",
|
||
"wizard.pack.homework_reading.chore_2": "Practice instrument",
|
||
"panel.entity_bonus": "Bonus",
|
||
"panel.entity_child": "Child",
|
||
"panel.entity_chore": "Chore",
|
||
"panel.entity_group": "Group",
|
||
"panel.entity_penalty": "Penalty",
|
||
"panel.entity_reward": "Reward",
|
||
"panel.entity_search_placeholder": "Search | Add custom item",
|
||
"panel.error_failed_to_load": "Failed to load state",
|
||
"panel.error_no_state": "No state yet.",
|
||
"panel.first_occ_available_immediately": "Available immediately",
|
||
"panel.first_occ_wait": "Wait for first scheduled occurrence",
|
||
"panel.group_add_tile": "Add group",
|
||
"panel.group_chore_count": "{count} chore(s)",
|
||
"panel.group_chores_label": "Member chores (order matters for sticky — first is the leader)",
|
||
"panel.group_missing_chore": "(missing chore {id})",
|
||
"panel.group_no_rotation_chores": "Only rotation-mode chores (alternating / random / balanced) can join a group. Edit a chore's assignment mode first.",
|
||
"panel.group_policy_hint": "Sticky = same child for all chores in the group today. Spread = different children today.",
|
||
"panel.group_policy_label": "Policy",
|
||
"panel.group_policy_spread": "Spread — different children across the group today",
|
||
"panel.group_policy_spread_short": "Spread",
|
||
"panel.group_policy_sticky": "Sticky — same child for all chores in the group today",
|
||
"panel.group_policy_sticky_short": "Sticky",
|
||
"panel.group_title": "Task groups",
|
||
"panel.loading": "Loading…",
|
||
"panel.nav_system": "System",
|
||
"panel.nav_family": "Family",
|
||
"panel.nav_earn": "Earn",
|
||
"panel.nav_spend": "Spend",
|
||
"panel.nav_adjust": "Adjust",
|
||
"panel.nav_review": "Review",
|
||
"panel.nav_more": "More",
|
||
"panel.nav_sections": "Sections",
|
||
"panel.nav_collapse": "Collapse sidebar",
|
||
"panel.nav_expand": "Expand sidebar",
|
||
"panel.new_btn": "New",
|
||
"panel.new_chore": "New chore",
|
||
"panel.new_bounty": "New bounty",
|
||
"panel.new_reward": "New reward",
|
||
"panel.new_quest": "New quest",
|
||
"panel.new_challenge": "New challenge",
|
||
"panel.new_child": "Add child",
|
||
"panel.palette_placeholder": "Search or jump to…",
|
||
"panel.palette_group_go": "Go to",
|
||
"panel.palette_group_actions": "Actions",
|
||
"panel.palette_adjust_points": "Give or take points: {name}",
|
||
"panel.palette_no_results": "No matches",
|
||
"panel.palette_hint": "↑↓ to move · Enter to open · Esc to close",
|
||
"panel.scope_label": "Show data for",
|
||
"panel.scope_all": "All",
|
||
"panel.scope_only": "Show only {name}",
|
||
"panel.scope_showing": "Showing {name} only",
|
||
"panel.scope_clear": "Show everyone",
|
||
"panel.today_greeting_morning": "Good morning",
|
||
"panel.today_greeting_afternoon": "Good afternoon",
|
||
"panel.today_greeting_evening": "Good evening",
|
||
"panel.today_needs_one": "1 thing needs you",
|
||
"panel.today_needs_many": "{count} things need you",
|
||
"panel.today_all_clear": "All caught up",
|
||
"panel.today_needs_title": "Needs you",
|
||
"panel.today_needs_empty": "Nothing waiting. Approvals, reward claims and wish requests show up here.",
|
||
"panel.today_board_title": "Chore board",
|
||
"panel.today_board_today": "Today",
|
||
"panel.today_board_week": "This week",
|
||
"panel.today_board_unavailable": "The chore board couldn't be loaded. Check the Home Assistant log.",
|
||
"panel.today_board_empty": "No chores today.",
|
||
"panel.today_status_done": "Done",
|
||
"panel.today_status_pending": "Awaiting approval",
|
||
"panel.today_status_todo": "To do",
|
||
"panel.today_status_missed": "Missed",
|
||
"panel.today_quick_title": "Quick actions",
|
||
"panel.today_quick_bonus": "Give a bonus",
|
||
"panel.today_quick_penalty": "Apply a penalty",
|
||
"panel.today_view_all": "View all",
|
||
"panel.today_nothing_due": "Nothing due today",
|
||
"panel.today_all_done": "All done today",
|
||
"panel.today_left": "{count} left",
|
||
"panel.today_ring_label": "{done} of {due} chores done",
|
||
"panel.today_adjust_points": "Give or take points",
|
||
"panel.today_streak": "{count}-day streak",
|
||
"panel.today_week_none": "Not recorded",
|
||
"panel.today_week_hint": "Grey days weren't recorded. TaskMate saves each day's progress at 23:59, starting from this version.",
|
||
"panel.today_wish_text": "{child} wishes for {wish}",
|
||
"panel.parent_complete_confirm": "Mark this chore as completed by parent? No points will be awarded.",
|
||
"panel.parent_complete_failed": "Failed: {error}",
|
||
"panel.parent_complete_success": "Marked as parent completed",
|
||
"panel.parent_complete_tooltip": "Parent did it (no points)",
|
||
"panel.penalty_apply_text": "Choose which child to apply this penalty to (will deduct {points} points).",
|
||
"panel.penalty_empty_description": "Add a penalty to deduct points for misbehaviour.",
|
||
"panel.penalty_empty_title": "No penalties yet",
|
||
"panel.penalty_points_label": "Points to deduct",
|
||
"panel.penalty_title": "Penalties",
|
||
"panel.penbon_applies_to": "Applies to",
|
||
"panel.penbon_applies_to_hint": "Leave empty to apply to <strong>all children</strong>.",
|
||
"panel.penbon_description_label": "Description (optional)",
|
||
"panel.penbon_icon_label": "Icon",
|
||
"panel.penbon_name_label": "Name",
|
||
"panel.penbon_no_eligible": "No eligible children. Edit the {kind} to set who it applies to.",
|
||
"panel.penbon_points_award": "Points to award",
|
||
"panel.penbon_points_deduct": "Points to deduct",
|
||
"panel.penbon_table_assigned": "Assigned",
|
||
"panel.penbon_table_name": "Name",
|
||
"panel.penbon_table_points": "Points",
|
||
"panel.pending_tooltip": "{count} pending — click to review",
|
||
"panel.pts_display": "{count} pts",
|
||
"panel.recurrence_every_2_days": "Every 2 days",
|
||
"panel.recurrence_every_2_weeks": "Every 2 weeks",
|
||
"panel.recurrence_every_3_months": "Every 3 months",
|
||
"panel.recurrence_every_6_months": "Every 6 months",
|
||
"panel.recurrence_monthly": "Monthly",
|
||
"panel.recurrence_weekly": "Weekly",
|
||
"panel.reorder_global_hint": "Drag rows to reorder how chores appear in the admin panel. Save to apply.",
|
||
"panel.reorder_global_title": "Reorder chores",
|
||
"panel.reorder_hint": "Drag rows to reorder how chores appear on this child's card. Save to apply.",
|
||
"panel.reorder_title": "Reorder chores · {name}",
|
||
"panel.reward_add_tile": "Add reward",
|
||
"panel.tab_wishlists": "Wishlists",
|
||
"panel.wish_filter_all": "All children",
|
||
"panel.wish_section_pending": "Waiting for approval",
|
||
"panel.wish_section_pending_hint": "Approve to turn a wish into a savings goal. You can change the target first.",
|
||
"panel.wish_section_active": "Active wishes",
|
||
"panel.wish_section_pledges": "Pledges",
|
||
"panel.wish_section_pledges_hint": "Everything relatives have chipped in. Pledged points are a gift: they never come out of any child's balance.",
|
||
"panel.wish_section_history": "History",
|
||
"panel.wish_none_pending": "No wishes waiting for approval.",
|
||
"panel.wish_none_active": "No wishes being saved for yet.",
|
||
"panel.wish_none_pledges": "No pledges yet.",
|
||
"panel.wish_none_history": "Redeemed and declined wishes will show here.",
|
||
"panel.wish_suggested": "{child} suggested {points} {points_name}",
|
||
"panel.wish_target": "Target",
|
||
"panel.wish_approve": "Approve",
|
||
"panel.wish_decline": "Decline",
|
||
"panel.wish_col_wish": "Wish",
|
||
"panel.wish_col_progress": "Progress",
|
||
"panel.wish_col_saved": "Saved",
|
||
"panel.wish_col_pledged": "Pledged",
|
||
"panel.wish_col_status": "Status",
|
||
"panel.wish_col_from": "From",
|
||
"panel.wish_col_to": "To",
|
||
"panel.wish_col_amount": "Amount",
|
||
"panel.wish_col_message": "Message",
|
||
"panel.wish_col_date": "Date",
|
||
"panel.wish_status_saving": "Saving",
|
||
"panel.wish_status_funded": "Funded",
|
||
"panel.wish_status_redeem": "Redeem requested",
|
||
"panel.wish_status_redeemed": "Redeemed",
|
||
"panel.wish_status_declined": "Declined",
|
||
"panel.wish_pledge": "Pledge",
|
||
"panel.wish_fulfil": "Fulfil",
|
||
"panel.wish_delete": "Delete wish",
|
||
"panel.wish_unpledge": "Remove pledge",
|
||
"panel.wish_confirm_delete": "Delete this wish? Anything the child saved goes back to them and every pledge is returned.",
|
||
"panel.wish_confirm_unpledge": "Remove this pledge from the wish?",
|
||
"panel.wish_decline_title": "Decline {wish}",
|
||
"panel.wish_decline_reason": "Reason (optional)",
|
||
"panel.wish_decline_reason_hint": "Shown to the child on their wishlist.",
|
||
"panel.wish_pledge_title": "Pledge to {child}'s {wish}",
|
||
"panel.wish_pledge_who": "Who is pledging?",
|
||
"panel.wish_pledge_amount": "Amount",
|
||
"panel.wish_pledge_amount_hint": "{points} still needed. Pledged points are a gift: they don't come out of any child's balance.",
|
||
"panel.wish_pledge_finish": "Finish it ({points})",
|
||
"panel.wish_pledge_message": "Message to {name} (optional)",
|
||
"panel.wish_pledge_preview": "After this pledge: {total} / {target}",
|
||
"panel.wish_pledge_add": "Add pledge",
|
||
"panel.wish_err_target": "The target must be a whole number from 1 to 100000.",
|
||
"panel.wish_err_who": "Say who the pledge is from.",
|
||
"panel.wish_err_amount": "Pledge at least 1 point.",
|
||
"panel.wish_toast_approved": "Wish approved",
|
||
"panel.wish_toast_declined": "Wish declined",
|
||
"panel.wish_toast_pledged": "Pledge added",
|
||
"panel.wish_toast_pledge_removed": "Pledge removed",
|
||
"panel.wish_toast_removed": "Wish deleted",
|
||
"panel.reward_assigned_hint": "Leave empty to make available to <strong>all children</strong>.",
|
||
"panel.reward_assigned_label": "Assigned to",
|
||
"panel.reward_badge_jackpot": "Jackpot",
|
||
"panel.reward_badge_pool": "Pool",
|
||
"panel.reward_streak_freeze_label": "Streak freeze — approving gives the child one token",
|
||
"panel.reward_streak_freeze_hint": "The token saves their streak on a missed day. It can't be claimed past the max a child can hold.",
|
||
"panel.reward_badge_streak_freeze": "Streak freeze",
|
||
"panel.reward_cost_label": "Cost ({points_name})",
|
||
"panel.reward_description_label": "Description (optional)",
|
||
"panel.reward_expires_hint": "Pooled points are refunded at midnight.",
|
||
"panel.reward_timelock_section": "Advanced — time lock",
|
||
"panel.reward_timelock_label": "Limit when this can be claimed",
|
||
"panel.reward_timelock_hint": "The reward stays visible, but children can only claim it inside the window you set. Saving points into a pool reward is never blocked.",
|
||
"panel.reward_timelock_days_label": "Days",
|
||
"panel.reward_timelock_days_hint": "Leave every day off for no day restriction.",
|
||
"panel.reward_timelock_from_label": "From",
|
||
"panel.reward_timelock_until_label": "Until",
|
||
"panel.reward_timelock_times_hint": "Leave both blank for any time of day. The end time is exclusive, so 07:00–19:00 stops at 19:00. A start later than the end spans midnight.",
|
||
"panel.reward_timelock_badge": "Time-locked",
|
||
"panel.reward_expires_label": "Expires (blank = never)",
|
||
"panel.reward_icon_label": "Icon",
|
||
"panel.reward_is_jackpot_hint": "Combine all children's contributions toward one shared reward.",
|
||
"panel.reward_is_jackpot_label": "Jackpot — pool from all assigned children",
|
||
"panel.reward_name_label": "Name",
|
||
"panel.reward_pool_hint": "Children deposit points into this reward's dedicated pool rather than spending from their balance.",
|
||
"panel.reward_pool_label": "Pool reward (savings jar)",
|
||
"panel.reward_quantity_hint": "Each approved claim reduces by 1.",
|
||
"panel.reward_quantity_label": "Limited quantity (blank = unlimited)",
|
||
"panel.reward_stat_cost": "{points_name} cost",
|
||
"panel.reward_stat_expires": "Expires",
|
||
"panel.reward_stat_remaining": "Remaining",
|
||
"panel.reward_stat_unlimited": "Unlimited",
|
||
"panel.reward_title": "Rewards",
|
||
"panel.row_menu_more": "More actions",
|
||
"panel.schedule_one_shot": "One-time task",
|
||
"panel.schedule_recurring": "Recurring (every N days/weeks/months)",
|
||
"panel.schedule_specific_days": "Specific days of the week",
|
||
"panel.search_bonuses": "Search bonuses…",
|
||
"panel.search_children": "Search children…",
|
||
"panel.search_chores": "Filter chores…",
|
||
"panel.search_groups": "Search groups…",
|
||
"panel.search_penalties": "Search penalties…",
|
||
"panel.search_rewards": "Search rewards…",
|
||
"panel.settings_afternoon_hint": "Default 12:00 – 17:00",
|
||
"panel.settings_afternoon_label": "Afternoon",
|
||
"panel.settings_bonuses_title": "Bonuses",
|
||
"panel.settings_calendar_projection_hint": "Days ahead each chore publishes to calendars",
|
||
"panel.settings_calendar_projection_label": "Calendar projection",
|
||
"panel.settings_chore_rotation_title": "Chore Rotation",
|
||
"panel.settings_currency_hint": "How points are named and shown across the app.",
|
||
"panel.settings_currency_title": "Currency",
|
||
"panel.settings_parents_title": "Parents (no admin rights)",
|
||
"panel.settings_parents_hint": "Give a non-admin household member day-to-day control — approve chores, adjust points, confirm rewards — without Home Assistant admin rights. They still can't open this admin panel or change configuration.",
|
||
"panel.settings_parents_empty": "No non-admin Home Assistant users found. Create a standard HA user first, then tick them here.",
|
||
"panel.settings_require_linked_child_label": "Require a linked account per child",
|
||
"panel.settings_require_linked_child_hint": "Only let a child's own Home Assistant account act as that child. Leave off for a shared family tablet where one account is used for everyone. Parents and admins can always act for any child.",
|
||
"panel.settings_chore_undo_label": "Child undo window (seconds)",
|
||
"panel.settings_chore_undo_hint": "Lets a child take back their own chore: a submission waiting for approval until a parent reviews it, and an automatically approved chore for this many seconds after completing it. 0 (the default) turns it off, so only a parent can undo. Anything a parent has approved stays parent-only. 0–3600.",
|
||
"panel.settings_chore_undo_invalid": "Child undo window must be a whole number of seconds from 0 to 3600.",
|
||
"panel.settings_evening_hint": "Default 17:00 – 21:00",
|
||
"panel.settings_evening_label": "Evening",
|
||
"panel.settings_history_title": "History & streaks",
|
||
"panel.settings_morning_hint": "Default 06:00 – 12:00",
|
||
"panel.settings_morning_label": "Morning",
|
||
"panel.settings_night_hint": "Default 21:00 – 23:59",
|
||
"panel.settings_night_label": "Night",
|
||
"panel.settings_notifications_title": "Notifications",
|
||
"panel.settings_notify_hint": "Used for parent approval pings",
|
||
"panel.settings_notify_label": "Notify service",
|
||
"panel.settings_notify_none": "(none — use HA persistent notifications)",
|
||
"panel.settings_perfect_week_bonus_hint": "How many points to award",
|
||
"panel.settings_perfect_week_bonus_label": "Perfect-week bonus points",
|
||
"panel.settings_perfect_week_all_chores_hint": "A day counts only when every chore due that day is done",
|
||
"panel.settings_perfect_week_all_chores_label": "Perfect week needs all tasks",
|
||
"panel.settings_perfect_week_hint": "Bonus for completing every day of a week",
|
||
"panel.settings_perfect_week_label": "Perfect-week bonus",
|
||
"panel.settings_points_default": "Stars",
|
||
"panel.settings_points_icon_hint": "Pick any MDI icon",
|
||
"panel.settings_points_icon_label": "Points icon",
|
||
"panel.settings_points_name_hint": "What you call them, e.g. Stars or Coins",
|
||
"panel.settings_quick_points_label": "Quick point amounts",
|
||
"panel.settings_quick_points_hint": "Comma-separated amounts for the + and − buttons on each child card. Up to three are used.",
|
||
"panel.settings_points_name_label": "Points name",
|
||
"panel.settings_retention_hint": "How many days of completion history to keep",
|
||
"panel.settings_retention_label": "Retention",
|
||
"panel.settings_show_ids_hint": "Display internal IDs for use in automations and service calls",
|
||
"panel.settings_show_ids_label": "Show IDs",
|
||
"panel.settings_skip_confirm_hint": "Show a confirmation popup before skipping a chore rotation",
|
||
"panel.settings_skip_confirm_label": "Confirm before skipping",
|
||
"panel.settings_streak_all_chores_hint": "Only extend a streak once every chore due that day is done",
|
||
"panel.settings_streak_all_chores_label": "Streak needs all tasks",
|
||
"panel.settings_streak_milestones_hint": "Bonus at 3, 7, 14, 30, 60, 100 days",
|
||
"panel.settings_streak_milestones_label": "Streak milestones",
|
||
"panel.settings_streak_freeze_max_label": "Streak freezes (most a child can hold)",
|
||
"panel.settings_streak_freeze_max_hint": "Each token saves the streak on one missed day. 0 turns streak freezes off.",
|
||
"panel.settings_streak_freeze_earn_label": "Earn a streak freeze every",
|
||
"panel.settings_streak_freeze_earn_hint": "Consecutive streak days per free token. 0 = never (offer a Streak freeze reward instead).",
|
||
"panel.settings_streak_reset_hint": "What happens when a day is missed",
|
||
"panel.settings_streak_reset_label": "Streak reset",
|
||
"panel.settings_time_boundaries_hint": "When each time period starts and ends (HH:MM, 24-hour). Add your own periods; gaps between periods fall back to Anytime.",
|
||
"panel.settings_time_boundaries_title": "Time-of-day boundaries",
|
||
"panel.settings_title": "Settings",
|
||
"panel.settings_weekend_multiplier_hint": "Bonus on Sat/Sun (1.0 = off)",
|
||
"panel.settings_birthday_multiplier_label": "Birthday points multiplier",
|
||
"panel.settings_birthday_multiplier_hint": "Chore points on a child's birthday, on top of the weekend bonus (1.0 = off)",
|
||
"panel.settings_birthday_chores_off_label": "Birthday day off",
|
||
"panel.settings_birthday_chores_off_hint": "Hide non-mandatory chores on a child's birthday. The day never breaks their streak.",
|
||
"panel.settings_difficulty_multipliers_hint": "Points multiplier per tier. Medium is the baseline (×1.0); easy/hard scale a chore's award.",
|
||
"panel.settings_difficulty_multipliers_label": "Difficulty multipliers",
|
||
"panel.settings_vacation_hint": "Pause all chores and freeze streaks during these date ranges (e.g. holidays).",
|
||
"panel.vacation_calendar_label": "Family vacation calendar (optional)",
|
||
"panel.vacation_calendar_hint": "When this calendar has an active event, every child is treated as away — streaks freeze and chores hide. Per-child sensors can add individual away periods on top.",
|
||
"panel.settings_vacation_title": "Vacation / pause mode",
|
||
"panel.vacation_add": "Add vacation",
|
||
"panel.vacation_dates_required": "Each vacation needs a start and end date.",
|
||
"panel.vacation_delete_title": "Remove vacation",
|
||
"panel.vacation_name_placeholder": "e.g. Summer holidays",
|
||
"panel.vacation_none": "No vacations set — chores run every day.",
|
||
"panel.settings_weekend_multiplier_label": "Weekend multiplier",
|
||
"panel.skip_chore_confirm": "Skip this chore's current assignee and advance the rotation?",
|
||
"panel.streak_pause": "Pause — streak preserved until next completion",
|
||
"panel.streak_reset": "Reset — streak goes to 0 on missed day",
|
||
"panel.tab_activity": "Activity",
|
||
"panel.tab_audit": "Audit",
|
||
"panel.tab_badges": "Badges",
|
||
"panel.tab_bonuses": "Bonuses",
|
||
"panel.tab_children": "Children",
|
||
"panel.tab_chores": "Chores",
|
||
"panel.tab_groups": "Groups",
|
||
"panel.tab_notifications": "Notifications",
|
||
"panel.tab_penalties": "Penalties",
|
||
"panel.tab_rewards": "Rewards",
|
||
"panel.tab_settings": "Settings",
|
||
"panel.tab_templates": "Templates",
|
||
"panel.tab_today": "Today",
|
||
"panel.tab_unknown": "Unknown tab",
|
||
"panel.wiki_tooltip": "Open the TaskMate wiki",
|
||
"panel.notif_add_custom": "Add custom notification",
|
||
"panel.notif_add_parent": "Add parent",
|
||
"panel.notif_custom_empty": "No custom notifications yet.",
|
||
"panel.notif_custom_message_placeholder": "Message (you can use {child_name})",
|
||
"panel.notif_custom_name_placeholder": "Reminder name",
|
||
"panel.notif_day_fri": "Fri",
|
||
"panel.notif_day_mon": "Mon",
|
||
"panel.notif_day_sat": "Sat",
|
||
"panel.notif_day_sun": "Sun",
|
||
"panel.notif_day_thu": "Thu",
|
||
"panel.notif_day_tue": "Tue",
|
||
"panel.notif_day_wed": "Wed",
|
||
"panel.notif_default_custom_message": "Reminder for {child_name}",
|
||
"panel.notif_default_custom_name": "New reminder",
|
||
"panel.notif_default_parent_name": "Parent",
|
||
"panel.notif_loading": "Loading notifications…",
|
||
"panel.notif_matrix_col_notification": "Notification",
|
||
"panel.notif_none": "None",
|
||
"panel.notif_power_user_note_body": "TaskMate fires taskmate_chore_completed, taskmate_streak_updated, taskmate_badge_earned, taskmate_reward_claimed and other events on the HA event bus. Use Node-RED or HA automations to react to them.",
|
||
"panel.notif_power_user_note_title": "Power-user note",
|
||
"panel.notif_recipients_children": "Children",
|
||
"panel.notif_recipients_parents": "Parents",
|
||
"panel.notif_remove_parent": "Remove",
|
||
"panel.notif_section_custom": "Custom scheduled notifications",
|
||
"panel.notif_unnamed_recipient": "(unnamed)",
|
||
"panel.notif_section_custom_desc": "Add your own timed reminders. For event-driven notifications, listen to the taskmate_* events on the Home Assistant bus.",
|
||
"panel.notif_section_matrix": "Built-in notifications",
|
||
"panel.notif_section_matrix_desc": "Toggle per recipient. The switch on the left disables the whole row globally. Cells marked — aren't valid for that recipient.",
|
||
"panel.notif_section_recipients": "Recipients",
|
||
"panel.notif_section_recipients_desc": "Map each child and parent to a Home Assistant notify service. Leave blank to skip notifications for that person.",
|
||
"panel.notif_streak_cutoff_label": "Cutoff",
|
||
"panel.notif_nav_url_global_label": "When tapped, open",
|
||
"panel.notif_nav_url_global_hint": "Where a tapped notification opens: a path like /taskmate-admin or /lovelace/parents, a full URL, or noAction. Applies to all notifications unless overridden per type below.",
|
||
"panel.notif_nav_url_row_placeholder": "Uses global default",
|
||
"panel.notif_group_global_label": "Group notifications as",
|
||
"panel.notif_group_global_hint": "Notifications sharing this name stack together on the phone instead of scattering through your other Home Assistant alerts. Applies to all notifications unless overridden per type below. Leave blank to turn grouping off.",
|
||
"panel.notif_group_row_placeholder": "Group: global default",
|
||
"panel.notif_send_test": "Send test",
|
||
"panel.notif_test_sent": "Test sent to {count} recipient(s) + persistent notification",
|
||
"panel.notif_tab_title": "Notifications",
|
||
"panel.template_assignment_mode_label": "Assignment mode",
|
||
"panel.template_builtin": "Built-in",
|
||
"panel.template_builtin_packs": "Built-in packs",
|
||
"panel.template_builtin_template_packs": "Built-in template packs",
|
||
"panel.template_builtin_templates": "Built-in templates",
|
||
"panel.template_chores_in_template": "Chores in this template",
|
||
"panel.template_confirm_bar": "{count} chore(s) will be created · {points} pts total",
|
||
"panel.template_create_btn": "Create {count} chore(s)",
|
||
"panel.template_create_title": "Create Template",
|
||
"panel.template_custom": "Custom",
|
||
"panel.template_custom_packs": "Custom packs",
|
||
"panel.template_custom_templates": "Custom templates",
|
||
"panel.template_daily_limit_label": "Daily limit",
|
||
"panel.template_edit_title": "Edit Template",
|
||
"panel.template_icon_label": "Icon (MDI)",
|
||
"panel.template_name_label": "Name",
|
||
"panel.template_picker_title": "Add from Template",
|
||
"panel.template_preview_hint": "Review and customise each chore before creating. Expand to edit all fields, or remove with ✕.",
|
||
"panel.template_pts_total": "{count} chore(s) · {points} pts total",
|
||
"panel.template_requires_approval_label": "Requires approval",
|
||
"panel.template_requires_approval_no": "No",
|
||
"panel.template_requires_approval_yes": "Yes",
|
||
"panel.template_save_icon_label": "Icon (MDI)",
|
||
"panel.template_save_name_label": "Template name",
|
||
"panel.template_save_name_placeholder": "e.g. My morning pack",
|
||
"panel.template_save_select_chores": "Select chores to include",
|
||
"panel.template_save_title": "Save as Template",
|
||
"panel.template_schedule_days_label": "Schedule (days)",
|
||
"panel.template_schedule_label": "Schedule",
|
||
"panel.template_title": "Templates",
|
||
"panel.template_unnamed": "(unnamed)",
|
||
"panel.time_afternoon": "Afternoon",
|
||
"panel.time_ago_days": "{count}d ago",
|
||
"panel.time_ago_hours": "{count}h ago",
|
||
"panel.time_ago_just_now": "just now",
|
||
"panel.time_ago_minutes": "{count}m ago",
|
||
"panel.time_anytime": "Anytime",
|
||
"panel.time_evening": "Evening",
|
||
"panel.time_morning": "Morning",
|
||
"panel.time_night": "Night",
|
||
"panel.toast_added_bonus": "Added bonus",
|
||
"panel.toast_added_penalty": "Added penalty",
|
||
"panel.toast_apply_failed": "Apply failed: {error}",
|
||
"panel.toast_approve_failed": "Approve failed: {error}",
|
||
"panel.toast_approved": "Approved",
|
||
"panel.toast_badge_added": "Badge added",
|
||
"panel.toast_badge_award_failed": "Award failed: {error}",
|
||
"panel.toast_badge_awarded": "Badge awarded",
|
||
"panel.toast_badge_criterion_invalid": "Criterion value must be ≥ 1",
|
||
"panel.toast_badge_delete_failed": "Delete failed: {error}",
|
||
"panel.toast_badge_deleted": "Badge deleted",
|
||
"panel.toast_badge_name_required": "Name is required",
|
||
"panel.toast_badge_rebuild_failed": "Rebuild failed: {error}",
|
||
"panel.toast_badge_rebuilt": "Badges rebuilt",
|
||
"panel.toast_badge_revoke_failed": "Revoke failed: {error}",
|
||
"panel.toast_badge_revoked": "Badge revoked",
|
||
"panel.toast_badge_save_failed": "Save failed: {error}",
|
||
"panel.toast_badge_select_child": "Select a child",
|
||
"panel.toast_badge_update_failed": "Update failed: {error}",
|
||
"panel.toast_badge_updated": "Badge updated",
|
||
"panel.toast_bonus_applied": "Bonus applied",
|
||
"panel.toast_bulk_add_failed": "Bulk add failed: {error}",
|
||
"panel.toast_bulk_added": "Added {count} chore(s)",
|
||
"panel.toast_child_added": "Child added",
|
||
"panel.toast_child_updated": "Child updated",
|
||
"panel.toast_chore_activated": "Chore activated",
|
||
"panel.toast_chore_added": "Chore added",
|
||
"panel.toast_chore_cloned": "Chore duplicated",
|
||
"panel.toast_chore_deactivated": "Chore deactivated",
|
||
"panel.toast_chore_updated": "Chore updated",
|
||
"panel.toast_copied": "Copied!",
|
||
"panel.toast_created_chores": "Created {count} chore(s)",
|
||
"panel.toast_delete_failed": "Delete failed: {error}",
|
||
"panel.toast_deleted": "Deleted",
|
||
"panel.toast_enter_chore_name": "Enter at least one chore name",
|
||
"panel.toast_group_added": "Group added",
|
||
"panel.toast_group_updated": "Group updated",
|
||
"panel.toast_name_and_chore_required": "Name and at least one chore required",
|
||
"panel.toast_name_enter_select": "Enter a name and select at least one chore",
|
||
"panel.toast_name_required": "Name is required",
|
||
"panel.toast_name_required_template": "Name required",
|
||
"panel.toast_order_saved": "Order saved",
|
||
"panel.toast_penalty_applied": "Penalty applied",
|
||
"panel.toast_points_required": "Points must be 1 or higher",
|
||
"panel.toast_reject_failed": "Reject failed: {error}",
|
||
"panel.toast_rejected": "Rejected",
|
||
"panel.toast_rename_failed": "Rename failed: {error}",
|
||
"panel.toast_renamed": "Renamed",
|
||
"panel.toast_reward_added": "Reward added",
|
||
"panel.toast_reward_updated": "Reward updated",
|
||
"panel.toast_save_failed": "Save failed: {error}",
|
||
"panel.toast_settings_saved": "Saved ({count} field(s))",
|
||
"panel.toast_skip_done": "Rotation skipped — next child assigned",
|
||
"panel.toast_skip_failed": "Skip failed: {error}",
|
||
"panel.toast_template_created": "Template \"{name}\" created",
|
||
"panel.toast_template_deleted": "Template deleted",
|
||
"panel.toast_template_failed_apply": "Failed to apply template",
|
||
"panel.toast_template_failed_create": "Failed to create template",
|
||
"panel.toast_template_failed_delete": "Failed to delete",
|
||
"panel.toast_template_failed_save": "Failed to save template",
|
||
"panel.toast_template_failed_update": "Failed to update",
|
||
"panel.toast_template_saved": "Template \"{name}\" saved",
|
||
"panel.toast_template_updated": "Template updated",
|
||
"panel.toast_toggle_failed": "Toggle failed: {error}",
|
||
"panel.toast_updated_bonus": "Updated bonus",
|
||
"panel.toast_updated_penalty": "Updated penalty",
|
||
"panel.tooltip_cancel": "Cancel",
|
||
"panel.tooltip_clear": "Clear",
|
||
"panel.tooltip_close": "Close",
|
||
"panel.tooltip_remove": "Remove",
|
||
"panel.tooltip_remove_batch": "Remove from batch",
|
||
"panel.tooltip_rename": "Double-click to rename",
|
||
"panel.tooltip_save": "Save",
|
||
"panel.topbar_awaiting_approval": "Awaiting your approval — {details}",
|
||
"panel.topbar_chore_count": "{count} chore(s)",
|
||
"panel.topbar_pending": "{count} pending",
|
||
"panel.topbar_pending_title": "{count} pending — click to review",
|
||
"panel.topbar_reward_count": "{count} reward claim(s)",
|
||
"panel.topbar_swap_count": "{count} swap request(s)",
|
||
"panel.vis_equals": "Equals — state matches exactly",
|
||
"panel.vis_gt": "Greater than (>)",
|
||
"panel.vis_gte": "Greater than or equal (≥)",
|
||
"panel.vis_lt": "Less than (<)",
|
||
"panel.vis_lte": "Less than or equal (≤)",
|
||
"panel.vis_none": "No filter — always show chore",
|
||
"panel.vis_not_equals": "Not equal",
|
||
"penalties.add_penalty": "Add Penalty",
|
||
"penalties.applying_to": "Applying to {childName} — current balance: {points} {pointsName}",
|
||
"penalties.btn_delete_title": "Delete",
|
||
"penalties.btn_edit_title": "Edit",
|
||
"penalties.card_description": "Apply point-deduction penalties to children",
|
||
"penalties.card_name": "TaskMate Penalties",
|
||
"penalties.default_title": "Penalties",
|
||
"penalties.editor.manage_note": "Add, edit, and delete penalty templates directly on the card itself — tap the pencil icon in the card header. This editor only controls the card's appearance.",
|
||
"penalties.empty_sub": "Tap the pencil icon to add penalties",
|
||
"penalties.empty_title": "No penalties yet",
|
||
"penalties.form_description_label": "Description (optional)",
|
||
"penalties.form_description_placeholder": "Short description",
|
||
"penalties.form_icon_label": "Icon (MDI)",
|
||
"penalties.form_name_label": "Name",
|
||
"penalties.form_name_placeholder": "e.g. Not going to bed",
|
||
"penalties.form_points_label": "Points",
|
||
"penalties.manage_title": "Manage penalties",
|
||
"penalties.new_penalty": "New Penalty",
|
||
"penalties.toast_add_failed": "Failed to add penalty",
|
||
"penalties.toast_applied": "-{points} {pointsName} from {childName}",
|
||
"penalties.toast_apply_failed": "Failed to apply penalty",
|
||
"penalties.toast_delete_failed": "Failed to delete penalty",
|
||
"penalties.toast_save_failed": "Failed to save changes",
|
||
"points_card.card_description": "A parent-friendly card to add or remove points from children",
|
||
"points_card.card_name": "TaskMate Points Card",
|
||
"points_card.default_title": "Manage Points",
|
||
"points_card.dialog_add_title": "Add {pointsName}",
|
||
"points_card.dialog_confirm_add": "Add",
|
||
"points_card.dialog_confirm_remove": "Remove",
|
||
"points_card.dialog_loading": "...",
|
||
"points_card.dialog_points_helper": "Enter 1–100",
|
||
"points_card.dialog_points_label": "Number of {pointsName}",
|
||
"points_card.dialog_reason_label": "Reason (optional)",
|
||
"points_card.dialog_reason_placeholder": "e.g., Great behavior, Helped a sibling...",
|
||
"points_card.dialog_remove_title": "Remove {pointsName}",
|
||
"points_card.dialog_subtitle": "for {childName}",
|
||
"points_card.editor.add_buttons_helper": "Comma-separated amounts e.g. 1, 2, 5, 10, 25",
|
||
"points_card.editor.add_buttons_label": "Add Points Buttons",
|
||
"points_card.editor.entity_helper": "The TaskMate overview sensor entity",
|
||
"points_card.editor.entity_label": "Entity",
|
||
"points_card.editor.header_colour_helper": "Card header background colour",
|
||
"points_card.editor.header_colour_label": "Header Colour",
|
||
"points_card.editor.remove_buttons_helper": "Comma-separated amounts e.g. 1, 2, 5, 10, 25",
|
||
"points_card.editor.remove_buttons_label": "Remove Points Buttons",
|
||
"points_card.editor.show_dialog_label": "Show ⋯ button for custom amount with reason",
|
||
"points_card.editor.title_label": "Title",
|
||
"points_card.empty_subtitle": "Add children in TaskMate settings",
|
||
"points_card.empty_title": "No Children Found",
|
||
"points_card.notification_added": "Added {points} {pointsLabel} to {childName}",
|
||
"points_card.notification_failed": "Failed: {message}",
|
||
"points_card.notification_failed_action": "Failed to {action} points: {message}",
|
||
"points_card.notification_quick": "{sign}{amount} {pointsName} for {childName}",
|
||
"points_card.notification_removed": "Removed {points} {pointsLabel} from {childName}",
|
||
"points_card.please_define_entity": "Please define an entity (taskmate overview sensor)",
|
||
"points_card.quick_add_title": "Add {amount} {pointsName}",
|
||
"points_card.quick_custom_title": "Custom amount",
|
||
"points_card.quick_label_add": "+ {pointsName}",
|
||
"points_card.quick_label_remove": "− {pointsName}",
|
||
"points_card.quick_remove_title": "Remove {amount} {pointsName}",
|
||
"points_card.validation_range": "Please enter a number between 1 and 100",
|
||
"points_display.board_title": "Points Board",
|
||
"points_display.card_description": "Kid-friendly display of points. Supports single child, all children, or combined family total.",
|
||
"points_display.card_name": "TaskMate Points Display",
|
||
"points_display.career_score_label": "Career Score",
|
||
"points_display.combined_family_total": "Combined Family Total",
|
||
"points_display.current_points_label": "Current Points",
|
||
"points_display.default_title": "Points",
|
||
"points_display.editor.appearance": "Appearance",
|
||
"points_display.editor.child_id_note": "Save the entity first so children load automatically.",
|
||
"points_display.editor.child_id_placeholder": "Enter child_id",
|
||
"points_display.editor.child_label": "Child",
|
||
"points_display.editor.display_mode": "Display Mode",
|
||
"points_display.editor.entity_label": "TaskMate Entity",
|
||
"points_display.editor.mode_cumulative": "∑ Combined",
|
||
"points_display.editor.mode_label": "Mode",
|
||
"points_display.editor.mode_multi": "👥 All Children",
|
||
"points_display.editor.mode_single": "⭐ Single",
|
||
"points_display.editor.primary_career_score": "🏆 Career Score",
|
||
"points_display.editor.primary_current_points": "💰 Current Points",
|
||
"points_display.editor.primary_display": "Primary Display",
|
||
"points_display.editor.select_child": "— Select a child —",
|
||
"points_display.editor.show_rank": "Rank medals",
|
||
"points_display.editor.show_streak": "Streak",
|
||
"points_display.editor.show_weekly": "This week's points",
|
||
"points_display.editor.stats_to_show": "Stats to Show",
|
||
"points_display.editor.title_placeholder": "(auto)",
|
||
"points_display.empty_no_child": "No child selected or child not found.",
|
||
"points_display.empty_no_children": "No children found in TaskMate data.",
|
||
"points_display.empty_set_child_id": "Set child_id in the card editor.",
|
||
"points_display.family_subtitle": "{count} children · all time",
|
||
"points_display.family_title": "Family Points",
|
||
"points_display.individual_scores": "Individual Scores",
|
||
"points_display.mode_cumulative": "Combined",
|
||
"points_display.mode_multi": "All Children",
|
||
"points_display.mode_single": "Single",
|
||
"points_display.points_label": "points",
|
||
"points_display.rank": "Rank",
|
||
"points_display.single_title": "{name}'s Points",
|
||
"points_display.streak": "Streak",
|
||
"points_display.streak_day": "{count} day",
|
||
"points_display.streak_days": "{count} days",
|
||
"points_display.this_week": "This Week",
|
||
"points_display.total_points": "Total Points",
|
||
"points_display.weekly_plus": "+{count} this week",
|
||
"points_display.weekly_pts": "{count} pts",
|
||
"reorder.add_chores_first": "Add chores to this child first",
|
||
"reorder.card_description": "A card for reordering chores per child, organized by time category",
|
||
"reorder.card_name": "TaskMate Reorder Card",
|
||
"reorder.child_not_found": "Child not found: {child_id}",
|
||
"reorder.chore_count": "{count} chore",
|
||
"reorder.chore_count_plural": "{count} chores",
|
||
"reorder.default_title": "Reorder Chores",
|
||
"reorder.drag_to_reorder": "Drag to reorder",
|
||
"reorder.editor.child": "Child",
|
||
"reorder.editor.child_helper": "Which child to manage chore order for",
|
||
"reorder.editor.select_child": "Select a child...",
|
||
"reorder.error.child_id_required": "Please define a child_id",
|
||
"reorder.error.entity_required": "Please define an entity (TaskMate overview sensor)",
|
||
"reorder.move_down": "Move down",
|
||
"reorder.move_up": "Move up",
|
||
"reorder.no_chores_assigned": "No chores assigned",
|
||
"reorder.notification.save_error_message": "Failed to save chore order: {error}",
|
||
"reorder.notification.save_error_title": "Error Saving Order",
|
||
"reorder.notification.save_success_message": "The chore order has been updated successfully.",
|
||
"reorder.notification.save_success_title": "Chore Order Saved",
|
||
"reorder.save_order": "Save Order",
|
||
"reorder.saving": "Saving...",
|
||
"reorder.unsaved_changes": "You have unsaved changes",
|
||
"reward_progress.card_description": "Full-screen motivational reward progress display",
|
||
"reward_progress.card_name": "TaskMate Reward Progress",
|
||
"reward_progress.combined": "combined",
|
||
"reward_progress.combined_points_pool": "Combined Points Pool",
|
||
"reward_progress.default_title": "Reward Goal",
|
||
"reward_progress.editor.child_filter_all": "All assigned children",
|
||
"reward_progress.editor.child_helper": "Show only this child's progress",
|
||
"reward_progress.editor.first_available": "First available reward",
|
||
"reward_progress.editor.reward_helper": "Which reward to show progress for",
|
||
"reward_progress.editor.reward_to_display": "Reward to display",
|
||
"reward_progress.error.entity_required": "Please define an entity",
|
||
"reward_progress.jackpot_reward": "Jackpot Reward",
|
||
"reward_progress.more_needed": "{amount} more needed",
|
||
"reward_progress.no_rewards": "No rewards found",
|
||
"reward_progress.ready": "🎉 Ready!",
|
||
"reward_progress.ready_to_claim": "Ready to claim!",
|
||
"reward_progress.ready_to_claim_emoji": "🎉 Ready to claim!",
|
||
"reward_progress.total_pool": "Total Pool",
|
||
"reward_progress.unavailable": "TaskMate unavailable",
|
||
"rewards.add_all": "All",
|
||
"rewards.all_children": "All Children",
|
||
"rewards.allocated": "Allocated",
|
||
"rewards.awaiting_approval": "Awaiting parent approval",
|
||
"rewards.card_description": "A card displaying available rewards with star costs",
|
||
"rewards.card_name": "TaskMate Rewards Card",
|
||
"rewards.claim_reward": "Claim reward",
|
||
"rewards.confirm_body": "Claim {name}?",
|
||
"rewards.confirm_claim_btn": "Claim!",
|
||
"rewards.confirm_cost": "Cost",
|
||
"rewards.confirm_pool_total": "Pool total",
|
||
"rewards.confirm_remaining": "Remaining",
|
||
"rewards.confirm_title": "Claim Reward?",
|
||
"rewards.confirm_your_points": "Your {name}",
|
||
"rewards.default_title": "Rewards",
|
||
"rewards.deposit_custom_add": "Add",
|
||
"rewards.deposit_custom_label": "Custom amount to deposit",
|
||
"rewards.deposit_custom_placeholder": "Amount",
|
||
"rewards.deposit_disabled_insufficient": "Not enough spendable ({spendable} available)",
|
||
"rewards.deposit_disabled_loading": "Depositing…",
|
||
"rewards.deposit_disabled_no_child": "Select a child to deposit",
|
||
"rewards.deposit_points": "Deposit {amount}",
|
||
"rewards.editor.enable_pool_mode": "Enable Pool Mode (Savings Jars)",
|
||
"rewards.editor.enable_pool_mode_helper": "Each reward becomes a dedicated savings pool — children allocate points directly to a goal rather than spending from a global balance",
|
||
"rewards.editor.expand_to_fit": "Expand card to fit all rewards",
|
||
"rewards.editor.expand_to_fit_helper": "Grow the card to show every reward instead of scrolling a fixed-height list (designed styles only)",
|
||
"rewards.editor.entity": "Entity",
|
||
"rewards.editor.entity_helper": "The TaskMate overview sensor entity",
|
||
"rewards.editor.filter_by_child": "Filter by Child",
|
||
"rewards.editor.filter_by_child_all": "All Children",
|
||
"rewards.editor.filter_by_child_helper": "Only show rewards available to this child (leave empty for all rewards)",
|
||
"rewards.editor.show_child_badges": "Show child assignment badges",
|
||
"rewards.editor.show_child_badges_helper": "Display which children can claim each reward",
|
||
"rewards.editor.title": "Title",
|
||
"rewards.editor.title_helper": "Card title displayed in the header (default: \"Rewards\")",
|
||
"rewards.empty_subtitle": "Add rewards in TaskMate settings",
|
||
"rewards.empty_title": "No Rewards Available",
|
||
"rewards.error.entity_required": "Please define an entity (taskmate overview sensor)",
|
||
"rewards.expired": "Expired",
|
||
"rewards.expires_in_days": "Expires in {count} day",
|
||
"rewards.expires_in_days_plural": "Expires in {count} days",
|
||
"rewards.expires_today": "Expires today",
|
||
"rewards.jackpot": "JACKPOT",
|
||
"rewards.not_enough_points": "Not enough points",
|
||
"rewards.only_n_left": "Only {count} left!",
|
||
"rewards.pool_full": "Pool full!",
|
||
"rewards.pool_locked_note": "Allocations are locked — they can only be spent on this goal",
|
||
"rewards.redeem": "Redeem",
|
||
"rewards.reward_count_plural": "{count} rewards",
|
||
"rewards.reward_count_singular": "{count} reward",
|
||
"rewards.sold_out": "Sold Out",
|
||
"rewards.available_when": "Available {window}",
|
||
"rewards.locked_now": "Not available right now",
|
||
"rewards.spendable_balance": "Spendable",
|
||
"rewards.unavailable_hint": "This reward can no longer be claimed",
|
||
"streak.achievement.fifty_desc": "Complete 50 chores",
|
||
"streak.achievement.fifty_name": "50 Done",
|
||
"streak.achievement.first_desc": "Complete your first chore",
|
||
"streak.achievement.first_name": "First!",
|
||
"streak.achievement.hundred_desc": "Complete 100 chores",
|
||
"streak.achievement.hundred_name": "100 Done",
|
||
"streak.achievement.points100_desc": "Earn 100 points total",
|
||
"streak.achievement.points100_name": "100 ⭐",
|
||
"streak.achievement.points50_desc": "Earn 50 points total",
|
||
"streak.achievement.points50_name": "50 ⭐",
|
||
"streak.achievement.streak14_desc": "14 day streak",
|
||
"streak.achievement.streak14_name": "2 Weeks",
|
||
"streak.achievement.streak30_desc": "30 day streak",
|
||
"streak.achievement.streak30_name": "Month!",
|
||
"streak.achievement.streak3_desc": "3 day streak",
|
||
"streak.achievement.streak3_name": "3 Days",
|
||
"streak.achievement.streak7_desc": "7 day streak",
|
||
"streak.achievement.streak7_name": "Week!",
|
||
"streak.achievement.ten_desc": "Complete 10 chores",
|
||
"streak.achievement.ten_name": "10 Done",
|
||
"streak.achievements": "Achievements",
|
||
"streak.card_description": "Consecutive day streaks and milestone badges for each child",
|
||
"streak.card_name": "TaskMate Streaks & Achievements",
|
||
"streak.day_streak": "day streak",
|
||
"streak.freezes_tooltip": "Streak freezes — each one saves your streak on a day you miss",
|
||
"streak.freezes_aria": "{count} streak freezes",
|
||
"streak.default_title": "Streaks & Achievements",
|
||
"streak.editor.child_helper": "Show streak for a specific child only",
|
||
"streak.editor.days_shown": "Days Shown in Bar",
|
||
"streak.editor.days_shown_helper": "How many days of dots to show (default: 14)",
|
||
"streak.editor.title": "Title",
|
||
"streak.error.entity_required": "Please define an entity",
|
||
"visibility.description_hidden": "Hidden by visibility condition",
|
||
"visibility.description_shown": "Shown by visibility condition",
|
||
"visibility.label_entity": "Visibility Entity",
|
||
"visibility.label_operator": "Visibility Operator",
|
||
"visibility.label_state": "Visibility State",
|
||
"visibility.operator_equals": "Equals",
|
||
"visibility.operator_gt": "Greater than (>)",
|
||
"visibility.operator_gte": "Greater than or equal (≥)",
|
||
"visibility.operator_lt": "Less than (<)",
|
||
"visibility.operator_lte": "Less than or equal (≤)",
|
||
"visibility.operator_not_equals": "Not Equal",
|
||
"weekly.card_description": "Week at a glance — chores, points, and daily bar chart",
|
||
"weekly.card_name": "TaskMate Weekly Summary",
|
||
"weekly.child_chores": "{count} chores",
|
||
"weekly.child_days": "{count}/7 days",
|
||
"weekly.child_days_active_title": "{count} of 7 days active",
|
||
"weekly.day_fri": "Fri",
|
||
"weekly.day_mon": "Mon",
|
||
"weekly.day_sat": "Sat",
|
||
"weekly.day_sun": "Sun",
|
||
"weekly.day_thu": "Thu",
|
||
"weekly.day_tue": "Tue",
|
||
"weekly.day_wed": "Wed",
|
||
"weekly.default_title": "This Week",
|
||
"weekly.editor.child_helper": "Show weekly summary for a specific child only",
|
||
"weekly.editor.title": "Title",
|
||
"weekly.error.entity_required": "Please define an entity",
|
||
"weekly.section_children_this_week": "Children This Week",
|
||
"weekly.section_chores_per_day": "Chores Per Day",
|
||
"weekly.section_points_per_day": "Points Per Day",
|
||
"weekly.stat_chores": "Chores",
|
||
"weekly.stat_rewards": "Rewards",
|
||
"weekly.stat_days_active": "Days Active",
|
||
"notification.all_chores_done.description": "Celebration ping when a child finishes every chore for the day.",
|
||
"notification.all_chores_done.name": "All chores done",
|
||
"notification.badge_earned.description": "Sent when a child earns a new badge. Per-badge mute still applies.",
|
||
"notification.badge_earned.name": "Badge earned",
|
||
"notification.bedtime_reminder.description": "Pings the child if they have outstanding chores at the configured time.",
|
||
"notification.bedtime_reminder.name": "Bedtime reminder",
|
||
"notification.pending_chore_approval.description": "Sent to parents when a child marks a chore complete. Tap Approve or Reject from the notification.",
|
||
"notification.pending_chore_approval.name": "Pending chore approval",
|
||
"notification.pending_reward_claim.description": "Sent to parents when a child redeems a reward. Tap Approve or Reject from the notification.",
|
||
"notification.pending_reward_claim.name": "Pending reward claim",
|
||
"notification.streak_at_risk.description": "Fires when an active streak hasn't been extended yet today.",
|
||
"notification.streak_at_risk.name": "Streak at risk",
|
||
"notification.streak_milestone.description": "Celebrates each new streak milestone a child reaches (off by default).",
|
||
"notification.streak_freeze_used.name": "Streak freeze used",
|
||
"notification.streak_freeze_used.description": "Tells you when a streak-freeze token saves a child's streak on a missed day (off by default).",
|
||
"notification.streak_milestone.name": "Streak milestone",
|
||
"panel.tp_label_placeholder": "Period name",
|
||
"panel.tp_add_period": "Add period",
|
||
"panel.tp_reset_defaults": "Reset to defaults",
|
||
"panel.tp_delete_title": "Delete period",
|
||
"panel.tp_in_use_title": "Used by {count} chore(s) — reassign them before deleting",
|
||
"panel.tp_in_use_hint": "Used by {count} chore(s). Reassign them to another period to delete this one.",
|
||
"panel.tp_anytime_hint": "Always available, all day. Built-in and cannot be removed.",
|
||
"panel.tp_err_label_required": "Every custom period needs a name.",
|
||
"panel.tp_err_time_required": "Set a start and end time for “{name}”.",
|
||
"panel.tp_err_order": "“{name}” must start before it ends.",
|
||
"panel.tp_err_empty": "Add at least one time period.",
|
||
"panel.tp_err_overlap": "“{a}” overlaps “{b}” — periods cannot overlap.",
|
||
"panel.settings_surprise_enabled_label": "Surprise bonuses",
|
||
"panel.settings_surprise_enabled_hint": "Give each child a daily random chance of a surprise points bonus (rolled at 16:00).",
|
||
"panel.settings_surprise_params_label": "Surprise bonus settings",
|
||
"panel.settings_surprise_params_hint": "Daily chance per child, and the random points range awarded on a hit.",
|
||
"panel.settings_surprise_chance": "Chance %",
|
||
"panel.settings_surprise_min": "Min pts",
|
||
"panel.settings_surprise_max": "Max pts",
|
||
"panel.reward_restock_label": "Auto-restock",
|
||
"panel.reward_restock_hint": "Periodically reset this reward's stock back to a set amount.",
|
||
"panel.reward_restock_amount": "Restock to",
|
||
"panel.reward_restock_period": "Restock every",
|
||
"panel.reward_restock_daily": "Day",
|
||
"panel.reward_restock_weekly": "Week (Mon)",
|
||
"panel.reward_restock_monthly": "Month (1st)",
|
||
"panel.chore_expires_label": "Expiry date (optional)",
|
||
"panel.chore_expires_hint": "After this date the chore auto-disables. Leave blank for no expiry.",
|
||
"panel.bulk_select": "Select",
|
||
"panel.bulk_done": "Done",
|
||
"panel.bulk_selected": "{count} selected",
|
||
"panel.bulk_enable": "Enable",
|
||
"panel.bulk_disable": "Disable",
|
||
"panel.bulk_delete": "Delete",
|
||
"panel.bulk_reassign_to": "Reassign to…",
|
||
"panel.bulk_apply": "Apply",
|
||
"panel.bulk_pick_target": "Pick who to reassign to first.",
|
||
"panel.bulk_delete_confirm": "Delete {count} chore(s)? This cannot be undone.",
|
||
"panel.bulk_done_toast": "{count} chore(s) updated",
|
||
"panel.settings_decay_enabled_label": "Points decay",
|
||
"panel.settings_decay_enabled_hint": "Periodically shrink each child's spendable balance to discourage hoarding.",
|
||
"panel.settings_decay_params_label": "Points decay settings",
|
||
"panel.settings_decay_params_hint": "How much of the balance to remove, and how often.",
|
||
"panel.settings_decay_percent": "Decay %",
|
||
"panel.settings_decay_period": "Every",
|
||
"panel.gift_btn": "Gift points",
|
||
"panel.gift_dialog_title": "Gift points",
|
||
"panel.gift_from": "From",
|
||
"panel.gift_to": "To",
|
||
"panel.gift_amount": "Amount",
|
||
"panel.gift_send": "Send gift",
|
||
"panel.gift_sent": "Points gifted",
|
||
"panel.gift_err_same": "Pick two different children.",
|
||
"panel.gift_err_amount": "Enter an amount of at least 1.",
|
||
"panel.settings_level_step_label": "XP per level",
|
||
"panel.settings_level_step_hint": "Earned points needed to advance one level (XP = lifetime earned points).",
|
||
"panel.child_stat_level": "Level",
|
||
"notification.level_up.name": "Level up",
|
||
"notification.level_up.description": "Celebrates when a child reaches a new XP level (off by default).",
|
||
"child.level_label": "Lvl {level}",
|
||
"panel.settings_spendcap_enabled_label": "Spending cap",
|
||
"panel.settings_spendcap_enabled_hint": "Limit how many points each child can spend on rewards per period.",
|
||
"panel.settings_spendcap_params_label": "Spending cap settings",
|
||
"panel.settings_spendcap_params_hint": "Max points spendable per period (0 = no limit).",
|
||
"panel.settings_spendcap_amount": "Cap (pts)",
|
||
"panel.settings_interest_enabled_label": "Savings interest",
|
||
"panel.settings_interest_enabled_hint": "Periodically pay each child interest on their spendable balance (rewards saving).",
|
||
"panel.settings_interest_params_label": "Savings interest settings",
|
||
"panel.settings_interest_percent": "Interest %",
|
||
"panel.settings_interest_params_hint": "Interest rate applied to the balance, and how often.",
|
||
"panel.chore_due_time_label": "Due time (optional)",
|
||
"panel.chore_due_time_hint": "Completions at/before this time earn the early bonus; after it lose the late penalty.",
|
||
"panel.chore_early_bonus_label": "Early bonus",
|
||
"panel.chore_late_penalty_label": "Late penalty",
|
||
"panel.chore_require_photo_label": "Require photo proof",
|
||
"panel.chore_require_photo_hint": "Completions must be parent-approved; an evidence photo (if provided) shows in approvals.",
|
||
"panel.chore_open_ended_label": "Open-ended (child describes it)",
|
||
"panel.chore_open_ended_hint": "The child writes what they did and suggests points. Always needs your approval — you set the real points.",
|
||
"panel.activity_view_photo": "View photo",
|
||
"panel.adjust_add": "Add",
|
||
"panel.adjust_add_title": "Add {amount} {points} to {child}",
|
||
"panel.adjust_amount": "Amount",
|
||
"panel.adjust_custom_title": "Adjust {child}'s points by a custom amount",
|
||
"panel.adjust_dialog_title": "Adjust points — {name}",
|
||
"panel.adjust_done": "{sign}{amount} {points} for {child}",
|
||
"panel.adjust_err_amount": "Enter an amount between 1 and 10000.",
|
||
"panel.adjust_reason": "Reason (optional)",
|
||
"panel.adjust_remove": "Remove",
|
||
"panel.adjust_remove_title": "Remove {amount} {points} from {child}",
|
||
"panel.swap_btn": "Request swap",
|
||
"panel.swap_dialog_title": "Swap: {chore}",
|
||
"panel.swap_requester": "Give today's turn to",
|
||
"panel.swap_create": "Request swap",
|
||
"panel.swap_pick_child": "Pick a child.",
|
||
"panel.swap_requested": "Swap requested",
|
||
"panel.swap_approved": "Swap approved",
|
||
"panel.swap_rejected": "Swap rejected",
|
||
"panel.swap_request_text": "{child} wants to do “{chore}” today",
|
||
"panel.swap_from": "currently {name}",
|
||
"notification.weekly_digest.name": "Weekly digest",
|
||
"notification.weekly_digest.description": "A Sunday-evening summary of each child's week (chores + points). Off by default.",
|
||
"panel.settings_celebration_notify_label": "Celebration notifications",
|
||
"panel.settings_celebration_notify_hint": "Send a notification for big celebration moments (level-ups, streak milestones, perfect weeks). Off by default.",
|
||
"panel.settings_celebration_tier_label": "Minimum celebration size",
|
||
"panel.settings_celebration_tier_hint": "Only notify for moments at or above this size. Every celebration still fires a taskmate_celebration event for automations.",
|
||
"panel.settings_celebration_tier_1": "All (small and up)",
|
||
"panel.settings_celebration_tier_2": "Medium and up",
|
||
"panel.settings_celebration_tier_3": "Epic only",
|
||
"notification.celebration.name": "Celebration",
|
||
"notification.celebration.description": "Big celebration moments — level-ups, streak milestones and perfect weeks. Off by default.",
|
||
"panel.tab_quests": "Quests",
|
||
"panel.quest_title": "Quests",
|
||
"panel.search_quests": "Search quests…",
|
||
"panel.btn_add_quest": "Add quest",
|
||
"panel.quest_add_tile": "Add quest",
|
||
"panel.quest_need_chores": "Create some chores first — a quest is a chain of existing chores.",
|
||
"panel.empty_quests_title": "No quests yet",
|
||
"panel.empty_quests_copy": "Chain chores together into a quest. Finish every step to earn a bonus.",
|
||
"panel.entity_quest": "quest",
|
||
"panel.quest_all_children": "All children",
|
||
"panel.quest_missing_chore": "(deleted chore)",
|
||
"panel.quest_badge_repeatable": "Repeatable",
|
||
"panel.quest_badge_inactive": "Inactive",
|
||
"panel.quest_stat_steps": "Steps",
|
||
"panel.quest_stat_bonus": "Bonus {points_name}",
|
||
"panel.quest_assigned_to": "For",
|
||
"panel.dialog_add_quest": "Add quest",
|
||
"panel.dialog_edit_quest": "Edit quest",
|
||
"panel.quest_bonus_label": "Bonus {points_name}",
|
||
"panel.quest_steps_label": "Steps (in order)",
|
||
"panel.quest_steps_hint": "The child advances one step each time the chore at their current step is approved. Tap a chore below to add or remove it; use ▲▼ to reorder.",
|
||
"panel.quest_no_steps": "No steps yet — tap a chore below to add the first step.",
|
||
"panel.quest_assigned_label": "Assign to",
|
||
"panel.quest_assigned_hint": "Leave all unselected to make this quest available to every child.",
|
||
"panel.quest_repeatable_label": "Repeatable",
|
||
"panel.quest_repeatable_hint": "When finished, progress resets so the child can run the quest again.",
|
||
"panel.quest_active_label": "Active",
|
||
"panel.quest_active_hint": "Inactive quests don't track progress or award bonuses.",
|
||
"panel.quest_need_step": "Add at least one step.",
|
||
"panel.toast_quest_added": "Quest added",
|
||
"panel.toast_quest_updated": "Quest updated",
|
||
"panel.settings_avatars_title": "Avatar unlockables",
|
||
"panel.settings_avatars_label": "Manage avatars",
|
||
"panel.settings_avatars_hint": "{count} avatars in the catalogue. Children unlock avatars by reaching levels, points or streaks, then pick their own.",
|
||
"panel.settings_avatars_btn": "Manage avatars",
|
||
"panel.avatar_dialog_title": "Avatar catalogue",
|
||
"panel.avatar_dialog_hint": "Define the avatars children can earn. Each row needs an mdi icon and an unlock requirement. Children can switch to any avatar they've unlocked.",
|
||
"panel.avatar_empty": "No avatars yet — add one below.",
|
||
"panel.avatar_add_row": "Add avatar",
|
||
"panel.avatar_label_ph": "Name (e.g. Rocket)",
|
||
"panel.avatar_unlock_free": "Always available",
|
||
"panel.avatar_unlock_level": "Reach level",
|
||
"panel.avatar_unlock_points": "Total points earned",
|
||
"panel.avatar_unlock_streak": "Best streak (days)",
|
||
"panel.toast_avatars_saved": "Avatars saved",
|
||
"child.avatar_change": "Change your avatar",
|
||
"child.avatar_locked": "Locked",
|
||
"child.avatar_change_failed": "Could not change avatar.",
|
||
"panel.tab_challenges": "Challenges",
|
||
"panel.challenge_title": "Challenges",
|
||
"panel.search_challenges": "Search challenges…",
|
||
"panel.btn_add_challenge": "Add challenge",
|
||
"panel.challenge_add_tile": "Add challenge",
|
||
"panel.empty_challenges_title": "No challenges yet",
|
||
"panel.empty_challenges_copy": "Set a daily or weekly target — complete N chores or earn N points — for a bonus that refreshes each period.",
|
||
"panel.entity_challenge": "challenge",
|
||
"panel.challenge_scope_label": "Refreshes",
|
||
"panel.challenge_scope_daily": "Daily",
|
||
"panel.challenge_scope_weekly": "Weekly",
|
||
"panel.challenge_metric_label": "Goal type",
|
||
"panel.challenge_metric_chores": "Chores completed",
|
||
"panel.challenge_metric_points": "{points_name} earned",
|
||
"panel.challenge_target_label": "Target",
|
||
"panel.challenge_target_hint": "How many to reach within the period.",
|
||
"panel.dialog_add_challenge": "Add challenge",
|
||
"panel.dialog_edit_challenge": "Edit challenge",
|
||
"panel.toast_challenge_added": "Challenge added",
|
||
"panel.toast_challenge_updated": "Challenge updated",
|
||
"panel.settings_allow_negative_label": "Allow negative balance",
|
||
"panel.settings_allow_negative_hint": "Let penalties take a child's balance below zero instead of stopping at zero.",
|
||
"panel.chore_depends_label": "Depends on",
|
||
"panel.chore_depends_hint": "This chore stays hidden until the selected chores are approved for the child today.",
|
||
"panel.notif_quiet_hours_label": "Quiet hours",
|
||
"panel.notif_quiet_hours_desc": "No reminders are sent to this child during this window (do-not-disturb). Leave blank to disable.",
|
||
"notification.mandatory_reminder.name": "Mandatory chore reminder",
|
||
"notification.mandatory_reminder.description": "Nudges the child when a mandatory chore is overdue, then reminds again after the escalation delay. Off by default.",
|
||
"notification.mandatory_parent_alert.name": "Mandatory chore parent alert",
|
||
"notification.mandatory_parent_alert.description": "Alerts a parent when a mandatory chore is still incomplete after the parent escalation delay. Off by default.",
|
||
"panel.notif_escalation_reminder_label": "Remind again after",
|
||
"panel.notif_escalation_parent_label": "Alert parent after",
|
||
"panel.notif_presence_min_away_label": "Only after being away for",
|
||
"panel.notif_escalation_minutes_suffix": "min",
|
||
"notification.monthly_report.name": "Monthly report",
|
||
"notification.monthly_report.description": "A start-of-month recap of each child's previous month (chores, points, level, best streak). Off by default.",
|
||
"leaderboard.sort_this_month": "This Month",
|
||
"leaderboard.last_champion": "Last month's champion: {name} 🏆",
|
||
"notification.season_champion.name": "Season champion",
|
||
"notification.season_champion.description": "Announces the monthly leaderboard winner at the start of each month. Off by default.",
|
||
"panel.ics_title": "Calendar subscription",
|
||
"panel.ics_hint": "Subscribe to upcoming chores from Google/Apple/Outlook calendar. The link contains a private token — share it carefully.",
|
||
"panel.ics_show": "Show subscribe link",
|
||
"panel.ics_copy": "Copy",
|
||
"panel.ics_regenerate": "Regenerate link",
|
||
"panel.ics_copied": "Subscribe link copied",
|
||
"panel.ics_regenerated": "New link generated — old subscriptions stopped",
|
||
"gallery.default_title": "Photo gallery",
|
||
"gallery.empty": "No evidence photos yet",
|
||
"gallery.pending": "pending",
|
||
"panel.allowance_title": "Allowance",
|
||
"panel.allowance_hint": "Convert points to a real-money allowance. Record payouts via the record_allowance_payout service or a dashboard button.",
|
||
"panel.allowance_enabled": "Enable allowance payouts",
|
||
"panel.allowance_rate": "Points per unit",
|
||
"panel.allowance_rate_hint": "How many points equal one unit of currency.",
|
||
"panel.allowance_currency": "Currency symbol",
|
||
"panel.allowance_ledger": "Recent payouts",
|
||
"family_goal.default_title": "Family goal",
|
||
"family_goal.disabled": "No family goal set",
|
||
"family_goal.reward_label": "Reward: {reward}",
|
||
"family_goal.reached": "Goal reached! {reward}",
|
||
"wishlist.title": "{name}'s Wishlist",
|
||
"wishlist.subtitle": "Saving up",
|
||
"wishlist.add": "Add a wish",
|
||
"wishlist.limit_reached": "You already have {max} wishes on the go",
|
||
"wishlist.can_spend": "You can spend",
|
||
"wishlist.saved_in_wishes": "{points} saved in wishes",
|
||
"wishlist.empty": "No wishes yet. Add something you'd like to save up for!",
|
||
"wishlist.pick_child": "Choose a child in the card settings to show their wishlist.",
|
||
"wishlist.target_tag": "{points} target",
|
||
"wishlist.open_link": "Open link",
|
||
"wishlist.progress_label": "{total} of {target}",
|
||
"wishlist.legend_me": "Me {points}",
|
||
"wishlist.legend_family": "Family {points}",
|
||
"wishlist.status_pending": "Waiting for a grown-up to approve",
|
||
"wishlist.withdraw": "Withdraw",
|
||
"wishlist.status_declined": "A grown-up said no",
|
||
"wishlist.dismiss": "Got it",
|
||
"wishlist.status_redeem_requested": "Redeem requested — a grown-up will sort it out",
|
||
"wishlist.fully_funded": "Fully funded!",
|
||
"wishlist.ask_redeem": "Ask to redeem",
|
||
"wishlist.move_points": "Move points",
|
||
"wishlist.take_back": "Take back",
|
||
"wishlist.to_go": "{points} to go",
|
||
"wishlist.add_title": "Add a wish",
|
||
"wishlist.field_name": "What do you want?",
|
||
"wishlist.field_target": "How many points does it cost?",
|
||
"wishlist.target_hint": "A grown-up can change this",
|
||
"wishlist.field_link": "Link",
|
||
"wishlist.optional": "(optional)",
|
||
"wishlist.field_picture": "Picture",
|
||
"wishlist.picture_pick": "Tap to take a photo or choose one",
|
||
"wishlist.picture_change": "Change picture",
|
||
"wishlist.picture_not_image": "That file isn't a picture",
|
||
"wishlist.picture_failed": "The picture couldn't be used. Try another one.",
|
||
"wishlist.link_invalid": "Links must start with http:// or https://",
|
||
"wishlist.send": "Send to a grown-up",
|
||
"wishlist.move_title": "Move points to {name}",
|
||
"wishlist.move_info": "You have {balance} · {needed} still needed",
|
||
"wishlist.all_i_need": "All I need ({points})",
|
||
"wishlist.move_confirm": "Move {points}",
|
||
"wishlist.take_title": "Take points back from {name}",
|
||
"wishlist.take_info": "You saved {saved}. Family pledges stay in the wish.",
|
||
"wishlist.take_all": "All of it ({points})",
|
||
"wishlist.take_confirm": "Take back {points}",
|
||
"wishlist.redeem_title": "Ask for your {name}?",
|
||
"wishlist.redeem_body": "A grown-up will get a message to sort it out. Your saved points and the family's pledges are used up.",
|
||
"wishlist.not_yet": "Not yet",
|
||
"wishlist.yes_please": "Yes please!",
|
||
"wishlist.error": "That didn't work: {error}",
|
||
"wishlist.editor.child": "Child",
|
||
"wishlist.editor.child_helper": "Whose wishlist this card shows",
|
||
"wishlist.editor.title_helper": "Leave empty for \"<name>'s Wishlist\"",
|
||
"panel.family_goal_title": "Family goal",
|
||
"panel.family_goal_hint": "A shared target across all children's combined points (e.g. everyone hits 500 → family movie night).",
|
||
"panel.family_goal_enabled": "Enable family goal",
|
||
"panel.family_goal_name": "Goal name",
|
||
"panel.family_goal_name_ph": "Movie night fund",
|
||
"panel.family_goal_target": "Target (combined points)",
|
||
"panel.family_goal_target_hint": "Sum of all children's points needed to reach the goal.",
|
||
"panel.family_goal_reward": "Reward",
|
||
"panel.family_goal_reward_ph": "a family movie night",
|
||
"notification.family_goal_reached.name": "Family goal reached",
|
||
"notification.family_goal_reached.description": "Celebrates when the family's combined points reach the shared goal. Off by default.",
|
||
"notification.birthday.name": "Birthday",
|
||
"notification.birthday.description": "Wishes the child a happy birthday in the morning (08:00 unless you set a time), with the day's points multiplier. Off by default.",
|
||
"notification.presence_arrival.name": "Arrived home",
|
||
"notification.presence_arrival.description": "One \"You're home — N chores left\" nudge when a child with a presence entity gets home with chores still to do. Reminders held back while they were out land here. Off by default.",
|
||
"notification.wish_requested.name": "New wish to approve",
|
||
"notification.wish_requested.description": "Tells parents when a child adds a wish to their wishlist, so it can be approved and its target confirmed. Off by default.",
|
||
"notification.wish_pledged.name": "Pledge to a wish",
|
||
"notification.wish_pledged.description": "Tells a child when someone pledges points towards one of their wishes (\"Grandma added 20 to your Lego set!\"). Off by default.",
|
||
"bounty.title": "Bounty Board",
|
||
"bounty.subtitle": "One-off jobs · first to claim",
|
||
"bounty.open_count": "{count} open",
|
||
"bounty.empty": "No bounties right now — check back later!",
|
||
"bounty.no_child": "Pick a child in the card settings.",
|
||
"bounty.left": "{time} left",
|
||
"bounty.no_expiry": "No expiry",
|
||
"bounty.photo_tag": "photo",
|
||
"bounty.pts": "PTS",
|
||
"bounty.claim": "Claim",
|
||
"bounty.claim_hint": "You'll have {hours}h to finish",
|
||
"bounty.finish_first": "Finish your bounty first",
|
||
"bounty.claimed_by_you": "Claimed by you — {time} left to finish",
|
||
"bounty.done": "Done!",
|
||
"bounty.give_back": "Give back",
|
||
"bounty.sibling_on_it": "{name} is on it",
|
||
"bounty.sibling_back_in": "back on the board in {time} if not finished",
|
||
"bounty.waiting": "Waiting for a grown-up to check · +{points} ★ pending",
|
||
"bounty.undo": "Undo",
|
||
"bounty.sibling_checking": "{name} finished it — being checked",
|
||
"bounty.you_earned": "You earned +{points} ★",
|
||
"bounty.done_by": "Done by {name}",
|
||
"bounty.recent": "Recently completed",
|
||
"bounty.claim_title": "Claim \"{title}\"?",
|
||
"bounty.claim_body": "It's yours for {hours} hours. If it's not done by then, it goes back on the board for everyone.",
|
||
"bounty.not_now": "Not now",
|
||
"bounty.claim_it": "Claim it — {points} ★",
|
||
"bounty.photo_title": "Show us the finished job",
|
||
"bounty.photo_body": "\"{title}\" needs a photo",
|
||
"bounty.cancel": "Cancel",
|
||
"bounty.take_photo": "Take photo & send",
|
||
"bounty.uploading": "Sending…",
|
||
"bounty.yay_title": "Nice work!",
|
||
"bounty.yay_body": "A grown-up will check \"{title}\" and then you get {points} ★.",
|
||
"bounty.ok": "OK",
|
||
"bounty.dur_days": "{d}d {h}h",
|
||
"bounty.dur_hours": "{h}h {m}m",
|
||
"bounty.dur_minutes": "{m}m {s}s",
|
||
"bounty.editor.child": "Child",
|
||
"bounty.editor.child_helper": "Whose bounty board this is — they see the bounties they can claim",
|
||
"panel.tab_bounties": "Bounties",
|
||
"panel.bounty_post_btn": "+ Post a bounty",
|
||
"panel.bounty_tab_active": "Active ({count})",
|
||
"panel.bounty_tab_pending": "Waiting approval ({count})",
|
||
"panel.bounty_tab_history": "History ({count})",
|
||
"panel.bounty_col_bounty": "Bounty",
|
||
"panel.bounty_col_points": "Points",
|
||
"panel.bounty_col_eligible": "Eligible",
|
||
"panel.bounty_col_status": "Status",
|
||
"panel.bounty_col_expires": "Expires in",
|
||
"panel.bounty_lock_meta": "Lock {hours}h",
|
||
"panel.bounty_photo_meta": "photo proof",
|
||
"panel.bounty_status_open": "Open",
|
||
"panel.bounty_status_claimed": "Claimed",
|
||
"panel.bounty_status_pending": "Waiting approval",
|
||
"panel.bounty_status_completed": "Completed",
|
||
"panel.bounty_status_expired": "Expired",
|
||
"panel.bounty_claimed_meta": "{name} · {time} left",
|
||
"panel.bounty_completed_meta": "{name} · +{points} ★",
|
||
"panel.bounty_expired_meta": "Nobody claimed · {date}",
|
||
"panel.bounty_expired_lapsed_meta": "Expired after a claim lapsed · {date}",
|
||
"panel.bounty_expired_unfinished_meta": "Claimed but never finished · {date}",
|
||
"panel.bounty_lapsed_meta": "Claim lapsed {count}×",
|
||
"panel.bounty_no_expiry": "No expiry",
|
||
"panel.bounty_release": "Release claim",
|
||
"panel.bounty_cancel": "Cancel bounty",
|
||
"panel.bounty_nothing": "Nothing here",
|
||
"panel.bounty_all_children": "All children",
|
||
"panel.bounty_dialog_post": "Post a bounty",
|
||
"panel.bounty_dialog_edit": "Edit bounty",
|
||
"panel.bounty_title_label": "Title",
|
||
"panel.bounty_title_placeholder": "e.g. Wash the car",
|
||
"panel.bounty_desc_label": "Description (optional)",
|
||
"panel.bounty_points_label": "Points",
|
||
"panel.bounty_lock_label": "Claim lock (hours)",
|
||
"panel.bounty_lock_hint": "Time the claimer has to finish before it goes back on the board",
|
||
"panel.bounty_icon_label": "Icon",
|
||
"panel.bounty_expires_label": "Expires",
|
||
"panel.bounty_exp_none": "No expiry",
|
||
"panel.bounty_exp_tonight": "Tonight 20:00",
|
||
"panel.bounty_exp_24h": "In 24 hours",
|
||
"panel.bounty_exp_weekend": "End of weekend",
|
||
"panel.bounty_exp_pick": "Pick date…",
|
||
"panel.bounty_who_label": "Who can claim it",
|
||
"panel.bounty_photo_label": "Require photo proof",
|
||
"panel.bounty_photo_hint": "Child must attach a photo when marking done",
|
||
"panel.bounty_notify_label": "Notify eligible children",
|
||
"panel.bounty_notify_hint": "Sends the \"New bounty\" notification — switch it on and route the children under Notifications",
|
||
"panel.bounty_post_save": "Post bounty",
|
||
"panel.bounty_claimed_lock_note": "Someone has claimed this bounty, so only its points and expiry can change now.",
|
||
"panel.bounty_title_required": "Give the bounty a title.",
|
||
"panel.bounty_expiry_past": "Pick an expiry in the future.",
|
||
"panel.bounty_release_confirm": "Put \"{title}\" back on the board?",
|
||
"panel.bounty_remove_confirm": "Remove \"{title}\"?",
|
||
"panel.bounty_empty_title": "No bounties yet",
|
||
"panel.bounty_empty_copy": "Post a one-off job with a fixed reward — the first child to claim it gets it.",
|
||
"panel.toast_bounty_posted": "Bounty posted — it's on the children's boards now",
|
||
"panel.toast_bounty_updated": "Bounty updated",
|
||
"panel.toast_bounty_released": "Claim released — it's back on the board",
|
||
"panel.toast_bounty_removed": "Bounty removed",
|
||
"notification.bounty_posted.name": "New bounty",
|
||
"notification.bounty_posted.description": "Tells the children a bounty is open to them when a parent posts one with \"Notify eligible children\" on.",
|
||
"notification.bounty_claim_lapsing.name": "Bounty claim running out",
|
||
"notification.bounty_claim_lapsing.description": "Warns the child who claimed a bounty 15 minutes before their claim lapses and it goes back on the board.",
|
||
"auction.title": "Chore Auction",
|
||
"auction.subtitle": "Lowest bid wins · bids are secret",
|
||
"auction.open_count": "{count} open",
|
||
"auction.empty": "No auctions right now",
|
||
"auction.no_child": "Pick a child in the card editor to see their auctions.",
|
||
"auction.results": "Results",
|
||
"auction.load_failed": "Couldn't load the auctions: {error}",
|
||
"auction.up_to": "up to {points} ★",
|
||
"auction.lowest_wins": "Lowest bid wins",
|
||
"auction.gauge_max": "max {points} ★",
|
||
"auction.gauge_hint": "Normally worth {points} ★ · bid the fewest points you'd do it for",
|
||
"auction.your_bid": "Your sealed bid",
|
||
"auction.change": "Change",
|
||
"auction.withdraw": "Withdraw",
|
||
"auction.closes_in": "closes in {time}",
|
||
"auction.no_other_bids": "No other bids yet",
|
||
"auction.other_bids_one": "1 other bid in",
|
||
"auction.other_bids": "{count} other bids in",
|
||
"auction.place_bid": "Place a sealed bid",
|
||
"auction.sheet_sub": "{date} · closes in {time}",
|
||
"auction.bid_label": "the fewest points you'd do it for",
|
||
"auction.range_low": "{points} · more likely to win",
|
||
"auction.range_high": "{points} · max",
|
||
"auction.clear": "Clear",
|
||
"auction.backspace": "Delete last digit",
|
||
"auction.rule_secret": "Secret: nobody sees your number.",
|
||
"auction.rule_lowest": "Lowest bid wins. If it's a tie, whoever bid first wins.",
|
||
"auction.rule_min": "Bids start at {points} ★.",
|
||
"auction.rule_win": "If you win, you do it on {date} and get your bid when it's approved.",
|
||
"auction.cancel": "Cancel",
|
||
"auction.seal": "Seal my bid · {points} ★",
|
||
"auction.you_won": "You won! {points} ★ is yours",
|
||
"auction.you_won_sub": "when you've done it on {date} and a grown-up approves it",
|
||
"auction.in_your_chores": "It's in your chores for {date}",
|
||
"auction.sibling_won": "{name} won this one",
|
||
"auction.sibling_won_sub": "at {points} ★. Lowest bid wins, so try a little lower next time!",
|
||
"auction.sibling_won_sub_bid": "at {points} ★ · you bid {bid} ★. Lowest bid wins, so try a little lower next time!",
|
||
"auction.tied_sub": "You both bid {points} ★. It was a tie, and {name} got their bid in first.",
|
||
"auction.no_bids": "No bids this time",
|
||
"auction.no_bids_sub": "{chore} goes back to its normal assignment on {date}.",
|
||
"auction.closed_at": "Closed {when}",
|
||
"auction.editor.child": "Child",
|
||
"auction.editor.child_helper": "Whose auctions and bids this card shows",
|
||
"child.won_at_auction": "Won at auction",
|
||
"panel.tab_auctions": "Auctions",
|
||
"panel.new_auction": "Auction",
|
||
"panel.auction_row_menu": "Auction an occurrence",
|
||
"panel.auction_page_sub": "Children bid the fewest points they'd accept for a chore. Lowest bid wins.",
|
||
"panel.auction_start_btn": "Start an auction",
|
||
"panel.auction_empty_title": "No auctions yet",
|
||
"panel.auction_empty_copy": "Put an unpopular chore up for auction: the children bid the fewest points they'd do it for, and the lowest bid wins it.",
|
||
"panel.auction_stat_live": "live auctions",
|
||
"panel.auction_stat_bids": "sealed bids in",
|
||
"panel.auction_stat_won": "closed with a winner (30 days)",
|
||
"panel.auction_tab_live": "Live ({count})",
|
||
"panel.auction_tab_closed": "Closed ({count})",
|
||
"panel.auction_show_amounts": "Show bid amounts",
|
||
"panel.auction_col_chore": "Chore",
|
||
"panel.auction_col_max": "Max",
|
||
"panel.auction_col_who": "Who can bid",
|
||
"panel.auction_col_bids": "Bids",
|
||
"panel.auction_col_closes": "Closes",
|
||
"panel.auction_col_result": "Result",
|
||
"panel.auction_col_status": "Chore status",
|
||
"panel.auction_normally": "{date} · normally {points} ★",
|
||
"panel.auction_min_meta": "min {points} ★",
|
||
"panel.auction_no_bids_yet": "No bids yet",
|
||
"panel.auction_no_bids": "No bids",
|
||
"panel.auction_sealed": "sealed",
|
||
"panel.auction_leading": "leading",
|
||
"panel.auction_close_now": "Close now",
|
||
"panel.auction_cancel": "Cancel auction",
|
||
"panel.auction_won_at": "at {points}",
|
||
"panel.auction_assigned_for": "assigned for {date}",
|
||
"panel.auction_fallback": "→ normal assignment",
|
||
"panel.auction_reopen": "Re-open with a higher max",
|
||
"panel.auction_status_done": "Done · +{points}",
|
||
"panel.auction_status_pending": "Waiting approval",
|
||
"panel.auction_status_todo": "To do",
|
||
"panel.auction_status_missed": "Missed",
|
||
"panel.auction_status_normal": "Normal assignment",
|
||
"panel.auction_status_cancelled": "Cancelled",
|
||
"panel.auction_nothing": "Nothing here",
|
||
"panel.auction_dialog_title": "Start an auction",
|
||
"panel.auction_sec_chore": "Which chore",
|
||
"panel.auction_sec_price": "Price",
|
||
"panel.auction_sec_bidding": "Bidding",
|
||
"panel.auction_chore_label": "Chore",
|
||
"panel.auction_which_label": "Which one",
|
||
"panel.auction_which_hint": "Only this occurrence is auctioned. The rest of the schedule is unchanged.",
|
||
"panel.auction_loading": "Loading…",
|
||
"panel.auction_no_occurrences": "No upcoming occurrence of this chore can be auctioned in the next 60 days.",
|
||
"panel.auction_no_chores": "No chore can be auctioned yet. Teamwork, timed, open-ended and unassigned chores can't be.",
|
||
"panel.auction_max_label": "Maximum bid",
|
||
"panel.auction_normally_worth": "normally worth {points} ★",
|
||
"panel.auction_max_hint": "Children can bid anything from the minimum up to this. Lowest wins; ties go to the earliest bid.",
|
||
"panel.auction_min_label": "Minimum bid",
|
||
"panel.auction_min_hint": "Off: any bid from 1 counts. On: stops a race to the bottom.",
|
||
"panel.auction_closes_label": "Closes",
|
||
"panel.auction_close_tonight": "Tonight 19:00",
|
||
"panel.auction_close_tomorrow": "Tomorrow 08:00",
|
||
"panel.auction_close_daybefore": "Day before, 18:00",
|
||
"panel.auction_close_pick": "Pick…",
|
||
"panel.auction_close_hint": "Bidding must close before the day of the chore.",
|
||
"panel.auction_who_label": "Who can bid",
|
||
"panel.auction_nobid_label": "If nobody bids",
|
||
"panel.auction_nobid_copy": "The chore goes back to its normal assignment. You can re-open it with a higher max from the Closed list.",
|
||
"panel.auction_notify_label": "Tell children it's open",
|
||
"panel.auction_notify_hint": "Sends \"New auction\" to the children who can bid, and a reminder an hour before it closes. Turn the auction notifications on under Notifications.",
|
||
"panel.auction_start_save": "Start auction",
|
||
"panel.auction_err_occurrence": "Pick an occurrence to auction.",
|
||
"panel.auction_err_close": "Pick a closing time before the day of the chore.",
|
||
"panel.auction_err_who": "Pick at least one child who can bid.",
|
||
"panel.auction_err_min": "The minimum bid can't be above the maximum.",
|
||
"panel.auction_close_confirm": "Close bidding on \"{chore}\" now? The lowest bid wins.",
|
||
"panel.auction_cancel_confirm": "Cancel the auction for \"{chore}\"? It goes back to its normal assignment, and anyone who bid is told.",
|
||
"panel.toast_auction_started": "Auction started — it's on the children's cards now",
|
||
"panel.toast_auction_closed": "Auction closed",
|
||
"panel.toast_auction_cancelled": "Auction cancelled — back to normal assignment",
|
||
"panel.auction_delete_confirm": "Delete the finished auction for \"{chore}\"? It's removed from the list. This cannot be undone.",
|
||
"panel.toast_auction_deleted": "Auction deleted",
|
||
"notification.auction_opened.name": "New auction",
|
||
"notification.auction_opened.description": "Tells the children who can bid that a parent opened a chore auction with \"Tell children it's open\" on.",
|
||
"notification.auction_closing.name": "Auction closing soon",
|
||
"notification.auction_closing.description": "Reminds each child who can bid an hour before bidding closes (auctions opened with \"Tell children it's open\" on).",
|
||
"notification.auction_result.name": "Auction result",
|
||
"notification.auction_result.description": "Tells the children who could bid, and parents, who won an auction and at what price — or that nobody bid, or that it was cancelled.",
|
||
"panel.chore_advanced_weather": "Advanced — weather conditions",
|
||
"panel.chore_weather_intro": "Hide this chore while the weather is unsuitable. Useful for outdoor jobs — a rained-off chore doesn't count as a mandatory miss and won't break a streak.",
|
||
"panel.chore_weather_entity_label": "Weather entity",
|
||
"panel.chore_weather_entity_hint": "Leave empty to ignore the weather entirely.",
|
||
"panel.chore_weather_conditions_label": "Hide when the weather is",
|
||
"panel.chore_weather_conditions_hint": "Pick any conditions that should hide the chore.",
|
||
"panel.chore_weather_temp_min_label": "Minimum temperature",
|
||
"panel.chore_weather_temp_min_hint": "Hide below this. Leave empty for no limit.",
|
||
"panel.chore_weather_temp_max_label": "Maximum temperature",
|
||
"panel.chore_weather_temp_max_hint": "Hide above this. Leave empty for no limit.",
|
||
"panel.chore_weather_wind_max_label": "Maximum wind speed",
|
||
"panel.chore_weather_wind_max_hint": "Hide above this. Leave empty for no limit.",
|
||
"panel.chore_weather_failopen_hint": "Limits use whatever units your weather entity reports. If the entity is missing or unavailable, the chore stays visible.",
|
||
"panel.chore_advanced_tags": "NFC / QR tags",
|
||
"panel.chore_tags_intro": "Link a Home Assistant tag (an NFC sticker or a QR code) to this chore. Scanning it in the companion app completes the chore for whoever scanned it.",
|
||
"panel.chore_tags_none": "No tags in Home Assistant yet. Add them under Settings → Tags, or type a tag ID below.",
|
||
"panel.chore_tags_typed_label": "Tag ID",
|
||
"panel.chore_tags_typed_placeholder": "e.g. dishwasher",
|
||
"panel.btn_add_tag": "Add tag",
|
||
"panel.chore_tags_hint": "The child is found from the HA user who scanned (their linked user). If nobody is linked, the tag only works when the chore is assigned to exactly one child. Approval, schedule and daily-limit rules still apply.",
|
||
"panel.chore_tags_blocked_hint": "This chore needs a photo, a note or a timer, so a tag scan can't complete it.",
|
||
"panel.chore_tags_limit": "A chore can have at most {max} tags.",
|
||
"weather.blocked_condition": "Hidden — unsuitable weather",
|
||
"weather.blocked_temp_low": "Hidden — too cold",
|
||
"weather.blocked_temp_high": "Hidden — too hot",
|
||
"weather.blocked_wind": "Hidden — too windy",
|
||
"weather.condition_rainy": "Rainy",
|
||
"weather.condition_pouring": "Pouring",
|
||
"weather.condition_snowy": "Snowy",
|
||
"weather.condition_snowy_rainy": "Sleet",
|
||
"weather.condition_hail": "Hail",
|
||
"weather.condition_lightning": "Lightning",
|
||
"weather.condition_lightning_rainy": "Thunderstorm",
|
||
"weather.condition_fog": "Fog",
|
||
"weather.condition_windy": "Windy",
|
||
"weather.condition_windy_variant": "Very windy",
|
||
"weather.condition_cloudy": "Cloudy",
|
||
"weather.condition_exceptional": "Severe",
|
||
"child.deadline_minutes": "{mins} min left",
|
||
"child.deadline_hours": "{hours}h {mins}m left",
|
||
"child.deadline_title": "Do this before the time runs out",
|
||
"panel.chore_advanced_scheduled": "Advanced — scheduled changes",
|
||
"panel.chore_scheduled_intro": "Queue a change to take effect on a future date — \"from 1 September this is worth 20 points\". Applied at midnight; if Home Assistant was off, it catches up on the next start.",
|
||
"panel.chore_scheduled_none": "No changes queued.",
|
||
"panel.chore_scheduled_history": "Already applied",
|
||
"panel.chore_scheduled_applied": "Applied",
|
||
"panel.sched_date_label": "Apply on",
|
||
"panel.sched_field_label": "Change",
|
||
"panel.sched_value_label": "New value",
|
||
"panel.sched_note_label": "Note (optional)",
|
||
"panel.sched_note_hint": "A reminder of why, shown beside the queued change.",
|
||
"panel.btn_add_scheduled": "Queue change",
|
||
"panel.sched_value_yes": "Yes",
|
||
"panel.sched_value_no": "No",
|
||
"panel.sched_value_nobody": "Nobody",
|
||
"panel.toast_sched_added": "Change queued",
|
||
"panel.toast_sched_removed": "Change removed",
|
||
"panel.toast_sched_date_required": "Pick a date for the change",
|
||
"panel.toast_sched_value_required": "Enter a value for the change",
|
||
"panel.sched_field_points": "Points",
|
||
"panel.sched_field_assigned_to": "Assigned to",
|
||
"panel.sched_field_enabled": "Enabled",
|
||
"panel.sched_field_requires_approval": "Requires approval",
|
||
"panel.sched_field_daily_limit": "Daily limit",
|
||
"panel.sched_field_due_days": "Days",
|
||
"panel.sched_field_mandatory": "Mandatory",
|
||
"panel.sched_field_mandatory_penalty_points": "Penalty points",
|
||
"panel.sched_field_expires_on": "Expires on",
|
||
"panel.sched_field_description": "Description",
|
||
"panel.sched_field_time_category": "Time of day",
|
||
"panel.sched_field_difficulty": "Difficulty",
|
||
"routine.title": "{name}'s routine",
|
||
"routine.no_child": "Pick a child for this card.",
|
||
"routine.task_of": "Task {current} of {total}",
|
||
"routine.all_done_count": "All {total} done",
|
||
"routine.done": "Done ✓",
|
||
"routine.completed": "Completed",
|
||
"routine.sent_for_checking": "Sent for checking",
|
||
"routine.skip": "Skip for now",
|
||
"routine.next": "Next →",
|
||
"routine.back": "← Back",
|
||
"routine.waiting_for_parent": "⏳ Waiting for a grown-up to check",
|
||
"routine.photo_note": "This one needs a photo — tap it on your card.",
|
||
"routine.finished_title": "Routine done!",
|
||
"routine.finished_body": "Nice one, {name}. That's everything.",
|
||
"routine.earned": "+{points} earned",
|
||
"routine.awaiting_points": "+{points} once a grown-up checks",
|
||
"routine.skipped_note": "{count} left for later.",
|
||
"routine.start_again": "Start again",
|
||
"routine.empty_title": "Nothing to do",
|
||
"routine.empty_body": "This routine is already finished.",
|
||
"kiosk.who": "Who's there?",
|
||
"kiosk.tap_face": "Tap your face",
|
||
"kiosk.progress": "{done} of {total} done",
|
||
"kiosk.all_done_short": "All done today!",
|
||
"kiosk.nothing_today": "Nothing to do today",
|
||
"kiosk.ask_grownup": "Ask a grown-up",
|
||
"kiosk.no_children": "No children to show. Add children in the TaskMate panel, or tick them in this card's settings.",
|
||
"kiosk.hi": "Hi {name}!",
|
||
"kiosk.enter_pin": "Enter your PIN",
|
||
"kiosk.pin_wrong": "Oops — try again",
|
||
"kiosk.pin_locked": "Too many tries. Try again in {seconds} s",
|
||
"kiosk.back": "Back",
|
||
"kiosk.cancel": "Cancel",
|
||
"kiosk.delete_digit": "Delete last digit",
|
||
"kiosk.switch": "Not {name}? Switch",
|
||
"kiosk.todays_chores": "Today's chores",
|
||
"kiosk.all_done": "All done for today — amazing, {name}!",
|
||
"kiosk.waiting": "Waiting for a grown-up",
|
||
"kiosk.needs_check": "A grown-up will check",
|
||
"kiosk.do_on_phone": "Do this one on your phone",
|
||
"kiosk.phone_group": "Do these on your phone",
|
||
"kiosk.nothing_here": "Nothing to tick off here today",
|
||
"kiosk.team_waiting": "Waiting for your team ({joined}/{size})",
|
||
"kiosk.undo": "Undo",
|
||
"kiosk.today": "Today",
|
||
"kiosk.chores_done": "chores done",
|
||
"kiosk.earned_today": "earned today",
|
||
"kiosk.day_streak": "day streak",
|
||
"kiosk.to_go": "{points} more to go",
|
||
"kiosk.still_there": "Still there, {name}?",
|
||
"kiosk.going_back": "Going back to the start so someone else can have a turn",
|
||
"kiosk.still_here": "I'm still here",
|
||
"kiosk.blocked_title": "{name} can't use this tablet yet",
|
||
"kiosk.blocked_body": "This tablet's Home Assistant account isn't allowed to tick off {name}'s chores. A grown-up can check {name}'s linked account and the “Require a linked account per child” setting in the TaskMate panel.",
|
||
"kiosk.fullscreen": "Full screen",
|
||
"kiosk.exit_fullscreen": "Exit full screen",
|
||
"kiosk.editor.entity": "Entity",
|
||
"kiosk.editor.title": "Title",
|
||
"kiosk.editor.title_helper": "Shown in the top bar, e.g. your family name",
|
||
"kiosk.editor.timeout": "Return to the picker after",
|
||
"kiosk.editor.timeout_helper": "Seconds without a tap (15–600)",
|
||
"kiosk.editor.warn_before_return": "Warn before returning",
|
||
"kiosk.editor.warn_before_return_helper": "Full-screen “Still there?” countdown for the last 10 seconds",
|
||
"kiosk.editor.show_points": "Points and level",
|
||
"kiosk.editor.show_streak": "Streak",
|
||
"kiosk.editor.show_reward_progress": "Next reward progress",
|
||
"kiosk.editor.show_picker_progress": "Progress on the picker",
|
||
"kiosk.editor.show_picker_progress_helper": "“3 of 6 done” under each face",
|
||
"kiosk.editor.children_heading": "Children shown and PINs",
|
||
"kiosk.editor.children_hint": "Untick a child to hide them. Use the arrows to set the order on the picker.",
|
||
"kiosk.editor.require_pin": "Require PIN",
|
||
"kiosk.editor.pin_set": "PIN set",
|
||
"kiosk.editor.no_pin": "No PIN set — goes straight in",
|
||
"kiosk.editor.pin_note": "PINs are set by a parent in the TaskMate panel → Children (stored hashed, never in the card's YAML).",
|
||
"kiosk.editor.move_up": "Move up",
|
||
"kiosk.editor.move_down": "Move down",
|
||
"kiosk.editor.show_child": "Show {name}",
|
||
"child.roulette_spin": "Spin for a ×{multiplier} chore",
|
||
"child.roulette_respin": "Spin again ({count} left)",
|
||
"child.roulette_no_spins": "No spins left today",
|
||
"panel.settings_roulette_section": "Chore roulette",
|
||
"panel.settings_roulette_enabled": "Enable chore roulette",
|
||
"panel.settings_roulette_enabled_hint": "Lets a child spin for a random outstanding chore worth extra points.",
|
||
"panel.settings_roulette_multiplier": "Points multiplier",
|
||
"panel.settings_roulette_spins": "Spins per day",
|
||
"panel.settings_unlock_allowlist": "Unlock allowlist",
|
||
"panel.settings_unlock_allowlist_hint": "Only these entities may be unlocked by a reward. Nothing is allowed until you add something here.",
|
||
"panel.settings_unlock_allowlist_empty": "Nothing allowed yet.",
|
||
"panel.settings_unlock_allowlist_add": "Search for an entity to allow",
|
||
"panel.reward_unlock_section": "Advanced — timed unlock",
|
||
"panel.reward_unlock_intro": "Turn something on when this reward is approved, and back off again after a set time.",
|
||
"panel.reward_unlock_none": "Nothing",
|
||
"panel.reward_unlock_entity": "Unlock",
|
||
"panel.reward_unlock_minutes": "For how long (minutes)",
|
||
"panel.reward_unlock_minutes_hint": "0 = leave it on; you'll need to turn it off yourself.",
|
||
"panel.reward_unlock_no_allowlist": "Add an entity to the unlock allowlist in Settings first.",
|
||
"panel.tab_insights": "Insights",
|
||
"panel.insights_loading": "Working it out…",
|
||
"panel.insights_fairness_title": "Who's doing the work?",
|
||
"panel.insights_fairness_intro": "{start} to {end}. An even split would be {fair}% each.",
|
||
"panel.insights_last_days": "Last {days} days",
|
||
"panel.insights_no_data": "No approved chores in this period yet.",
|
||
"panel.insights_balanced": "Looks fairly balanced.",
|
||
"panel.insights_unbalanced": "The workload is uneven.",
|
||
"panel.insights_chores": "chores",
|
||
"panel.insights_status_over": "Doing more",
|
||
"panel.insights_status_under": "Doing less",
|
||
"panel.insights_status_balanced": "Balanced",
|
||
"panel.insights_status_idle": "Nothing yet",
|
||
"panel.insights_fairness_note": "Judged on chore count, not points, so a pricier chore doesn't hide an uneven split. Flagged when a child is more than {tolerance} points off an even share.",
|
||
"panel.insights_chore": "chore",
|
||
"panel.insights_view_fairness": "Fairness",
|
||
"panel.insights_view_friction": "Friction",
|
||
"panel.insights_friction_title": "What isn't working?",
|
||
"panel.insights_friction_intro": "{start} to {end}. Chores are judged on how often they actually get done versus how often they came up.",
|
||
"panel.insights_friction_none": "No active chores to look at.",
|
||
"panel.insights_friction_healthy": "Everything is getting done.",
|
||
"panel.insights_friction_problems": "{count} chore(s) worth a look.",
|
||
"panel.insights_col_chore": "Chore",
|
||
"panel.insights_col_done": "Done",
|
||
"panel.insights_col_rate": "Rate",
|
||
"panel.insights_col_last": "Last done",
|
||
"panel.insights_col_verdict": "Verdict",
|
||
"panel.insights_col_suggestion": "Try",
|
||
"panel.insights_never": "Never",
|
||
"panel.insights_days_ago": "{days}d ago",
|
||
"panel.insights_verdict_never": "Never done",
|
||
"panel.insights_verdict_stalling": "Stalling",
|
||
"panel.insights_verdict_struggling": "Patchy",
|
||
"panel.insights_verdict_fine": "Fine",
|
||
"panel.insights_verdict_unknown": "Unclear",
|
||
"panel.insights_suggest_retire": "Retire it",
|
||
"panel.insights_suggest_reprice": "Raise the points",
|
||
"panel.insights_suggest_reassign": "Give it to someone else",
|
||
"panel.insights_suggest_keep": "Leave it alone",
|
||
"panel.insights_outstanding_misses": "Outstanding mandatory misses",
|
||
"panel.insights_friction_note": "Rejections aren't listed: TaskMate deletes a completion when you reject it, so there's no rejection history to count. Expected counts are approximate — they don't replay rotation, dependencies or weather.",
|
||
"panel.insights_view_projection": "Week ahead",
|
||
"panel.insights_projection_title": "What's coming up?",
|
||
"panel.insights_projection_intro": "{start} to {end}, based on each chore's schedule.",
|
||
"panel.insights_next_days": "Next {days} days",
|
||
"panel.insights_col_day": "Day",
|
||
"panel.insights_projected_earn": "up to {points} {name}",
|
||
"panel.insights_projected_total": "would reach {total}",
|
||
"panel.insights_projection_unassigned": "{points} points aren't assigned to anyone.",
|
||
"panel.insights_projection_note": "A ceiling, not a forecast: chores open to everyone are counted for each eligible child, since the schedule can't know who'll get there first. Weather, dependencies and availability aren't projected — they depend on the day.",
|
||
"panel.insights_view_health": "Health",
|
||
"panel.settings_quality_rating_label": "Quality ratings",
|
||
"panel.settings_quality_rating_hint": "Rate approved chores 1–3 stars and scale the points by the rating. An unrated approval pays 100%.",
|
||
"panel.settings_quality_rating_multipliers_label": "Star multipliers",
|
||
"panel.settings_quality_rating_multipliers_hint": "Points multiplier for each rating (×1.0 = the chore's normal points).",
|
||
"panel.rating_label": "Quality rating",
|
||
"panel.rating_star_title": "{count}★ — pays {percent}% of the points",
|
||
"panel.insights_view_quality": "Quality",
|
||
"panel.insights_quality_title": "Quality ratings",
|
||
"panel.insights_quality_intro": "Star ratings given at approval, {start} to {end}. Averages only count rated approvals.",
|
||
"panel.insights_quality_none": "No rated approvals in this window yet.",
|
||
"panel.insights_quality_overall": "Average {average}★ · {rated} of {total} approvals rated",
|
||
"panel.insights_quality_by_child": "By child",
|
||
"panel.insights_quality_by_chore": "By chore",
|
||
"panel.insights_quality_col_average": "Average",
|
||
"panel.insights_quality_col_rated": "Rated",
|
||
"panel.insights_quality_disabled": "Quality ratings are off. Turn them on in Settings to rate approvals.",
|
||
"panel.health_title": "Is anything broken?",
|
||
"panel.health_recheck": "Check again",
|
||
"panel.health_all_good": "Nothing wrong found.",
|
||
"panel.health_issues": "{count} thing(s) need attention.",
|
||
"panel.health_sev_error": "Error",
|
||
"panel.health_sev_warning": "Warning",
|
||
"panel.health_sev_info": "Note",
|
||
"panel.health_goto": "Show me",
|
||
"panel.health_count_children": "Children",
|
||
"panel.health_count_chores": "Chores",
|
||
"panel.health_count_enabled_chores": "Active",
|
||
"panel.health_count_rewards": "Rewards",
|
||
"panel.health_count_completions": "Completions",
|
||
"panel.health_count_badges": "Badges",
|
||
"panel.health_count_scheduled_changes": "Scheduled",
|
||
"panel.health_count_active_unlocks": "Unlocks",
|
||
"panel.health_count_mandatory_misses": "Misses",
|
||
"panel.health_count_storage": "Storage",
|
||
"panel.chore_icon_label": "Picture",
|
||
"panel.chore_image_label": "Picture",
|
||
"panel.chore_image_hint": "A photo shown instead of the icon. Resized to 512px on upload.",
|
||
"panel.chore_image_upload": "Upload",
|
||
"panel.chore_image_remove": "Remove",
|
||
"panel.chore_image_empty": "No picture",
|
||
"panel.chore_image_uploading": "Uploading…",
|
||
"panel.chore_image_failed": "Upload failed",
|
||
"panel.chore_image_too_large": "That image is too large (max 2 MB).",
|
||
"panel.chore_image_bad_type": "Choose a JPEG, PNG or WebP image.",
|
||
"child.editor.pre_reader": "Picture-only mode (for young children)",
|
||
"child.editor.pre_reader_labels": "Show names in picture mode",
|
||
"child.editor.pre_reader_points": "Show point values instead of stars in picture mode",
|
||
"common.design.accessible": "Accessible",
|
||
"child.editor.include_anytime_chores": "Include anytime chores",
|
||
"child.editor.include_anytime_chores_helper": "Anytime chores normally appear under every time category — turn this off to hide them",
|
||
"panel.settings_sounds_title": "Completion sounds",
|
||
"panel.settings_sounds_hint": "Upload your own sound clips and pick them per chore.",
|
||
"panel.settings_sounds_empty": "No custom sounds yet.",
|
||
"panel.settings_sounds_formats": "MP3, OGG, WAV or M4A. Max 1 MB each.",
|
||
"panel.sound_upload": "Upload sound",
|
||
"panel.sound_uploading": "Uploading…",
|
||
"panel.sound_uploaded": "Sound added",
|
||
"panel.sound_upload_failed": "Upload failed",
|
||
"panel.sound_too_large": "That sound is too large (max 1 MB).",
|
||
"panel.sound_bad_type": "Choose an MP3, OGG, WAV or M4A file.",
|
||
"panel.sound_storage_full": "Sound storage is full. Delete a sound and try again.",
|
||
"panel.sound_default_name": "My sound",
|
||
"panel.sound_preview": "Play",
|
||
"panel.sound_rename": "Rename",
|
||
"panel.sound_rename_prompt": "Name for this sound:",
|
||
"panel.sound_name_required": "Give the sound a name.",
|
||
"panel.sound_delete": "Delete",
|
||
"panel.sound_delete_confirm": "Delete the sound “{name}”? Any chore using it goes back to the default sound.",
|
||
"panel.sound_deleted": "Sound deleted",
|
||
"panel.sound_deleted_reset": "Sound deleted. {count} chore(s) reset to the default sound.",
|
||
"recap.default_title": "{name}'s Recap",
|
||
"recap.title": "{name}'s {period}",
|
||
"recap.last_30_days": "last 30 days",
|
||
"recap.word.weekly": "week",
|
||
"recap.word.monthly": "month",
|
||
"recap.word.every_3_months": "three months",
|
||
"recap.word.every_6_months": "six months",
|
||
"recap.word.every_9_months": "nine months",
|
||
"recap.word.yearly": "year",
|
||
"recap.word.preview": "30 days",
|
||
"recap.prev_week": "last week",
|
||
"recap.freq.weekly": "Weekly",
|
||
"recap.freq.monthly": "Monthly",
|
||
"recap.freq.every_3_months": "Every 3 months",
|
||
"recap.freq.every_6_months": "Every 6 months",
|
||
"recap.freq.every_9_months": "Every 9 months",
|
||
"recap.freq.yearly": "Yearly",
|
||
"recap.freq.preview": "Preview",
|
||
"recap.older": "Older",
|
||
"recap.new": "NEW",
|
||
"recap.sheet_title": "{name}'s recaps",
|
||
"recap.chores_count": "{count} chores",
|
||
"recap.chores_count_singular": "{count} chore",
|
||
"recap.ready_on": "Ready on {date}",
|
||
"recap.slide_counter": "Slide {index} of {total}",
|
||
"recap.tap_to_continue": "tap to continue",
|
||
"recap.prev": "Previous slide",
|
||
"recap.next": "Next slide",
|
||
"recap.preview_tag": "Preview",
|
||
"recap.choose_child": "Pick a child in the card editor to show their recaps.",
|
||
"recap.load_failed": "Couldn't load recaps: {error}",
|
||
"recap.loading": "Loading recaps…",
|
||
"recap.empty": "No recaps yet — the first one arrives on {date}.",
|
||
"recap.empty_off": "Recaps are switched off for {name}.",
|
||
"recap.week_short": "W{n}",
|
||
"recap.slide.intro_say": "Ready to see how your {period} went?",
|
||
"recap.slide.tap_to_start": "Tap to start",
|
||
"recap.slide.you_finished": "You finished",
|
||
"recap.slide.chores_unit": "chores",
|
||
"recap.slide.chores_unit_singular": "chore",
|
||
"recap.slide.per_day": "That's about {count} every single day.",
|
||
"recap.slide.per_week": "That's about {count} every week.",
|
||
"recap.slide.no_chores": "A quiet {period}. The next one is a fresh start!",
|
||
"recap.slide.you_earned": "You earned",
|
||
"recap.slide.from_chores": "{count} from chores",
|
||
"recap.slide.bonus": "+{count} bonus",
|
||
"recap.slide.top_chore": "Your top chore",
|
||
"recap.slide.times": "{count} times",
|
||
"recap.slide.times_singular": "{count} time",
|
||
"recap.slide.longest_streak": "Your longest streak",
|
||
"recap.slide.days_in_a_row": "days in a row",
|
||
"recap.slide.days_in_a_row_singular": "day in a row",
|
||
"recap.slide.best_day": "Your best day",
|
||
"recap.slide.best_day_say": "{chores} chores and {points} {points_name} in one day",
|
||
"recap.slide.best_day_say_singular": "{chores} chore and {points} {points_name} in one day",
|
||
"recap.slide.best_weekday": "Your best weekday: {weekday}",
|
||
"recap.slide.unlocked": "You unlocked",
|
||
"recap.slide.more": "and {count} more",
|
||
"recap.slide.treated": "You treated yourself",
|
||
"recap.slide.compared": "Compared with {period}",
|
||
"recap.slide.levelled_up": "You levelled up!",
|
||
"recap.slide.quieter": "A quieter {period}",
|
||
"recap.slide.finale": "What a {period}, {name}!",
|
||
"recap.cmp.chores": "Chores done",
|
||
"recap.cmp.points": "{points_name} earned",
|
||
"recap.cmp.streak": "Longest streak",
|
||
"recap.cmp.days_active": "Days active",
|
||
"recap.cmp.was": "was {value}",
|
||
"recap.share.chores": "chores",
|
||
"recap.share.chores_singular": "chore",
|
||
"recap.share.streak": "day streak",
|
||
"recap.share.streak_singular": "day streak",
|
||
"recap.share.top": "top chore",
|
||
"recap.save_image": "Save as image",
|
||
"recap.again": "Again",
|
||
"recap.saved": "Saved {file}",
|
||
"recap.save_failed": "Couldn't create the image",
|
||
"recap.editor.child": "Child",
|
||
"recap.editor.child_helper": "Whose recaps this card shows",
|
||
"recap.editor.default_frequency": "Open first",
|
||
"recap.editor.default_frequency_helper": "Which recap to open when there's nothing new",
|
||
"recap.editor.newest": "Newest recap",
|
||
"recap.editor.autoplay": "Play automatically",
|
||
"recap.editor.autoplay_helper": "Move to the next slide every few seconds. Off: children tap at their own pace.",
|
||
"panel.recaps_title": "Recaps",
|
||
"panel.recaps_hint": "A Wrapped-style story of each child's week, month or year, built just after the period ends and kept so older ones stay viewable. Add the TaskMate Recap card to a dashboard to watch them.",
|
||
"panel.recaps_frequency_label": "Family default",
|
||
"panel.recaps_frequency_hint": "Children set to Family default get these. Tick any combination; none ticked turns recaps off.",
|
||
"panel.recaps_per_child_label": "Per child",
|
||
"panel.recaps_per_child_hint": "Override the family default for a child. Younger children often enjoy weekly; teenagers may only want yearly.",
|
||
"panel.recaps_col_child": "Child",
|
||
"panel.recaps_col_frequency": "Frequency",
|
||
"panel.recaps_col_next": "Next recap",
|
||
"panel.recaps_mode_default": "Family default",
|
||
"panel.recaps_mode_custom": "Custom",
|
||
"panel.recaps_off": "Recaps off",
|
||
"panel.recaps_nine_month_note": "Every 9 months runs in blocks counted from 1 January 2026.",
|
||
"panel.recaps_notify_label": "Notify when ready",
|
||
"panel.recaps_notify_hint": "Nothing is sent while the \"Recap ready\" notification is switched off in the Notifications tab.",
|
||
"panel.recaps_notify_children": "Child's device",
|
||
"panel.recaps_notify_parents": "Parents (one grouped message)",
|
||
"panel.recaps_send_time_label": "Send at",
|
||
"panel.recaps_send_time_hint": "Recaps are built at midnight; the notification waits until this time so nobody is woken up.",
|
||
"panel.recaps_retention_label": "Keep recaps for",
|
||
"panel.recaps_retention_hint": "Older recaps are deleted automatically.",
|
||
"panel.recaps_retention_1y": "1 year",
|
||
"panel.recaps_retention_2y": "2 years",
|
||
"panel.recaps_retention_forever": "Forever",
|
||
"panel.recaps_compare_label": "Compare with previous period",
|
||
"panel.recaps_compare_hint": "Adds the \"compared with last time\" slide.",
|
||
"panel.recaps_preview_label": "Preview",
|
||
"panel.recaps_preview_hint": "Build a throw-away recap of the last 30 days to see what a child will get. It shows on their recap card for a day.",
|
||
"panel.recaps_preview_btn": "Preview",
|
||
"panel.recaps_preview_done": "Preview built — open the recap card to watch it",
|
||
"notification.recap_ready.name": "Recap ready",
|
||
"notification.recap_ready.description": "Tells each child, and parents in one grouped message, that a new recap is ready to watch. Sent at the recap send time set in Settings → Recaps."
|
||
}
|