import type { IIBI18nMap } from '.'

export const en: IIBI18nMap = {
  tryMyLuck: 'Try My Luck',
  randomImage: 'Random Image',
  randomImageSettings: 'Random Image Settings',
  showRandomImageInStartup: 'Show Random Image in Startup',
  showRandomImageInStartupDesc: 'Control whether the random image option is displayed on the startup page',
  randomImageSettingNotification: 'Tip: You can control whether to show the random image option on the startup page in Global Settings',
  shuffle: 'Shuffle',
  pathOnly: 'Path Only',
  disableMaximize: 'Disable Maximize',
  takeEffectAfterReloadPage: 'Take effect after reloading the page',
  compressFile: 'Compress File',
  packOnlyNotDownload: 'Pack Only, Not Download',
  notAllowSingleCtrlOrShiftAsShortcut: '不允許使用單獨的 Ctrl 或者 Shift 作為快速鍵',
  conflictWithOtherShortcuts: 'Conflict with other shortcuts',
  pinnedSearchHistoryDesc: 'You can quickly restore to the previous search state by clicking the pinned search history.',
  addNewCustomTag: 'Add New Custom Tag',
  clearCacheIfNotTakeEffect: 'If the changes do not take effect, try clearing the page cache',
  showTiktokNavigator: 'Show Navigation Buttons',
  showTiktokNavigatorDesc: 'Show the navigation buttons (up/down arrows) in TikTok view',

  // ===== Topic Search (Experimental) =====
  topicSearchExperimental: 'Natural Language Categorization & Search (Experimental)',
  topicSearchTitleExperimental: 'Natural Language Categorization & Search (Experimental)',
  topicSearchScope: 'Scope',
  topicSearchNeedScope: 'Please select a scope folder first',
  topicSearchQueryPlaceholder: 'Type a sentence to retrieve similar images (RAG-like retrieval)',
  topicSearchOpenResults: 'Open results',
  topicSearchThreshold: 'Threshold',
  topicSearchMinClusterSize: 'Min cluster',
  topicSearchEmptyNoScope: 'Please select a scope, then refresh/categorize',
  topicSearchEmptyNoTopics: 'No topics yet (try lowering “Min cluster” or adjusting “Threshold”)',
  topicSearchChooseScope: 'Select scope',
  topicSearchRefreshAndCluster: 'Refresh/Categorize',
  topicSearchScopeModalTitle: 'Select vectorization scope (folders)',
  topicSearchScopeTip: 'No scope is enabled by default. You must select folders to categorize/search. Scope comes from QuickMovePaths.',
  topicSearchSavingToBackend: 'Saving to backend...',
  topicSearchScopePlaceholder: 'Select folders (multi-select)',
  topicSearchRecallMsg: 'Retrieved {0} / {1} (TopK={2})',
  topicSearchCacheStale: 'Showing cached result (update available)',
  topicSearchCacheStaleDesc: 'Folders in the selected scope may have changed. The cache may be stale. Click Update to regenerate topics (will update index first).',
  topicSearchCacheUpdate: 'Update cache',
  topicSearchCacheHit: 'Showing cached result',
  topicSearchCacheHitDesc: 'Displaying cached topics from previous analysis. Click Update to regenerate.',
  topicSearchCollapse: 'Collapse',
  topicSearchExpand: 'Expand',

  topicSearchGuideTitle: 'Quick Start (Experimental)',
  topicSearchGuideStep1: 'Select the scope folders to analyze (multi-select)',
  topicSearchGuideStep2: 'Click Refresh to generate topic cards (incremental vectorization)',
  topicSearchGuideStep3: 'Type a sentence to search; it will retrieve similar images and open the result page',
  topicSearchGuideAdvantage1: 'Auto-grouping by semantic similarity: AI automatically discovers similar themes without manual categorization',
  topicSearchGuideAdvantage2: 'Natural language semantic search: Quickly find related images with a sentence, similar to RAG retrieval',
  topicSearchGuideEmptyReasonNoScope: 'Empty because: no scope selected (disabled by default). Click “Scope” to choose folders.',
  topicSearchGuideEmptyReasonNoTopics: 'Empty because: no topics generated yet for this scope (try Refresh or lower Min cluster/Threshold).',
  topicSearchRequirementsTitle: 'Requirements',
  topicSearchRequirementsOpenai: 'Required: OPENAI_BASE_URL and OPENAI_API_KEY (backend environment variables)',
  topicSearchRequirementsDepsPython: 'Required: Python deps numpy and hnswlib (feature is disabled if missing)',
  topicSearchRequirementsDepsDesktop: 'Desktop app: deps are bundled (no need to install numpy/hnswlib)',
  topicSearchRequirementsInstallCmd: 'Install: pip install numpy hnswlib',
  topicSearchJobFailed: 'Job failed',
  topicSearchJobStage: 'Stage',
  topicSearchJobQueued: 'Job queued…',
  topicSearchJobStageEmbedding: 'Embedding…',
  topicSearchJobStageClustering: 'Clustering…',
  topicSearchJobStageTitling: 'Generating titles…',
  topicSearchJobStageDone: 'Done',
  topicSearchJobStageError: 'Error',
  topicSearchJobEmbeddingDesc: 'Embedded {0}/{1} (scanned {2}); current: {3}',
  topicSearchJobClusteringDesc: 'Clustering {0}/{1}',
  topicSearchJobTitlingDesc: 'Titling {0}/{1}',
  success: 'Success',
  setCurrFrameAsVideoPoster: 'Set Current Frame as Video Cover',
  sync: 'Sync',
  syncDesc: 'When you need to achieve simple setting isolation between multiple devices or users, you can turn off this option. Most of the settings of IIB will only be saved to the current browser (isolation in the case of cross-domain), and will not be synchronized to the server.',
  readonlyModeSettingPageDesc: 'You are currently in read-only mode. You can adjust the settings, but these changes will not be saved.',
  syncHistoryToLocal: 'Sync History to Local',
  showCommaInGenInfoPanel: 'Show Comma in Generation Info Panel',
  walkModeAutoRefreshDisabled: 'Auto Refresh in Walk Mode Disabled',
  disable: 'Disable',
  autoRefresh: 'Auto Refresh',
  autoRefreshNormalFixedMode: 'Enable Auto Refresh (Normal/Fixed Mode)',
  autoRefreshWalkMode: 'Enable Auto Refresh (Walk Mode)',
  autoRefreshWalkModePosLimit: 'Position Limit for Auto Refresh in Walk Mode',
  autoUpdateIndex: 'Auto Update Index',
  autoUpdateIndexDesc: 'Automatically update when index is expired (on page return). When disabled, a prompt will be shown for manual update',
  indexExpiredManualUpdate: 'Index expired, click update button to manually update',
  autoUpdateFeatureTip: '💡 Tip: To avoid frequent index updates interrupting your workflow, you can disable "Auto Update Index" in global settings. When disabled, you can still search (based on the stale index), and manually update when needed.',
  gotIt: 'Got it',
  pollInterval: 'Poll Interval',
  pollRefresh: 'Polling refresh',
  pollRefreshTip: 'By default, IIB will automatically refresh when you return to IIB from other tabs or when the visibility of IIB changes. This feature is designed to keep IIB refreshed even when you stay in IIB all the time, please use it with caution',

  stopPollRefresh: 'Stop Polling refresh',
  restoreLastWorkspaceStateSuccess: 'Restore Last Workspace State Success',
  restoreWorkspaceSnapshotSuccess: 'Restore Workspace Snapshot Success',
  openOnAppStart: 'Open on app start',
  confirmThisAction: 'Confirm this action?',
  WorkspaceSnapshotDesc: `Using the Workspace Snapshot feature, you can save the current state of the workspace so that you can quickly restore to the current state the next time you open IIB.
You can specify which snapshot to restore to when starting IIB in the global settings page, or restore to the last workspace state before closing.`,
  saveWorkspaceSnapshot: 'Save Workspace Snapshot',
  WorkspaceSnapshot: 'Workspace Snapshot',
  restoreLastWorkspaceState: 'Restore Last Workspace State',
  restoreWorkspaceSnapshot: 'Restore Workspace Snapshot: {0}',
  nameRequired: 'Name is required',
  save: 'Save',
  name: 'Name',
  saveCompleted: 'Save completed',
  openThisAppInNewWindow: 'Open IIB in a new window',
  readonly: 'Read-only',
  accessLimited: 'Access Limited',
  selectFolder: 'Select Folder',
  openFileLocationInNewTab: 'Open File Location in New Tab',
  copyTo: 'Copy to',
  moveTo: 'Move to',
  moveSuccess: 'Move success',
  copySuccess: 'Copy success',
  copyFilePath: 'Copy file path',

  previewMaskBackgroundOpacity: 'Preview Mask Background Opacity',
  experimentalLRLayout: 'Side-by-Side Layout',
  width: 'Width',
  alwaysOnTooltipInfo: 'If this is turned off, the info panel will be hidden until you move the mouse to the right side of the screen',
  alwaysOn: 'Always On',
  time: 'Time',
  pin: 'Pin',
  unpin: 'Unpin',
  restore: 'Restore',
  restoreFromHistory: 'Restore from History',
  history: 'History',
  historyRecordsSubstr: 'Input Value',
  historyRecordsisRegex: 'Is Regex',
  walkModeDoc: 'Browse all files in a specified folder without paging, using infinite scrolling to display them. DFS will be used to traverse all files. Note: Sorting is only performed within the same layer in this mode.',
  normalModelDoc: 'Similar to the Windows file browser, with high flexibility. But exceptions may occur when accessing cloud storage or similar SMB.',
  fixedModeDoc: 'Similar to Normal mode, but with faster initial page speed, better compatibility, and slightly less flexibility. If you encounter an exception in Normal mode, you can try this mode instead.',
  type: 'Type',
  filterByKeyword: 'Filter tags by keyword',
  loadmore: 'Load more',
  rename: 'Rename',
  inputAlias: 'Input Alias',
  addAliasCompleted: 'Add Alias Completed',
  alias: 'Alias',
  exit: 'Exit',
  'select-all': 'Select All',
  'rerverse-select': 'Reverse Select',
  'clear-all-selected': 'Clear All Selected',
  'keep-multi-selected': 'Keep Multi-selected',
  'Source Identifier': 'Source',
  openWithDefaultApp: 'Open with default app',
  saveSelectedAsJson: 'Save selected image info',
  saveAllAsJson: 'Save all image info',
  saveLoadedImageAsJson: 'Save loaded image info',
  selectedItems: ' {0} selected',
  items: '{0} items',
  scrollDownToComparePrompt: 'Scroll down to compare prompts',
  sourceText: 'Source Text',
  structuredData: 'Structured Data',
  searchScope: 'Search Scope',
  specifiedSearchFolder: 'Specify the folders to search, separate multiple folders with commas or line breaks',
  batchAddTag: 'Batch Add Tag',
  batchRemoveTag: 'Batch Remove Tag',
  imageCompareTips:
    'When dragging files, this panel will also appear, so you don\'t need to open the "Image Comparison" feature separately.',
  dragToResizePanel: 'Drag to resize the panel',
  clickToToggleMaximizeMinimize: 'Click to toggle maximize/minimize',
  dragToMovePanel: 'Drag to move the panel',
  privacyAndSecurity: 'Security & Privacy',
  deleteOneOnlySkipConfirm: 'Do not confirm when deleting a single file',
  resetOnGlobalSettingsPage: 'You can reset on the global settings page',
  secretKeyMustBeConfigured: 'Secret Key must be configured',
  secretKeyRequiredWarnMsg: `For security reasons, you must separately configure Secret Key for this extension, refer to the IIB_SECRET_KEY in the .env.example file under the root directory of this extension. 
  This error only appears when gradio-auth is configured.`,
  remove: 'Remove',
  batchDownload: 'Batch Download',
  archive: 'Archive',
  zipDownload: 'Download as ZIP',
  batchDownloaDDragAndDropHint:
    'Use drag and drop or the \'Send to Batch Download\' option in the right-click menu to add images from other pages here. Multiple selections are supported.',
  lyco: 'LyCORIS',
  sendToThirdPartyExtension: 'Send to third-party extension',
  createFolder: 'Create Folder',
  inputFolderName: 'Input Folder Name',
  desktop: 'Desktop',
  move: 'Move',
  majorUpdateCustomCellSizeTips: 'Major Update: You can now customize the size of the grid image. Adjust it in the global settings page or in the "More" menu in the upper right corner.',
  ImageBrowsingSettings: 'Image Browsing Settings',
  other: 'Other',
  livePreview: 'Live Preview',
  gridCellWidth: 'Grid Cell Width (px)',
  showChangeIndicators: 'Show Change Indicators',
  seedAsChange: 'Seed as Change',
  defaultShowChangeIndicators: 'Default Show Change Indicators',
  defaultSeedAsChange: 'Default Compare Seed as Change',
  defaultGridCellWidth: 'Default Grid Cell Width (px)',
  thumbnailResolution: 'Thumbnail Resolution (px)',
  inputTargetFolderPath: 'Enter the absolute path of the target folder',
  pathDoesNotExist: 'Path does not exist',
  confirmToAddToExtraPath:
    'Are you sure you want to add? This may take a lot of time to index if the folder is large. ',
  clientSpecificSettings: 'Client-specific settings',
  initiateSoftwareStartupConfig: 'Initiate software startup configuration',
  'tauriLaunchConf.readSdWebuiConfigTitle': 'Read Stable Diffusion Webui Config',
  'tauriLaunchConf.readSdWebuiConfigDescription':
    'If you have installed sd-webui and this extension, it is recommended to use this option to directly read the configuration and share data.',
  'tauriLaunchConf.selectSdWebuiFolder': 'Click to select the SD-webui folder',
  'tauriLaunchConf.skipThisConfigTitle': 'Skip This Configuration',
  'tauriLaunchConf.skipThisConfigDescription':
    'All features will still be available and you can reset them in the settings page.',
  'tauriLaunchConf.skipButton': 'Skip',
  'tauriLaunchConfMessages.configNotFound':
    'Cannot find the corresponding configuration. Please check if the selected folder is correct.',
  'tauriLaunchConfMessages.folderNotFound':
    'Cannot find the corresponding folder. Please check if the selected folder is correct.',
  'tauriLaunchConfMessages.configCompletedMessage':
    'Configuration completed. The application will restart shortly.',
  'tauriLaunchConfMessages.firstTimeUserTitle':
    'It looks like this is your first time using the application. Some configuration is required.',
  selectAll: 'Select All',
  close: 'Close',
  fileName: 'File Name',
  resolution: 'Resolution',
  fileSize: 'File Size',
  fullscreenview: 'Fullscreen View',
  blockVisibilitySettings: 'Panel Settings',
  blockName_actionBar: 'Action Buttons',
  blockName_infoTags: 'File Info Tags',
  blockName_tagsContainer: 'Custom Tags',
  blockName_lrLayoutControl: 'Layout Control',
  blockName_draggableImage: 'Draggable Image',
  blockName_tabs: 'Prompt Tabs',
  promptcompare: 'Compare Prompts',
  imgCompare: 'Image Comparison',
  share: 'Share',
  dragImageHere: 'Drag image here',
  copyLocationUrlSuccessMsg:
    'Copy completed, you can directly open the current folder through the copied link',
  multiSelectTips:
    'You can hold down the Shift, Ctrl, or Cmd key and then click on files to perform batch delete/move operations',
  document: 'Document',
  copy: 'Copy',
  edit: 'Edit',
  defaultSortingMethod: 'Default Sorting Method',
  defaultViewMode: 'Default View Mode',
  showPreviewImage: 'Show Preview Image',
  dontShowAgain: 'Don\'t show again',
  accessControlModeTips:
    'To ensure data security, you are currently running in access control mode, which only allows access to authorized folders. You can adjust the access permissions settings (IIB_ACCESS_CONTROL) by editing the .env file in the root directory of this extension. If the .env file does not exist, you can copy the .env.example file and rename it to .env.',
  changlog: 'Change log',
  clear: 'Clear',
  toggleTagSelection: 'Toggle Selection of Tag "{tag}"',
  fullscreenRestriction:
    'Due to technical limitations, the first image cannot be deleted when opening the Full-screen view.',
  shortcutKey: 'Keyboard Shortcuts (Only Available in Full-screen view mode)',
  shortcutKeyDescription:
    'Click on the input box and press the shortcut key you want to use, supporting combinations with Shift and Ctrl.',
  shortcutPresetButton: 'Preset Shortcut Guide',
  shortcutPresetTitle: 'Preset Shortcut Guide',
  shortcutPresetDesc: 'These are hard-coded shortcuts in the app, with where/how they are triggered.',
  shortcutPresetHeaderKey: 'Key',
  shortcutPresetHeaderWhere: 'Where',
  shortcutPresetHeaderAction: 'Action',
  shortcutPresetSectionBrowse: 'File list (non-fullscreen)',
  shortcutPresetSectionFullscreen: 'Fullscreen preview',
  shortcutPresetSectionTiktok: 'TikTok view',
  shortcutPresetLocationFileList: 'File list area, and focus not in inputs',
  shortcutPresetLocationFullscreen: 'When fullscreen preview is open',
  shortcutPresetLocationTiktok: 'When TikTok view is open',
  shortcutPresetActionPageJump: 'Page scroll the list',
  shortcutPresetActionHomeEnd: 'Jump to start / end of list',
  shortcutPresetActionBackspaceUp: 'Go to parent folder',
  shortcutPresetActionSelectAll: 'Select all items in current list',
  shortcutPresetActionFullscreenNavigate: 'Navigate images (skips non-images)',
  shortcutPresetActionFullscreenExit: 'Exit fullscreen preview',
  shortcutPresetActionTiktokNavigate: 'Go to previous / next item',
  shortcutPresetActionTiktokExit: 'Exit TikTok view',
  serverKeyRequired:
    'The server has configured a key. You must provide the same key to continue using it.',
  removeFromSearchScanPathAndQuickMove: 'Remove from Search Scan Path and Quick Move',
  addToSearchScanPathAndQuickMove: 'Add to Search Scan Path',
  openWithLocalFileBrowser: 'Open with Local File Browser',
  'fuzzy-search-noResults': 'Nothing was found',
  'fuzzy-search-placeholder': 'Enter a part of the image information or filename to search',
  'fuzzy-search': 'Fuzzy search',
  autoUpdate: 'Detected changes, automatically updating',
  faq: 'FAQ',
  helpFeedback: 'Help / Feedback',
  helpFeedbackWay1: 'Check FAQ / search related issues',
  helpFeedbackSearchIssues: 'Search issues',
  helpFeedbackWay2: 'Open a new issue',
  helpFeedbackNewIssue: 'Create on GitHub',
  helpFeedbackWay3: 'Email the maintainer',

  // ===== Tag Graph (Topic Search) =====
  tagGraphGenerating: 'Generating graph...',
  tagGraphStatLayers: 'Layers',
  tagGraphStatNodes: 'Nodes',
  tagGraphStatLinks: 'Links',
  tagGraphAllLayers: 'All layers',
  tagGraphFilterPlaceholder: 'Keyword filter (match + neighbors)',
  tagGraphFilterHopsTitle: 'Expand hops (N)',
  tagGraphKeywordLimitTitle: 'Maximum keywords to display in Tag layer',
  tagGraphFilterApply: 'Filter',
  tagGraphFilterReset: 'Reset',
  tagGraphTooltipFilter: 'Filter',
  tagGraphTooltipOpenCluster: 'Open cluster',
  tagGraphFullscreenUnsupported: 'Fullscreen is not supported in this environment',
  tagGraphFullscreenFailed: 'Failed to enter fullscreen',
  selectExactMatchTag: 'Select Exact Match Tags. You can search by entering partial characters',
  selectAnyMatchTag: 'Optional, Select Any Match Tags. You can search by entering partial characters',
  selectExcludeTag: 'Optional, Select Exclude Tags. You can search by entering partial characters',
  exactMatch: 'Exact Match',
  anyMatch: 'Match Any',
  exclude: 'Exclude',
  'auto.refreshed': 'Auto refresh completed!',
  copied: 'Copied!',
  'index.expired': 'Index expired, updating automatically',
  manualExitFullScreen:
    'You have deleted the last image and may need to manually exit Full-screen view',
  'walk-mode-move-message': 'Moving position is only allowed using \'Quick Move\' in walk mode',
  refreshCompleted: 'Refresh completed',
  //! MissingTranslations
  addedTagToImage: 'Tag "{tag}" has been added to this image',
  removedTagFromImage: 'Tag "{tag}" has been removed from this image',
  openContextMenu: 'Open context menu',
  copyPrompt: 'Copy prompt',
  copyPositivePrompt: 'Copy positive prompt',
  toggleTag: 'Toggle Tag Selection (Favorite)',
  addCompleted: 'Add completed',
  removeCompleted: 'Remove Completed',
  existInOtherType: 'Already exists in other type',
  alreadyExists: 'Already exists',
  cancel: 'Cancel',
  submit: 'Submit',
  add: 'Add',
  custom: 'Custom',
  needGenerateIdx:
    'You need to click the button to generate an index for searching images. \n This process may take a few minutes to complete.',
  search: 'Search',
  UpdateIndex: 'Update index',
  generateIndexHint: 'Generate index for search image',
  Model: 'Model',
  Sampler: 'Sampler',
  lora: 'LoRA',
  size: 'Size',
  pos: 'Positive Prompt',
  unknownSavedDir: 'Cannot find the saved folder (outdir_save field in the config)',
  errorOccurred: 'An error occurred',
  useThumbnailPreview: 'Use thumbnail preview',
  gridThumbnailWidth: 'Grid thumbnail width',
  start: 'Start',
  tip: 'Tip',
  sortByDateAscending: 'Updated date ascending',
  sortByDateDescending: 'UPdated date descending',
  sortByCreatedDateAscending: 'Created date ascending',
  sortByCreatedDateDescending: 'Created date descending',
  sortByNameAscending: 'Name ascending',
  sortByNameDescending: 'Name descending',
  sortBySizeAscending: 'Size ascending',
  sortBySizeDescending: 'Size descending',
  sortByShuffle: 'Shuffle',
  inputAddressAndPressEnter: 'Input address and press Enter',
  go: 'Go',
  unknownError: 'Unknown error',
  loadingNextFolder: 'Loading files from the next folder',
  moveFailedCheckPath: 'Move failed. Check your path input.',
  detailList: 'Detail list',
  previewGrid: 'Preview grid',
  moveSelectedFilesTo: 'Move / Copy selected files to',
  continueOnError: 'Continue on single-file failure',
  continueOnErrorDesc: 'Continue with remaining files; failed ones are skipped and recorded on server.',
  confirm: 'Confirm',
  download: 'Download',
  local: 'Local',
  sendImageFailed:
    'Failed to send image. Please contact the developer with the error message from the console.',
  confirmDelete: 'Are you sure you want to delete?',
  deleteSuccess: 'Deleted successfully',
  moveToTrashSuccess: 'Moved to trash',
  doubleClickToCopy: 'Double-click to copy',
  root: 'Root',
  drive: ' drive',
  refresh: 'Refresh',
  quickMove: 'Quick move',
  more: 'More',
  viewMode: 'View mode',
  sortingMethod: 'Sorting method',
  copyPath: 'Copy path',
  deleteSelected: 'Delete',
  previewInNewWindow: 'Open in new window',
  copySourceFilePreviewLink: 'Copy source file preview link',
  viewGenerationInfo: 'View generation information (prompt, etc.)',
  sendToTxt2img: 'Send to txt2img',
  sendToImg2img: 'Send to img2img',
  sendToInpaint: 'Send to Inpaint',
  sendToBatchDownload: 'Send to BatchDownload',
  sendToExtraFeatures: 'Send to Extra',
  sendToControlNet: 'Send to ControlNet',
  loadNextPage: 'Load next page',
  localFile: 'Local file',
  globalSettings: 'Global settings',
  welcome: 'Welcome',
  openInNewWindow: 'Open in new tab',
  restoreLastRecord: 'Restore last record',
  launch: 'Launch',
  walkMode: 'Use Walk mode to browse images',
  launchFromNormalAndFixed: 'Use Normal / Fixed mode to browse images',
  recent: 'Recent',
  emptyStartPage: 'Empty start page',
  t2i: 'txt2img',
  i2i: 'img2img',
  saveButtonSavesTo: 'save',
  extra: 'extras',
  gridImage: 'Grid image',
  'i2i-grid': 'img2img grid',
  image: 'Image',
  't2i-grid': 'txt2img grid',
  workingFolder: 'working folder',
  lang: 'Language',
  langChangeReload: 'Reload: Some changes may require a reload to take effect',
  openOnTheRight: 'Open to the Side',
  openInNewTab: 'Open in a new tab',
  openWithWalkMode: 'Open with Walk Mode',
  longPressOpenContextMenu: 'Support long press to open right-click menu',
  searchResults: 'Search Results',
  imgSearch: 'Image Search',
  onlyFoldersAndImages: 'Only show folders/images/videos',
  fileTypeFilter: 'File Type Filter',
  allFiles: 'All Files',
  audio: 'Audio',
  send2savedDir: 'Send to saved folder',
  regexSearchEnabledHint:
    '(You can also enable regex search by clicking the regex icon on the right)',
  rebuildImageIndex: 'Rebuild Image Index',
  confirmRebuildImageIndex: 'Confirm rebuilding image index?',
  rebuildComplete: 'Rebuild complete',
  tagSearchNoResultsMessage: 'It looks like no results were matched, try rebuilding the index to remove useless tags?',
  'TikTok View': 'TikTok View',
  tiktokView: 'TikTok View',
  magicSwitchTiktokView: 'TikTok View Mode',
  magicSwitchTiktokViewDesc: 'When enabled, clicking image/video files will directly enter TikTok-style viewing mode',
  magicSwitchEnabled: '🎬 ON - Click media files to enter TikTok View',
  magicSwitchDisabled: '📁 OFF - Click media files to open normally',
  magicSwitchDetailDesc: 'Click images and videos to directly enter TikTok-style browsing experience',

  // Auto play related
  autoPlay: 'Auto Play',
  autoPlayOff: 'Off',
  autoPlay5s: '5s',
  autoPlay10s: '10s',
  autoPlay20s: '20s',
  autoPlayTooltip: 'Auto Play: {mode} (A to toggle)',
  autoPlayStatus: 'Auto Play: {mode}',

  // TikTok viewer controls
  exitFullscreen: 'Exit Fullscreen',
  fullscreen: 'Fullscreen',
  soundOn: 'Sound On',
  soundOff: 'Sound Off',
  details: 'Details',
  info: 'Info',
  like: 'Like',
  unlike: 'Unlike',
  tags: 'Tags',
  tag: 'Tag',
  tagOperationFailed: 'Tag operation failed',

  mediaType: 'Media Type',
  all: 'All',
  video: 'Video',
  randomSort: 'Random Sort',
  sortByDate: 'Sort by Date',

  'autoTag.name': 'Auto Tagging',
  'autoTag.description': 'These rules will be automatically applied when images are indexed, adding tags to matching images (Trigger timing: when updating index or rebuilding index on search page). Note: Multiple conditions within a rule use AND logic, all must be satisfied to apply the tag',
  'autoTag.addRule': 'Add Rule',
  'autoTag.saveConfig': 'Save Config',
  'autoTag.tagName': 'Tag Name',
  'autoTag.inputTagName': 'Select custom tag',
  'autoTag.field': 'Field',
  'autoTag.operator': 'Operator',
  'autoTag.value': 'Value',
  'autoTag.addFilter': 'Add Filter',
  'autoTag.noRules': 'No rules, click button above to add',
  'autoTag.saveSuccess': 'Saved successfully',
  'autoTag.saveFail': 'Save failed',
  'autoTag.fields.posPrompt': 'Pos Prompt',
  'autoTag.fields.negPrompt': 'Neg Prompt',
  'autoTag.fields.model': 'Model',
  'autoTag.fields.sampler': 'Sampler',
  'autoTag.fields.size': 'Size',
  'autoTag.fields.cfgScale': 'CFG Scale',
  'autoTag.fields.steps': 'Steps',
  'autoTag.fields.seed': 'Seed',
  'autoTag.operators.contains': 'Contains',
  'autoTag.operators.equals': 'Equals',
  'autoTag.operators.regex': 'Regex',
  aiAnalyzeTags: 'AI Analyze Tags',
  aiAnalyzeTagsNoPrompt: 'No prompt found',
  aiAnalyzeTagsNoCustomTags: 'No custom tags available',
  aiAnalyzeTagsNoMatchedTags: 'AI found no matching tags',
  aiAnalyzeTagsNoValidTags: 'No valid matching tags found',
  aiAnalyzeTagsAllTagsAlreadyAdded: 'All matched tags have already been added to the image',
  aiAnalyzeTagsSuccess: 'Added {0} tags: {1}',
  aiAnalyzeTagsFailed: 'AI tag analysis failed, please check configuration',

  // ===== Smart Organize Files =====
  organizeJobs: 'Organize Tasks',
  folders: 'folders',
  files: 'files',
  queued: 'Queued',
  analyzing: 'Analyzing',
  waitingConfirm: 'Waiting Confirm',
  moving: 'Moving',
  completed: 'Completed',
  error: 'Error',
  generatingEmbeddings: 'Generating embeddings...',
  clusteringAnalysis: 'Clustering analysis...',
  generatingTitles: 'Generating titles...',
  previewReady: 'Preview ready',
  movingFiles: 'Moving files...',
  organizePreviewReady: 'Preview ready: {files} files → {clusters} folders',
  viewPreview: 'View Preview',
  smartOrganizePreview: 'Smart Organize Preview',
  organizePreviewSummary: '{files} files will be organized into {folders} folders',
  destFolder: 'Destination folder',
  unsorted: 'Unsorted',
  skip: 'Skip',
  cancelSkip: 'Cancel Skip',
  showMore: 'Show {count} more...',
  willMove: 'Will move {count} files',
  skipped: '{count} skipped',
  confirmOrganize: 'Confirm Organize',
  startMovingFiles: 'Starting to move files...',
  confirmFailed: 'Confirm failed',
  organizeComplete: 'Done: {moved} files moved, {folders} folders created',
  organizeFailed: 'Organize failed',
  smartOrganize: 'AI Organize',
  smartOrganizeHint: 'AI will analyze and organize scattered files into folders',
  organizeJobStarted: 'Organize task started, check progress in bottom-right panel',

  // Smart Organize Config Modal
  smartOrganizeConfig: 'Smart Organize Settings',
  smartOrganizeConfigDesc: 'Configure smart organize options',
  smartOrganizeNotice: 'More files and scattered clusters take longer to process. The task runs in background, so you can continue working.',
  organizeSourceFolders: 'Folders to organize',
  organizeSourceFolder: 'Target folder',
  organizeSourceFolderHint: 'Files in this folder will be organized into categories',
  organizeRecursive: 'Include subfolders',
  organizeRecursiveDesc: 'Treat all files in subfolders as files to organize',
  organizeMinClusterSize: 'Min cluster size',
  organizeMinClusterSizeDesc: 'Files less than this number will not create a separate folder',
  organizeTargetFolder: 'Target folder',
  organizeTargetFolderDesc: 'Organized files will be placed in this folder (default: current folder)',
  organizeAction: 'Action',
  organizeActionMove: 'Move',
  organizeActionCopy: 'Copy',
  organizeStartTask: 'Start Organize',
  organizeCancel: 'Cancel',
  updatingIndex: 'Updating index...',
  startingOrganizeJob: 'Starting organize job...',

  // Flatten folder
  flattenFolder: 'Flatten Folder',
  flattenFolderDesc: 'Move all files from subfolders to current folder',
  flattenFolderWarning: 'This is a dangerous operation! All files in subfolders will be moved to the current folder, and subfolders will be deleted.',
  flattenFolderScanning: 'Scanning files...',
  flattenFolderConflict: 'Filename conflicts found, cannot flatten',
  flattenFolderConflictFiles: 'Conflicting filenames',
  flattenFolderConfirm: 'Confirm flattening {count} files?',
  flattenFolderExecuting: 'Flattening folder...',
  flattenFolderSuccess: 'Flatten complete, moved {count} files',
  flattenFolderNoFiles: 'No files to move',

  // ===== Loading Tips (format: title\n\ncontent|type) =====
  loadingTip1: '💡 Filename Uniqueness Tip\n\nIf you use simple numeric naming (e.g., 001.png), deleting and regenerating files with the same name can cause tag and cache data confusion. It\'s recommended to enable timestamp filenames in your generation software, ensuring each filename includes a timestamp (e.g., [time][prompt])|warning',
  loadingTip2: '⌨️ Batch Operations Tip\n\nHold Ctrl/Cmd to multi-select files. Right-click menu supports batch tag editing, moving, and deletion. Shift+click to select a range of files.|info',
  loadingTip3: '🎹 Keyboard Shortcuts\n\nTikTok view: Arrow Up/Down to navigate, Esc to exit. Fullscreen preview: configure custom delete/download shortcuts in global settings. File list: PageUp/Down to scroll, Home/End to jump, Backspace for parent folder.|info',
  loadingTip4: '🤖 AI Clustering Note\n\nFirst-time AI clustering requires calling the embedding API. Test with small batches first. Clustering results are cached for faster subsequent viewing.|info',
  loadingTip5: '🔍 Fuzzy Search Tips\n\nFuzzy search supports regex! Click the regex icon on the right to enable. Use ^ at the start to match tag names or filenames exactly.|info',
  loadingTip6: '🚶 Walk Mode\n\nWalk mode uses infinite scrolling to browse all files in subfolders without manual pagination. Great for quickly browsing large image collections.|info',
  loadingTip7: '📸 Workspace Snapshots\n\nSave your current workspace state (open folders, sorting, etc.) for quick restoration later. In global settings, set it to auto-restore on startup.|info',
  loadingTip8: '🏷️ Auto Tagging Feature\n\nConfigure auto-tagging rules in global settings. Tags are automatically applied when images are indexed, supporting conditions like prompt, model, sampler, etc.|info',
  loadingTip9: '⚡ Performance Tip\n\nIf you experience lag when scrolling through a large number of images quickly, you can disable "Change Indicators" in global settings for significantly better performance.|info',
  loadingTip10: '🤖 AI Agent Integration\n\nYou can now let AI agents use IIB to help with image management, tag organization, and smart search. Through the API interface, AI can access all IIB features for automated workflows.|info',

  // ===== Video Inline Play =====
  playInline: 'Play Here',

  // ===== Prompt Editing =====
  editPrompt: 'Edit',
  editPromptTitle: 'Edit Prompt - {name}',
  positivePrompt: 'Positive Prompt',
  negativePrompt: 'Negative Prompt',
  otherInfo: 'Other Info',
  savePrompt: 'Save Prompt',
  savePromptSuccess: 'Prompt saved successfully',
  savePromptFailed: 'Failed to save prompt',
  promptEditedMark: 'Manually edited',
  promptModifiedTip: 'This prompt has been manually edited and will override the original prompt from the file',

  // PromptEditorModal related
  positivePromptRequired: 'Positive prompt cannot be empty',
  fixErrorsBeforeSave: 'Please fix all errors before saving',
  extraMetaInfoTitle: 'Extra Meta Info (KV Editor)',
  addKvButton: '+ Add',
  extraMetaInfoHint: 'Can save any complex information, a perfect supplement to the limitations of params format. In JSON mode, it also supports any valid JSON values (objects, arrays, numbers, booleans, etc.)',
  noExtraMetaInfo: 'No Extra Meta Info, click "Add" button to add key-value pairs',
  otherInfoHint: 'Only supports simple strings or numbers, cannot contain special symbols or line breaks',

  // KvPairEditor related
  keyRequired: 'Key cannot be empty',
  keyMustBeUnique: 'Key already exists, please use a unique key',
  jsonFormatError: 'JSON format error, please check syntax',
  stringMode: 'String',
  jsonMode: 'JSON',
  delete: 'Delete',
  keyPlaceholder: 'Key',
  jsonValuePlaceholder: 'JSON Value',
  stringValuePlaceholder: 'String Value',
  clearBeforeSwitchToJson: 'Please clear current value before switching to JSON mode',
  clearBeforeSwitchToString: 'Please clear current value before switching to string mode',
  dragImageToTransfer: 'Click to get original image, grab and drag to other apps',
  dragImage: 'Click to get original image, grab and drag to other apps'
}
