{
  "nav": {
    "search": "Search",
    "scanner": "Scanner",
    "showcase": "Showcase",
    "help": "Help",
    "help_title": "Help Guide",
    "settings": "Settings",
    "toggle_sidebar": "Toggle Sidebar"
  },
  "common": {
    "locale": {
      "zh-TW": "繁",
      "zh-CN": "简",
      "ja": "あ",
      "en": "EN"
    },
    "action": {
      "confirm": "Confirm",
      "cancel": "Cancel"
    },
    "no_image": "No Image"
  },
  "search": {
    "page_title": "Search",
    "drag_overlay": {
      "hint": "Drop to search by ID"
    },
    "placeholder": {
      "query": "Search ID, actress or drop files...",
      "tag": "Tag name"
    },
    "hint": {
      "partial_search": "Tip: Enter partial ID like IPZZ-03 to search 030–039; enter an actress name to find her works"
    },
    "action": {
      "search": "Search",
      "cancel_search": "Cancel Search",
      "clear": "Clear",
      "toggle_grid": "Switch to Grid View",
      "toggle_detail": "Switch to Detail View",
      "add_files": "Add Files",
      "add_folder": "Add Folder",
      "favorite": "Favorites",
      "load_favorite": "Load Favorite Folder",
      "load_favorite_folder": "Load: {folder}",
      "add_tag": "Add Tag",
      "edit_title": "Edit Title",
      "translate_ai": "AI Translate",
      "edit_chinese_title": "Edit Chinese Title",
      "switch_source": "Switch Version",
      "open_source_url": "Open Source Page",
      "open_folder": "Open Folder",
      "back_to_detail": "Back to Detail"
    },
    "empty": {
      "hint": "Enter an ID to search, or add video files",
      "drag_hint": "You can also drag and drop files or folders"
    },
    "error": {
      "hint": "Please check the ID format or try again later",
      "tag_api_failed": "Failed to save tag, please try again later"
    },
    "nav": {
      "prev": "Previous (←)",
      "next": "Next (→)"
    },
    "label": {
      "actor": "Actress",
      "date": "Release Date",
      "maker": "Maker",
      "director": "Director",
      "duration": "Duration",
      "label": "Label",
      "series": "Series",
      "tags": "Tags",
      "title": "Title",
      "chinese_title": "Chinese Title",
      "chinese_title_ai": "AI Translated Title"
    },
    "unit": {
      "minutes": "min",
      "age": " y/o",
      "cup": " cup"
    },
    "actress": {
      "add_favorite": "Add to favorites",
      "favorited": "Favorited",
      "favorite_success": "Added to favorites",
      "favorite_error": "Failed to add, please try again",
      "favorite_timeout": "Request timed out, please try again"
    },
    "badge": {
      "subtitle": "Chinese Subtitles"
    },
    "lightbox": {
      "close": "Close (ESC)",
      "prev": "Previous (←)",
      "next": "Next (→)"
    },
    "gallery": {
      "prev": "Previous (←)",
      "next": "Next (→)",
      "sample_prefix": "Stills"
    },
    "grid": {
      "sample_prefix": "Stills",
      "thumb_prefix": "Thumbnail",
      "detail_title": "View Detail",
      "unknown_actor": "Unknown",
      "unknown_title": "Unknown Title"
    },
    "cover": {
      "alt": "Cover"
    },
    "local": {
      "has_local": "Available locally (click to open folder)",
      "has_local_count": "{count} local versions available (click to open folder)"
    },
    "button": {
      "search_all": "Batch Search",
      "continue": "Continue",
      "pause": "Pause",
      "retry_failed": "Retry Failed ({count})",
      "search_range": "Search {start}-{end} / {total}",
      "translating_progress": "Translating ({processed}/{total})",
      "translate_all_count": "Translate All ({count})",
      "searching": "Searching...",
      "load_more": "Load more"
    },
    "mode": {
      "exact": "Exact ID Search",
      "partial": "Partial ID Search",
      "prefix": "Series Search",
      "actress": "Fuzzy Search",
      "keyword": "Full-text Search",
      "uncensored": "Uncensored Search"
    },
    "filelist": {
      "search_all_title": "Search all files not yet searched",
      "translate_all_title": "Translate all Japanese titles",
      "scrape_all_title": "Organize all searched files (rename + folder + NFO)",
      "scrape_all": "Batch Organize",
      "processing_prefix": "Processing",
      "organizing_prefix": "Organizing",
      "remove_file": "Remove this file",
      "scrape_nfo": "Organize",
      "failed": "Failed",
      "retry": "Retry",
      "enter_number": "Enter ID manually",
      "file_count": "File {current}/{total}",
      "result_count": "Results ({count})",
      "unrecognized": "Cannot identify ID: {filename}",
      "not_found": "No data found for {number}",
      "search_failed": "Search Failed",
      "connection_error": "Connection error, please try again later",
      "already_organized": "Organized"
    },
    "toast": {
      "no_searchable_files": "No files to search",
      "search_complete": "Batch search complete: {success} succeeded, {failed} failed",
      "no_scrapable_files": "No files to organize",
      "scrape_complete": "Batch organize complete: {success} succeeded, {failed} failed",
      "scrape_complete_dup": "Batch organize complete: {success} succeeded, {failed} failed, {duplicate} duplicates",
      "no_search_results": "No search results for this file",
      "scrape_failed": "Failed to organize {filename}",
      "no_valid_files": "No valid video files (could not identify number)",
      "desktop_only": "This feature requires the desktop app",
      "load_failed": "Load failed. Please try again.",
      "translate_failed": "Translation failed. Please try again.",
      "db_not_synced": "Not linked — organized files won't appear in Showcase",
      "db_sync_failed": "DB sync failed (file organized but not showing in Showcase)"
    },
    "duplicate": {
      "title": "Duplicate File",
      "body": "The target file already exists. Continuing will overwrite it:",
      "explanation": "This usually happens when the same title has multiple versions (CD1/CD2, 4K, UC).",
      "instruction": "Go to <strong>Settings → Advanced Scrape Settings → Version Tags</strong>, add keywords and make sure the file naming format includes the <code class=\"badge badge-sm\">{suffix}</code> variable.",
      "acknowledge": "Got it",
      "go_settings": "Go to Settings"
    }
  },
  "settings": {
    "page_title": "Settings",
    "tabs": {
      "display": "Display",
      "scraping": "Scraping",
      "sources": "Sources",
      "organize": "Organize",
      "translate": "AI Translate",
      "advanced": "Advanced"
    },
    "display": {
      "font_size_label": "Font Size",
      "locale_label": "Interface Language",
      "theme_label": "Theme"
    },
    "sources": {
      "uncensored_mode_label": "Uncensored Mode",
      "uncensored_mode_on": "Uncensored Mode: On",
      "uncensored_mode_off": "Uncensored Mode: Off",
      "uncensored_mode_off_hint": "Manually re-enable any censored source to turn off uncensored mode (Off does not automatically re-enable censored sources)",
      "counter_prefix": "Enabled",
      "cap_tag": "Cap",
      "select_all": "Enable All",
      "manual_only_badge": "BETA",
      "cap_exceeded_title": "Source Cap Reached",
      "cap_exceeded_body": "You have reached the limit of 10 enabled sources. Please disable one source first, or select a single source override in Advanced Search.",
      "warn_all_disabled": "No sources are currently enabled — exact censored searches will return no results. Exceptions: actress / keyword searches still operate via JavBus always-on rules; FC2 / HEYZO / date-format IDs still auto-fallback via uncensored sources.",
      "counter_help": "Auto-search uses up to 10 sources in the order you arranged them.",
      "mt_server_url_label": "Server URL",
      "mt_token_label": "Bearer Token",
      "mt_connect_btn": "Connect",
      "mt_connected_status": "✓ Connected",
      "mt_edit_btn": "Edit",
      "mt_disconnect_btn": "Disconnect",
      "mt_connected_tier_hint": "After connecting, all providers stay in the list below by default (not in Active Row). Add them manually. After connecting, all providers are automatically probed — unreachable ones are grayed out with a common-cause label, and you can manually 'Retest' them.",
      "mt_provider_list_header": "Provider List",
      "mt_provider_list_expand_aria": "Expand Provider List",
      "mt_provider_list_collapse_aria": "Collapse Provider List",
      "mt_promote_hint": "Click to add to Active Row",
      "mt_disconnect_toast": "Metatube disconnected. Please reconnect in Section 3 below.",
      "mt_enable_label": "Enable Metatube Connection",
      "mt_enable_help": "When enabled, expand the Metatube connection settings below to enter your self-hosted metatube server URL and access 30+ sources.",
      "mt_lan_mode_label": "LAN self-hosted (allow local network addresses)",
      "mt_connecting_btn": "Connecting…",
      "mt_connect_network_error": "Connection failed — check your network and try again",
      "mt_connect_success_toast": "Connected — {count} providers loaded into the Provider List",
      "mt_probe_testing": "Testing sources",
      "mt_retest_btn": "Retest",
      "mt_probe_hint_title": "Why are some sources grayed out?",
      "mt_probe_hint_reason1": "Your metatube server has no Japan proxy configured or it is not working (region-blocked sources such as FANZA / MGS).",
      "mt_probe_hint_reason2": "The source requires login or has anti-crawl measures (e.g. SOD — switching IPs does not help).",
      "mt_probe_hint_reason3": "The source's metatube scraper has broken due to a site redesign (e.g. JAV321 / KIN8 — unrelated to your setup).",
      "mt_promote_unavailable_warning": "This source is currently unreachable — it has been added to Active Row but may return no data",
      "mt_probe_failed_pill_hint": "This source is currently unreachable — it may return no data after adding. Click 'Retest' to check again.",
      "dmm_proxy_required_hint": "DMM requires a proxy to work — enable a proxy in Settings first"
    },
    "advanced_search": {
      "toggle_label": "Advanced Search (Beta)",
      "help": "When enabled, long-press the search button on the Search page to pick a single source (including disabled ones) for a one-time override.",
      "metatube_keyword_hint": "Metatube sources do not support actress/keyword search — enter a full ID for best results.",
      "group_metatube_empty": "No Metatube sources yet"
    },
    "toast": {
      "desktop_only": "This feature requires the desktop app"
    },
    "header": {
      "title": "Settings",
      "font_size_prefix": "Font size",
      "switch_dark": "Switch to dark mode",
      "switch_light": "Switch to light mode",
      "locale_prefix": "Locale"
    },
    "section": {
      "search": "Search & Scrape",
      "scraper_advanced": "Advanced Scrape Settings",
      "gallery_advanced": "Advanced Display Options",
      "system": "System Settings"
    },
    "search": {
      "uncensored_mode": "Uncensored Mode",
      "proxy_dmm_hint": "DMM requires Japan IP",
      "proxy_placeholder": "http://user:pass@host:port — enter direct if you already have Japan IP",
      "favorite_folder_label": "Favorite Folder",
      "favorite_folder_hint": "Load a commonly used folder with one click",
      "favorite_folder_placeholder": "Leave blank = system Downloads folder",
      "favorite_folder_example_prefix": "Example: C:\\Users\\&lt;your username&gt;\\Downloads"
    },
    "translate": {
      "enabled_label": "Enable Title Translation",
      "provider_label": "Translation Service",
      "ollama_local": "(Local)",
      "gemini_cloud": "(Google Cloud)",
      "model_label": "Model",
      "test_connection_placeholder": "Test connection first",
      "test_model_title": "Test Model",
      "test_translation_title": "Test Translation",
      "test_apikey_placeholder": "Test API Key first",
      "gemini_free_hint": "Free to sign up",
      "security_title": "Security Notice:",
      "security_item1": "API Key is stored in plain text in config.json",
      "security_item2": "Do not share config.json with others",
      "security_item3_prefix": "To revoke, go to",
      "security_item3_suffix": "to regenerate",
      "openai_compatible": "OpenAI Compatible",
      "openai_api_key_placeholder": "Leave blank = no Authorization header",
      "openai_api_key_hint": "Local LLMs can leave empty; cloud services require an API Key",
      "openai_model_placeholder": "e.g. gpt-4o-mini",
      "openai_custom_model": "Custom..."
    },
    "scraper": {
      "suffix_keywords_label": "Version Tags",
      "suffix_keywords_hint": "Filenames containing these keywords are kept as {suffix}; multiple keywords concatenate in list order",
      "create_folder_label": "Create Folder",
      "folder_layers_label": "Folder Layers",
      "folder_layer_outer": "Outer",
      "folder_layer_middle": "Middle",
      "folder_layer_inner": "Inner",
      "preview_prefix": "Preview",
      "filename_format_label": "File Naming Format",
      "max_title_length_label": "Title Length Limit",
      "unit_chars": "chars",
      "max_filename_length_label": "Filename Length Limit",
      "path_length_help_aria": "Windows path length info",
      "path_length_help_line1": "Windows default path limit is 260 characters (Windows 10 1607+ / Windows 11).",
      "path_length_help_line2": "For longer filenames, open PowerShell <strong>as Administrator</strong> and run:",
      "path_length_help_line3": "Reboot required for changes to take effect.",
      "path_length_help_line4": "macOS / Linux have no such limit, but long filenames generated on macOS/Linux may still fail on Windows without LongPathsEnabled.",
      "video_extensions_label": "Video Extensions",
      "video_extensions_hint": "Comma-separated",
      "jellyfin_mode_label": "Jellyfin / Emby Image Mode",
      "jellyfin_mode_hint": "Auto-generate {stem}-poster.jpg + {stem}-fanart.jpg; poster and NFO work with both Jellyfin and Emby, fanart is Jellyfin-only (Emby doesn't read this filename)",
      "download_sample_images_label": "Download Stills (extrafanart)",
      "download_sample_images_hint": "Download stills to extrafanart/ during organize (requires Create Folder enabled)"
    },
    "gallery": {
      "output_dir_label": "Output Directory",
      "select_folder_title": "Select Folder",
      "output_filename_label": "Output Filename",
      "default_mode_label": "Default Display Mode",
      "mode_image": "Image Mode",
      "mode_detail": "Detail Mode",
      "mode_text": "Text Mode",
      "default_sort_label": "Default Sort",
      "sort_date": "Release Date",
      "sort_mdate": "Modified Date",
      "sort_num": "ID",
      "sort_title": "Title",
      "sort_actor": "Actress",
      "sort_maker": "Maker",
      "sort_size": "File Size",
      "order_desc": "Descending",
      "order_asc": "Ascending",
      "items_per_page_label": "Items per Page",
      "all": "All",
      "min_size_label": "Minimum Video Size",
      "min_size_hint": "0 = no filter"
    },
    "system": {
      "default_page_label": "Default Page on Startup",
      "player_label": "Video Player",
      "player_placeholder": "Leave blank for system default",
      "player_hint_prefix": "E.g.:",
      "reset_label": "Reset All Settings",
      "reset_hint": "Delete all custom settings and restore defaults"
    },
    "action": {
      "test": "Test",
      "variable": "Variable",
      "reset": "Reset to Default",
      "save": "Save Settings"
    },
    "var": {
      "num": "ID",
      "title": "Title",
      "actor": "Actress",
      "actors": "Actresses",
      "maker": "Maker",
      "date": "Date",
      "year": "Year",
      "month": "Month",
      "day": "Day",
      "suffix": "Suffix"
    },
    "dirty_modal": {
      "title": "Unsaved Changes",
      "body": "You have unsaved changes. What would you like to do?",
      "discard": "Discard",
      "save": "Save Changes"
    },
    "reset_modal": {
      "title": "Reset all settings",
      "body": "Are you sure you want to reset all settings? This will delete all custom settings and cannot be undone.",
      "confirm": "Reset"
    },
    "status": {
      "loading_models": "Loading models...",
      "connecting": "Connecting...",
      "testing": "Testing...",
      "connection_failed": "Connection failed",
      "no_models": "No models available",
      "n_models": "{count} models",
      "enter_url": "Enter URL",
      "enter_api_key": "Enter API Key",
      "select_model": "Select a model",
      "network_error": "✗ Network error",
      "connect_failed": "Connection failed",
      "connected_n_models": "Connected, {count} models",
      "enter_api_key_first": "Enter API Key first",
      "gemini_n_flash_models": "Found {count} Flash models",
      "test_failed": "Test failed: {msg}",
      "testing_translation": "Testing translation...",
      "translation_success": "Translation test passed! ({translation})",
      "openai_connection_failed": "Connection failed",
      "openai_http_error": "HTTP request failed",
      "openai_auth_failed": "Authentication failed, check API Key",
      "openai_forbidden": "Access forbidden",
      "openai_not_found": "API endpoint not found, check Base URL",
      "openai_rate_limited": "Rate limit exceeded, try again later",
      "openai_missing_base_url": "Please enter Base URL",
      "openai_missing_model": "Please enter model name",
      "openai_connection_timeout": "Connection timeout",
      "openai_api_error": "API returned an error",
      "openai_translate_failed": "Translation test failed",
      "openai_unknown_response_format": "Unknown response format",
      "ja_skip": "Japanese mode: translation skipped"
    },
    "favorite_folder": {
      "pick_from_scanner": "Pick from Scanner folders",
      "no_directories": "No Scanner folders configured",
      "linked_text": "✓ Linked to Scanner",
      "not_linked_text": "⚠ Not linked to Scanner"
    }
  },
  "scanner": {
    "page_title": "Scanner",
    "toast": {
      "desktop_only": "This feature requires the desktop app",
      "folder_already_added": "This folder is already in the list",
      "copy_path_failed": "Copy failed: {path}",
      "generate_error": "Generation failed. Check the log for details.",
      "nfo_update_error": "NFO update failed. Check the log for details.",
      "jellyfin_update_error": "Jellyfin image update failed. Check the log for details."
    },
    "copy_fail_modal": {
      "title": "Copy logs failed",
      "body": "Clipboard write failed. Please select the text below manually and press Ctrl+C to copy:",
      "close": "Close"
    },
    "drag_overlay": {
      "hint": "Drop to add folder"
    },
    "folder": {
      "section_title": "Scan Folders",
      "select_title": "Select Folder",
      "manual_title": "Manual Input",
      "placeholder": "Enter folder path...",
      "empty_line1": "No folders added yet",
      "empty_line2": "Click the button above or drag a folder here",
      "remove_title": "Remove",
      "output_prefix": "Output:",
      "settings_link": "Settings",
      "copy_path": "Copy Path"
    },
    "terminal": {
      "filter_all": "All",
      "filter_all_title": "Show all",
      "filter_error": "Errors",
      "filter_error_title": "Show errors only",
      "filter_warn": "Warnings",
      "filter_warn_title": "Show warnings only",
      "copy_title": "Copy logs",
      "clear_display_title": "Clear display (restored on reload)",
      "clear_all_title": "Clear all (including history)"
    },
    "stats": {
      "cached_prefix": "Scanned:",
      "cached_suffix": " videos",
      "clear_cache_title": "Clear cache",
      "nfo_prefix": "Incomplete NFO fields:",
      "nfo_suffix": " videos",
      "nfo_update_title": "Fill incomplete NFO fields",
      "jellyfin_prefix": "Jellyfin cover format missing:",
      "jellyfin_suffix": " videos",
      "jellyfin_update_title": "Generate Jellyfin poster + fanart",
      "jellyfin_check_btn": "Check Jellyfin Images",
      "jellyfin_check_idle_label": "Jellyfin cover status not checked yet",
      "jellyfin_checking": "Checking...",
      "jellyfin_check_done_ok": "Checked — all images present",
      "last_run_prefix": "Last run: ",
      "last_added": "({count} added)",
      "generate_idle": "Generate",
      "generate_loading": "Generating...",
      "nfo_idle": "Fill Fields",
      "nfo_loading": "Filling...",
      "jellyfin_help_line1": "Jellyfin / Emby media servers require additional cover formats:",
      "jellyfin_help_line2": "<code>{stem}-poster.jpg</code> — cropped from the <strong>right side</strong> of the cover (portrait poster)",
      "jellyfin_help_line3": "<code>{stem}-fanart.jpg</code> — full-size copy of the cover (landscape background)",
      "jellyfin_help_line4": "Click \"Fix\" to auto-generate from existing covers. Fully local, no network required.",
      "jellyfin_idle": "Fix Images",
      "jellyfin_loading": "Fixing...",
      "btn_done": "Done",
      "missing_both_prefix": "Missing NFO+Cover:",
      "missing_nfo_prefix": "Missing NFO:",
      "missing_cover_prefix": "Missing Cover:",
      "missing_suffix": " videos",
      "missing_enrich_idle": "Enrich All",
      "missing_enrich_loading": "Enriching...",
      "missing_enrich_preparing": "Preparing...",
      "missing_enrich_done": "Enrich complete",
      "missing_enrich_toast_success": "Enrich complete! {success} succeeded",
      "missing_enrich_toast_mixed": "Enrich complete! {success} succeeded, {failed} failed",
      "missing_enrich_batch_fail": "Batch enrich failed ({status}): {error}",
      "missing_enrich_disconnect": "Connection lost, can resume next time",
      "missing_enrich_error": "Enrich failed, please try again later",
      "missing_enrich_stream_error": "Enrich error, can resume next time",
      "missing_enrich_interrupted": "Enrich interrupted, can resume next time",
      "missing_resume_label": "Last enrich unfinished, remaining",
      "missing_resume_suffix": " videos",
      "missing_resume_btn": "Resume",
      "missing_resume_dismiss": "Dismiss",
      "missing_enrich_confirm_title": "Confirm Large Batch Enrich",
      "missing_enrich_confirm_body_prefix": "About to enrich ",
      "missing_enrich_confirm_body_middle": " videos, estimated time about ",
      "missing_enrich_confirm_body_suffix": " minutes. Continue?",
      "missing_enrich_confirm_cancel": "Cancel",
      "missing_enrich_confirm_confirm": "Confirm"
    },
    "alias": {
      "section_title": "Actress Name Aliases",
      "collapse_title": "Expand/Collapse",
      "search_placeholder": "Add actress / filter...",
      "filter_hint": "Filtering — {count} matches, press Enter or [Add] to create \"{name}\"",
      "add": "Add",
      "online_search": "Online Search",
      "loading": "Loading...",
      "empty": "No alias records",
      "no_results": "No suggestions found",
      "add_alias": "+ Alias",
      "alias_input_placeholder": "Enter alias",
      "confirm": "Confirm",
      "delete_group_title": "Delete this alias group",
      "delete_alias_title": "Remove this alias",
      "error_conflict": "Alias conflict",
      "delete_group_modal": {
        "title": "Delete Alias Group",
        "body": "Are you sure you want to delete the alias group for \"{name}\"? This cannot be undone.",
        "cancel": "Cancel",
        "confirm": "Delete"
      }
    },
    "dirty_modal": {
      "title": "Unsaved Changes",
      "body": "You have modified the folder list but haven't generated the page yet. What would you like to do?",
      "cancel": "Cancel",
      "discard": "Discard Changes",
      "save": "Save and Leave"
    },
    "clear_cache_modal": {
      "title": "Clear Video Cache",
      "body_prefix": "This will delete all cached video metadata (",
      "body_suffix": " videos). You will need to re-scan next time. Are you sure?",
      "cancel": "Cancel",
      "confirm": "Delete"
    },
    "tag_alias": {
      "section_title": "Tag Alias Management",
      "collapse_title": "Expand / Collapse",
      "new_group_placeholder": "e.g. メイド / Maid / 女僕",
      "add": "Add",
      "loading": "Loading...",
      "empty": "No tag alias records yet",
      "add_alias_aria": "Add alias",
      "delete_group_title": "Delete this tag alias group",
      "delete_alias_title": "Remove this alias",
      "error_conflict": "Tag alias conflict",
      "delete_group_modal": {
        "title": "Delete Tag Alias Group",
        "body": "Delete the entire tag alias group \"{name}\"? This cannot be undone.",
        "cancel": "Cancel",
        "confirm": "Delete"
      },
      "ai_hint": {
        "icon_title": "AI organization suggestion",
        "tooltip": "💡 Let an AI agent organize via /api/capabilities for faster results"
      },
      "toast": {
        "add_group_success": "Tag alias group added: {name}",
        "delete_success": "Deleted: {name}"
      },
      "error": {
        "unknown": "Unknown error",
        "load_failed": "Load failed: {error}",
        "add_failed": "Add failed: {error}",
        "delete_failed": "Delete failed: {error}",
        "add_alias_failed": "Add alias failed: {error}",
        "remove_failed": "Remove failed: {error}"
      }
    }
  },
  "showcase": {
    "page_title": "Browse",
    "rescrape": {
      "modal_title": "Advanced Re-scrape",
      "search_title": "Advanced Search",
      "entry_tooltip": "Advanced Re-scrape",
      "number_label": "ID",
      "filename_hint": "Original filename",
      "source_question": "Which source?",
      "auto_source": "Auto",
      "searching": "Searching…",
      "not_found": "Not found — try a different ID or source.",
      "offline_tooltip": "Currently unreachable — retest in Settings",
      "overwrite_warning": "Overwrite existing cover + NFO (irreversible)",
      "confirm": "Overwrite",
      "back_to_pick": "Change source",
      "close": "Close",
      "success": "Overwritten (cover + NFO)",
      "fail": "Re-scrape failed, please try again later.",
      "jl_desktop_only": "Available in standalone desktop app only",
      "jl_cf_solving": "Cloudflare check in progress — will resume automatically once passed"
    },
    "placeholder": {
      "search": "Search ID, actress, title..."
    },
    "action": {
      "clear_search": "Clear Search",
      "search": "Search",
      "toggle_order": "Toggle Sort Order",
      "toggle_info": "Show/Hide Info (S)",
      "play_video": "Open Video",
      "play": "Play",
      "enrich": "Enrich"
    },
    "toolbar": {
      "sort_prefix": "Sort",
      "mode_prefix": "Mode"
    },
    "sort": {
      "date": "Date",
      "num": "ID",
      "title": "Title",
      "actor": "Actress",
      "maker": "Maker",
      "size": "Size",
      "mdate": "Modified",
      "random": "Random",
      "actress": {
        "video_count": "Film Count",
        "name": "Name",
        "added_at": "Date Added",
        "age": "Age",
        "height": "Height",
        "cup": "Cup"
      }
    },
    "mode": {
      "grid": "Grid",
      "table": "Table",
      "list": "List",
      "actress": "Actress Mode",
      "video": "Video Mode"
    },
    "unit": {
      "videos": "videos",
      "minutes": "min",
      "minutes_abbr": "min",
      "videos_count": " videos",
      "films": " films",
      "actresses": "actresses"
    },
    "status": {
      "total_prefix": "Total",
      "total_suffix": "videos",
      "search_prefix": "Search \"",
      "search_middle": "\" — Found",
      "search_suffix": " videos",
      "search_empty": "No matching films",
      "search_actresses_prefix": "Found ",
      "search_actresses_middle": " actresses for \"",
      "search_actresses_suffix": "\""
    },
    "nav": {
      "prev_page": "Previous",
      "next_page": "Next"
    },
    "grid": {
      "unknown_actor": "Unknown",
      "unknown_title": "Unknown Title",
      "unknown_size": "Unknown"
    },
    "label": {
      "actor": "Actress",
      "maker": "Maker",
      "date": "Date",
      "series": "Series",
      "duration": "Duration",
      "director": "Director",
      "label": "Label"
    },
    "table": {
      "col_number": "ID",
      "col_title": "Title",
      "col_actor": "Actress",
      "col_maker": "Maker",
      "col_director": "Director",
      "col_duration": "Duration",
      "col_date": "Date",
      "col_tags": "Tags",
      "col_size": "Size"
    },
    "lightbox": {
      "close": "Close (ESC)",
      "prev": "Previous (←)",
      "next": "Next (→)",
      "unknown_number": "Unknown",
      "add_tag": "Add Tag",
      "tag_placeholder": "Tag name",
      "tag_api_failed": "Failed to save tag, please try again",
      "user_tags_label": "Custom Tags",
      "alias_label": "Aliases",
      "alias_source_hint": "Synced from Scanner"
    },
    "gallery": {
      "prev": "Previous (←)",
      "next": "Next (→)",
      "sample_prefix": "Stills",
      "sample_alt": "Stills",
      "thumb_alt": "Thumbnail"
    },
    "shortcut": {
      "switch_mode": "Switch view",
      "toggle_info": "Toggle Info",
      "pagination": "Pagination",
      "close": "Close"
    },
    "enrich": {
      "success": "Enriched successfully",
      "failed": "Enrich failed, please try again"
    },
    "search": {
      "actress": "Search actress name...",
      "video": "Search ID, actress, title..."
    },
    "actress": {
      "add": "+ Add Actress",
      "addPlaceholder": "Enter actress name...",
      "addSuccess": "Added to favorites",
      "addDuplicate": "Already in favorites",
      "addNotFound": "Actress not found",
      "addTimeout": "Scrape timed out, please try again",
      "remove": "Remove Favorite",
      "remove_modal": {
        "title": "Remove from favorites",
        "body": "Remove \"{name}\" from your favorites? This cannot be undone.",
        "cancel": "Cancel",
        "confirm": "Remove"
      },
      "removeSuccess": "Removed from favorites",
      "empty": "No favorite actresses yet",
      "emptyHint": "Click + in the top right to add one",
      "search_films": "Search related films",
      "addFavorite": "Add to favorites",
      "favorited": "Favorited",
      "change_photo": "Change Photo",
      "picker": {
        "empty": "No candidates found",
        "empty_hint": "More saved videos = more local options. You can also replace the image file directly.",
        "loading": "Fetching candidates…",
        "error": "Failed to fetch candidates",
        "replaced": "Photo replaced. You can change it anytime.",
        "current_source": "Current: {source}",
        "source_local_crop": "Local",
        "source_graphis": "Graphis",
        "source_gfriends": "gfriends",
        "source_wiki": "Wiki",
        "source_minnano": "Minnano"
      }
    },
    "samples": {
      "fetch_btn": "Fetch Stills",
      "fetching": "Fetching...",
      "success": "Stills fetched successfully",
      "fetch_failed": "Failed to fetch stills, please try again",
      "multi_video_error": "This folder contains other videos. Fetching stills here may affect them. Please move the video to its own folder first."
    }
  },
  "help": {
    "hero": {
      "page_title": "Help Guide",
      "subtitle": "JAV Metadata Management Tool",
      "privacy": "🔒 Local app only — no user data collected",
      "btn_tutorial": "Restart Tutorial",
      "btn_check_update": "Checking…",
      "btn_check_update_idle": "Check for Updates",
      "update_available_prefix": "New version",
      "update_available_suffix": "available",
      "up_to_date": "You are up to date",
      "ai_instruction": "Paste to AI agent to control OpenAver",
      "ai_hint_unsupported": "Not supported in web chat",
      "ai_tools": "Paste to any AI agent to operate OpenAver — Claude Code · Cursor · Codex etc."
    },
    "workflow": {
      "title": "First time? Follow these 3 steps",
      "subtitle": "From adding your folder to filling metadata — three steps to get started",
      "step1_title": "Add Your Library Folder",
      "step1_desc": "Track your AV video folder in Scanner",
      "step2_title": "Generate Page",
      "step2_desc": "Scan and build a browsable collection page in one click",
      "step3_title": "NFO Fill",
      "step3_desc": "Missing covers or metadata? Fetch them from the web in one click",
      "next_steps_title": "✅ Done! Now try these",
      "next_steps_similar": "Lightbox wand button: fuzzy-explore similar videos",
      "next_steps_favorite": "Add your favorite actresses to your collection",
      "next_steps_tag_alias": "Click any tag chip to expand synonyms (auto cross-language: Chinese, Japanese, English)"
    },
    "power_user": {
      "title": "Want more control?",
      "intro": "Like to control every detail yourself? OpenAver gives you the full set of advanced entry points — scrape titles one by one with precision, define custom naming rules, manage cross-language aliases. See the Search, Settings, and Tag Alias sections below."
    },
    "tag_alias": {
      "title": "Tag Alias Management",
      "intro": "Manage Chinese/Japanese/English synonyms in one place so the search box, chip filters, and fuzzy exploration all speak the same language.",
      "h6_scanner": "Create alias groups in Scanner",
      "scanner_chipwall": "The chip wall lists all tag alias groups. Click \"+\" to add an alias; the primary name is shown in pink, aliases in grey.",
      "scanner_ai_hint": "Click \"?\" to open the AI suggestion panel: describe your tag needs to the AI and it returns suggested alias groups for direct import.",
      "h6_showcase": "Auto-expand in Showcase",
      "showcase_expand": "When you type in the search box or click a chip, synonyms are automatically expanded for filtering — consistent with actress alias behavior.",
      "showcase_click": "Click any tag chip → filter all videos sharing any synonym tag, no need to know the exact Japanese spelling.",
      "h6_tips": "Advanced Tips",
      "tip_ranker": "After building aliases, the constellation mode (fuzzy exploration) picks them up immediately — videos with synonym tags count toward the similarity score."
    },
    "search": {
      "title": "Search",
      "h6_methods": "Supported Search Methods",
      "h6_dragdrop": "Drag & Drop Files",
      "h6_grid": "Grid Mode (Cover Wall)",
      "h6_badge": "Version Badge",
      "method_full": "<strong>Full ID</strong>: e.g. <code>SONE-001</code>, exact match",
      "method_partial": "<strong>Partial ID</strong>: e.g. <code>SONE-0</code>, searches 001–009",
      "method_series": "<strong>Series Search</strong>: e.g. <code>SONE</code>, finds latest in series",
      "method_actress": "<strong>Actress Name</strong>: e.g. <code>Kaho Imai</code>, finds her works",
      "drag_auto": "Drag video files into the window to auto-extract ID and search",
      "drag_batch": "Supports batch processing of multiple files (up to 20 at once)",
      "drag_generate": "After a successful search, click 'Organize' to rename files, download covers, create folders and write NFO",
      "grid_switch": "After searching, switch to cover wall view; click a cover to open Lightbox",
      "grid_lightbox": "<strong>Lightbox</strong>: Full-screen cover view; use <kbd class=\"kbd kbd-sm\">←</kbd> <kbd class=\"kbd kbd-sm\">→</kbd> to navigate, <kbd class=\"kbd kbd-sm\">Esc</kbd> to close",
      "grid_detail": "Lightbox shows director, duration, series, label and more (only when data is available)",
      "grid_gallery": "Click the 'Stills' button to browse sample images; supports keyboard <kbd class=\"kbd kbd-sm\">←</kbd> <kbd class=\"kbd kbd-sm\">→</kbd> and touch swipe",
      "badge_keywords": "When a filename contains keywords like <code>-4k</code> or <code>-uc</code>, a colored badge appears on the result card",
      "h6_advanced_picker": "Advanced Search Picker (Beta)",
      "picker_longpress": "① Long-press the search button to pick a single source for that search (Beta — enable in Settings › Advanced)",
      "picker_panel_switch": "② Long-press 🔄 in the result panel to switch source",
      "picker_showcase_enrich": "③④ In Showcase cover wall or lightbox, long-press the enrich button (🔍) → re-scrape the current title with a chosen source.",
      "picker_lightbox_gear": "⑤ In Showcase lightbox, click ⚙ next to the ID → advanced re-scrape the current title (single click, no long-press)."
    },
    "batch": {
      "title": "Batch File Search",
      "h6_add": "Add Multiple Files",
      "h6_favorite": "Favorite Folder",
      "h6_pause": "Pause & Resume",
      "h6_generate_all": "Batch Organize",
      "h6_badge": "Version Tag Preservation",
      "add_folder": "<strong>Drop Folder</strong>: Automatically scans video files in the folder",
      "add_filter": "<strong>Auto Filter</strong>: Excludes non-video files and files below the size threshold",
      "add_batch": "<strong>Batch Search</strong>: 20 files per batch, 2 concurrent requests",
      "add_progress": "<strong>Progress Display</strong>: Real-time progress (e.g. Processing 15/100)",
      "fav_settings": "Set your frequently used folder path on the <strong>Settings page</strong>; choose from Scanner-tracked folders via dropdown with inline link status (✓ Linked to Scanner / ⚠ Not tracked)",
      "fav_load": "Click the '⭐ Favorites' button to load it instantly",
      "fav_auto": "Automatically begins searching the first 20 files",
      "fav_nfo_skip": "If a same-name .nfo already exists, the file is treated as organized and the scraper is skipped",
      "pause_pause": "Click the 'Pause' button during batch search",
      "pause_resume": "Click 'Resume' to continue from where it paused",
      "generate_all": "After batch search completes, organize all successful results at once (rename, create folders, download covers, write NFO)",
      "badge_suffix": "Tags like <code>-cd1</code> or <code>-4k</code> in filenames are automatically preserved as <code>{suffix}</code>"
    },
    "format": {
      "title": "Format Variables Reference",
      "h6_default": "Default Format",
      "h6_fallback": "Fallback Rules",
      "col_var": "Variable",
      "col_desc": "Description",
      "col_example": "Example",
      "col_fallback": "Folder Fallback",
      "var_num_desc": "ID",
      "var_title_desc": "Title",
      "var_actor_desc": "First actress",
      "var_actors_desc": "All actresses",
      "var_maker_desc": "Maker",
      "var_date_desc": "Release date",
      "var_year_desc": "Year",
      "var_month_desc": "Month (2-digit)",
      "var_day_desc": "Day (2-digit)",
      "var_suffix_desc": "Version tag",
      "fallback_unknown_title": "Unknown Title",
      "fallback_unknown_actor": "Unknown Actress",
      "fallback_unknown_maker": "Unknown Maker",
      "fallback_unknown_date": "Unknown Date",
      "fallback_unknown_year": "Unknown Year",
      "fallback_unknown_month": "Unknown Month",
      "fallback_unknown_day": "Unknown Day",
      "fallback_empty": "Omitted if empty",
      "default_filename": "Filename: <code>[{num}][{maker}] {title}{suffix}</code>",
      "default_folder": "Folder: <code>{actor}</code>",
      "fallback_folder_rule": "Folder levels use fallback values (e.g. 'Unknown Actress') to avoid empty paths",
      "fallback_filename_rule": "Filename does not use fallback; variables are omitted when empty"
    },
    "actress": {
      "title": "Actress Features",
      "h6_search": "Search Page",
      "search_hero": "When searching a favorited actress name, a profile card (photo, age, height, measurements) appears above the search box",
      "search_favorite": "Tap ♡ on any result card to add to favorites; favorited actresses are looked up locally without a network request",
      "search_grid": "Actress search results with 10+ works automatically switch to cover-wall mode with Lightbox navigation",
      "h6_showcase": "Showcase Page",
      "showcase_toggle": "Toolbar toggle switches between film mode and actress mode (Film | Person icon)",
      "showcase_grid": "Actress favorites grid with sorting by name, age, cup size, height, or date added",
      "showcase_lightbox": "Lightbox supports changing photo or removing from favorites",
      "h6_manage": "Favorites Management",
      "manage_add": "Add favorites from Search or Showcase; profile photo is downloaded locally automatically",
      "manage_alias": "Alias management: add and edit actress aliases on the Scanner page; all known aliases are expanded automatically during search",
      "manage_enrich": "Click 🔄 in lightbox to replace actress photo with cloud or local-video-cover candidates",
      "manage_photo_path": "Favorited actress photos are stored in the output/Gfriends/ directory; when changing a profile photo, all alias names are automatically expanded for local candidate lookup"
    },
    "scanner": {
      "title": "Video List Generator (Scanner)",
      "h6_features": "Features",
      "h6_output": "Output Files",
      "h6_subtitle": "Subtitle Auto-detection",
      "h6_jellyfin": "Jellyfin Image Mode",
      "feat_scan": "Scans local video folders and generates a beautiful HTML showcase page",
      "feat_nfo": "Automatically reads NFO files and displays metadata",
      "feat_nfo_fill": "Supports 'NFO Fill': automatically searches for missing NFO files",
      "feat_terminal": "Built-in Mini Terminal shows real-time processing progress",
      "output_html": "<strong>index.html</strong>: A static page that can be opened in any browser",
      "output_copy": "<strong>Auto Copy</strong>: Cover images and NFO files are copied to the output directory",
      "output_darkmode": "<strong>Dark Mode</strong>: Automatically follows the Web App theme setting",
      "subtitle_detect": "When organizing videos, automatically detects subtitle files with the same name in the same directory (<code>.srt</code>, <code>.ass</code>, <code>.ssa</code>)",
      "subtitle_move": "After a video is moved successfully, subtitles are moved with it, preserving language suffixes (e.g. <code>.cht.srt</code>)",
      "subtitle_nfo": "When subtitles are detected, NFO is automatically tagged with 'Chinese Subtitles'",
      "jellyfin_enable": "Once enabled on the <strong>Settings page</strong>, scanning automatically generates <code>-poster.jpg</code> + <code>-fanart.jpg</code>",
      "jellyfin_showcase": "After scanning, browse results on the <code>/showcase</code> page"
    },
    "showcase": {
      "title": "Video Browser (Showcase)",
      "h6_modes": "Display Modes",
      "h6_sort": "Sort & Search",
      "h6_other": "Other Features",
      "intro": "After Scanner finishes, browse your video library at the <code>/showcase</code> page.",
      "mode_grid": "<strong>Grid Mode</strong>: Cover wall view, click to open Lightbox",
      "mode_list": "<strong>List Mode</strong>: Compact list, ideal for quick browsing",
      "mode_table": "<strong>Table Mode</strong>: Full metadata in a table layout",
      "sort_sort": "<strong>Sort</strong>: Date / ID / Title / Actress / Maker / Size / Modified / Random",
      "sort_search": "<strong>Search</strong>: Filter by ID, actress, title and more",
      "other_lightbox": "Lightbox full-screen cover view (<kbd class=\"kbd kbd-sm\">←</kbd> <kbd class=\"kbd kbd-sm\">→</kbd> to navigate)",
      "other_lightbox_detail": "Lightbox shows director, duration, series, label and more",
      "other_table_cols": "Table mode adds 'Director' and 'Duration' columns",
      "other_gallery": "Lightbox can open sample image gallery (click 'Stills' button)",
      "other_per_page": "Items per page can be adjusted on the <strong>Settings page</strong>"
    },
    "shortcuts": {
      "title": "Keyboard Shortcuts",
      "h6_search": "Search Page",
      "h6_showcase": "Browse Page (Showcase)",
      "search_hint": "All shortcuts are disabled when the search box is focused.",
      "col_key": "Key",
      "col_context": "Context",
      "col_action": "Action",
      "ctx_lightbox_open": "Lightbox open",
      "ctx_lightbox_closed": "Lightbox closed",
      "action_close_lightbox": "Close Lightbox",
      "action_prev_next_video": "Previous / Next video",
      "search_arrow2_ctx": "Detail mode, Lightbox closed",
      "search_arrow2_action": "Switch to prev / next result",
      "showcase_arrow_action": "Previous / Next page",
      "showcase_a_action": "Cycle display mode (Grid → List → Table)",
      "showcase_s_ctx": "Grid mode, Lightbox closed",
      "showcase_s_action": "Show / Hide card info"
    },
    "scraper": {
      "title": "Scraper Sources",
      "h6_censored": "Censored Sources",
      "h6_uncensored": "Uncensored Sources",
      "h6_default_source": "Default Search Source",
      "h6_dmm_fuzzy": "DMM Fuzzy Search",
      "h6_proxy_direct": "Proxy Direct Mode",
      "h6_toggle": "Toggle Mode",
      "h6_format": "ID Format Examples",
      "censored_dmm": "<strong>DMM</strong>: Requires a Japanese IP proxy (<strong>Settings page</strong> → Proxy field)",
      "censored_others": "<strong>JavBus</strong>, <strong>Jav321</strong>, <strong>JavDB</strong>: Available directly",
      "uncensored_d2pass": "<strong>D2Pass</strong>: Covers 1Pondo / Caribbeancom / 10musume",
      "uncensored_heyzo": "<strong>HEYZO</strong>: Standalone source",
      "uncensored_fc2": "<strong>FC2</strong>: FC2-PPV dedicated",
      "uncensored_avsox": "<strong>AVSOX</strong>: General uncensored source",
      "default_source_set": "Drag to reorder sources in the 'Sources' tab — the system uses them in order",
      "default_source_effect": "Disable a source's toggle to temporarily exclude it without deleting its settings",
      "fuzzy_always_on": "<strong>Fuzzy search exception</strong>: When searching by actress name or keyword, sources follow the ranked order even if disabled in Sources — disabled status only applies to exact ID searches.",
      "dmm_fuzzy_trigger": "Entering a Japanese actress or maker name in the search box also triggers DMM fuzzy search",
      "dmm_fuzzy_prereq": "Prerequisite: DMM must be enabled (requires Proxy or <code>direct</code> mode)",
      "proxy_direct_vpn": "If you are already connected to a Japan VPN or are located in Japan, no extra Proxy setup is needed",
      "proxy_direct_how": "Simply enter <code>direct</code> in the Proxy field on the Settings page to enable DMM directly",
      "toggle_uncensored": "Enable the 'Uncensored Mode' toggle on the <strong>Settings page</strong> to prioritize uncensored sources",
      "col_source": "Source",
      "col_format": "Format",
      "col_example": "Example"
    },
    "metatube": {
      "title": "Metatube Tutorial",
      "h6_what": "What is metatube",
      "what_desc": "metatube is a self-hosted HTTP server that unlocks 30+ upstream providers in one connection (ideal for power users / Docker environments).",
      "h6_enable": "Setup steps",
      "enable_gate": "Settings › 'Search & Scrape' — enable the Metatube gate toggle → connection section expands",
      "enable_url": "Enter Server URL (e.g. http://your-metatube:8080) + optional Bearer token → click [Connect]",
      "h6_sources": "Source management",
      "sources_promote": "30+ providers land in the Parts Bin — manually promote the ones you want into Active Row (cap: 10)",
      "sources_offline": "Unreachable sources are automatically grayed out — click [Retest] to recheck connectivity",
      "h6_lan": "LAN self-hosted notes",
      "lan_ssrf": "Servers hosted on LAN require an opt-in checkbox in Settings (SSRF safety reminder)",
      "h6_limits": "Source limitations",
      "limits_picker": "Metatube sources in the picker do not support actress / keyword search — enter a full ID for best results",
      "h6_db": "Performance tip",
      "db_hint": "Searching multiple metatube sources in parallel can be slow — consider switching your metatube server to PostgreSQL instead of the default SQLite (this is a metatube server setting, not an OpenAver setting).",
      "crossref_picker": "Use the Advanced Search picker to select a single metatube source → see the 'Search' card"
    },
    "troubleshooting": {
      "title": "Troubleshooting",
      "h6_crash": "App Won't Start / Crashes (Windows)",
      "h6_display": "UI Display Issues / Blank Screen",
      "h6_report": "Reporting a Problem",
      "h6_dmm": "DMM Search Not Working",
      "h6_translate": "Translation Not Responding",
      "crash_cause": "<strong>Cause</strong>: Windows security has blocked files downloaded from the internet.",
      "crash_fix_label": "<strong>Fix</strong>:",
      "crash_fix_1": "Right-click the downloaded ZIP → Properties",
      "crash_fix_2": "Check 'Unblock', then click OK",
      "crash_fix_3": "Re-extract and run the app",
      "display_cause": "<strong>Cause</strong>: Missing WebView2 Runtime (common on Windows 10 or VMs).",
      "display_fix": "<strong>Fix</strong>: Download and install <a href=\"https://go.microsoft.com/fwlink/p/?LinkId=2124703\" target=\"_blank\">Microsoft Edge WebView2 Runtime</a>.",
      "report_log_path": "<strong>Log location</strong>: <code>%USERPROFILE%\\OpenAver\\logs\\debug.log</code>",
      "report_debug_label": "<strong>Run Debug Mode</strong>:",
      "report_debug_1": "Run <code>OpenAver_Debug.bat</code>",
      "report_debug_2": "Reproduce the issue",
      "report_debug_3": "Report the log file and error message to <a href=\"https://github.com/slive777/OpenAver/issues\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issues</a>",
      "dmm_proxy": "DMM requires a Japanese IP; enter a Japanese proxy in the <strong>Settings page</strong> → Proxy field",
      "dmm_direct": "If you are already on a VPN or Japan network, you can also enter <code>direct</code> in the Proxy field to enable it without a proxy address.",
      "translate_ollama": "<strong>Ollama</strong>: Confirm the Ollama application is running (Windows requires manual launch)",
      "translate_gemini": "<strong>Gemini</strong>: Confirm the API Key is correctly set on the <strong>Settings page</strong>",
      "translate_openai": "<strong>OpenAI Compatible</strong>: Check that the Base URL and model name are correct"
    },
    "js": {
      "version_load_failed": "Failed to load",
      "check_update_failed": "Check failed, please try again later",
      "check_update_network_error": "Network error, please try again later"
    },
    "similar": {
      "title": "Similar Video Discovery (Rule-based)",
      "intro": "Click the wand button in Lightbox → 12 discovery stars orbit the main cover; stars are ranked by rule-based tag similarity (IDF-weighted + series / maker / year / cast signals). No model downloads required — works out of the box.",
      "h6_what": "How it works",
      "what_principle": "Primary signal uses IDF-weighted Jaccard — rare tag matches score higher; combined with series / maker / year / cast multi-signal scoring.",
      "what_crop": "Exact series match gets a bonus, bringing same-series videos to the top.",
      "what_diversity": "MMR diversity rerank (λ=0.7) ensures the final 12 results balance similarity and variety.",
      "h6_use": "How to use",
      "use_lightbox": "Open Lightbox in Showcase video mode → click the wand button <i class=\"bi bi-magic\"></i> in the top-left → enter constellation mode",
      "use_constellation": "12 stars orbit the central main cover; click any star to \"dive in\" and make it the new main — explore endlessly",
      "use_mobile": "On mobile (&lt; 768px) falls back to a grid of the top 4 results below the main cover, without animation",
      "h6_beta": "Limitations",
      "beta_uncensored": "For <strong>uncensored / FC2 / old compilation</strong> covers with non-standard layouts, videos without metadata fall into Tier 3/4 (random fill) with lower relevance",
      "beta_compilation": "More complete tags (series / maker / cast) means better accuracy; videos with few tags should have their NFO filled in first",
      "h6_manage": "Tips",
      "manage_enable": "No configuration needed — works out of the box",
      "manage_scanner": "After adding videos, the index updates automatically when Scanner generates the webpage — no manual steps needed"
    }
  },
  "tutorial": {
    "close": "Close",
    "skip": "Skip",
    "next": "Next →",
    "done": "Done 🎉",
    "step1_title": "📂 Add Your Library Folder",
    "step1_content": "Add the folder path where your AV videos are stored<br>OpenAver will scan all videos and build a browsable page",
    "step2_title": "▶ Generate Page",
    "step2_content": "Click this button to scan and build your private collection page<br>Takes just a few seconds",
    "step3_title": "🌐 NFO Fill Entry Point",
    "step3_content": "After scanning, return to the Scanner page<br>The NFO fill button appears automatically — fetch missing covers or metadata from the web in one click",
    "step4_title": "🎬 Browse Your Collection",
    "step4_content": "Open Showcase when done<br>The lightbox has a wand button to fuzzy-explore similar videos",
    "step5_title": "🔍 Advanced — Per-title Scraping",
    "step5_content": "Want precise control over each title's metadata?<br>Search lets you handle them one by one manually",
    "step6_title": "⚙️ Advanced — Custom Rules",
    "step6_content": "Naming format, AI translation, and visual strategy are all in Settings<br>Come back when you're ready to dig deeper",
    "step7_title": "📖 Help Manual",
    "step7_content": "Come back any time to replay this<br>The Help page also has full feature docs and AI agent commands"
  },
  "notif": {
    "title": "Notifications",
    "clear_all": "Clear All",
    "empty": "No notifications",
    "open": "Open notifications",
    "close": "Close notifications",
    "dialog_label": "Notification Center",
    "scanner_started": "Scan started",
    "scanner_done": "Scan complete",
    "scanner_done_with_errors": "Scan complete (some failures)",
    "scanner_failed": "Scan interrupted",
    "batch_enrich_started": "Batch enrich started",
    "batch_enrich_done": "Batch enrich complete",
    "batch_enrich_done_with_errors": "Batch enrich (some failures)",
    "batch_enrich_failed": "Batch enrich interrupted",
    "jl_cf_timeout": "JavLibrary CF challenge timed out"
  },
  "similar_mode": {
    "button_aria_label": "Explore similar videos",
    "close": "Close",
    "fetch_failed": "Load failed"
  }
}
