1use std::sync::OnceLock;
8
9fn app_version() -> &'static str {
11 static VERSION_STRING: OnceLock<String> = OnceLock::new();
12 VERSION_STRING.get_or_init(|| format!("Backup Suite v{}", env!("CARGO_PKG_VERSION")))
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub enum Language {
18 English,
19 Japanese,
20 SimplifiedChinese,
21 TraditionalChinese,
22}
23
24impl Language {
25 #[must_use]
28 pub fn detect() -> Self {
29 if let Ok(lang) = std::env::var("LANG") {
31 let lang_lower = lang.to_lowercase();
32
33 if lang_lower.starts_with("ja") || lang_lower.starts_with("jp") {
35 return Language::Japanese;
36 }
37
38 if lang_lower.starts_with("zh-cn")
40 || lang_lower.starts_with("zh_cn")
41 || lang_lower.starts_with("zh-hans")
42 || lang_lower.starts_with("zh_hans")
43 {
44 return Language::SimplifiedChinese;
45 }
46
47 if lang_lower.starts_with("zh-tw")
49 || lang_lower.starts_with("zh_tw")
50 || lang_lower.starts_with("zh-hk")
51 || lang_lower.starts_with("zh_hk")
52 || lang_lower.starts_with("zh-hant")
53 || lang_lower.starts_with("zh_hant")
54 {
55 return Language::TraditionalChinese;
56 }
57 }
58
59 if let Ok(lang) = std::env::var("LC_ALL") {
61 let lang_lower = lang.to_lowercase();
62
63 if lang_lower.starts_with("ja") || lang_lower.starts_with("jp") {
65 return Language::Japanese;
66 }
67
68 if lang_lower.starts_with("zh-cn")
70 || lang_lower.starts_with("zh_cn")
71 || lang_lower.starts_with("zh-hans")
72 || lang_lower.starts_with("zh_hans")
73 {
74 return Language::SimplifiedChinese;
75 }
76
77 if lang_lower.starts_with("zh-tw")
79 || lang_lower.starts_with("zh_tw")
80 || lang_lower.starts_with("zh-hk")
81 || lang_lower.starts_with("zh_hk")
82 || lang_lower.starts_with("zh-hant")
83 || lang_lower.starts_with("zh_hant")
84 {
85 return Language::TraditionalChinese;
86 }
87 }
88
89 Language::English
91 }
92
93 #[must_use]
102 pub fn parse(s: &str) -> Option<Self> {
103 if s.contains('\0') {
105 return None;
106 }
107
108 if s.contains(';')
110 || s.contains('|')
111 || s.contains('&')
112 || s.contains('`')
113 || s.contains('$')
114 || s.contains('(')
115 || s.contains(')')
116 {
117 return None;
118 }
119
120 if s.contains("..") || s.contains('/') || s.contains('\\') {
122 return None;
123 }
124
125 if s.len() > 100 {
127 return None;
128 }
129
130 match s.to_lowercase().as_str() {
131 "en" | "english" => Some(Language::English),
132 "ja" | "japanese" | "日本語" => Some(Language::Japanese),
133 "zh-cn" | "zh_cn" | "zh-hans" | "zh_hans" | "simplified chinese" | "简体中文" => {
134 Some(Language::SimplifiedChinese)
135 }
136 "zh-tw"
137 | "zh_tw"
138 | "zh-hk"
139 | "zh_hk"
140 | "zh-hant"
141 | "zh_hant"
142 | "traditional chinese"
143 | "繁體中文"
144 | "繁体中文" => Some(Language::TraditionalChinese),
145 _ => None,
146 }
147 }
148
149 #[must_use]
151 pub fn code(&self) -> &'static str {
152 match self {
153 Language::English => "en",
154 Language::Japanese => "ja",
155 Language::SimplifiedChinese => "zh-cn",
156 Language::TraditionalChinese => "zh-tw",
157 }
158 }
159}
160
161#[derive(Debug, Clone, Copy)]
163pub enum MessageKey {
164 AppVersion,
166 AppTitle,
167 AppDescription,
168
169 BasicCommands,
171 ExecutionCommands,
172 InformationCommands,
173 ConfigCommands,
174 UtilityCommands,
175 SmartCommands,
176
177 CmdAdd,
179 CmdList,
180 CmdRemove,
181 CmdClear,
182 CmdRun,
183 CmdRestore,
184 CmdCleanup,
185 CmdStatus,
186 CmdHistory,
187 CmdDashboard,
188 CmdEnable,
189 CmdDisable,
190 CmdSchedule,
191 CmdConfig,
192 CmdOpen,
193 CmdCompletion,
194 CmdSmart,
195
196 DescAdd,
198 DescList,
199 DescRemove,
200 DescClear,
201 DescRun,
202 DescRestore,
203 DescCleanup,
204 DescStatus,
205 DescHistory,
206 DescDashboard,
207 DescEnable,
208 DescDisable,
209 DescSchedule,
210 DescConfig,
211 DescOpen,
212 DescCompletion,
213 DescSmart,
214
215 CmdSmartDetect,
217 CmdSmartAnalyze,
218 CmdSmartSuggestExclude,
219 CmdSmartAutoConfigure,
220 DescSmartDetect,
221 DescSmartAnalyze,
222 DescSmartSuggestExclude,
223 DescSmartAutoConfigure,
224
225 SmartDetectTitle,
227 SmartDetectNoAnomalies,
228 SmartDetectAnomalyFound,
229 SmartAnalyzeTitle,
230 SmartAnalyzeImportanceHigh,
231 SmartAnalyzeImportanceMedium,
232 SmartAnalyzeImportanceLow,
233 SmartSuggestExcludeTitle,
234 SmartSuggestExcludeRecommendation,
235 SmartAutoConfigureTitle,
236 SmartAutoConfigureSuccess,
237 SmartDryRunModeLabel,
238 PathValidationFailed,
239 PathSafetyValidationFailed,
240 SmartExampleMaxDepthComment,
241 SmartExampleMaxSubdirsComment,
242 SmartExampleIncreaseSubdirsComment,
243 SmartAutoConfigureFeaturesHeader,
244 SmartFeatureEvaluateSubdirs,
245 SmartFeatureAutoDetectExclusions,
246 SmartFeatureHighConfidencePatterns,
247 SmartFeatureAutoDetectProjectTypes,
248 NoSubdirectoriesFound,
249 SubdirLimitReached,
250 SubdirLimitChangeHint,
251 SkippingExcludeAnalysisLarge,
252 FilesUnit,
253 AddToExcludeListPrompt,
254 SmartRecommendsAddPrompt,
255 AnalysisFailedLabel,
256 SmartErrorNotEnabled,
257 SmartErrorInsufficientData,
258 SmartErrorInsufficientDataDetailed,
259 SmartErrorAnalysisFailed,
260 SmartErrorAnalysisLabel,
261 HelpLabel,
262
263 Options,
265 HelpOption,
266 VersionOption,
267
268 UsageExamples,
270 ExampleAddInteractive,
271 ExampleRunHigh,
272 ExampleEncrypt,
273 ExampleCompress,
274 ExampleEncryptCompress,
275 ExampleCleanup,
276 ExampleSchedule,
277 ExampleSmartDetect,
278 ExampleSmartAnalyze,
279 ExampleSmartSuggestExclude,
280 ExampleSmartAutoConfigureComment,
281 ExampleSmartDryRunComment,
282 ExampleSmartInteractiveComment,
283 SmartRecommendedCommandLabel,
284 SmartNoExclusionsRecommended,
285 SmartAddToExcludeListPrompt,
286 SmartReductionLabel,
287 SmartAddedLabel,
288 SmartAutoConfigureErrorNoPath,
289 SmartAutoConfigureUsageExamples,
290
291 DetailedInfo,
293 DetailCommand,
294 ConfigFile,
295 BackupDestination,
296
297 Added,
299 Removed,
300 Deleted,
301 Error,
302 Warning,
303 BackupRunning,
304 RestoreStarting,
305
306 EncryptionPassword,
308 SavePasswordSecurely,
309 EncryptOption,
310 CompressOption,
311 CompressLevel,
312
313 IncrementalOption,
315 GeneratePasswordOption,
316 PasswordOption,
317 DryRunOption,
318 PriorityOption,
319 CategoryOption,
320
321 FromOption,
323 ToOption,
324 RestorePasswordOption,
325
326 DaysOption,
328 CleanupDryRunOption,
329
330 AddPriorityOption,
332 AddCategoryOption,
333 InteractiveOption,
334
335 ListPriorityOption,
337
338 ScheduleTitle,
340 ScheduleDescription,
341 ScheduleUsage,
342 ScheduleCommands,
343 ScheduleEnable,
344 ScheduleDisable,
345 ScheduleStatus,
346 ScheduleSetup,
347 ScheduleHelp,
348
349 ConfigTitle,
351 ConfigDescription,
352 ConfigUsage,
353 ConfigMgmtCommands,
354 ConfigSetDestination,
355 ConfigGetDestination,
356 ConfigSetKeepDays,
357 ConfigGetKeepDays,
358 ConfigOpen,
359 ConfigHelp,
360
361 ScheduleDetailedOptions,
363 ScheduleEnableOption,
364 ScheduleDisableOption,
365 ScheduleSetupOption,
366 ScheduleFrequencies,
367 ScheduleDaily,
368 ScheduleWeekly,
369 ScheduleMonthly,
370 ScheduleTips,
371 ScheduleTip1,
372 ScheduleTip2,
373 ScheduleTip3,
374
375 ConfigExampleExternal,
377 ConfigExampleGetDest,
378 ConfigExampleSetDays,
379 ConfigExampleOpen,
380 ConfigExampleTilde,
381 ConfigTip1,
382 ConfigTip2,
383 ConfigTip3,
384
385 NoTargetsRegistered,
387 SelectionCancelled,
388 ConfirmClearAll,
389 ConfirmClearPriority,
390 NoPriorityTargets,
391 ConfirmCleanup,
392 DaysOutOfRange,
393 PromptSelectTarget,
394 PromptSelectFile,
395 PathNotExists,
396 NotInBackupConfig,
397 SpecifyPriorityOrAll,
398 CountDeleted,
399 DryRun,
400 Category,
401 Encryption,
402 Compression,
403 ErrorDetails,
404 Detected,
405 NoBackups,
406 RestoreStart,
407 Restoring,
408 RestoredSuccess,
409 RestoredFileCount,
410 Deleting,
411 Destination,
412 Targets,
413 High,
414 Medium,
415 Low,
416 BackupHistory,
417 Days,
418 AutoBackupEnabled,
419 AutoBackupDisabled,
420 OpenDirectory,
421 PriorityScheduleSetup,
422 ScheduleSetupFailed,
423 LaunchctlUnloadWarning,
424 PriorityScheduleDeleted,
425 ScheduleNotConfigured,
426 ScheduleDeletionFailed,
427 ActualScheduleStatus,
428 Enabled,
429 Disabled,
430 ScheduleSettings,
431 ScheduleUpdated,
432 ScheduleUpdatedEnableLater,
433 HighPriority,
434 MediumPriority,
435 LowPriority,
436 DirectoryNotExists,
437 DirectoryCreating,
438 DestinationChanged,
439 Before,
440 After,
441 CurrentDestination,
442 KeepDaysOutOfRange,
443 KeepDaysChanged,
444 CurrentKeepDays,
445 OpeningConfigFile,
446 EditorDidNotExitCleanly,
447 RustFastTypeSafe,
448 ScheduleCommandPlaceholder,
449 ConfigCommandPlaceholder,
450 ConfigArgsPlaceholder,
451 MainHelp,
452 ConfigFileLabel,
453 EnableOnlySpecifiedPriority,
454 DisableOnlySpecifiedPriority,
455 SetExecutionFrequency,
456 EnableAllAutoBackups,
457 EnableHighOnly,
458 SetupScheduleFreq,
459 CheckCurrentConfig,
460
461 Files,
463 EncryptedLabel,
464 StatusTitle,
465 DaysUnit,
466 DryRunParens,
467
468 FilesDetected,
470 FullBackupMode,
471 IncrementalBackupMode,
472 BackupComplete,
473 BackupCompleteWithFailures,
474 BackupResultTitle,
475 TotalFilesLabel,
476 SuccessfulLabel,
477 FailedLabel,
478 TotalSizeLabel,
479
480 ConfirmRemoveTarget,
482 UpdatedTarget,
483 PathLabel,
484 PriorityLabel,
485 CategoryLabel,
486 ExcludePatternsLabel,
487
488 ItemLabel,
490 ValueLabel,
491 ImportanceScoreLabel,
492 RecommendedPriorityLabel,
493 ReasonLabel,
494
495 AnalyzingLabel,
497 AddedToConfiguration,
498 ItemsAdded,
499 ExistingBackupTargets,
500 AddNewTargets,
501
502 TimestampLabel,
504 PathHistoryLabel,
505 StatusHistoryLabel,
506 FilesHistoryLabel,
507 SizeLabel,
508 CompressionLabel,
509 EncryptionLabel,
510 DurationLabel,
511 EnabledLabel,
512 SecondsUnit,
513
514 ScheduleHeaderLabel,
516 ConfigurationLabel,
517
518 StatisticsTitle,
520 DiskUsageTitle,
521 AllNormalStatus,
522 WarningsTitle,
523
524 TotalTargetsLabel,
526 HighPriorityTargetsLabel,
527 MediumPriorityTargetsLabel,
528 LowPriorityTargetsLabel,
529 TotalBackupsLabel,
530 SuccessCountLabel,
531 TotalFilesCountLabel,
532 TotalDataSizeLabel,
533 LastBackupLabel,
534 EncryptedBackupsLabel,
535 CompressedBackupsLabel,
536 BackupDirectoryLabel,
537 UsedCapacityLabel,
538 FileCountLabel,
539 DiskTotalCapacityLabel,
540 DiskFreeCapacityLabel,
541 DiskUsageRateLabel,
542 UsageStatusLabel,
543 RecentBackupsTitle,
544
545 PreviousBackupLabel,
547 ChangedFilesLabel,
548 NoBackupsFound,
549 FullBackupFallback,
550 MetadataLoadFailed,
551 DryRunMode,
552
553 DaysAgo,
555 HoursAgo,
556 MinutesAgo,
557 JustNow,
558 NotYetBackedUp,
559
560 WarningTargetNotExists,
562 WarningDaysSinceLastBackup,
563 WarningNoBackupYet,
564 WarningFailedBackups,
565 WarningLowDiskSpace,
566 DashboardHintRunBackup,
567
568 PromptPleaseSelect,
570 PromptDeleteBackup,
571 PromptDeleteOldBackups,
572 PromptDeleteTarget,
573 PromptDeleteCount,
574 PromptConfirmDelete,
575 PromptSelectPriority,
576 PromptBackupConfirm,
577
578 SmartCategoryDirectory,
580 SmartCategoryRustProject,
581 SmartCategoryNodeJsProject,
582 SmartCategoryPythonProject,
583 SmartCategorySourceCodeProject,
584 SmartCategoryGitManaged,
585 SmartCategoryLowPriority,
586
587 SmartReasonSampling,
589 SmartReasonScore,
590 SmartReasonSecurityDir,
591 SmartReasonLowPriorityDir,
592
593 ExcludeReasonNpmDeps,
595 ExcludeReasonRustBuild,
596 ExcludeReasonVendor,
597 ExcludeReasonPythonCache,
598 ExcludeReasonPytestCache,
599 ExcludeReasonBuildArtifacts,
600 ExcludeReasonCacheDir,
601 ExcludeReasonGitMetadata,
602 ExcludeReasonSvnMetadata,
603 ExcludeReasonTempFile,
604 ExcludeReasonBackupFile,
605 ExcludeReasonEditorTemp,
606 ExcludeReasonLogFile,
607 ExcludeReasonMacOsMetadata,
608 ExcludeReasonWindowsThumb,
609 ExcludeReasonWindowsDesktop,
610
611 SmartDetectConfidenceLabel,
613 SmartDetectDescriptionLabel,
614 SmartDetectRecommendedActionLabel,
615 SmartDetectAnalyzing,
616
617 PasswordStrengthLabel,
619 PasswordStrengthWeak,
620 PasswordStrengthMedium,
621 PasswordStrengthStrong,
622 PasswordStrengthWeakMessage,
623 PasswordStrengthMediumMessage,
624 PasswordStrengthStrongMessage,
625 PasswordStrengthTip,
626
627 EditorLaunchFailed,
629
630 SubdirectoriesFound,
632 ProgressEvaluating,
633
634 ConfirmBackupTitle,
636 ConfirmBackupTargetFiles,
637 ConfirmBackupDestination,
638
639 ConfirmCleanupTitle,
641 ConfirmCleanupTargetCount,
642 ConfirmCleanupRetentionDays,
643
644 CleanupDryRunScheduled,
646 CleanupCompleted,
647 CleanupFailed,
648
649 RestoreDryRunDetected,
651 RestoreInProgress,
652 RestoreProgressFile,
653 RestoreIntegrityMetadataLoaded,
654 RestoreCompleted,
655 RestoreCompletedWithFailures,
656
657 ErrorRelativePathFailed,
659 ErrorPathTraversalDetected,
660 ErrorDirectoryCreateFailed,
661 ErrorFileReadFailed,
662 ErrorFileOpenFailedSymlink,
663 ErrorEncryptedButNoPassword,
664 ErrorMasterKeyRestoreFailed,
665 ErrorDecryptionFailed,
666 ErrorIntegrityVerificationFailed,
667 ErrorFileWriteFailed,
668 ErrorFileCountFailed,
669
670 BackupProgressProcessing,
672 ErrorBackupDirectoryCreateFailed,
673 ErrorBackupWriteFailed,
674 ErrorBackupProcessFailed,
675 ErrorBackupCopyFailed,
676}
677
678impl MessageKey {
679 #[must_use]
681 pub fn get(&self, lang: Language) -> &'static str {
682 match lang {
683 Language::English => self.get_en(),
684 Language::Japanese => self.get_ja(),
685 Language::SimplifiedChinese => self.get_zh_cn(),
686 Language::TraditionalChinese => self.get_zh_tw(),
687 }
688 }
689
690 fn get_en(&self) -> &'static str {
692 match self {
693 MessageKey::AppVersion => app_version(),
695 MessageKey::AppTitle => {
696 "Fast Local Backup Tool - Written in Rust, Type-safe, High-performance"
697 }
698 MessageKey::AppDescription => "Backup Suite - Fast Local Backup Tool",
699
700 MessageKey::BasicCommands => "📋 Basic Commands",
702 MessageKey::ExecutionCommands => "🚀 Execution Commands",
703 MessageKey::InformationCommands => "📊 Information Commands",
704 MessageKey::ConfigCommands => "⚙️ Configuration",
705 MessageKey::UtilityCommands => "🔧 Utility",
706 MessageKey::SmartCommands => "🤖 Smart Commands",
707
708 MessageKey::CmdAdd => "add",
710 MessageKey::CmdList => "list, ls",
711 MessageKey::CmdRemove => "remove",
712 MessageKey::CmdClear => "clear",
713 MessageKey::CmdRun => "run",
714 MessageKey::CmdRestore => "restore",
715 MessageKey::CmdCleanup => "cleanup",
716 MessageKey::CmdStatus => "status",
717 MessageKey::CmdHistory => "history",
718 MessageKey::CmdDashboard => "dashboard",
719 MessageKey::CmdEnable => "enable",
720 MessageKey::CmdDisable => "disable",
721 MessageKey::CmdSchedule => "schedule",
722 MessageKey::CmdConfig => "config",
723 MessageKey::CmdOpen => "open",
724 MessageKey::CmdCompletion => "completion",
725 MessageKey::CmdSmart => "ai",
726
727 MessageKey::DescAdd => "Add target (interactive selection supported)",
729 MessageKey::DescList => "List targets",
730 MessageKey::DescRemove => "Remove target (interactive selection supported)",
731 MessageKey::DescClear => "Bulk delete",
732 MessageKey::DescRun => "Execute backup (encryption & compression supported)",
733 MessageKey::DescRestore => "Restore backup (auto-detect encryption & compression)",
734 MessageKey::DescCleanup => "Delete old backups",
735 MessageKey::DescStatus => "Display status",
736 MessageKey::DescHistory => "Display history",
737 MessageKey::DescDashboard => "Display dashboard",
738 MessageKey::DescEnable => "Enable auto backup",
739 MessageKey::DescDisable => "Disable auto backup",
740 MessageKey::DescSchedule => "Manage schedule",
741 MessageKey::DescConfig => "Manage configuration (destination, retention period)",
742 MessageKey::DescOpen => "Open backup directory",
743 MessageKey::DescCompletion => "Generate shell completion script",
744 MessageKey::DescSmart => "AI-driven intelligent backup management",
745
746 MessageKey::CmdSmartDetect => "detect",
748 MessageKey::CmdSmartAnalyze => "analyze",
749 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
750 MessageKey::CmdSmartAutoConfigure => "auto-configure",
751 MessageKey::DescSmartDetect => "Detect anomalies in backup history",
752 MessageKey::DescSmartAnalyze => "Analyze file importance",
753 MessageKey::DescSmartSuggestExclude => "Suggest exclude patterns",
754 MessageKey::DescSmartAutoConfigure => "Auto-configure backup settings with Smart rules",
755
756 MessageKey::SmartDetectTitle => "🤖 Smart Anomaly Detection",
758 MessageKey::SmartDetectNoAnomalies => "No anomalies detected in the backup history",
759 MessageKey::SmartDetectAnomalyFound => "Anomaly detected",
760 MessageKey::SmartAnalyzeTitle => "🤖 Smart File Importance Analysis",
761 MessageKey::SmartAnalyzeImportanceHigh => "High importance",
762 MessageKey::SmartAnalyzeImportanceMedium => "Medium importance",
763 MessageKey::SmartAnalyzeImportanceLow => "Low importance",
764 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart Exclude Pattern Suggestions",
765 MessageKey::SmartSuggestExcludeRecommendation => "Recommended exclusion",
766 MessageKey::SmartAutoConfigureTitle => "🤖 Smart Auto-Configuration",
767 MessageKey::SmartAutoConfigureSuccess => "Auto-configuration completed successfully",
768 MessageKey::SmartDryRunModeLabel => "DRY RUN Mode",
769 MessageKey::PathValidationFailed => "Path validation failed",
770 MessageKey::PathSafetyValidationFailed => "Path safety validation failed",
771 MessageKey::SmartExampleMaxDepthComment => {
772 "# Specify subdirectory depth (up to 2 levels)"
773 }
774 MessageKey::SmartExampleMaxSubdirsComment => {
775 "# Specify maximum number of subdirectories to process (default: 100)"
776 }
777 MessageKey::SmartExampleIncreaseSubdirsComment => {
778 "# Increase subdirectory processing limit for large directory trees"
779 }
780 MessageKey::SmartAutoConfigureFeaturesHeader => "auto-configure features",
781 MessageKey::SmartFeatureEvaluateSubdirs => {
782 "Evaluate importance for each subdirectory individually"
783 }
784 MessageKey::SmartFeatureAutoDetectExclusions => {
785 "Auto-detect exclusion patterns (node_modules, target, .cache, etc.)"
786 }
787 MessageKey::SmartFeatureHighConfidencePatterns => {
788 "Apply only patterns with 80%+ confidence"
789 }
790 MessageKey::SmartFeatureAutoDetectProjectTypes => {
791 "Auto-detect project types (Rust, Node.js, Python, etc.)"
792 }
793 MessageKey::NoSubdirectoriesFound => "No subdirectories found",
794 MessageKey::SubdirLimitReached => {
795 "Limit reached, some subdirectories were not processed"
796 }
797 MessageKey::SubdirLimitChangeHint => "to change",
798 MessageKey::SkippingExcludeAnalysisLarge => {
799 "Skipping exclude pattern analysis (directory too large)"
800 }
801 MessageKey::FilesUnit => "files",
802 MessageKey::AddToExcludeListPrompt => "to exclude list?",
803 MessageKey::SmartRecommendsAddPrompt => {
804 "Smart recommends: Add {:?} (priority: {:?})?"
805 }
806 MessageKey::ExcludePatternsLabel => "Exclude patterns",
807 MessageKey::AnalysisFailedLabel => "Analysis failed",
808 MessageKey::SmartErrorNotEnabled => {
809 "AI features are not enabled. Compile with --features ai"
810 }
811 MessageKey::SmartErrorInsufficientData => "Insufficient data for Smart analysis",
812 MessageKey::SmartErrorInsufficientDataDetailed => {
813 "Insufficient data (minimum 3 entries required, found {})"
814 }
815 MessageKey::SmartErrorAnalysisFailed => "Smart analysis failed",
816 MessageKey::SmartErrorAnalysisLabel => "Analysis error",
817 MessageKey::HelpLabel => "Help",
818
819 MessageKey::Options => "Options:",
821 MessageKey::HelpOption => "-h, --help Display this help",
822 MessageKey::VersionOption => "-V, --version Display version information",
823
824 MessageKey::UsageExamples => "Usage Examples:",
826 MessageKey::ExampleAddInteractive => "# Add file interactively",
827 MessageKey::ExampleRunHigh => "# Execute backup for high priority",
828 MessageKey::ExampleEncrypt => "# Encrypted backup (AES-256-GCM)",
829 MessageKey::ExampleCompress => "# Compressed backup (zstd fast compression)",
830 MessageKey::ExampleEncryptCompress => "# Encrypted + Compressed backup",
831 MessageKey::ExampleCleanup => "# Delete backups older than 30 days (dry run)",
832 MessageKey::ExampleSchedule => "# Setup schedule and enable",
833 MessageKey::ExampleSmartDetect => "# Detect anomalies in last 7 days",
834 MessageKey::ExampleSmartAnalyze => "# Analyze file importance",
835 MessageKey::ExampleSmartSuggestExclude => "# Get Smart exclude suggestions",
836 MessageKey::ExampleSmartAutoConfigureComment => "# Smart auto-configure (evaluate subdirectories individually with auto-exclusion)",
837 MessageKey::ExampleSmartDryRunComment => "# Dry-run (show recommendations only)",
838 MessageKey::ExampleSmartInteractiveComment => "# Interactive mode (confirm each subdirectory and exclusion pattern)",
839 MessageKey::SmartRecommendedCommandLabel => "Recommended command",
840 MessageKey::SmartNoExclusionsRecommended => "No exclusions recommended (already optimized)",
841 MessageKey::SmartAddToExcludeListPrompt => "to exclude list?",
842 MessageKey::SmartReductionLabel => "reduction",
843 MessageKey::SmartAddedLabel => "added",
844 MessageKey::SmartAutoConfigureErrorNoPath => "Error: Please specify paths to analyze",
845 MessageKey::SmartAutoConfigureUsageExamples => "Examples:\n backup-suite smart auto-configure ~/projects\n backup-suite smart auto-configure ~/Documents ~/projects --dry-run\n backup-suite smart auto-configure ~/projects --interactive",
846
847 MessageKey::DetailedInfo => "Detailed Information:",
849 MessageKey::DetailCommand => "Command details: backup-suite <command> --help",
850 MessageKey::ConfigFile => "Configuration file: ~/.config/backup-suite/config.toml",
851 MessageKey::BackupDestination => {
852 "Backup destination: ~/.local/share/backup-suite/backups/"
853 }
854
855 MessageKey::Added => "Added",
857 MessageKey::Removed => "Removed",
858 MessageKey::Deleted => "deleted",
859 MessageKey::Error => "Error",
860 MessageKey::Warning => "Warning",
861 MessageKey::BackupRunning => "Backup Running",
862 MessageKey::RestoreStarting => "Restore Starting",
863
864 MessageKey::EncryptionPassword => "Encryption password",
866 MessageKey::SavePasswordSecurely => "⚠️ Please save this password securely!",
867 MessageKey::EncryptOption => "--encrypt: AES-256-GCM encryption",
868 MessageKey::CompressOption => "--compress zstd/gzip: Compression",
869 MessageKey::CompressLevel => "--compress-level 1-22: Compression level",
870
871 MessageKey::IncrementalOption => {
873 "--incremental: Incremental backup (changed files only)"
874 }
875 MessageKey::GeneratePasswordOption => "--generate-password: Generate secure password",
876 MessageKey::PasswordOption => "--password <PASSWORD>: Specify encryption password",
877 MessageKey::DryRunOption => "--dry-run: Dry run mode (no actual backup)",
878 MessageKey::PriorityOption => {
879 "--priority <PRIORITY>: Filter by priority (high/medium/low)"
880 }
881 MessageKey::CategoryOption => "--category <CATEGORY>: Filter by category",
882
883 MessageKey::FromOption => "--from <BACKUP_NAME>: Backup to restore",
885 MessageKey::ToOption => "--to <DESTINATION>: Restore destination",
886 MessageKey::RestorePasswordOption => {
887 "--password <PASSWORD>: Decryption password (if encrypted)"
888 }
889
890 MessageKey::DaysOption => "--days <DAYS>: Delete backups older than specified days",
892 MessageKey::CleanupDryRunOption => {
893 "--dry-run: Dry run mode (show what would be deleted)"
894 }
895
896 MessageKey::AddPriorityOption => {
898 "--priority <PRIORITY>: Set priority (high/medium/low)"
899 }
900 MessageKey::AddCategoryOption => "--category <CATEGORY>: Set category",
901 MessageKey::InteractiveOption => "--interactive: Interactive selection mode",
902
903 MessageKey::ListPriorityOption => "--priority <PRIORITY>: Filter by priority",
905
906 MessageKey::ScheduleTitle => "📅 Backup Suite Schedule Management",
908 MessageKey::ScheduleDescription => "Automatic backup schedule setup and control system",
909 MessageKey::ScheduleUsage => "Usage:",
910 MessageKey::ScheduleCommands => "📋 Schedule Management Commands",
911 MessageKey::ScheduleEnable => "enable Enable automatic backup",
912 MessageKey::ScheduleDisable => "disable Disable automatic backup",
913 MessageKey::ScheduleStatus => "status Display current schedule status",
914 MessageKey::ScheduleSetup => "setup Setup schedule frequency",
915 MessageKey::ScheduleHelp => "help Display this help",
916
917 MessageKey::ConfigTitle => "⚙️ Backup Suite Configuration Management",
919 MessageKey::ConfigDescription => {
920 "Command to manage backup destination, retention period and other settings"
921 }
922 MessageKey::ConfigUsage => "Usage:",
923 MessageKey::ConfigMgmtCommands => "📋 Configuration Management Commands",
924 MessageKey::ConfigSetDestination => {
925 "set-destination <path> Change backup destination directory"
926 }
927 MessageKey::ConfigGetDestination => {
928 "get-destination Display current backup destination"
929 }
930 MessageKey::ConfigSetKeepDays => {
931 "set-keep-days <days> Change backup retention period (1-3650 days)"
932 }
933 MessageKey::ConfigGetKeepDays => {
934 "get-keep-days Display current backup retention period"
935 }
936 MessageKey::ConfigOpen => {
937 "open Open configuration file in default editor"
938 }
939 MessageKey::ConfigHelp => "help Display this help",
940
941 MessageKey::ScheduleDetailedOptions => "⚙️ Detailed Options",
943 MessageKey::ScheduleEnableOption => "enable --priority <priority>",
944 MessageKey::ScheduleDisableOption => "disable --priority <priority>",
945 MessageKey::ScheduleSetupOption => "setup --high <freq> --medium <freq> --low <freq>",
946 MessageKey::ScheduleFrequencies => "📊 Frequency Settings:",
947 MessageKey::ScheduleDaily => "daily - Every day at 2:00 AM",
948 MessageKey::ScheduleWeekly => "weekly - Every Sunday at 2:00 AM",
949 MessageKey::ScheduleMonthly => "monthly - First day of month at 2:00 AM",
950 MessageKey::ScheduleTips => "💡 Tips:",
951 MessageKey::ScheduleTip1 => {
952 " • After enabling schedule, it runs automatically via macOS launchctl"
953 }
954 MessageKey::ScheduleTip2 => " • Use 'status' command to check actual operation status",
955 MessageKey::ScheduleTip3 => " • Each priority setting is managed independently",
956
957 MessageKey::ConfigExampleExternal => "# Change backup destination to external HDD",
959 MessageKey::ConfigExampleGetDest => "# Check current backup destination",
960 MessageKey::ConfigExampleSetDays => "# Change retention period to 60 days",
961 MessageKey::ConfigExampleOpen => "# Open configuration file in editor",
962 MessageKey::ConfigExampleTilde => "# Tilde expansion is supported",
963 MessageKey::ConfigTip1 => " • Non-existent directories are automatically created",
964 MessageKey::ConfigTip2 => " • Write permissions are automatically checked",
965 MessageKey::ConfigTip3 => {
966 " • Backups older than retention period can be deleted with cleanup command"
967 }
968
969 MessageKey::NoTargetsRegistered => "No backup targets registered",
971 MessageKey::SelectionCancelled => "Selection cancelled",
972 MessageKey::ConfirmClearAll => {
973 "⚠️ Warning: Delete all {} backup targets. Are you sure?"
974 }
975 MessageKey::ConfirmClearPriority => {
976 "⚠️ Warning: Delete {count} backup targets with {priority} priority. Are you sure?"
977 }
978 MessageKey::NoPriorityTargets => "No backup targets found with specified priority",
979 MessageKey::ConfirmCleanup => "Delete backups older than {} days. Are you sure?",
980 MessageKey::DaysOutOfRange => "days must be in the range 1-3650 (specified: {})",
981 MessageKey::PromptSelectTarget => "Select backup target to remove",
982 MessageKey::PromptSelectFile => "Select file/directory to add: ",
983 MessageKey::PathNotExists => "Path does not exist",
984 MessageKey::NotInBackupConfig => "Not registered in backup configuration",
985 MessageKey::SpecifyPriorityOrAll => "Specify --priority or --all",
986 MessageKey::CountDeleted => "deleted",
987 MessageKey::DryRun => "dry run",
988 MessageKey::Category => "Category",
989 MessageKey::Encryption => "Encryption",
990 MessageKey::Compression => "Compression",
991 MessageKey::ErrorDetails => "Error Details",
992 MessageKey::Detected => "Detected",
993 MessageKey::NoBackups => "No backups",
994 MessageKey::RestoreStart => "Restore Starting",
995 MessageKey::Restoring => "Restoring...",
996 MessageKey::RestoredSuccess => "Successfully restored backup to",
997 MessageKey::RestoredFileCount => "Restored files:",
998 MessageKey::Deleting => "Deleting",
999 MessageKey::Destination => "Destination",
1000 MessageKey::Targets => "Targets",
1001 MessageKey::High => "High",
1002 MessageKey::Medium => "Medium",
1003 MessageKey::Low => "Low",
1004 MessageKey::BackupHistory => "Backup History",
1005 MessageKey::Days => "days",
1006 MessageKey::AutoBackupEnabled => "Automatic backup enabled",
1007 MessageKey::AutoBackupDisabled => "Automatic backup disabled",
1008 MessageKey::OpenDirectory => "Opening",
1009 MessageKey::PriorityScheduleSetup => "Priority schedule setup completed",
1010 MessageKey::ScheduleSetupFailed => "Failed to setup priority schedule",
1011 MessageKey::LaunchctlUnloadWarning => "launchctl unload warning",
1012 MessageKey::PriorityScheduleDeleted => "Priority schedule deleted",
1013 MessageKey::ScheduleNotConfigured => "Priority schedule is not configured",
1014 MessageKey::ScheduleDeletionFailed => "Failed to delete priority schedule",
1015 MessageKey::ActualScheduleStatus => "Actual Schedule Status",
1016 MessageKey::Enabled => "Enabled",
1017 MessageKey::Disabled => "Disabled",
1018 MessageKey::ScheduleSettings => "Schedule Settings",
1019 MessageKey::ScheduleUpdated => "Schedule updated and applied",
1020 MessageKey::ScheduleUpdatedEnableLater => {
1021 "Schedule settings updated (enable with 'schedule enable')"
1022 }
1023 MessageKey::HighPriority => "High priority",
1024 MessageKey::MediumPriority => "Medium priority",
1025 MessageKey::LowPriority => "Low priority",
1026 MessageKey::DirectoryNotExists => "Directory does not exist. Creating",
1027 MessageKey::DirectoryCreating => "Creating",
1028 MessageKey::DestinationChanged => "Backup destination changed",
1029 MessageKey::Before => "Before",
1030 MessageKey::After => "After",
1031 MessageKey::CurrentDestination => "Current backup destination",
1032 MessageKey::KeepDaysOutOfRange => "keep_days must be between 1-3650 (specified value:",
1033 MessageKey::KeepDaysChanged => "Backup retention period changed",
1034 MessageKey::CurrentKeepDays => "Current backup retention period",
1035 MessageKey::OpeningConfigFile => "Opening configuration file",
1036 MessageKey::EditorDidNotExitCleanly => "Editor did not exit cleanly",
1037 MessageKey::RustFastTypeSafe => {
1038 "Intelligent Backup with AES-256 Encryption & Smart Analysis"
1039 }
1040 MessageKey::ScheduleCommandPlaceholder => "<command>",
1041 MessageKey::ConfigCommandPlaceholder => "<command>",
1042 MessageKey::ConfigArgsPlaceholder => "[args]",
1043 MessageKey::MainHelp => "Main help",
1044 MessageKey::ConfigFileLabel => "Configuration file",
1045 MessageKey::EnableOnlySpecifiedPriority => {
1046 "Enable only specified priority (high/medium/low)"
1047 }
1048 MessageKey::DisableOnlySpecifiedPriority => "Disable only specified priority",
1049 MessageKey::SetExecutionFrequency => {
1050 "Set execution frequency for each priority (daily/weekly/monthly)"
1051 }
1052 MessageKey::EnableAllAutoBackups => "# Enable all automatic backups",
1053 MessageKey::EnableHighOnly => "# Enable high priority only",
1054 MessageKey::SetupScheduleFreq => "# Setup schedule frequency",
1055 MessageKey::CheckCurrentConfig => "# Check current configuration",
1056
1057 MessageKey::Files => "files",
1059 MessageKey::EncryptedLabel => "Encrypted:",
1060 MessageKey::StatusTitle => "Status",
1061 MessageKey::DaysUnit => "days",
1062 MessageKey::DryRunParens => "(dry run)",
1063
1064 MessageKey::FilesDetected => "files detected",
1066 MessageKey::FullBackupMode => "Full Backup Mode (all files)",
1067 MessageKey::IncrementalBackupMode => "Incremental Backup Mode (changed files only)",
1068 MessageKey::BackupComplete => "Backup complete",
1069 MessageKey::BackupCompleteWithFailures => "Backup complete (with failures)",
1070 MessageKey::BackupResultTitle => "Backup Result",
1071 MessageKey::TotalFilesLabel => "Total Files",
1072 MessageKey::SuccessfulLabel => "Successful",
1073 MessageKey::FailedLabel => "Failed",
1074 MessageKey::TotalSizeLabel => "Total Size",
1075
1076 MessageKey::ConfirmRemoveTarget => {
1078 "Are you sure you want to remove {} from backup targets?"
1079 }
1080 MessageKey::UpdatedTarget => "Updated backup target",
1081 MessageKey::PathLabel => "Path",
1082 MessageKey::PriorityLabel => "Priority",
1083 MessageKey::CategoryLabel => "Category",
1084
1085 MessageKey::ItemLabel => "Item",
1087 MessageKey::ValueLabel => "Value",
1088 MessageKey::ImportanceScoreLabel => "Importance Score",
1089 MessageKey::RecommendedPriorityLabel => "Recommended Priority",
1090 MessageKey::ReasonLabel => "Reason",
1091
1092 MessageKey::AnalyzingLabel => "Analyzing",
1094 MessageKey::AddedToConfiguration => "Added to configuration",
1095 MessageKey::ItemsAdded => "Items added",
1096 MessageKey::ExistingBackupTargets => "You have {} existing backup targets",
1097 MessageKey::AddNewTargets => "Add new targets?",
1098
1099 MessageKey::TimestampLabel => "Timestamp",
1101 MessageKey::PathHistoryLabel => "Path",
1102 MessageKey::StatusHistoryLabel => "Status",
1103 MessageKey::FilesHistoryLabel => "Files",
1104 MessageKey::SizeLabel => "Size",
1105 MessageKey::CompressionLabel => "Compression",
1106 MessageKey::EncryptionLabel => "Encryption",
1107 MessageKey::DurationLabel => "Duration",
1108 MessageKey::EnabledLabel => "Enabled",
1109 MessageKey::SecondsUnit => "seconds",
1110
1111 MessageKey::StatisticsTitle => "📈 Statistics",
1113 MessageKey::DiskUsageTitle => "💾 Disk Usage",
1114 MessageKey::AllNormalStatus => "⚡ All Normal",
1115 MessageKey::WarningsTitle => "⚠️ Warnings",
1116
1117 MessageKey::PreviousBackupLabel => "Previous backup",
1119 MessageKey::ChangedFilesLabel => "Changed files",
1120 MessageKey::NoBackupsFound => "ℹ️ No previous backup found. Performing full backup.",
1121 MessageKey::FullBackupFallback => {
1122 "⚠️ Failed to load previous metadata. Falling back to full backup."
1123 }
1124 MessageKey::MetadataLoadFailed => " Details",
1125 MessageKey::DryRunMode => "📋 Dry run mode: detected {} files for backup",
1126
1127 MessageKey::TotalTargetsLabel => "Total Targets",
1129 MessageKey::HighPriorityTargetsLabel => " High Priority",
1130 MessageKey::MediumPriorityTargetsLabel => " Medium Priority",
1131 MessageKey::LowPriorityTargetsLabel => " Low Priority",
1132 MessageKey::TotalBackupsLabel => "Total Backups",
1133 MessageKey::SuccessCountLabel => " Success",
1134 MessageKey::TotalFilesCountLabel => "Total Files",
1135 MessageKey::TotalDataSizeLabel => "Total Data Size",
1136 MessageKey::LastBackupLabel => "Last Backup",
1137 MessageKey::EncryptedBackupsLabel => "Encrypted Backups",
1138 MessageKey::CompressedBackupsLabel => "Compressed Backups",
1139 MessageKey::BackupDirectoryLabel => "Backup Directory",
1140 MessageKey::UsedCapacityLabel => "Used Capacity",
1141 MessageKey::FileCountLabel => "File Count",
1142 MessageKey::DiskTotalCapacityLabel => "Disk Total Capacity",
1143 MessageKey::DiskFreeCapacityLabel => "Disk Free Capacity",
1144 MessageKey::DiskUsageRateLabel => "Disk Usage Rate",
1145 MessageKey::UsageStatusLabel => "Usage Status",
1146 MessageKey::RecentBackupsTitle => "🕒 Recent Backups (Latest 5)",
1147
1148 MessageKey::ScheduleHeaderLabel => "Schedule",
1150 MessageKey::ConfigurationLabel => "Configuration",
1151
1152 MessageKey::DaysAgo => "{} days ago",
1154 MessageKey::HoursAgo => "{} hours ago",
1155 MessageKey::MinutesAgo => "{} minutes ago",
1156 MessageKey::JustNow => "Just now",
1157 MessageKey::NotYetBackedUp => "Not yet",
1158
1159 MessageKey::WarningTargetNotExists => "Backup target does not exist: {}",
1161 MessageKey::WarningDaysSinceLastBackup => "It has been {} days since the last backup",
1162 MessageKey::WarningNoBackupYet => "No backup has been performed yet",
1163 MessageKey::WarningFailedBackups => "There are {} failed backups",
1164 MessageKey::WarningLowDiskSpace => "Disk space is running low ({:.1}%)",
1165 MessageKey::DashboardHintRunBackup => {
1166 "💡 Hint: Run 'backup-suite run' to perform a backup"
1167 }
1168
1169 MessageKey::PromptPleaseSelect => "Please select",
1171 MessageKey::PromptDeleteBackup => "Do you want to delete this backup?",
1172 MessageKey::PromptDeleteOldBackups => "🗑️ Delete old backups",
1173 MessageKey::PromptDeleteTarget => "Targets to delete: {} backups",
1174 MessageKey::PromptDeleteCount => "targets",
1175 MessageKey::PromptConfirmDelete => "Do you want to proceed with deletion?",
1176 MessageKey::PromptSelectPriority => "Select priority",
1177 MessageKey::PromptBackupConfirm => "Do you want to perform a backup?",
1178
1179 MessageKey::SmartCategoryDirectory => "Directory",
1181 MessageKey::SmartCategoryRustProject => "Rust Project",
1182 MessageKey::SmartCategoryNodeJsProject => "Node.js Project",
1183 MessageKey::SmartCategoryPythonProject => "Python Project",
1184 MessageKey::SmartCategorySourceCodeProject => "Source Code Project",
1185 MessageKey::SmartCategoryGitManaged => "Git-managed Directory",
1186 MessageKey::SmartCategoryLowPriority => "Low Priority Directory",
1187
1188 MessageKey::SmartReasonSampling => {
1190 "(Sampling: {} files, high importance: {}, score: {})"
1191 }
1192 MessageKey::SmartReasonScore => "(Score: {})",
1193 MessageKey::SmartReasonSecurityDir => {
1194 "Credentials/Secret keys ({} directory, encryption required, score: 95)"
1195 }
1196 MessageKey::SmartReasonLowPriorityDir => {
1197 "Cache/Log/Archive etc. (Directory: {}, score: 20)"
1198 }
1199
1200 MessageKey::ExcludeReasonNpmDeps => {
1202 "npm/yarn dependencies (regenerable from package.json)"
1203 }
1204 MessageKey::ExcludeReasonRustBuild => {
1205 "Rust build artifacts (regenerable from Cargo.toml)"
1206 }
1207 MessageKey::ExcludeReasonVendor => "Dependency vendoring (regenerable)",
1208 MessageKey::ExcludeReasonPythonCache => "Python cache (auto-generated)",
1209 MessageKey::ExcludeReasonPytestCache => "pytest cache (auto-generated)",
1210 MessageKey::ExcludeReasonBuildArtifacts => "Build artifacts directory (rebuildable)",
1211 MessageKey::ExcludeReasonCacheDir => "Cache directory (temporary data)",
1212 MessageKey::ExcludeReasonGitMetadata => {
1213 "Git repository metadata (recoverable from remote)"
1214 }
1215 MessageKey::ExcludeReasonSvnMetadata => {
1216 "SVN repository metadata (recoverable from remote)"
1217 }
1218 MessageKey::ExcludeReasonTempFile => "Temporary file",
1219 MessageKey::ExcludeReasonBackupFile => {
1220 "Backup file (unnecessary if original file exists)"
1221 }
1222 MessageKey::ExcludeReasonEditorTemp => "Editor temporary file",
1223 MessageKey::ExcludeReasonLogFile => "Log file (old logs usually unnecessary)",
1224 MessageKey::ExcludeReasonMacOsMetadata => "macOS metadata file (auto-generated)",
1225 MessageKey::ExcludeReasonWindowsThumb => "Windows thumbnail cache (auto-generated)",
1226 MessageKey::ExcludeReasonWindowsDesktop => {
1227 "Windows desktop settings file (auto-generated)"
1228 }
1229
1230 MessageKey::SmartDetectConfidenceLabel => "Confidence",
1232 MessageKey::SmartDetectDescriptionLabel => "Description",
1233 MessageKey::SmartDetectRecommendedActionLabel => "Recommended Action",
1234 MessageKey::SmartDetectAnalyzing => "Analyzing last {} days of backups",
1235
1236 MessageKey::PasswordStrengthLabel => "Password Strength:",
1238 MessageKey::PasswordStrengthWeak => "Weak",
1239 MessageKey::PasswordStrengthMedium => "Medium",
1240 MessageKey::PasswordStrengthStrong => "Strong",
1241 MessageKey::PasswordStrengthWeakMessage => {
1242 "This password may be vulnerable to attacks. Consider using a longer password with varied characters."
1243 }
1244 MessageKey::PasswordStrengthMediumMessage => {
1245 "This password provides moderate security. Adding special characters or length would improve it."
1246 }
1247 MessageKey::PasswordStrengthStrongMessage => {
1248 "This password provides strong security."
1249 }
1250 MessageKey::PasswordStrengthTip => {
1251 "Tip: Use --generate-password to create a strong random password."
1252 }
1253
1254 MessageKey::EditorLaunchFailed => "Failed to launch editor: {}",
1256
1257 MessageKey::SubdirectoriesFound => "Found {} subdirectories",
1259 MessageKey::ProgressEvaluating => "Progress - Evaluating: {:?}",
1260
1261 MessageKey::ConfirmBackupTitle => "📦 Backup Execution Confirmation",
1263 MessageKey::ConfirmBackupTargetFiles => "Target files: {} files",
1264 MessageKey::ConfirmBackupDestination => "Backup destination: {}",
1265
1266 MessageKey::ConfirmCleanupTitle => "🗑️ Delete Old Backups",
1268 MessageKey::ConfirmCleanupTargetCount => "Deletion targets: {} backups",
1269 MessageKey::ConfirmCleanupRetentionDays => "Retention period: {} days",
1270
1271 MessageKey::CleanupDryRunScheduled => "🗑️ [Dry Run] Scheduled for deletion: {:?}",
1273 MessageKey::CleanupCompleted => "🗑️ Deletion completed: {:?}",
1274 MessageKey::CleanupFailed => "Deletion failed {:?}: {}",
1275
1276 MessageKey::RestoreDryRunDetected => "📋 Dry run mode: {} files detected for restore",
1278 MessageKey::RestoreInProgress => "Restoring...",
1279 MessageKey::RestoreProgressFile => "Restoring: {:?}",
1280 MessageKey::RestoreIntegrityMetadataLoaded => "✓ Integrity metadata loaded ({} backups)",
1281 MessageKey::RestoreCompleted => "✓ Restore completed",
1282 MessageKey::RestoreCompletedWithFailures => "⚠ Restore completed ({} failed)",
1283
1284 MessageKey::ErrorRelativePathFailed => "Failed to get relative path {}: {}",
1286 MessageKey::ErrorPathTraversalDetected => "Path traversal detected {}: {}",
1287 MessageKey::ErrorDirectoryCreateFailed => "Failed to create directory {}: {}",
1288 MessageKey::ErrorFileReadFailed => "Failed to read file: {}",
1289 MessageKey::ErrorFileOpenFailedSymlink => "Failed to open file (possible symlink attack): {}",
1290 MessageKey::ErrorEncryptedButNoPassword => "Encrypted file but no password specified: {}",
1291 MessageKey::ErrorMasterKeyRestoreFailed => "Failed to restore master key: {}",
1292 MessageKey::ErrorDecryptionFailed => "Decryption failed {}: {}",
1293 MessageKey::ErrorIntegrityVerificationFailed => "⚠ Integrity verification failed (file tampered): {}",
1294 MessageKey::ErrorFileWriteFailed => "Failed to write file {}: {}",
1295 MessageKey::ErrorFileCountFailed => "Errors occurred in {} files",
1296
1297 MessageKey::BackupProgressProcessing => "Processing: {:?}",
1299 MessageKey::ErrorBackupDirectoryCreateFailed => "Failed to create directory {}: {}",
1300 MessageKey::ErrorBackupWriteFailed => "Write failed {}: {}",
1301 MessageKey::ErrorBackupProcessFailed => "Processing failed {}: {}",
1302 MessageKey::ErrorBackupCopyFailed => "Copy failed {}: {}",
1303 }
1304 }
1305
1306 fn get_ja(&self) -> &'static str {
1308 match self {
1309 MessageKey::AppVersion => app_version(),
1311 MessageKey::AppTitle => "高速ローカルバックアップツール - Rust製・型安全・高性能",
1312 MessageKey::AppDescription => "Backup Suite - 高速ローカルバックアップツール",
1313
1314 MessageKey::BasicCommands => "📋 基本コマンド",
1316 MessageKey::ExecutionCommands => "🚀 実行コマンド",
1317 MessageKey::InformationCommands => "📊 情報表示",
1318 MessageKey::ConfigCommands => "⚙️ 設定管理",
1319 MessageKey::UtilityCommands => "🔧 ユーティリティ",
1320 MessageKey::SmartCommands => "🤖 Smartコマンド",
1321
1322 MessageKey::CmdAdd => "add",
1324 MessageKey::CmdList => "list, ls",
1325 MessageKey::CmdRemove => "remove",
1326 MessageKey::CmdClear => "clear",
1327 MessageKey::CmdRun => "run",
1328 MessageKey::CmdRestore => "restore",
1329 MessageKey::CmdCleanup => "cleanup",
1330 MessageKey::CmdStatus => "status",
1331 MessageKey::CmdHistory => "history",
1332 MessageKey::CmdDashboard => "dashboard",
1333 MessageKey::CmdEnable => "enable",
1334 MessageKey::CmdDisable => "disable",
1335 MessageKey::CmdSchedule => "schedule",
1336 MessageKey::CmdConfig => "config",
1337 MessageKey::CmdOpen => "open",
1338 MessageKey::CmdCompletion => "completion",
1339 MessageKey::CmdSmart => "ai",
1340
1341 MessageKey::DescAdd => "対象追加(インタラクティブ選択対応)",
1343 MessageKey::DescList => "一覧表示",
1344 MessageKey::DescRemove => "対象削除(インタラクティブ選択対応)",
1345 MessageKey::DescClear => "一括削除",
1346 MessageKey::DescRun => "バックアップ実行(暗号化・圧縮対応)",
1347 MessageKey::DescRestore => "バックアップ復元(暗号化・圧縮自動検出)",
1348 MessageKey::DescCleanup => "古いバックアップ削除",
1349 MessageKey::DescStatus => "ステータス表示",
1350 MessageKey::DescHistory => "履歴表示",
1351 MessageKey::DescDashboard => "ダッシュボード表示",
1352 MessageKey::DescEnable => "自動バックアップ有効化",
1353 MessageKey::DescDisable => "自動バックアップ無効化",
1354 MessageKey::DescSchedule => "スケジュール管理",
1355 MessageKey::DescConfig => "設定管理(保存先・保持期間)",
1356 MessageKey::DescOpen => "バックアップディレクトリを開く",
1357 MessageKey::DescCompletion => "シェル補完スクリプト生成",
1358 MessageKey::DescSmart => "AI駆動のインテリジェントバックアップ管理",
1359
1360 MessageKey::CmdSmartDetect => "detect",
1362 MessageKey::CmdSmartAnalyze => "analyze",
1363 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
1364 MessageKey::CmdSmartAutoConfigure => "auto-configure",
1365 MessageKey::DescSmartDetect => "バックアップ履歴の異常検知",
1366 MessageKey::DescSmartAnalyze => "ファイル重要度分析",
1367 MessageKey::DescSmartSuggestExclude => "除外パターン提案",
1368 MessageKey::DescSmartAutoConfigure => "Smartルールによる自動設定",
1369
1370 MessageKey::SmartDetectTitle => "🤖 Smart異常検知",
1372 MessageKey::SmartDetectNoAnomalies => "バックアップ履歴に異常は検出されませんでした",
1373 MessageKey::SmartDetectAnomalyFound => "異常を検出しました",
1374 MessageKey::SmartAnalyzeTitle => "🤖 Smartファイル重要度分析",
1375 MessageKey::SmartAnalyzeImportanceHigh => "重要度:高",
1376 MessageKey::SmartAnalyzeImportanceMedium => "重要度:中",
1377 MessageKey::SmartAnalyzeImportanceLow => "重要度:低",
1378 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart除外パターン提案",
1379 MessageKey::SmartSuggestExcludeRecommendation => "除外推奨",
1380 MessageKey::SmartAutoConfigureTitle => "🤖 Smart自動設定",
1381 MessageKey::SmartAutoConfigureSuccess => "自動設定が完了しました",
1382 MessageKey::SmartDryRunModeLabel => "ドライラン モード",
1383 MessageKey::PathValidationFailed => "パスの検証に失敗しました",
1384 MessageKey::PathSafetyValidationFailed => "パスの安全性検証に失敗しました",
1385 MessageKey::SmartExampleMaxDepthComment => {
1386 "# サブディレクトリの探索深度を指定(2階層まで)"
1387 }
1388 MessageKey::SmartExampleMaxSubdirsComment => {
1389 "# 処理するサブディレクトリの最大数を指定(デフォルト: 100)"
1390 }
1391 MessageKey::SmartExampleIncreaseSubdirsComment => {
1392 "# 大量のサブディレクトリがある場合の処理数上限を増やす"
1393 }
1394 MessageKey::SmartAutoConfigureFeaturesHeader => "auto-configure の機能",
1395 MessageKey::SmartFeatureEvaluateSubdirs => {
1396 "サブディレクトリごとに重要度を個別評価"
1397 }
1398 MessageKey::SmartFeatureAutoDetectExclusions => {
1399 "除外パターンを自動検出・提案(node_modules, target, .cache等)"
1400 }
1401 MessageKey::SmartFeatureHighConfidencePatterns => {
1402 "信頼度80%以上のパターンのみを適用"
1403 }
1404 MessageKey::SmartFeatureAutoDetectProjectTypes => {
1405 "プロジェクトタイプを自動判定(Rust, Node.js, Python等)"
1406 }
1407 MessageKey::NoSubdirectoriesFound => "サブディレクトリが見つかりません",
1408 MessageKey::SubdirLimitReached => {
1409 "制限に達したため、一部のサブディレクトリは処理されませんでした"
1410 }
1411 MessageKey::SubdirLimitChangeHint => "で変更可能",
1412 MessageKey::SkippingExcludeAnalysisLarge => {
1413 "ディレクトリが大きいため除外パターン分析をスキップ"
1414 }
1415 MessageKey::FilesUnit => "ファイル以上",
1416 MessageKey::AddToExcludeListPrompt => "を除外リストに追加しますか?",
1417 MessageKey::SmartRecommendsAddPrompt => {
1418 "Smart推奨: {:?} (優先度: {:?}) を追加しますか?"
1419 }
1420 MessageKey::ExcludePatternsLabel => "除外パターン",
1421 MessageKey::AnalysisFailedLabel => "分析失敗",
1422 MessageKey::SmartErrorNotEnabled => {
1423 "Smart機能が有効化されていません。--features smart でコンパイルしてください"
1424 }
1425 MessageKey::SmartErrorInsufficientData => "Smart分析に必要なデータが不足しています",
1426 MessageKey::SmartErrorInsufficientDataDetailed => {
1427 "データが不足しています(最低3件必要、{}件しかありません)"
1428 }
1429 MessageKey::SmartErrorAnalysisFailed => "Smart分析に失敗しました",
1430 MessageKey::SmartErrorAnalysisLabel => "分析エラー",
1431 MessageKey::HelpLabel => "ヘルプ",
1432
1433 MessageKey::Options => "オプション:",
1435 MessageKey::HelpOption => "-h, --help このヘルプを表示",
1436 MessageKey::VersionOption => "-V, --version バージョン情報を表示",
1437
1438 MessageKey::UsageExamples => "使用例:",
1440 MessageKey::ExampleAddInteractive => "# インタラクティブでファイルを追加",
1441 MessageKey::ExampleRunHigh => "# 高優先度のバックアップを実行",
1442 MessageKey::ExampleEncrypt => "# 暗号化バックアップ(AES-256-GCM)",
1443 MessageKey::ExampleCompress => "# 圧縮バックアップ(zstd高速圧縮)",
1444 MessageKey::ExampleEncryptCompress => "# 暗号化+圧縮バックアップ",
1445 MessageKey::ExampleCleanup => "# 30日以上前のバックアップを削除(ドライラン)",
1446 MessageKey::ExampleSchedule => "# スケジュールを設定して有効化",
1447 MessageKey::ExampleSmartDetect => "# 直近7日間の異常検知",
1448 MessageKey::ExampleSmartAnalyze => "# ファイル重要度分析",
1449 MessageKey::ExampleSmartSuggestExclude => "# Smart除外推奨を取得",
1450 MessageKey::ExampleSmartAutoConfigureComment => "# Smart自動設定(サブディレクトリを個別に評価・除外パターン自動適用)",
1451 MessageKey::ExampleSmartDryRunComment => "# ドライラン(確認のみ、設定適用なし)",
1452 MessageKey::ExampleSmartInteractiveComment => "# 対話モード(各サブディレクトリと除外パターンを確認)",
1453 MessageKey::SmartRecommendedCommandLabel => "推奨コマンド",
1454 MessageKey::SmartNoExclusionsRecommended => "除外推奨なし(すべて最適化済み)",
1455 MessageKey::SmartAddToExcludeListPrompt => "を除外リストに追加しますか?",
1456 MessageKey::SmartReductionLabel => "削減見込",
1457 MessageKey::SmartAddedLabel => "を追加しました",
1458 MessageKey::SmartAutoConfigureErrorNoPath => "エラー: 分析対象のパスを指定してください",
1459 MessageKey::SmartAutoConfigureUsageExamples => "使用例:\n backup-suite smart auto-configure ~/projects\n backup-suite smart auto-configure ~/Documents ~/projects --dry-run\n backup-suite smart auto-configure ~/projects --interactive",
1460
1461 MessageKey::DetailedInfo => "詳細情報:",
1463 MessageKey::DetailCommand => "各コマンドの詳細: backup-suite <コマンド> --help",
1464 MessageKey::ConfigFile => "設定ファイル: ~/.config/backup-suite/config.toml",
1465 MessageKey::BackupDestination => "バックアップ先: ~/.local/share/backup-suite/backups/",
1466
1467 MessageKey::Added => "追加",
1469 MessageKey::Removed => "削除",
1470 MessageKey::Deleted => "件削除",
1471 MessageKey::Error => "エラー",
1472 MessageKey::Warning => "⚠️",
1473 MessageKey::BackupRunning => "🚀 バックアップ実行",
1474 MessageKey::RestoreStarting => "🔄 復元開始",
1475
1476 MessageKey::EncryptionPassword => "暗号化パスワード",
1478 MessageKey::SavePasswordSecurely => "⚠️ このパスワードを安全に保管してください!",
1479 MessageKey::EncryptOption => "--encrypt: AES-256-GCM暗号化",
1480 MessageKey::CompressOption => "--compress zstd/gzip: 圧縮",
1481 MessageKey::CompressLevel => "--compress-level 1-22: 圧縮レベル",
1482
1483 MessageKey::IncrementalOption => "--incremental: 増分バックアップ(変更ファイルのみ)",
1485 MessageKey::GeneratePasswordOption => "--generate-password: 安全なパスワードを自動生成",
1486 MessageKey::PasswordOption => "--password <パスワード>: 暗号化パスワード指定",
1487 MessageKey::DryRunOption => "--dry-run: ドライランモード(実際のバックアップなし)",
1488 MessageKey::PriorityOption => "--priority <優先度>: 優先度でフィルタ (high/medium/low)",
1489 MessageKey::CategoryOption => "--category <カテゴリ>: カテゴリでフィルタ",
1490
1491 MessageKey::FromOption => "--from <バックアップ名>: 復元するバックアップ",
1493 MessageKey::ToOption => "--to <復元先>: 復元先ディレクトリ",
1494 MessageKey::RestorePasswordOption => {
1495 "--password <パスワード>: 復号化パスワード(暗号化時)"
1496 }
1497
1498 MessageKey::DaysOption => "--days <日数>: 指定日数より古いバックアップを削除",
1500 MessageKey::CleanupDryRunOption => "--dry-run: ドライランモード(削除対象を表示)",
1501
1502 MessageKey::AddPriorityOption => "--priority <優先度>: 優先度を設定 (high/medium/low)",
1504 MessageKey::AddCategoryOption => "--category <カテゴリ>: カテゴリを設定",
1505 MessageKey::InteractiveOption => "--interactive: インタラクティブ選択モード",
1506
1507 MessageKey::ListPriorityOption => "--priority <優先度>: 優先度でフィルタ",
1509
1510 MessageKey::ScheduleTitle => "📅 Backup Suite スケジュール管理",
1512 MessageKey::ScheduleDescription => "自動バックアップのスケジュール設定・制御システム",
1513 MessageKey::ScheduleUsage => "使用方法:",
1514 MessageKey::ScheduleCommands => "📋 スケジュール管理コマンド",
1515 MessageKey::ScheduleEnable => "enable 自動バックアップを有効化",
1516 MessageKey::ScheduleDisable => "disable 自動バックアップを無効化",
1517 MessageKey::ScheduleStatus => "status 現在のスケジュール状態を表示",
1518 MessageKey::ScheduleSetup => "setup スケジュール頻度を設定",
1519 MessageKey::ScheduleHelp => "help このヘルプを表示",
1520
1521 MessageKey::ConfigTitle => "⚙️ Backup Suite 設定管理",
1523 MessageKey::ConfigDescription => {
1524 "バックアップの保存先や保持期間などの設定を管理するコマンド"
1525 }
1526 MessageKey::ConfigUsage => "使用方法:",
1527 MessageKey::ConfigMgmtCommands => "📋 設定管理コマンド",
1528 MessageKey::ConfigSetDestination => {
1529 "set-destination <パス> バックアップ保存先ディレクトリを変更"
1530 }
1531 MessageKey::ConfigGetDestination => {
1532 "get-destination 現在のバックアップ保存先を表示"
1533 }
1534 MessageKey::ConfigSetKeepDays => {
1535 "set-keep-days <日数> バックアップ保持期間を変更 (1-3650日)"
1536 }
1537 MessageKey::ConfigGetKeepDays => {
1538 "get-keep-days 現在のバックアップ保持期間を表示"
1539 }
1540 MessageKey::ConfigOpen => {
1541 "open 設定ファイルをデフォルトエディタで開く"
1542 }
1543 MessageKey::ConfigHelp => "help このヘルプを表示",
1544
1545 MessageKey::ScheduleDetailedOptions => "⚙️ 詳細オプション",
1547 MessageKey::ScheduleEnableOption => "enable --priority <優先度>",
1548 MessageKey::ScheduleDisableOption => "disable --priority <優先度>",
1549 MessageKey::ScheduleSetupOption => "setup --high <頻度> --medium <頻度> --low <頻度>",
1550 MessageKey::ScheduleFrequencies => "📊 頻度設定値:",
1551 MessageKey::ScheduleDaily => "daily - 毎日 2:00 AM",
1552 MessageKey::ScheduleWeekly => "weekly - 毎週日曜 2:00 AM",
1553 MessageKey::ScheduleMonthly => "monthly - 毎月1日 2:00 AM",
1554 MessageKey::ScheduleTips => "💡 ヒント:",
1555 MessageKey::ScheduleTip1 => {
1556 " • スケジュール有効化後、macOSのlaunchctlで自動実行されます"
1557 }
1558 MessageKey::ScheduleTip2 => " • 'status'コマンドで実際の動作状況を確認できます",
1559 MessageKey::ScheduleTip3 => " • 各優先度の設定は独立して管理できます",
1560
1561 MessageKey::ConfigExampleExternal => "# バックアップ先を外付けHDDに変更",
1563 MessageKey::ConfigExampleGetDest => "# 現在のバックアップ先を確認",
1564 MessageKey::ConfigExampleSetDays => "# バックアップ保持期間を60日に変更",
1565 MessageKey::ConfigExampleOpen => "# 設定ファイルをエディタで開く",
1566 MessageKey::ConfigExampleTilde => "# チルダ展開も対応",
1567 MessageKey::ConfigTip1 => " • 存在しないディレクトリは自動的に作成されます",
1568 MessageKey::ConfigTip2 => " • 書き込み権限のチェックが自動で行われます",
1569 MessageKey::ConfigTip3 => {
1570 " • 保持期間を過ぎたバックアップは cleanup コマンドで削除できます"
1571 }
1572
1573 MessageKey::NoTargetsRegistered => "バックアップ対象が登録されていません",
1575 MessageKey::SelectionCancelled => "選択がキャンセルされました",
1576 MessageKey::ConfirmClearAll => "⚠️ 警告: {}個すべてのバックアップ対象を削除します。本当によろしいですか?",
1577 MessageKey::ConfirmClearPriority => "⚠️ 警告: {priority}優先度のバックアップ対象{count}個を削除します。本当によろしいですか?",
1578 MessageKey::NoPriorityTargets => "指定された優先度のバックアップ対象は0件です",
1579 MessageKey::ConfirmCleanup => "{}日以前の古いバックアップを削除します。よろしいですか?",
1580 MessageKey::DaysOutOfRange => "days は 1-3650 の範囲で指定してください(指定値: {})",
1581 MessageKey::PromptSelectTarget => "削除するバックアップ対象を選択",
1582 MessageKey::PromptSelectFile => "追加するファイル/ディレクトリを選択: ",
1583 MessageKey::PathNotExists => "パスが存在しません",
1584 MessageKey::NotInBackupConfig => "バックアップ設定に登録されていません",
1585 MessageKey::SpecifyPriorityOrAll => "--priority または --all を指定してください",
1586 MessageKey::CountDeleted => "件削除",
1587 MessageKey::DryRun => "ドライラン",
1588 MessageKey::Category => "カテゴリ",
1589 MessageKey::Encryption => "暗号化",
1590 MessageKey::Compression => "圧縮",
1591 MessageKey::ErrorDetails => "エラー詳細",
1592 MessageKey::Detected => "検出",
1593 MessageKey::NoBackups => "バックアップなし",
1594 MessageKey::RestoreStart => "復元開始",
1595 MessageKey::Restoring => "復元中...",
1596 MessageKey::RestoredSuccess => "バックアップを正常に復元しました",
1597 MessageKey::RestoredFileCount => "復元ファイル数:",
1598 MessageKey::Deleting => "削除中",
1599 MessageKey::Destination => "保存先",
1600 MessageKey::Targets => "対象",
1601 MessageKey::High => "高",
1602 MessageKey::Medium => "中",
1603 MessageKey::Low => "低",
1604 MessageKey::BackupHistory => "バックアップ履歴",
1605 MessageKey::Days => "日間",
1606 MessageKey::AutoBackupEnabled => "自動バックアップ有効化",
1607 MessageKey::AutoBackupDisabled => "自動バックアップ無効化",
1608 MessageKey::OpenDirectory => "開く",
1609 MessageKey::PriorityScheduleSetup => "優先度スケジュール設定完了",
1610 MessageKey::ScheduleSetupFailed => "優先度スケジュールの設定に失敗しました",
1611 MessageKey::LaunchctlUnloadWarning => "launchctl unload警告",
1612 MessageKey::PriorityScheduleDeleted => "優先度スケジュール削除完了",
1613 MessageKey::ScheduleNotConfigured => "優先度スケジュールは設定されていません",
1614 MessageKey::ScheduleDeletionFailed => "優先度スケジュールの削除に失敗しました",
1615 MessageKey::ActualScheduleStatus => "実際のスケジュール状態",
1616 MessageKey::Enabled => "有効",
1617 MessageKey::Disabled => "無効",
1618 MessageKey::ScheduleSettings => "スケジュール設定",
1619 MessageKey::ScheduleUpdated => "スケジュール更新・適用完了",
1620 MessageKey::ScheduleUpdatedEnableLater => {
1621 "スケジュール設定更新(有効化は 'schedule enable' で)"
1622 }
1623 MessageKey::HighPriority => "高優先度",
1624 MessageKey::MediumPriority => "中優先度",
1625 MessageKey::LowPriority => "低優先度",
1626 MessageKey::DirectoryNotExists => "ディレクトリが存在しません。作成します",
1627 MessageKey::DirectoryCreating => "作成中",
1628 MessageKey::DestinationChanged => "バックアップ先を変更しました",
1629 MessageKey::Before => "変更前",
1630 MessageKey::After => "変更後",
1631 MessageKey::CurrentDestination => "現在のバックアップ先",
1632 MessageKey::KeepDaysOutOfRange => {
1633 "keep_days は 1-3650 の範囲で指定してください(指定値:"
1634 }
1635 MessageKey::KeepDaysChanged => "バックアップ保持期間を変更しました",
1636 MessageKey::CurrentKeepDays => "現在のバックアップ保持期間",
1637 MessageKey::OpeningConfigFile => "設定ファイルを開きます",
1638 MessageKey::EditorDidNotExitCleanly => "エディタが正常に終了しませんでした",
1639 MessageKey::RustFastTypeSafe => {
1640 "AES-256暗号化 & Smart分析機能搭載のインテリジェントバックアップ"
1641 }
1642 MessageKey::ScheduleCommandPlaceholder => "<コマンド>",
1643 MessageKey::ConfigCommandPlaceholder => "<コマンド>",
1644 MessageKey::ConfigArgsPlaceholder => "[引数]",
1645 MessageKey::MainHelp => "メインヘルプ",
1646 MessageKey::ConfigFileLabel => "設定ファイル",
1647 MessageKey::EnableOnlySpecifiedPriority => "指定した優先度のみ有効化 (high/medium/low)",
1648 MessageKey::DisableOnlySpecifiedPriority => "指定した優先度のみ無効化",
1649 MessageKey::SetExecutionFrequency => "各優先度の実行頻度を設定 (daily/weekly/monthly)",
1650 MessageKey::EnableAllAutoBackups => "# 全ての自動バックアップを有効化",
1651 MessageKey::EnableHighOnly => "# 高優先度のみ有効化",
1652 MessageKey::SetupScheduleFreq => "# スケジュール頻度を設定",
1653 MessageKey::CheckCurrentConfig => "# 現在の設定状況を確認",
1654
1655 MessageKey::Files => "ファイル",
1657 MessageKey::EncryptedLabel => "暗号化:",
1658 MessageKey::StatusTitle => "ステータス",
1659 MessageKey::DaysUnit => "日",
1660 MessageKey::DryRunParens => "(ドライラン)",
1661
1662 MessageKey::FilesDetected => "ファイルを検出",
1664 MessageKey::FullBackupMode => "📦 フルバックアップモード(全ファイル)",
1665 MessageKey::IncrementalBackupMode => "📦 増分バックアップモード(変更ファイルのみ)",
1666 MessageKey::BackupComplete => "✓ バックアップ完了",
1667 MessageKey::BackupCompleteWithFailures => "⚠ バックアップ完了(失敗あり)",
1668 MessageKey::BackupResultTitle => "📈 バックアップ結果",
1669 MessageKey::TotalFilesLabel => "総ファイル数",
1670 MessageKey::SuccessfulLabel => "成功",
1671 MessageKey::FailedLabel => "失敗",
1672 MessageKey::TotalSizeLabel => "合計サイズ",
1673
1674 MessageKey::ConfirmRemoveTarget => "本当に {} をバックアップ対象から削除しますか?",
1676 MessageKey::UpdatedTarget => "バックアップ対象を更新しました",
1677 MessageKey::PathLabel => "パス",
1678 MessageKey::PriorityLabel => "優先度",
1679 MessageKey::CategoryLabel => "カテゴリ",
1680
1681 MessageKey::ItemLabel => "項目",
1683 MessageKey::ValueLabel => "値",
1684 MessageKey::ImportanceScoreLabel => "重要度スコア",
1685 MessageKey::RecommendedPriorityLabel => "推奨優先度",
1686 MessageKey::ReasonLabel => "理由",
1687
1688 MessageKey::AnalyzingLabel => "分析中",
1690 MessageKey::AddedToConfiguration => "設定に追加しました",
1691 MessageKey::ItemsAdded => "追加された項目",
1692 MessageKey::ExistingBackupTargets => "現在{}個のバックアップ対象が登録されています",
1693 MessageKey::AddNewTargets => "新しいターゲットを追加しますか?",
1694
1695 MessageKey::TimestampLabel => "日時",
1697 MessageKey::PathHistoryLabel => "パス",
1698 MessageKey::StatusHistoryLabel => "ステータス",
1699 MessageKey::FilesHistoryLabel => "ファイル数",
1700 MessageKey::SizeLabel => "サイズ",
1701 MessageKey::CompressionLabel => "圧縮",
1702 MessageKey::EncryptionLabel => "暗号化",
1703 MessageKey::DurationLabel => "処理時間",
1704 MessageKey::EnabledLabel => "有効",
1705 MessageKey::SecondsUnit => "秒",
1706
1707 MessageKey::StatisticsTitle => "📈 統計情報",
1709 MessageKey::DiskUsageTitle => "💾 ディスク使用量",
1710 MessageKey::AllNormalStatus => "⚡ すべて正常です",
1711 MessageKey::WarningsTitle => "⚠️ 警告・注意事項",
1712
1713 MessageKey::PreviousBackupLabel => "前回バックアップ",
1715 MessageKey::ChangedFilesLabel => "変更ファイル数",
1716 MessageKey::NoBackupsFound => "ℹ️ 前回のバックアップが見つかりません。フルバックアップを実行します。",
1717 MessageKey::FullBackupFallback => "⚠️ 前回のメタデータ読み込みに失敗しました。フルバックアップにフォールバックします。",
1718 MessageKey::MetadataLoadFailed => " 詳細",
1719 MessageKey::DryRunMode => "📋 ドライランモード: {} ファイルをバックアップ対象として検出",
1720
1721 MessageKey::TotalTargetsLabel => "総対象数",
1723 MessageKey::HighPriorityTargetsLabel => " 高優先度",
1724 MessageKey::MediumPriorityTargetsLabel => " 中優先度",
1725 MessageKey::LowPriorityTargetsLabel => " 低優先度",
1726 MessageKey::TotalBackupsLabel => "総バックアップ回数",
1727 MessageKey::SuccessCountLabel => " 成功",
1728 MessageKey::TotalFilesCountLabel => "総ファイル数",
1729 MessageKey::TotalDataSizeLabel => "総データサイズ",
1730 MessageKey::LastBackupLabel => "最終バックアップ",
1731 MessageKey::EncryptedBackupsLabel => "暗号化バックアップ",
1732 MessageKey::CompressedBackupsLabel => "圧縮バックアップ",
1733 MessageKey::BackupDirectoryLabel => "バックアップディレクトリ",
1734 MessageKey::UsedCapacityLabel => "使用容量",
1735 MessageKey::FileCountLabel => "ファイル数",
1736 MessageKey::DiskTotalCapacityLabel => "ディスク総容量",
1737 MessageKey::DiskFreeCapacityLabel => "ディスク空き容量",
1738 MessageKey::DiskUsageRateLabel => "ディスク使用率",
1739 MessageKey::UsageStatusLabel => "使用状況",
1740 MessageKey::RecentBackupsTitle => "🕒 最近のバックアップ(直近5件)",
1741
1742 MessageKey::ScheduleHeaderLabel => "スケジュール",
1744 MessageKey::ConfigurationLabel => "設定",
1745
1746 MessageKey::DaysAgo => "{}日前",
1748 MessageKey::HoursAgo => "{}時間前",
1749 MessageKey::MinutesAgo => "{}分前",
1750 MessageKey::JustNow => "たった今",
1751 MessageKey::NotYetBackedUp => "未実施",
1752
1753 MessageKey::WarningTargetNotExists => "バックアップ対象が存在しません: {}",
1755 MessageKey::WarningDaysSinceLastBackup => "最後のバックアップから{}日経過しています",
1756 MessageKey::WarningNoBackupYet => "まだ一度もバックアップが実行されていません",
1757 MessageKey::WarningFailedBackups => "失敗したバックアップが{}件あります",
1758 MessageKey::WarningLowDiskSpace => "ディスク空き容量が少なくなっています ({:.1}%)",
1759 MessageKey::DashboardHintRunBackup => "💡 ヒント: 'backup-suite run' でバックアップを実行できます",
1760
1761 MessageKey::PromptPleaseSelect => "選択してください",
1763 MessageKey::PromptDeleteBackup => "このバックアップを削除しますか?",
1764 MessageKey::PromptDeleteOldBackups => "🗑️ 古いバックアップを削除",
1765 MessageKey::PromptDeleteTarget => "削除対象: {} 件のバックアップ",
1766 MessageKey::PromptDeleteCount => "件",
1767 MessageKey::PromptConfirmDelete => "削除を実行しますか?",
1768 MessageKey::PromptSelectPriority => "優先度を選択してください",
1769 MessageKey::PromptBackupConfirm => "バックアップを実行しますか?",
1770
1771 MessageKey::SmartCategoryDirectory => "ディレクトリ",
1773 MessageKey::SmartCategoryRustProject => "Rustプロジェクト",
1774 MessageKey::SmartCategoryNodeJsProject => "Node.jsプロジェクト",
1775 MessageKey::SmartCategoryPythonProject => "Pythonプロジェクト",
1776 MessageKey::SmartCategorySourceCodeProject => "ソースコードプロジェクト",
1777 MessageKey::SmartCategoryGitManaged => "Git管理ディレクトリ",
1778 MessageKey::SmartCategoryLowPriority => "低優先度ディレクトリ",
1779
1780 MessageKey::SmartReasonSampling => "(サンプリング: {}ファイル, 高重要度: {}件, スコア: {})",
1782 MessageKey::SmartReasonScore => "(スコア: {})",
1783 MessageKey::SmartReasonSecurityDir => "認証情報・秘密鍵({}ディレクトリ、暗号化必須、スコア: 95)",
1784 MessageKey::SmartReasonLowPriorityDir => "キャッシュ/ログ/アーカイブ等 (ディレクトリ: {}, スコア: 20)",
1785
1786 MessageKey::ExcludeReasonNpmDeps => "npm/yarn依存関係(package.jsonから再生成可能)",
1788 MessageKey::ExcludeReasonRustBuild => "Rustビルド成果物(Cargo.tomlから再生成可能)",
1789 MessageKey::ExcludeReasonVendor => "依存関係ベンダリング(再生成可能)",
1790 MessageKey::ExcludeReasonPythonCache => "Pythonキャッシュ(自動生成)",
1791 MessageKey::ExcludeReasonPytestCache => "pytestキャッシュ(自動生成)",
1792 MessageKey::ExcludeReasonBuildArtifacts => "ビルド成果物ディレクトリ(再ビルド可能)",
1793 MessageKey::ExcludeReasonCacheDir => "キャッシュディレクトリ(一時データ)",
1794 MessageKey::ExcludeReasonGitMetadata => "Gitリポジトリメタデータ(リモートから復元可能)",
1795 MessageKey::ExcludeReasonSvnMetadata => "SVNリポジトリメタデータ(リモートから復元可能)",
1796 MessageKey::ExcludeReasonTempFile => "一時ファイル",
1797 MessageKey::ExcludeReasonBackupFile => "バックアップファイル(元ファイルがあれば不要)",
1798 MessageKey::ExcludeReasonEditorTemp => "エディタ一時ファイル",
1799 MessageKey::ExcludeReasonLogFile => "ログファイル(古いログは通常不要)",
1800 MessageKey::ExcludeReasonMacOsMetadata => "macOSメタデータファイル(自動生成)",
1801 MessageKey::ExcludeReasonWindowsThumb => "Windowsサムネイルキャッシュ(自動生成)",
1802 MessageKey::ExcludeReasonWindowsDesktop => "Windowsデスクトップ設定ファイル(自動生成)",
1803
1804 MessageKey::SmartDetectConfidenceLabel => "信頼度",
1806 MessageKey::SmartDetectDescriptionLabel => "説明",
1807 MessageKey::SmartDetectRecommendedActionLabel => "推奨アクション",
1808 MessageKey::SmartDetectAnalyzing => "過去{}日間のバックアップを分析中",
1809
1810 MessageKey::PasswordStrengthLabel => "パスワード強度:",
1812 MessageKey::PasswordStrengthWeak => "弱い",
1813 MessageKey::PasswordStrengthMedium => "普通",
1814 MessageKey::PasswordStrengthStrong => "強い",
1815 MessageKey::PasswordStrengthWeakMessage => {
1816 "このパスワードは攻撃に対して脆弱な可能性があります。より長く、多様な文字を含むパスワードの使用を検討してください。"
1817 }
1818 MessageKey::PasswordStrengthMediumMessage => {
1819 "このパスワードは中程度のセキュリティを提供します。特殊文字の追加や長さの延長で改善できます。"
1820 }
1821 MessageKey::PasswordStrengthStrongMessage => {
1822 "このパスワードは強力なセキュリティを提供します。"
1823 }
1824 MessageKey::PasswordStrengthTip => {
1825 "ヒント: --generate-password を使用すると強力なランダムパスワードを生成できます。"
1826 }
1827
1828 MessageKey::EditorLaunchFailed => "エディタ起動失敗: {}",
1830
1831 MessageKey::SubdirectoriesFound => "{}個のサブディレクトリを発見",
1833 MessageKey::ProgressEvaluating => "処理進捗 - 評価中: {:?}",
1834
1835 MessageKey::ConfirmBackupTitle => "📦 バックアップ実行確認",
1837 MessageKey::ConfirmBackupTargetFiles => "対象ファイル数: {} ファイル",
1838 MessageKey::ConfirmBackupDestination => "バックアップ先: {}",
1839
1840 MessageKey::ConfirmCleanupTitle => "🗑️ 古いバックアップの削除",
1842 MessageKey::ConfirmCleanupTargetCount => "削除対象: {} 個のバックアップ",
1843 MessageKey::ConfirmCleanupRetentionDays => "保持期間: {} 日",
1844
1845 MessageKey::CleanupDryRunScheduled => "🗑️ [ドライラン] 削除予定: {:?}",
1847 MessageKey::CleanupCompleted => "🗑️ 削除完了: {:?}",
1848 MessageKey::CleanupFailed => "削除失敗 {:?}: {}",
1849
1850 MessageKey::RestoreDryRunDetected => "📋 ドライランモード: {} ファイルを復元対象として検出",
1852 MessageKey::RestoreInProgress => "復元中...",
1853 MessageKey::RestoreProgressFile => "復元中: {:?}",
1854 MessageKey::RestoreIntegrityMetadataLoaded => "✓ 整合性メタデータ読み込み完了({} バックアップ)",
1855 MessageKey::RestoreCompleted => "✓ 復元完了",
1856 MessageKey::RestoreCompletedWithFailures => "⚠ 復元完了({}件失敗)",
1857
1858 MessageKey::ErrorRelativePathFailed => "相対パス取得失敗 {}: {}",
1860 MessageKey::ErrorPathTraversalDetected => "パストラバーサル検出 {}: {}",
1861 MessageKey::ErrorDirectoryCreateFailed => "ディレクトリ作成失敗 {}: {}",
1862 MessageKey::ErrorFileReadFailed => "ファイル読み込み失敗: {}",
1863 MessageKey::ErrorFileOpenFailedSymlink => "ファイルオープン失敗(シンボリックリンク攻撃の可能性): {}",
1864 MessageKey::ErrorEncryptedButNoPassword => "暗号化ファイルですがパスワード未指定: {}",
1865 MessageKey::ErrorMasterKeyRestoreFailed => "マスターキー復元失敗: {}",
1866 MessageKey::ErrorDecryptionFailed => "復号化失敗 {}: {}",
1867 MessageKey::ErrorIntegrityVerificationFailed => "⚠ 整合性検証失敗(ファイル改ざんの可能性): {}",
1868 MessageKey::ErrorFileWriteFailed => "ファイル書き込み失敗 {}: {}",
1869 MessageKey::ErrorFileCountFailed => "{}ファイルでエラー発生",
1870
1871 MessageKey::BackupProgressProcessing => "処理中: {:?}",
1873 MessageKey::ErrorBackupDirectoryCreateFailed => "ディレクトリ作成失敗 {}: {}",
1874 MessageKey::ErrorBackupWriteFailed => "書き込み失敗 {}: {}",
1875 MessageKey::ErrorBackupProcessFailed => "処理失敗 {}: {}",
1876 MessageKey::ErrorBackupCopyFailed => "コピー失敗 {}: {}",
1877 }
1878 }
1879
1880 fn get_zh_cn(&self) -> &'static str {
1882 match self {
1883 MessageKey::SmartCommands => "🤖 Smart命令",
1885 MessageKey::DescSmart => "AI驱动的智能备份管理",
1886 MessageKey::CmdSmartDetect => "detect",
1887 MessageKey::CmdSmartAnalyze => "analyze",
1888 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
1889 MessageKey::CmdSmartAutoConfigure => "auto-configure",
1890 MessageKey::DescSmartDetect => "检测备份历史中的异常",
1891 MessageKey::DescSmartAnalyze => "分析文件重要性",
1892 MessageKey::DescSmartSuggestExclude => "建议排除模式",
1893 MessageKey::DescSmartAutoConfigure => "使用Smart规则自动配置备份设置",
1894 MessageKey::SmartDetectTitle => "🤖 Smart异常检测",
1895 MessageKey::SmartDetectNoAnomalies => "备份历史中未检测到异常",
1896 MessageKey::SmartDetectAnomalyFound => "检测到异常",
1897 MessageKey::SmartAnalyzeTitle => "🤖 Smart文件重要性分析",
1898 MessageKey::SmartAnalyzeImportanceHigh => "重要性:高",
1899 MessageKey::SmartAnalyzeImportanceMedium => "重要性:中",
1900 MessageKey::SmartAnalyzeImportanceLow => "重要性:低",
1901 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart排除模式建议",
1902 MessageKey::SmartSuggestExcludeRecommendation => "建议排除",
1903 MessageKey::SmartAutoConfigureTitle => "🤖 Smart自动配置",
1904 MessageKey::SmartAutoConfigureSuccess => "自动配置成功完成",
1905 MessageKey::SmartDryRunModeLabel => "演习模式",
1906 MessageKey::PathValidationFailed => "路径验证失败",
1907 MessageKey::PathSafetyValidationFailed => "路径安全性验证失败",
1908 MessageKey::SmartExampleMaxDepthComment => "# 指定子目录探索深度(最多2层)",
1909 MessageKey::SmartExampleMaxSubdirsComment => {
1910 "# 指定要处理的子目录最大数(默认:100)"
1911 }
1912 MessageKey::SmartExampleIncreaseSubdirsComment => "# 大量子目录时增加处理数上限",
1913 MessageKey::SmartAutoConfigureFeaturesHeader => "auto-configure 功能",
1914 MessageKey::SmartFeatureEvaluateSubdirs => "针对每个子目录单独评估重要性",
1915 MessageKey::SmartFeatureAutoDetectExclusions => {
1916 "自动检测排除模式(node_modules, target, .cache等)"
1917 }
1918 MessageKey::SmartFeatureHighConfidencePatterns => "仅应用信心度80%以上的模式",
1919 MessageKey::SmartFeatureAutoDetectProjectTypes => {
1920 "自动检测项目类型(Rust, Node.js, Python等)"
1921 }
1922 MessageKey::NoSubdirectoriesFound => "未找到子目录",
1923 MessageKey::SubdirLimitReached => "已达上限,部分子目录未处理",
1924 MessageKey::SubdirLimitChangeHint => "可修改",
1925 MessageKey::SkippingExcludeAnalysisLarge => "目录过大,跳过排除模式分析",
1926 MessageKey::FilesUnit => "个文件",
1927 MessageKey::AddToExcludeListPrompt => "添加到排除列表?",
1928 MessageKey::SmartRecommendsAddPrompt => "Smart推荐:添加 {:?}(优先级:{:?})?",
1929 MessageKey::ExcludePatternsLabel => "排除模式",
1930 MessageKey::AnalysisFailedLabel => "分析失败",
1931 MessageKey::SmartErrorNotEnabled => "Smart功能未启用。请使用 --features smart 编译",
1932 MessageKey::SmartErrorInsufficientData => "Smart分析数据不足",
1933 MessageKey::SmartErrorInsufficientDataDetailed => {
1934 "数据不足(至少需要3条记录,只找到{}条)"
1935 }
1936 MessageKey::SmartErrorAnalysisFailed => "Smart分析失败",
1937 MessageKey::SmartErrorAnalysisLabel => "分析错误",
1938 MessageKey::HelpLabel => "帮助",
1939 MessageKey::ExampleSmartDetect => "# 检测最近7天的异常",
1940 MessageKey::ExampleSmartAnalyze => "# 分析文件重要性",
1941 MessageKey::ExampleSmartSuggestExclude => "# 获取Smart排除建议",
1942 MessageKey::ExampleSmartAutoConfigureComment => {
1943 "# Smart自动配置(单独评估子目录并自动排除)"
1944 }
1945 MessageKey::ExampleSmartDryRunComment => "# 演习模式(仅显示建议)",
1946 MessageKey::ExampleSmartInteractiveComment => "# 交互模式(确认每个子目录和排除模式)",
1947 MessageKey::SmartRecommendedCommandLabel => "推荐命令",
1948 MessageKey::SmartNoExclusionsRecommended => "无排除建议(已优化)",
1949 MessageKey::SmartAddToExcludeListPrompt => "添加到排除列表?",
1950 MessageKey::SmartReductionLabel => "预计减少",
1951 MessageKey::SmartAddedLabel => "已添加",
1952 MessageKey::SmartAutoConfigureErrorNoPath => "错误:请指定要分析的路径",
1953 MessageKey::SmartAutoConfigureUsageExamples => "示例:\n backup-suite smart auto-configure ~/projects\n backup-suite smart auto-configure ~/Documents ~/projects --dry-run\n backup-suite smart auto-configure ~/projects --interactive",
1954 MessageKey::RustFastTypeSafe => "AES-256加密 & Smart分析功能的智能备份",
1955
1956 MessageKey::Added => "已添加",
1958 MessageKey::Removed => "已删除",
1959 MessageKey::Deleted => "已删除",
1960 MessageKey::Error => "错误",
1961 MessageKey::Warning => "⚠️",
1962 MessageKey::BackupRunning => "🚀 正在备份",
1963 MessageKey::RestoreStarting => "🔄 开始恢复",
1964
1965 MessageKey::EncryptionPassword => "加密密码",
1967 MessageKey::SavePasswordSecurely => "⚠️ 请安全保存此密码!",
1968 MessageKey::EncryptOption => "--encrypt: AES-256-GCM加密",
1969 MessageKey::CompressOption => "--compress zstd/gzip: 压缩",
1970 MessageKey::CompressLevel => "--compress-level 1-22: 压缩级别",
1971
1972 MessageKey::IncrementalOption => "--incremental: 增量备份(仅变更文件)",
1974 MessageKey::GeneratePasswordOption => "--generate-password: 自动生成安全密码",
1975 MessageKey::PasswordOption => "--password <密码>: 指定加密密码",
1976 MessageKey::DryRunOption => "--dry-run: 演习模式(不实际备份)",
1977 MessageKey::PriorityOption => "--priority <优先级>: 按优先级过滤 (high/medium/low)",
1978 MessageKey::CategoryOption => "--category <类别>: 按类别过滤",
1979
1980 MessageKey::FromOption => "--from <备份名称>: 要恢复的备份",
1982 MessageKey::ToOption => "--to <目标路径>: 恢复目标路径",
1983 MessageKey::RestorePasswordOption => "--password <密码>: 解密密码(如已加密)",
1984
1985 MessageKey::NoTargetsRegistered => "未注册备份目标",
1987 MessageKey::SelectionCancelled => "选择已取消",
1988 MessageKey::ConfirmClearAll => "⚠️ 警告:删除所有 {} 个备份目标。确定吗?",
1989 MessageKey::ConfirmClearPriority => "⚠️ 警告:删除 {count} 个{priority}优先级备份目标。确定吗?",
1990 MessageKey::NoPriorityTargets => "未找到指定优先级的备份目标",
1991 MessageKey::ConfirmCleanup => "删除 {} 天之前的旧备份。确定吗?",
1992 MessageKey::DaysOutOfRange => "days 必须在 1-3650 范围内(指定值:{})",
1993 MessageKey::PathNotExists => "路径不存在",
1994 MessageKey::NotInBackupConfig => "未在备份配置中注册",
1995 MessageKey::SpecifyPriorityOrAll => "请指定 --priority 或 --all",
1996 MessageKey::CountDeleted => "已删除",
1997 MessageKey::DryRun => "演习模式",
1998 MessageKey::Category => "类别",
1999 MessageKey::Encryption => "加密",
2000 MessageKey::Compression => "压缩",
2001 MessageKey::ErrorDetails => "错误详情",
2002 MessageKey::Detected => "检测到",
2003 MessageKey::Files => "文件",
2004 MessageKey::Days => "天",
2005 MessageKey::DryRunParens => "(演习模式)",
2006 MessageKey::DaysUnit => "天",
2007
2008 MessageKey::UsageExamples => "使用示例:",
2010
2011 MessageKey::FilesDetected => "检测到文件",
2013 MessageKey::FullBackupMode => "📦 完全备份模式(所有文件)",
2014 MessageKey::IncrementalBackupMode => "📦 增量备份模式(仅变更文件)",
2015 MessageKey::BackupComplete => "✓ 备份完成",
2016 MessageKey::BackupCompleteWithFailures => "⚠ 备份完成(有失败)",
2017 MessageKey::BackupResultTitle => "📈 备份结果",
2018 MessageKey::TotalFilesLabel => "总文件数",
2019 MessageKey::SuccessfulLabel => "成功",
2020 MessageKey::FailedLabel => "失败",
2021 MessageKey::TotalSizeLabel => "总大小",
2022
2023 MessageKey::ConfirmRemoveTarget => "确定要从备份目标中删除 {} 吗?",
2025 MessageKey::UpdatedTarget => "已更新备份目标",
2026 MessageKey::PathLabel => "路径",
2027 MessageKey::PriorityLabel => "优先级",
2028 MessageKey::CategoryLabel => "类别",
2029
2030 MessageKey::ItemLabel => "项目",
2032 MessageKey::ValueLabel => "值",
2033 MessageKey::ImportanceScoreLabel => "重要性分数",
2034 MessageKey::RecommendedPriorityLabel => "推荐优先级",
2035 MessageKey::ReasonLabel => "原因",
2036
2037 MessageKey::AnalyzingLabel => "分析中",
2039 MessageKey::AddedToConfiguration => "已添加到配置",
2040 MessageKey::ItemsAdded => "已添加项目",
2041 MessageKey::ExistingBackupTargets => "您现有{}个备份目标",
2042 MessageKey::AddNewTargets => "添加新目标?",
2043
2044 MessageKey::TimestampLabel => "时间",
2046 MessageKey::PathHistoryLabel => "路径",
2047 MessageKey::StatusHistoryLabel => "状态",
2048 MessageKey::FilesHistoryLabel => "文件数",
2049 MessageKey::SizeLabel => "大小",
2050 MessageKey::CompressionLabel => "压缩",
2051 MessageKey::EncryptionLabel => "加密",
2052 MessageKey::DurationLabel => "处理时间",
2053 MessageKey::EnabledLabel => "已启用",
2054 MessageKey::SecondsUnit => "秒",
2055
2056 MessageKey::StatisticsTitle => "📈 统计信息",
2058 MessageKey::DiskUsageTitle => "💾 磁盘使用量",
2059 MessageKey::AllNormalStatus => "⚡ 一切正常",
2060 MessageKey::WarningsTitle => "⚠️ 警告·注意事项",
2061
2062 MessageKey::PreviousBackupLabel => "上次备份",
2064 MessageKey::ChangedFilesLabel => "变更文件数",
2065 MessageKey::NoBackupsFound => "ℹ️ 未找到上次备份。执行完全备份。",
2066 MessageKey::FullBackupFallback => "⚠️ 加载元数据失败。回退到完全备份。",
2067 MessageKey::MetadataLoadFailed => " 详情",
2068 MessageKey::DryRunMode => "📋 演习模式: 检测到 {} 个文件待备份",
2069
2070 MessageKey::TotalTargetsLabel => "总目标数",
2072 MessageKey::HighPriorityTargetsLabel => " 高优先级",
2073 MessageKey::MediumPriorityTargetsLabel => " 中优先级",
2074 MessageKey::LowPriorityTargetsLabel => " 低优先级",
2075 MessageKey::TotalBackupsLabel => "总备份次数",
2076 MessageKey::SuccessCountLabel => " 成功",
2077 MessageKey::TotalFilesCountLabel => "总文件数",
2078 MessageKey::TotalDataSizeLabel => "总数据大小",
2079 MessageKey::LastBackupLabel => "最后备份",
2080 MessageKey::EncryptedBackupsLabel => "加密备份",
2081 MessageKey::CompressedBackupsLabel => "压缩备份",
2082 MessageKey::BackupDirectoryLabel => "备份目录",
2083 MessageKey::UsedCapacityLabel => "已用容量",
2084 MessageKey::FileCountLabel => "文件数",
2085 MessageKey::DiskTotalCapacityLabel => "磁盘总容量",
2086 MessageKey::DiskFreeCapacityLabel => "磁盘可用容量",
2087 MessageKey::DiskUsageRateLabel => "磁盘使用率",
2088 MessageKey::UsageStatusLabel => "使用状态",
2089 MessageKey::RecentBackupsTitle => "🕒 最近备份(最新5次)",
2090
2091 MessageKey::ScheduleHeaderLabel => "计划",
2093 MessageKey::ConfigurationLabel => "配置",
2094
2095 MessageKey::DaysAgo => "{}天前",
2097 MessageKey::HoursAgo => "{}小时前",
2098 MessageKey::MinutesAgo => "{}分钟前",
2099 MessageKey::JustNow => "刚刚",
2100 MessageKey::NotYetBackedUp => "尚未执行",
2101
2102 MessageKey::WarningTargetNotExists => "备份目标不存在: {}",
2104 MessageKey::WarningDaysSinceLastBackup => "距离上次备份已过去{}天",
2105 MessageKey::WarningNoBackupYet => "尚未执行过备份",
2106 MessageKey::WarningFailedBackups => "有{}个失败的备份",
2107 MessageKey::WarningLowDiskSpace => "磁盘空间不足 ({:.1}%)",
2108 MessageKey::DashboardHintRunBackup => "💡 提示: 运行 'backup-suite run' 执行备份",
2109
2110 MessageKey::PromptPleaseSelect => "请选择",
2112 MessageKey::PromptDeleteBackup => "确定要删除此备份吗?",
2113 MessageKey::PromptDeleteOldBackups => "🗑️ 删除旧备份",
2114 MessageKey::PromptDeleteTarget => "删除目标: {} 个备份",
2115 MessageKey::PromptDeleteCount => "个",
2116 MessageKey::PromptConfirmDelete => "确定要执行删除吗?",
2117 MessageKey::PromptSelectPriority => "选择优先级",
2118 MessageKey::PromptBackupConfirm => "确定要执行备份吗?",
2119 MessageKey::PromptSelectTarget => "选择要删除的备份目标",
2120 MessageKey::PromptSelectFile => "选择要添加的文件/目录: ",
2121
2122 MessageKey::SmartCategoryDirectory => "目录",
2124 MessageKey::SmartCategoryRustProject => "Rust项目",
2125 MessageKey::SmartCategoryNodeJsProject => "Node.js项目",
2126 MessageKey::SmartCategoryPythonProject => "Python项目",
2127 MessageKey::SmartCategorySourceCodeProject => "源代码项目",
2128 MessageKey::SmartCategoryGitManaged => "Git管理目录",
2129 MessageKey::SmartCategoryLowPriority => "低优先级目录",
2130
2131 MessageKey::SmartReasonSampling => "(采样: {}文件, 高重要性: {}个, 分数: {})",
2133 MessageKey::SmartReasonScore => "(分数: {})",
2134 MessageKey::SmartReasonSecurityDir => "凭证/密钥({}目录,需要加密,分数: 95)",
2135 MessageKey::SmartReasonLowPriorityDir => "缓存/日志/存档等 (目录: {}, 分数: 20)",
2136
2137 MessageKey::ExcludeReasonNpmDeps => "npm/yarn依赖(可从package.json重新生成)",
2139 MessageKey::ExcludeReasonRustBuild => "Rust构建产物(可从Cargo.toml重新生成)",
2140 MessageKey::ExcludeReasonVendor => "依赖供应(可重新生成)",
2141 MessageKey::ExcludeReasonPythonCache => "Python缓存(自动生成)",
2142 MessageKey::ExcludeReasonPytestCache => "pytest缓存(自动生成)",
2143 MessageKey::ExcludeReasonBuildArtifacts => "构建产物目录(可重新构建)",
2144 MessageKey::ExcludeReasonCacheDir => "缓存目录(临时数据)",
2145 MessageKey::ExcludeReasonGitMetadata => "Git仓库元数据(可从远程恢复)",
2146 MessageKey::ExcludeReasonSvnMetadata => "SVN仓库元数据(可从远程恢复)",
2147 MessageKey::ExcludeReasonTempFile => "临时文件",
2148 MessageKey::ExcludeReasonBackupFile => "备份文件(如果原文件存在则不需要)",
2149 MessageKey::ExcludeReasonEditorTemp => "编辑器临时文件",
2150 MessageKey::ExcludeReasonLogFile => "日志文件(旧日志通常不需要)",
2151 MessageKey::ExcludeReasonMacOsMetadata => "macOS元数据文件(自动生成)",
2152 MessageKey::ExcludeReasonWindowsThumb => "Windows缩略图缓存(自动生成)",
2153 MessageKey::ExcludeReasonWindowsDesktop => "Windows桌面设置文件(自动生成)",
2154
2155 MessageKey::SmartDetectConfidenceLabel => "信心度",
2157 MessageKey::SmartDetectDescriptionLabel => "描述",
2158 MessageKey::SmartDetectRecommendedActionLabel => "推荐操作",
2159 MessageKey::SmartDetectAnalyzing => "分析过去{}天的备份",
2160
2161 MessageKey::PasswordStrengthLabel => "密码强度:",
2163 MessageKey::PasswordStrengthWeak => "弱",
2164 MessageKey::PasswordStrengthMedium => "中等",
2165 MessageKey::PasswordStrengthStrong => "强",
2166 MessageKey::PasswordStrengthWeakMessage => {
2167 "此密码可能容易受到攻击。建议使用更长且包含多种字符的密码。"
2168 }
2169 MessageKey::PasswordStrengthMediumMessage => {
2170 "此密码提供中等安全性。添加特殊字符或增加长度可以改善。"
2171 }
2172 MessageKey::PasswordStrengthStrongMessage => "此密码提供强大的安全性。",
2173 MessageKey::PasswordStrengthTip => "提示: 使用 --generate-password 生成强随机密码。",
2174
2175 MessageKey::EditorLaunchFailed => "启动编辑器失败: {}",
2177
2178 MessageKey::SubdirectoriesFound => "发现{}个子目录",
2180 MessageKey::ProgressEvaluating => "处理进度 - 评估中: {:?}",
2181
2182 MessageKey::ConfirmBackupTitle => "📦 备份执行确认",
2184 MessageKey::ConfirmBackupTargetFiles => "目标文件数: {} 文件",
2185 MessageKey::ConfirmBackupDestination => "备份目标: {}",
2186
2187 MessageKey::ConfirmCleanupTitle => "🗑️ 删除旧备份",
2189 MessageKey::ConfirmCleanupTargetCount => "删除目标: {} 个备份",
2190 MessageKey::ConfirmCleanupRetentionDays => "保留期限: {} 天",
2191
2192 MessageKey::CleanupDryRunScheduled => "🗑️ [演习模式] 计划删除: {:?}",
2194 MessageKey::CleanupCompleted => "🗑️ 删除完成: {:?}",
2195 MessageKey::CleanupFailed => "删除失败 {:?}: {}",
2196
2197 MessageKey::RestoreDryRunDetected => "📋 演习模式: 检测到 {} 个文件待还原",
2199 MessageKey::RestoreInProgress => "还原中...",
2200 MessageKey::RestoreProgressFile => "还原中: {:?}",
2201 MessageKey::RestoreIntegrityMetadataLoaded => "✓ 完整性元数据已加载({} 个备份)",
2202 MessageKey::RestoreCompleted => "✓ 还原完成",
2203 MessageKey::RestoreCompletedWithFailures => "⚠ 还原完成({}个失败)",
2204
2205 MessageKey::ErrorRelativePathFailed => "获取相对路径失败 {}: {}",
2207 MessageKey::ErrorPathTraversalDetected => "检测到路径遍历 {}: {}",
2208 MessageKey::ErrorDirectoryCreateFailed => "创建目录失败 {}: {}",
2209 MessageKey::ErrorFileReadFailed => "读取文件失败: {}",
2210 MessageKey::ErrorFileOpenFailedSymlink => "打开文件失败(可能是符号链接攻击): {}",
2211 MessageKey::ErrorEncryptedButNoPassword => "加密文件但未指定密码: {}",
2212 MessageKey::ErrorMasterKeyRestoreFailed => "恢复主密钥失败: {}",
2213 MessageKey::ErrorDecryptionFailed => "解密失败 {}: {}",
2214 MessageKey::ErrorIntegrityVerificationFailed => {
2215 "⚠ 完整性验证失败(文件可能被篡改): {}"
2216 }
2217 MessageKey::ErrorFileWriteFailed => "写入文件失败 {}: {}",
2218 MessageKey::ErrorFileCountFailed => "{}个文件发生错误",
2219
2220 MessageKey::BackupProgressProcessing => "处理中: {:?}",
2222 MessageKey::ErrorBackupDirectoryCreateFailed => "创建目录失败 {}: {}",
2223 MessageKey::ErrorBackupWriteFailed => "写入失败 {}: {}",
2224 MessageKey::ErrorBackupProcessFailed => "处理失败 {}: {}",
2225 MessageKey::ErrorBackupCopyFailed => "复制失败 {}: {}",
2226
2227 MessageKey::NoBackups => "无备份",
2229 MessageKey::RestoreStart => "开始恢复",
2230 MessageKey::Restoring => "恢复中...",
2231 MessageKey::RestoredSuccess => "成功恢复备份到",
2232 MessageKey::RestoredFileCount => "恢复文件数:",
2233 MessageKey::BackupHistory => "备份历史",
2234 MessageKey::ActualScheduleStatus => "实际调度状态",
2235 MessageKey::Enabled => "已启用",
2236 MessageKey::Disabled => "已禁用",
2237 MessageKey::ScheduleSettings => "调度设置",
2238 MessageKey::ScheduleUpdated => "调度已更新并应用",
2239 MessageKey::ScheduleUpdatedEnableLater => {
2240 "调度设置已更新(使用 'schedule enable' 启用)"
2241 }
2242 MessageKey::HighPriority => "高优先级",
2243 MessageKey::MediumPriority => "中优先级",
2244 MessageKey::LowPriority => "低优先级",
2245 MessageKey::CurrentDestination => "当前备份目标",
2246 MessageKey::DestinationChanged => "备份目标已更改",
2247 MessageKey::Before => "之前",
2248 MessageKey::After => "之后",
2249 MessageKey::KeepDaysOutOfRange => "keep_days 必须在 1-3650 之间(指定值:",
2250 MessageKey::KeepDaysChanged => "备份保留期限已更改",
2251 MessageKey::CurrentKeepDays => "当前备份保留期限",
2252 MessageKey::OpeningConfigFile => "打开配置文件",
2253 MessageKey::EditorDidNotExitCleanly => "编辑器未正常退出",
2254 MessageKey::AutoBackupEnabled => "已启用自动备份",
2255 MessageKey::AutoBackupDisabled => "已禁用自动备份",
2256
2257 _ => self.get_en(), }
2260 }
2261
2262 fn get_zh_tw(&self) -> &'static str {
2264 match self {
2265 MessageKey::SmartCommands => "🤖 Smart指令",
2267 MessageKey::DescSmart => "AI驅動的智慧備份管理",
2268 MessageKey::CmdSmartDetect => "detect",
2269 MessageKey::CmdSmartAnalyze => "analyze",
2270 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
2271 MessageKey::CmdSmartAutoConfigure => "auto-configure",
2272 MessageKey::DescSmartDetect => "偵測備份歷史中的異常",
2273 MessageKey::DescSmartAnalyze => "分析檔案重要性",
2274 MessageKey::DescSmartSuggestExclude => "建議排除模式",
2275 MessageKey::DescSmartAutoConfigure => "使用Smart規則自動設定備份",
2276 MessageKey::SmartDetectTitle => "🤖 Smart異常偵測",
2277 MessageKey::SmartDetectNoAnomalies => "備份歷史中未偵測到異常",
2278 MessageKey::SmartDetectAnomalyFound => "偵測到異常",
2279 MessageKey::SmartAnalyzeTitle => "🤖 Smart檔案重要性分析",
2280 MessageKey::SmartAnalyzeImportanceHigh => "重要性:高",
2281 MessageKey::SmartAnalyzeImportanceMedium => "重要性:中",
2282 MessageKey::SmartAnalyzeImportanceLow => "重要性:低",
2283 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart排除模式建議",
2284 MessageKey::SmartSuggestExcludeRecommendation => "建議排除",
2285 MessageKey::SmartAutoConfigureTitle => "🤖 Smart自動設定",
2286 MessageKey::SmartAutoConfigureSuccess => "自動設定成功完成",
2287 MessageKey::SmartDryRunModeLabel => "演習模式",
2288 MessageKey::PathValidationFailed => "路徑驗證失敗",
2289 MessageKey::PathSafetyValidationFailed => "路徑安全性驗證失敗",
2290 MessageKey::SmartExampleMaxDepthComment => "# 指定子目錄探索深度(最多2層)",
2291 MessageKey::SmartExampleMaxSubdirsComment => {
2292 "# 指定要處理的子目錄最大數(預設:100)"
2293 }
2294 MessageKey::SmartExampleIncreaseSubdirsComment => "# 大量子目錄時增加處理數上限",
2295 MessageKey::SmartAutoConfigureFeaturesHeader => "auto-configure 功能",
2296 MessageKey::SmartFeatureEvaluateSubdirs => "針對每個子目錄單獨評估重要性",
2297 MessageKey::SmartFeatureAutoDetectExclusions => {
2298 "自動檢測排除模式(node_modules, target, .cache等)"
2299 }
2300 MessageKey::SmartFeatureHighConfidencePatterns => "僅應用信心度80%以上的模式",
2301 MessageKey::SmartFeatureAutoDetectProjectTypes => {
2302 "自動檢測項目類型(Rust, Node.js, Python等)"
2303 }
2304 MessageKey::NoSubdirectoriesFound => "未找到子目錄",
2305 MessageKey::SubdirLimitReached => "已達上限,部分子目錄未處理",
2306 MessageKey::SubdirLimitChangeHint => "可修改",
2307 MessageKey::SkippingExcludeAnalysisLarge => "目錄過大,跳過排除模式分析",
2308 MessageKey::FilesUnit => "個檔案",
2309 MessageKey::AddToExcludeListPrompt => "添加到排除列表?",
2310 MessageKey::SmartRecommendsAddPrompt => "Smart推薦:添加 {:?}(優先級:{:?})?",
2311 MessageKey::ExcludePatternsLabel => "排除模式",
2312 MessageKey::AnalysisFailedLabel => "分析失敗",
2313 MessageKey::SmartErrorNotEnabled => "Smart功能未啟用。請使用 --features smart 編譯",
2314 MessageKey::SmartErrorInsufficientData => "Smart分析資料不足",
2315 MessageKey::SmartErrorInsufficientDataDetailed => {
2316 "資料不足(至少需要3筆記錄,只找到{}筆)"
2317 }
2318 MessageKey::SmartErrorAnalysisFailed => "Smart分析失敗",
2319 MessageKey::SmartErrorAnalysisLabel => "分析錯誤",
2320 MessageKey::HelpLabel => "說明",
2321 MessageKey::ExampleSmartDetect => "# 偵測最近7天的異常",
2322 MessageKey::ExampleSmartAnalyze => "# 分析檔案重要性",
2323 MessageKey::ExampleSmartSuggestExclude => "# 取得Smart排除建議",
2324 MessageKey::ExampleSmartAutoConfigureComment => {
2325 "# Smart自動設定(單獨評估子目錄並自動排除)"
2326 }
2327 MessageKey::ExampleSmartDryRunComment => "# 演習模式(僅顯示建議)",
2328 MessageKey::ExampleSmartInteractiveComment => "# 交互模式(確認每個子目錄和排除模式)",
2329 MessageKey::SmartRecommendedCommandLabel => "推薦指令",
2330 MessageKey::SmartNoExclusionsRecommended => "無排除建議(已最佳化)",
2331 MessageKey::SmartAddToExcludeListPrompt => "加入至排除清單?",
2332 MessageKey::SmartReductionLabel => "預計減少",
2333 MessageKey::SmartAddedLabel => "已加入",
2334 MessageKey::SmartAutoConfigureErrorNoPath => "錯誤:請指定要分析的路徑",
2335 MessageKey::SmartAutoConfigureUsageExamples => "範例:\n backup-suite smart auto-configure ~/projects\n backup-suite smart auto-configure ~/Documents ~/projects --dry-run\n backup-suite smart auto-configure ~/projects --interactive",
2336 MessageKey::RustFastTypeSafe => "AES-256加密 & Smart分析功能的智慧備份",
2337
2338 MessageKey::Added => "已加入",
2340 MessageKey::Removed => "已刪除",
2341 MessageKey::Deleted => "已刪除",
2342 MessageKey::Error => "錯誤",
2343 MessageKey::Warning => "⚠️",
2344 MessageKey::BackupRunning => "🚀 正在備份",
2345 MessageKey::RestoreStarting => "🔄 開始還原",
2346
2347 MessageKey::EncryptionPassword => "加密密碼",
2349 MessageKey::SavePasswordSecurely => "⚠️ 請安全儲存此密碼!",
2350 MessageKey::EncryptOption => "--encrypt: AES-256-GCM加密",
2351 MessageKey::CompressOption => "--compress zstd/gzip: 壓縮",
2352 MessageKey::CompressLevel => "--compress-level 1-22: 壓縮級別",
2353
2354 MessageKey::IncrementalOption => "--incremental: 增量備份(僅變更檔案)",
2356 MessageKey::GeneratePasswordOption => "--generate-password: 自動生成安全密碼",
2357 MessageKey::PasswordOption => "--password <密碼>: 指定加密密碼",
2358 MessageKey::DryRunOption => "--dry-run: 演習模式(不實際備份)",
2359 MessageKey::PriorityOption => "--priority <優先級>: 按優先級過濾 (high/medium/low)",
2360 MessageKey::CategoryOption => "--category <類別>: 按類別過濾",
2361
2362 MessageKey::FromOption => "--from <備份名稱>: 要還原的備份",
2364 MessageKey::ToOption => "--to <目標路徑>: 還原目標路徑",
2365 MessageKey::RestorePasswordOption => "--password <密碼>: 解密密碼(如已加密)",
2366
2367 MessageKey::NoTargetsRegistered => "未註冊備份目標",
2369 MessageKey::SelectionCancelled => "選擇已取消",
2370 MessageKey::ConfirmClearAll => "⚠️ 警告:刪除所有 {} 個備份目標。確定嗎?",
2371 MessageKey::ConfirmClearPriority => "⚠️ 警告:刪除 {count} 個{priority}優先級備份目標。確定嗎?",
2372 MessageKey::NoPriorityTargets => "未找到指定優先級的備份目標",
2373 MessageKey::ConfirmCleanup => "刪除 {} 天之前的舊備份。確定嗎?",
2374 MessageKey::DaysOutOfRange => "days 必須在 1-3650 範圍內(指定值:{})",
2375 MessageKey::PathNotExists => "路徑不存在",
2376 MessageKey::NotInBackupConfig => "未在備份設定中註冊",
2377 MessageKey::SpecifyPriorityOrAll => "請指定 --priority 或 --all",
2378 MessageKey::CountDeleted => "已刪除",
2379 MessageKey::DryRun => "演習模式",
2380 MessageKey::Category => "類別",
2381 MessageKey::Encryption => "加密",
2382 MessageKey::Compression => "壓縮",
2383 MessageKey::ErrorDetails => "錯誤詳情",
2384 MessageKey::Detected => "檢測到",
2385 MessageKey::Files => "檔案",
2386 MessageKey::Days => "天",
2387 MessageKey::DryRunParens => "(演習模式)",
2388 MessageKey::DaysUnit => "天",
2389
2390 MessageKey::UsageExamples => "使用範例:",
2392
2393 MessageKey::FilesDetected => "檢測到檔案",
2395 MessageKey::FullBackupMode => "📦 完全備份模式(所有檔案)",
2396 MessageKey::IncrementalBackupMode => "📦 增量備份模式(僅變更檔案)",
2397 MessageKey::BackupComplete => "✓ 備份完成",
2398 MessageKey::BackupCompleteWithFailures => "⚠ 備份完成(有失敗)",
2399 MessageKey::BackupResultTitle => "📈 備份結果",
2400 MessageKey::TotalFilesLabel => "總檔案數",
2401 MessageKey::SuccessfulLabel => "成功",
2402 MessageKey::FailedLabel => "失敗",
2403 MessageKey::TotalSizeLabel => "總大小",
2404
2405 MessageKey::ConfirmRemoveTarget => "確定要從備份目標中刪除 {} 嗎?",
2407 MessageKey::UpdatedTarget => "已更新備份目標",
2408 MessageKey::PathLabel => "路徑",
2409 MessageKey::PriorityLabel => "優先級",
2410 MessageKey::CategoryLabel => "類別",
2411
2412 MessageKey::ItemLabel => "項目",
2414 MessageKey::ValueLabel => "值",
2415 MessageKey::ImportanceScoreLabel => "重要性分數",
2416 MessageKey::RecommendedPriorityLabel => "推薦優先級",
2417 MessageKey::ReasonLabel => "原因",
2418
2419 MessageKey::AnalyzingLabel => "分析中",
2421 MessageKey::AddedToConfiguration => "已加入至設定",
2422 MessageKey::ItemsAdded => "已加入項目",
2423 MessageKey::ExistingBackupTargets => "您現有{}個備份目標",
2424 MessageKey::AddNewTargets => "加入新目標?",
2425
2426 MessageKey::TimestampLabel => "時間",
2428 MessageKey::PathHistoryLabel => "路徑",
2429 MessageKey::StatusHistoryLabel => "狀態",
2430 MessageKey::FilesHistoryLabel => "檔案數",
2431 MessageKey::SizeLabel => "大小",
2432 MessageKey::CompressionLabel => "壓縮",
2433 MessageKey::EncryptionLabel => "加密",
2434 MessageKey::DurationLabel => "處理時間",
2435 MessageKey::EnabledLabel => "已啟用",
2436 MessageKey::SecondsUnit => "秒",
2437
2438 MessageKey::StatisticsTitle => "📈 統計資訊",
2440 MessageKey::DiskUsageTitle => "💾 磁碟使用量",
2441 MessageKey::AllNormalStatus => "⚡ 一切正常",
2442 MessageKey::WarningsTitle => "⚠️ 警告·注意事項",
2443
2444 MessageKey::PreviousBackupLabel => "上次備份",
2446 MessageKey::ChangedFilesLabel => "變更檔案數",
2447 MessageKey::NoBackupsFound => "ℹ️ 未找到上次備份。執行完全備份。",
2448 MessageKey::FullBackupFallback => "⚠️ 載入元數據失敗。回退到完全備份。",
2449 MessageKey::MetadataLoadFailed => " 詳情",
2450 MessageKey::DryRunMode => "📋 演習模式: 檢測到 {} 個檔案待備份",
2451
2452 MessageKey::TotalTargetsLabel => "總目標數",
2454 MessageKey::HighPriorityTargetsLabel => " 高優先級",
2455 MessageKey::MediumPriorityTargetsLabel => " 中優先級",
2456 MessageKey::LowPriorityTargetsLabel => " 低優先級",
2457 MessageKey::TotalBackupsLabel => "總備份次數",
2458 MessageKey::SuccessCountLabel => " 成功",
2459 MessageKey::TotalFilesCountLabel => "總檔案數",
2460 MessageKey::TotalDataSizeLabel => "總資料大小",
2461 MessageKey::LastBackupLabel => "最後備份",
2462 MessageKey::EncryptedBackupsLabel => "加密備份",
2463 MessageKey::CompressedBackupsLabel => "壓縮備份",
2464 MessageKey::BackupDirectoryLabel => "備份目錄",
2465 MessageKey::UsedCapacityLabel => "已用容量",
2466 MessageKey::FileCountLabel => "檔案數",
2467 MessageKey::DiskTotalCapacityLabel => "磁碟總容量",
2468 MessageKey::DiskFreeCapacityLabel => "磁碟可用容量",
2469 MessageKey::DiskUsageRateLabel => "磁碟使用率",
2470 MessageKey::UsageStatusLabel => "使用狀態",
2471 MessageKey::RecentBackupsTitle => "🕒 最近備份(最新5次)",
2472
2473 MessageKey::ScheduleHeaderLabel => "計劃",
2475 MessageKey::ConfigurationLabel => "配置",
2476
2477 MessageKey::DaysAgo => "{}天前",
2479 MessageKey::HoursAgo => "{}小時前",
2480 MessageKey::MinutesAgo => "{}分鐘前",
2481 MessageKey::JustNow => "剛剛",
2482 MessageKey::NotYetBackedUp => "尚未執行",
2483
2484 MessageKey::WarningTargetNotExists => "備份目標不存在: {}",
2486 MessageKey::WarningDaysSinceLastBackup => "距離上次備份已過去{}天",
2487 MessageKey::WarningNoBackupYet => "尚未執行過備份",
2488 MessageKey::WarningFailedBackups => "有{}個失敗的備份",
2489 MessageKey::WarningLowDiskSpace => "磁碟空間不足 ({:.1}%)",
2490 MessageKey::DashboardHintRunBackup => "💡 提示: 執行 'backup-suite run' 進行備份",
2491
2492 MessageKey::PromptPleaseSelect => "請選擇",
2494 MessageKey::PromptDeleteBackup => "確定要刪除此備份嗎?",
2495 MessageKey::PromptDeleteOldBackups => "🗑️ 刪除舊備份",
2496 MessageKey::PromptDeleteTarget => "刪除目標: {} 個備份",
2497 MessageKey::PromptDeleteCount => "個",
2498 MessageKey::PromptConfirmDelete => "確定要執行刪除嗎?",
2499 MessageKey::PromptSelectPriority => "選擇優先級",
2500 MessageKey::PromptBackupConfirm => "確定要執行備份嗎?",
2501 MessageKey::PromptSelectTarget => "選擇要刪除的備份目標",
2502 MessageKey::PromptSelectFile => "選擇要新增的檔案/目錄: ",
2503
2504 MessageKey::SmartCategoryDirectory => "目錄",
2506 MessageKey::SmartCategoryRustProject => "Rust專案",
2507 MessageKey::SmartCategoryNodeJsProject => "Node.js專案",
2508 MessageKey::SmartCategoryPythonProject => "Python專案",
2509 MessageKey::SmartCategorySourceCodeProject => "原始碼專案",
2510 MessageKey::SmartCategoryGitManaged => "Git管理目錄",
2511 MessageKey::SmartCategoryLowPriority => "低優先級目錄",
2512
2513 MessageKey::SmartReasonSampling => "(採樣: {}檔案, 高重要性: {}個, 分數: {})",
2515 MessageKey::SmartReasonScore => "(分數: {})",
2516 MessageKey::SmartReasonSecurityDir => "憑證/密鑰({}目錄,需要加密,分數: 95)",
2517 MessageKey::SmartReasonLowPriorityDir => "快取/日誌/封存等 (目錄: {}, 分數: 20)",
2518
2519 MessageKey::ExcludeReasonNpmDeps => "npm/yarn依賴(可從package.json重新生成)",
2521 MessageKey::ExcludeReasonRustBuild => "Rust建置產物(可從Cargo.toml重新生成)",
2522 MessageKey::ExcludeReasonVendor => "依賴供應(可重新生成)",
2523 MessageKey::ExcludeReasonPythonCache => "Python快取(自動生成)",
2524 MessageKey::ExcludeReasonPytestCache => "pytest快取(自動生成)",
2525 MessageKey::ExcludeReasonBuildArtifacts => "建置產物目錄(可重新建置)",
2526 MessageKey::ExcludeReasonCacheDir => "快取目錄(暫存資料)",
2527 MessageKey::ExcludeReasonGitMetadata => "Git儲存庫元數據(可從遠端恢復)",
2528 MessageKey::ExcludeReasonSvnMetadata => "SVN儲存庫元數據(可從遠端恢復)",
2529 MessageKey::ExcludeReasonTempFile => "暫存檔案",
2530 MessageKey::ExcludeReasonBackupFile => "備份檔案(如果原檔案存在則不需要)",
2531 MessageKey::ExcludeReasonEditorTemp => "編輯器暫存檔案",
2532 MessageKey::ExcludeReasonLogFile => "日誌檔案(舊日誌通常不需要)",
2533 MessageKey::ExcludeReasonMacOsMetadata => "macOS元數據檔案(自動生成)",
2534 MessageKey::ExcludeReasonWindowsThumb => "Windows縮圖快取(自動生成)",
2535 MessageKey::ExcludeReasonWindowsDesktop => "Windows桌面設定檔案(自動生成)",
2536
2537 MessageKey::SmartDetectConfidenceLabel => "信心度",
2539 MessageKey::SmartDetectDescriptionLabel => "描述",
2540 MessageKey::SmartDetectRecommendedActionLabel => "推薦操作",
2541 MessageKey::SmartDetectAnalyzing => "分析過去{}天的備份",
2542
2543 MessageKey::PasswordStrengthLabel => "密碼強度:",
2545 MessageKey::PasswordStrengthWeak => "弱",
2546 MessageKey::PasswordStrengthMedium => "中等",
2547 MessageKey::PasswordStrengthStrong => "強",
2548 MessageKey::PasswordStrengthWeakMessage => {
2549 "此密碼可能容易受到攻擊。建議使用更長且包含多種字元的密碼。"
2550 }
2551 MessageKey::PasswordStrengthMediumMessage => {
2552 "此密碼提供中等安全性。新增特殊字元或增加長度可以改善。"
2553 }
2554 MessageKey::PasswordStrengthStrongMessage => "此密碼提供強大的安全性。",
2555 MessageKey::PasswordStrengthTip => "提示: 使用 --generate-password 生成強隨機密碼。",
2556
2557 MessageKey::EditorLaunchFailed => "啟動編輯器失敗: {}",
2559
2560 MessageKey::SubdirectoriesFound => "發現{}個子目錄",
2562 MessageKey::ProgressEvaluating => "處理進度 - 評估中: {:?}",
2563
2564 MessageKey::ConfirmBackupTitle => "📦 備份執行確認",
2566 MessageKey::ConfirmBackupTargetFiles => "目標檔案數: {} 檔案",
2567 MessageKey::ConfirmBackupDestination => "備份目標: {}",
2568
2569 MessageKey::ConfirmCleanupTitle => "🗑️ 刪除舊備份",
2571 MessageKey::ConfirmCleanupTargetCount => "刪除目標: {} 個備份",
2572 MessageKey::ConfirmCleanupRetentionDays => "保留期限: {} 天",
2573
2574 MessageKey::CleanupDryRunScheduled => "🗑️ [演習模式] 計劃刪除: {:?}",
2576 MessageKey::CleanupCompleted => "🗑️ 刪除完成: {:?}",
2577 MessageKey::CleanupFailed => "刪除失敗 {:?}: {}",
2578
2579 MessageKey::RestoreDryRunDetected => "📋 演習模式: 檢測到 {} 個檔案待還原",
2581 MessageKey::RestoreInProgress => "還原中...",
2582 MessageKey::RestoreProgressFile => "還原中: {:?}",
2583 MessageKey::RestoreIntegrityMetadataLoaded => "✓ 完整性元數據已載入({} 個備份)",
2584 MessageKey::RestoreCompleted => "✓ 還原完成",
2585 MessageKey::RestoreCompletedWithFailures => "⚠ 還原完成({}個失敗)",
2586
2587 MessageKey::ErrorRelativePathFailed => "取得相對路徑失敗 {}: {}",
2589 MessageKey::ErrorPathTraversalDetected => "偵測到路徑遍歷 {}: {}",
2590 MessageKey::ErrorDirectoryCreateFailed => "建立目錄失敗 {}: {}",
2591 MessageKey::ErrorFileReadFailed => "讀取檔案失敗: {}",
2592 MessageKey::ErrorFileOpenFailedSymlink => "開啟檔案失敗(可能是符號連結攻擊): {}",
2593 MessageKey::ErrorEncryptedButNoPassword => "加密檔案但未指定密碼: {}",
2594 MessageKey::ErrorMasterKeyRestoreFailed => "恢復主金鑰失敗: {}",
2595 MessageKey::ErrorDecryptionFailed => "解密失敗 {}: {}",
2596 MessageKey::ErrorIntegrityVerificationFailed => {
2597 "⚠ 完整性驗證失敗(檔案可能被竄改): {}"
2598 }
2599 MessageKey::ErrorFileWriteFailed => "寫入檔案失敗 {}: {}",
2600 MessageKey::ErrorFileCountFailed => "{}個檔案發生錯誤",
2601
2602 MessageKey::BackupProgressProcessing => "處理中: {:?}",
2604 MessageKey::ErrorBackupDirectoryCreateFailed => "建立目錄失敗 {}: {}",
2605 MessageKey::ErrorBackupWriteFailed => "寫入失敗 {}: {}",
2606 MessageKey::ErrorBackupProcessFailed => "處理失敗 {}: {}",
2607 MessageKey::ErrorBackupCopyFailed => "複製失敗 {}: {}",
2608
2609 MessageKey::NoBackups => "無備份",
2611 MessageKey::RestoreStart => "開始還原",
2612 MessageKey::Restoring => "還原中...",
2613 MessageKey::RestoredSuccess => "成功還原備份到",
2614 MessageKey::RestoredFileCount => "還原檔案數:",
2615 MessageKey::BackupHistory => "備份歷史",
2616 MessageKey::ActualScheduleStatus => "實際排程狀態",
2617 MessageKey::Enabled => "已啟用",
2618 MessageKey::Disabled => "已停用",
2619 MessageKey::ScheduleSettings => "排程設定",
2620 MessageKey::ScheduleUpdated => "排程已更新並套用",
2621 MessageKey::ScheduleUpdatedEnableLater => {
2622 "排程設定已更新(使用 'schedule enable' 啟用)"
2623 }
2624 MessageKey::HighPriority => "高優先級",
2625 MessageKey::MediumPriority => "中優先級",
2626 MessageKey::LowPriority => "低優先級",
2627 MessageKey::CurrentDestination => "目前備份目標",
2628 MessageKey::DestinationChanged => "備份目標已變更",
2629 MessageKey::Before => "之前",
2630 MessageKey::After => "之後",
2631 MessageKey::KeepDaysOutOfRange => "keep_days 必須在 1-3650 之間(指定值:",
2632 MessageKey::KeepDaysChanged => "備份保留期限已變更",
2633 MessageKey::CurrentKeepDays => "目前備份保留期限",
2634 MessageKey::OpeningConfigFile => "開啟設定檔",
2635 MessageKey::EditorDidNotExitCleanly => "編輯器未正常結束",
2636 MessageKey::AutoBackupEnabled => "已啟用自動備份",
2637 MessageKey::AutoBackupDisabled => "已停用自動備份",
2638
2639 _ => self.get_en(), }
2642 }
2643}
2644
2645#[must_use]
2647pub fn get_message(key: MessageKey, lang: Language) -> &'static str {
2648 key.get(lang)
2649}
2650
2651#[cfg(test)]
2652mod tests {
2653 use super::*;
2654
2655 #[test]
2656 fn test_language_detection() {
2657 let _lang = Language::detect();
2659 }
2662
2663 #[test]
2664 fn test_language_parsing() {
2665 assert_eq!(Language::parse("en"), Some(Language::English));
2667 assert_eq!(Language::parse("english"), Some(Language::English));
2668
2669 assert_eq!(Language::parse("ja"), Some(Language::Japanese));
2671 assert_eq!(Language::parse("japanese"), Some(Language::Japanese));
2672 assert_eq!(Language::parse("日本語"), Some(Language::Japanese));
2673
2674 assert_eq!(Language::parse("zh-cn"), Some(Language::SimplifiedChinese));
2676 assert_eq!(Language::parse("zh_cn"), Some(Language::SimplifiedChinese));
2677 assert_eq!(
2678 Language::parse("zh-hans"),
2679 Some(Language::SimplifiedChinese)
2680 );
2681 assert_eq!(
2682 Language::parse("zh_hans"),
2683 Some(Language::SimplifiedChinese)
2684 );
2685 assert_eq!(
2686 Language::parse("simplified chinese"),
2687 Some(Language::SimplifiedChinese)
2688 );
2689 assert_eq!(
2690 Language::parse("简体中文"),
2691 Some(Language::SimplifiedChinese)
2692 );
2693
2694 assert_eq!(Language::parse("zh-tw"), Some(Language::TraditionalChinese));
2696 assert_eq!(Language::parse("zh_tw"), Some(Language::TraditionalChinese));
2697 assert_eq!(Language::parse("zh-hk"), Some(Language::TraditionalChinese));
2698 assert_eq!(Language::parse("zh_hk"), Some(Language::TraditionalChinese));
2699 assert_eq!(
2700 Language::parse("zh-hant"),
2701 Some(Language::TraditionalChinese)
2702 );
2703 assert_eq!(
2704 Language::parse("zh_hant"),
2705 Some(Language::TraditionalChinese)
2706 );
2707 assert_eq!(
2708 Language::parse("traditional chinese"),
2709 Some(Language::TraditionalChinese)
2710 );
2711 assert_eq!(
2712 Language::parse("繁體中文"),
2713 Some(Language::TraditionalChinese)
2714 );
2715 assert_eq!(
2716 Language::parse("繁体中文"),
2717 Some(Language::TraditionalChinese)
2718 );
2719
2720 assert_eq!(Language::parse("unknown"), None);
2722 }
2723
2724 #[test]
2725 fn test_language_parse_null_byte_rejection() {
2726 assert_eq!(Language::parse("en\0"), None);
2728 assert_eq!(Language::parse("\0ja"), None);
2729 assert_eq!(Language::parse("test\0malicious"), None);
2730 }
2731
2732 #[test]
2733 fn test_language_code() {
2734 assert_eq!(Language::English.code(), "en");
2735 assert_eq!(Language::Japanese.code(), "ja");
2736 assert_eq!(Language::SimplifiedChinese.code(), "zh-cn");
2737 assert_eq!(Language::TraditionalChinese.code(), "zh-tw");
2738 }
2739
2740 #[test]
2741 fn test_message_translation() {
2742 assert_eq!(
2744 get_message(MessageKey::AppVersion, Language::English),
2745 app_version()
2746 );
2747
2748 assert_eq!(
2750 get_message(MessageKey::AppVersion, Language::Japanese),
2751 app_version()
2752 );
2753
2754 assert_eq!(
2756 get_message(MessageKey::AppVersion, Language::SimplifiedChinese),
2757 app_version()
2758 );
2759
2760 assert_eq!(
2762 get_message(MessageKey::AppVersion, Language::TraditionalChinese),
2763 app_version()
2764 );
2765
2766 assert!(get_message(MessageKey::AppTitle, Language::English).contains("Fast"));
2768 assert!(get_message(MessageKey::AppTitle, Language::Japanese).contains("高速"));
2769 }
2770
2771 #[test]
2772 fn test_ai_messages() {
2773 assert_eq!(
2775 get_message(MessageKey::SmartCommands, Language::English),
2776 "🤖 Smart Commands"
2777 );
2778 assert_eq!(
2779 get_message(MessageKey::SmartCommands, Language::Japanese),
2780 "🤖 Smartコマンド"
2781 );
2782 }
2783}