{
  "msg.version_info": "⚡\uFE0F {name} Version: {version} (Build time: {build_time})",
  "msg.check_ipv6_support": "\uD83D\uDEDC Checking whether the current network supports IPv6...",
  "msg.ipv6_supported": "✅ The current network supports IPv6!",
  "msg.ipv6_not_supported": "⚠\uFE0F The current network does not support IPv6. Don't worry. The results of IPv6 will be saved",
  "msg.schedule_update_time": "\uD83D\uDD52 Next scheduled update: {time}",
  "msg.schedule_cancelled": "Scheduled update has been cancelled!",
  "msg.update_cancelled": "Update has been cancelled!",
  "msg.no_channel_names": "❌ No channel names found! Please check the {file}!",
  "msg.total_urls_need_test_speed": "Total urls: {total}, need to test speed: {speed_total}",
  "msg.progress_speed_test": "🚀 Speed testing now, total urls: {total}, need to test speed: {speed_total}",
  "msg.progress_desc": "Running {name}, remaining {remaining_total} of {item_name}, estimated remaining time: {remaining_time}",
  "msg.update_completed": "\uD83E\uDD73 Update completed! Total time spent: {time}{service_tip}",
  "msg.service_tip": ", You can watch it at the following address",
  "msg.service_run_success": "✅ Service run successful{service_tip}",
  "msg.whitelist_found": "✅ Whitelist interface rules count: {count}",
  "msg.blacklist_found": "✅ Blacklist interface rules count: {count}",
  "msg.channel_logo_found": "✅ Local channel logo count: {count}",
  "msg.subscribe_urls_whitelist_total": "✅ Subscribe urls count: {default_count}, subscribe whitelist count: {whitelist_count}, disabled count: {disabled_count}, active total count: {total}",
  "msg.epg_urls_whitelist_total": "✅ EPG urls count: {default_count}, EPG whitelist count: {whitelist_count}, disabled count: {disabled_count}, active total count: {total}",
  "msg.no_subscribe_urls": "❌ No valid subscribe urls found! Please check the {file}, you need to add subscribe urls to get the subscribe sources!",
  "msg.auto_disable_source": "⛔ {name} source disabled automatically: {url} ({reason})",
  "msg.auto_disable_source_done": "\uD83C\uDD97 {name}: ✅ Active count: {active_count}, ⛔ Disabled count: {disabled_count}",
  "msg.auto_disable_request_failed": "request failed",
  "msg.auto_disable_empty_content": "empty content",
  "msg.auto_disable_no_match": "no matching value found",
  "msg.error_name_info": "❌ Error on {name}: {info}",
  "msg.error_load_cache": "❌ Error loading cache file: {info}",
  "msg.error_append_channel_data": "❌ Error appending channel data: {info}",
  "msg.error_service_start_failed": "❌ Service start failed: {info}",
  "msg.error_channel_id_not_found": "❌ Channel id not found",
  "msg.error_channel_url_not_found": "❌ Channel url not found",
  "msg.error_channel_id_m3u8_read_info": "❌ Read m3u8 failed for {channel_id}: {info}",
  "msg.error_m3u8_read": "❌ Failed to read m3u8",
  "msg.error_start_ffmpeg_failed": "❌ Failed to start ffmpeg: {info}",
  "msg.error_get_channel_data_from_database": "❌ Failed to get channel data from database: {info}",
  "msg.error_stop_channel_stream": "❌ Stop stream {channel_id} failed: {info}",
  "msg.error_rtmp_service_start_failed": "❌ RTMP Service start failed: {info}",
  "msg.error_rtmp_service_stop_failed": "❌ RTMP Service stop failed: {info}",
  "msg.m3u8_hls_not_ready": "HLS m3u8 not ready, please refresh or try again later",
  "msg.no_result_channel": "\uD83C\uDE33 No result channel name:",
  "msg.writing_result": "Writing result to to file...",
  "msg.write_success": "✅ Result written successfully",
  "msg.write_error": "❌ Error writing result file: {info}",
  "msg.failed_retrying_count": "\uD83D\uDD04 Failed to request the {name}. Retrying {count}...",
  "msg.failed_retry_max": "❌ Failed to request the {name} reached the maximum retries",
  "msg.request_timeout": "Request timed out: {name}",
  "msg.request_failed": "❌ Request failed: {name}",
  "msg.waiting_tip": "\uD83D\uDCC4 Please wait for the valid result to be generated",
  "msg.rtmp_publish": "\uD83D\uDE80 RTMP publishing started at {channel_id}, source: {source}",
  "msg.rtmp_try_encoder": "Trying encoder: {encoder}, channel: {channel_id}",
  "msg.rtmp_encoder_start_failed": "Failed to start encoder {encoder}: {info}",
  "msg.rtmp_encoder_quick_fail": "Encoder {encoder} failed quickly during startup, trying next candidate.",
  "msg.rtmp_all_encoders_failed": "All encoder attempts failed",
  "msg.rtmp_on_done": "\uD83D\uDD1A RTMP publishing ended at {channel_id}",
  "msg.rtmp_hls_idle_monitor_start_success": "✅ HLS idle monitor started successfully",
  "msg.rtmp_hls_idle_monitor_start_fail": "❌ HLS idle monitor failed to start: {info}",
  "msg.rtmp_hls_stream_already_running": "HLS stream {channel_id} is already running",
  "msg_rtmp_hls_idle_will_stop": "[HLS_IDLE] {channel_id} idle for {second}s, will stop",
  "msg.statistic_log_path": "\uD83D\uDCC4 Result statistic log: {path}",
  "msg.ipv4_api": "🌐 {mode} IPv4 API: {api}",
  "msg.ipv6_api": "🌐 {mode} IPv6 API: {api}",
  "msg.full_api": "🌐 {mode} API: {api}",
  "msg.rtmp_full_api": "\uD83D\uDE80 {mode} API: {api}",
  "msg.ffmpeg_installed": "✅ FFmpeg is installed",
  "msg.ffmpeg_not_installed": "❌ FFmpeg is not installed",
  "msg.fofa_processing_name": "Processing FOFA for {name}",
  "msg.mode_search_name": "{mode} search: {name}",
  "msg.mode_search_name_page": "{mode} search: {name}, page: {page}",
  "msg.name_page_results_number": "{name}, page: {page}, results number: {number}",
  "msg.name_no_results": "{name}: No results found",
  "msg.name_page_element_empty": "❌ {name}: Page element is empty",
  "msg.name_page_error_info": "❌ {name}: Error on page {page}: {info}",
  "msg.name_search_error_info": "❌ {name} search error: {info}",
  "msg.name_no_results_refresh_retrying": "{name}: No results found, refreshing and retrying...",
  "msg.name_no_elements_refresh_retrying": "{name}: No elements found, refreshing and retrying...",
  "msg.reach_retry_limit_jump_next": "{name}: reached retry limit, jumping to next page",
  "msg.update_disabled": "⚠️ Update function has been disabled",
  "pbar.progressing": "Progressing",
  "pbar.speed_test": "\uD83D\uDE80 Speed test",
  "pbar.get": "Get",
  "pbar.url": "url",
  "pbar.source": "source",
  "pbar.getting_name": "\uD83D\uDD0D Getting {name}",
  "pbar.name_search": "{name} search",
  "name.whitelist": "Whitelist",
  "name.local": "Local",
  "name.hls": "HLS",
  "name.history": "History",
  "name.total": "Total",
  "name.subscribe": "Subscribe",
  "name.epg": "EPG",
  "name.category": "Category",
  "name.name": "Name",
  "name.valid": "Valid",
  "name.valid_percent": "Valid Percent",
  "name.min_delay": "Min Delay",
  "name.max_speed": "Max Speed",
  "name.average_speed": "Average Speed",
  "name.max_resolution": "Max Resolution",
  "name.error": "Error",
  "name.region": "Region",
  "name.channel": "Channel",
  "name.from": "From",
  "name.ipv_type": "IPv Type",
  "name.location": "Location",
  "name.isp": "ISP",
  "name.date": "Date",
  "name.delay": "Delay",
  "name.speed": "Speed",
  "name.resolution": "Resolution",
  "name.video_codec": "Video Codec",
  "name.audio_codec": "Audio Codec",
  "name.fps": "FPS",
  "name.avg_fps": "Avg FPS",
  "name.width": "Width",
  "name.height": "Height",
  "name.unknown": "Unknown",
  "name.direct_connection": "Direct Connection",
  "name.push_streaming": "Push Streaming",
  "content.no_result_channel": "\uD83C\uDE33No result channel",
  "content.update_time": "\uD83D\uDD58\uFE0FUpdate time",
  "content.update_running": "\uD83D\uDD58\uFE0F Update in progress, refresh to get the latest results",
  "content.unmatch_channel": "♻\uFE0FNo match channel"
}