1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum Language {
10 English,
11 Japanese,
12 SimplifiedChinese,
13 TraditionalChinese,
14}
15
16impl Language {
17 #[must_use]
20 pub fn detect() -> Self {
21 if let Ok(lang) = std::env::var("LANG") {
23 let lang_lower = lang.to_lowercase();
24
25 if lang_lower.starts_with("ja") || lang_lower.starts_with("jp") {
27 return Language::Japanese;
28 }
29
30 if lang_lower.starts_with("zh-cn")
32 || lang_lower.starts_with("zh_cn")
33 || lang_lower.starts_with("zh-hans")
34 || lang_lower.starts_with("zh_hans")
35 {
36 return Language::SimplifiedChinese;
37 }
38
39 if lang_lower.starts_with("zh-tw")
41 || lang_lower.starts_with("zh_tw")
42 || lang_lower.starts_with("zh-hk")
43 || lang_lower.starts_with("zh_hk")
44 || lang_lower.starts_with("zh-hant")
45 || lang_lower.starts_with("zh_hant")
46 {
47 return Language::TraditionalChinese;
48 }
49 }
50
51 if let Ok(lang) = std::env::var("LC_ALL") {
53 let lang_lower = lang.to_lowercase();
54
55 if lang_lower.starts_with("ja") || lang_lower.starts_with("jp") {
57 return Language::Japanese;
58 }
59
60 if lang_lower.starts_with("zh-cn")
62 || lang_lower.starts_with("zh_cn")
63 || lang_lower.starts_with("zh-hans")
64 || lang_lower.starts_with("zh_hans")
65 {
66 return Language::SimplifiedChinese;
67 }
68
69 if lang_lower.starts_with("zh-tw")
71 || lang_lower.starts_with("zh_tw")
72 || lang_lower.starts_with("zh-hk")
73 || lang_lower.starts_with("zh_hk")
74 || lang_lower.starts_with("zh-hant")
75 || lang_lower.starts_with("zh_hant")
76 {
77 return Language::TraditionalChinese;
78 }
79 }
80
81 Language::English
83 }
84
85 #[must_use]
94 pub fn parse(s: &str) -> Option<Self> {
95 if s.contains('\0') {
97 return None;
98 }
99
100 if s.contains(';')
102 || s.contains('|')
103 || s.contains('&')
104 || s.contains('`')
105 || s.contains('$')
106 || s.contains('(')
107 || s.contains(')')
108 {
109 return None;
110 }
111
112 if s.contains("..") || s.contains('/') || s.contains('\\') {
114 return None;
115 }
116
117 if s.len() > 100 {
119 return None;
120 }
121
122 match s.to_lowercase().as_str() {
123 "en" | "english" => Some(Language::English),
124 "ja" | "japanese" | "日本語" => Some(Language::Japanese),
125 "zh-cn" | "zh_cn" | "zh-hans" | "zh_hans" | "simplified chinese" | "简体中文" => {
126 Some(Language::SimplifiedChinese)
127 }
128 "zh-tw"
129 | "zh_tw"
130 | "zh-hk"
131 | "zh_hk"
132 | "zh-hant"
133 | "zh_hant"
134 | "traditional chinese"
135 | "繁體中文"
136 | "繁体中文" => Some(Language::TraditionalChinese),
137 _ => None,
138 }
139 }
140
141 #[must_use]
143 pub fn code(&self) -> &'static str {
144 match self {
145 Language::English => "en",
146 Language::Japanese => "ja",
147 Language::SimplifiedChinese => "zh-cn",
148 Language::TraditionalChinese => "zh-tw",
149 }
150 }
151}
152
153#[derive(Debug, Clone, Copy)]
155pub enum MessageKey {
156 AppVersion,
158 AppTitle,
159 AppDescription,
160
161 BasicCommands,
163 ExecutionCommands,
164 InformationCommands,
165 ConfigCommands,
166 UtilityCommands,
167 SmartCommands,
168
169 CmdAdd,
171 CmdList,
172 CmdRemove,
173 CmdClear,
174 CmdRun,
175 CmdRestore,
176 CmdCleanup,
177 CmdStatus,
178 CmdHistory,
179 CmdDashboard,
180 CmdEnable,
181 CmdDisable,
182 CmdSchedule,
183 CmdConfig,
184 CmdOpen,
185 CmdCompletion,
186 CmdSmart,
187
188 DescAdd,
190 DescList,
191 DescRemove,
192 DescClear,
193 DescRun,
194 DescRestore,
195 DescCleanup,
196 DescStatus,
197 DescHistory,
198 DescDashboard,
199 DescEnable,
200 DescDisable,
201 DescSchedule,
202 DescConfig,
203 DescOpen,
204 DescCompletion,
205 DescSmart,
206
207 CmdSmartDetect,
209 CmdSmartAnalyze,
210 CmdSmartSuggestExclude,
211 CmdSmartAutoConfigure,
212 DescSmartDetect,
213 DescSmartAnalyze,
214 DescSmartSuggestExclude,
215 DescSmartAutoConfigure,
216
217 SmartDetectTitle,
219 SmartDetectNoAnomalies,
220 SmartDetectAnomalyFound,
221 SmartAnalyzeTitle,
222 SmartAnalyzeImportanceHigh,
223 SmartAnalyzeImportanceMedium,
224 SmartAnalyzeImportanceLow,
225 SmartSuggestExcludeTitle,
226 SmartSuggestExcludeRecommendation,
227 SmartAutoConfigureTitle,
228 SmartAutoConfigureSuccess,
229 SmartErrorNotEnabled,
230 SmartErrorInsufficientData,
231 SmartErrorAnalysisFailed,
232
233 Options,
235 HelpOption,
236 VersionOption,
237
238 UsageExamples,
240 ExampleAddInteractive,
241 ExampleRunHigh,
242 ExampleEncrypt,
243 ExampleCompress,
244 ExampleEncryptCompress,
245 ExampleCleanup,
246 ExampleSchedule,
247 ExampleSmartDetect,
248 ExampleSmartAnalyze,
249 ExampleSmartSuggestExclude,
250
251 DetailedInfo,
253 DetailCommand,
254 ConfigFile,
255 BackupDestination,
256
257 Added,
259 Removed,
260 Deleted,
261 Error,
262 Warning,
263 BackupRunning,
264 RestoreStarting,
265
266 EncryptionPassword,
268 SavePasswordSecurely,
269 EncryptOption,
270 CompressOption,
271 CompressLevel,
272
273 IncrementalOption,
275 GeneratePasswordOption,
276 PasswordOption,
277 DryRunOption,
278 PriorityOption,
279 CategoryOption,
280
281 FromOption,
283 ToOption,
284 RestorePasswordOption,
285
286 DaysOption,
288 CleanupDryRunOption,
289
290 AddPriorityOption,
292 AddCategoryOption,
293 InteractiveOption,
294
295 ListPriorityOption,
297
298 ScheduleTitle,
300 ScheduleDescription,
301 ScheduleUsage,
302 ScheduleCommands,
303 ScheduleEnable,
304 ScheduleDisable,
305 ScheduleStatus,
306 ScheduleSetup,
307 ScheduleHelp,
308
309 ConfigTitle,
311 ConfigDescription,
312 ConfigUsage,
313 ConfigMgmtCommands,
314 ConfigSetDestination,
315 ConfigGetDestination,
316 ConfigSetKeepDays,
317 ConfigGetKeepDays,
318 ConfigOpen,
319 ConfigHelp,
320
321 ScheduleDetailedOptions,
323 ScheduleEnableOption,
324 ScheduleDisableOption,
325 ScheduleSetupOption,
326 ScheduleFrequencies,
327 ScheduleDaily,
328 ScheduleWeekly,
329 ScheduleMonthly,
330 ScheduleTips,
331 ScheduleTip1,
332 ScheduleTip2,
333 ScheduleTip3,
334
335 ConfigExampleExternal,
337 ConfigExampleGetDest,
338 ConfigExampleSetDays,
339 ConfigExampleOpen,
340 ConfigExampleTilde,
341 ConfigTip1,
342 ConfigTip2,
343 ConfigTip3,
344
345 NoTargetsRegistered,
347 SelectionCancelled,
348 PathNotExists,
349 NotInBackupConfig,
350 SpecifyPriorityOrAll,
351 CountDeleted,
352 DryRun,
353 Category,
354 Encryption,
355 Compression,
356 ErrorDetails,
357 Detected,
358 NoBackups,
359 RestoreStart,
360 Restoring,
361 RestoredSuccess,
362 RestoredFileCount,
363 Deleting,
364 Destination,
365 Targets,
366 High,
367 Medium,
368 Low,
369 BackupHistory,
370 Days,
371 AutoBackupEnabled,
372 AutoBackupDisabled,
373 OpenDirectory,
374 PriorityScheduleSetup,
375 ScheduleSetupFailed,
376 LaunchctlUnloadWarning,
377 PriorityScheduleDeleted,
378 ScheduleNotConfigured,
379 ScheduleDeletionFailed,
380 ActualScheduleStatus,
381 Enabled,
382 Disabled,
383 ScheduleSettings,
384 ScheduleUpdated,
385 ScheduleUpdatedEnableLater,
386 HighPriority,
387 MediumPriority,
388 LowPriority,
389 DirectoryNotExists,
390 DirectoryCreating,
391 DestinationChanged,
392 Before,
393 After,
394 CurrentDestination,
395 KeepDaysOutOfRange,
396 KeepDaysChanged,
397 CurrentKeepDays,
398 OpeningConfigFile,
399 EditorDidNotExitCleanly,
400 RustFastTypeSafe,
401 ScheduleCommandPlaceholder,
402 ConfigCommandPlaceholder,
403 ConfigArgsPlaceholder,
404 MainHelp,
405 ConfigFileLabel,
406 EnableOnlySpecifiedPriority,
407 DisableOnlySpecifiedPriority,
408 SetExecutionFrequency,
409 EnableAllAutoBackups,
410 EnableHighOnly,
411 SetupScheduleFreq,
412 CheckCurrentConfig,
413
414 Files,
416 EncryptedLabel,
417 StatusTitle,
418 DaysUnit,
419 DryRunParens,
420
421 FilesDetected,
423 FullBackupMode,
424 IncrementalBackupMode,
425 BackupComplete,
426 BackupCompleteWithFailures,
427 BackupResultTitle,
428 TotalFilesLabel,
429 SuccessfulLabel,
430 FailedLabel,
431 TotalSizeLabel,
432
433 ConfirmRemoveTarget,
435 UpdatedTarget,
436 PathLabel,
437 PriorityLabel,
438 CategoryLabel,
439 ExcludePatternsLabel,
440
441 PathHistoryLabel,
443 StatusHistoryLabel,
444 FilesHistoryLabel,
445 SizeLabel,
446 CompressionLabel,
447 EncryptionLabel,
448 DurationLabel,
449 EnabledLabel,
450 SecondsUnit,
451
452 StatisticsTitle,
454 DiskUsageTitle,
455 AllNormalStatus,
456 WarningsTitle,
457
458 TotalTargetsLabel,
460 HighPriorityTargetsLabel,
461 MediumPriorityTargetsLabel,
462 LowPriorityTargetsLabel,
463 TotalBackupsLabel,
464 SuccessCountLabel,
465 TotalFilesCountLabel,
466 TotalDataSizeLabel,
467 LastBackupLabel,
468 EncryptedBackupsLabel,
469 CompressedBackupsLabel,
470 BackupDirectoryLabel,
471 UsedCapacityLabel,
472 FileCountLabel,
473 DiskTotalCapacityLabel,
474 DiskFreeCapacityLabel,
475 DiskUsageRateLabel,
476 UsageStatusLabel,
477 RecentBackupsTitle,
478
479 PreviousBackupLabel,
481 ChangedFilesLabel,
482 NoBackupsFound,
483 FullBackupFallback,
484 MetadataLoadFailed,
485 DryRunMode,
486
487 DaysAgo,
489 HoursAgo,
490 MinutesAgo,
491 JustNow,
492 NotYetBackedUp,
493
494 WarningTargetNotExists,
496 WarningDaysSinceLastBackup,
497 WarningNoBackupYet,
498 WarningFailedBackups,
499 WarningLowDiskSpace,
500 DashboardHintRunBackup,
501
502 PromptPleaseSelect,
504 PromptDeleteBackup,
505 PromptDeleteOldBackups,
506 PromptDeleteTarget,
507 PromptDeleteCount,
508 PromptConfirmDelete,
509 PromptSelectPriority,
510 PromptBackupConfirm,
511
512 SmartCategoryDirectory,
514 SmartCategoryRustProject,
515 SmartCategoryNodeJsProject,
516 SmartCategoryPythonProject,
517 SmartCategorySourceCodeProject,
518 SmartCategoryGitManaged,
519 SmartCategoryLowPriority,
520
521 SmartReasonSampling,
523 SmartReasonScore,
524 SmartReasonSecurityDir,
525 SmartReasonLowPriorityDir,
526
527 ExcludeReasonNpmDeps,
529 ExcludeReasonRustBuild,
530 ExcludeReasonVendor,
531 ExcludeReasonPythonCache,
532 ExcludeReasonPytestCache,
533 ExcludeReasonBuildArtifacts,
534 ExcludeReasonCacheDir,
535 ExcludeReasonGitMetadata,
536 ExcludeReasonSvnMetadata,
537 ExcludeReasonTempFile,
538 ExcludeReasonBackupFile,
539 ExcludeReasonEditorTemp,
540 ExcludeReasonLogFile,
541 ExcludeReasonMacOsMetadata,
542 ExcludeReasonWindowsThumb,
543 ExcludeReasonWindowsDesktop,
544}
545
546impl MessageKey {
547 #[must_use]
549 pub fn get(&self, lang: Language) -> &'static str {
550 match lang {
551 Language::English => self.get_en(),
552 Language::Japanese => self.get_ja(),
553 Language::SimplifiedChinese => self.get_zh_cn(),
554 Language::TraditionalChinese => self.get_zh_tw(),
555 }
556 }
557
558 fn get_en(&self) -> &'static str {
560 match self {
561 MessageKey::AppVersion => "Backup Suite v1.0.0",
563 MessageKey::AppTitle => {
564 "Fast Local Backup Tool - Written in Rust, Type-safe, High-performance"
565 }
566 MessageKey::AppDescription => "Backup Suite - Fast Local Backup Tool",
567
568 MessageKey::BasicCommands => "📋 Basic Commands",
570 MessageKey::ExecutionCommands => "🚀 Execution Commands",
571 MessageKey::InformationCommands => "📊 Information Commands",
572 MessageKey::ConfigCommands => "⚙️ Configuration",
573 MessageKey::UtilityCommands => "🔧 Utility",
574 MessageKey::SmartCommands => "🤖 Smart Commands",
575
576 MessageKey::CmdAdd => "add",
578 MessageKey::CmdList => "list, ls",
579 MessageKey::CmdRemove => "remove",
580 MessageKey::CmdClear => "clear",
581 MessageKey::CmdRun => "run",
582 MessageKey::CmdRestore => "restore",
583 MessageKey::CmdCleanup => "cleanup",
584 MessageKey::CmdStatus => "status",
585 MessageKey::CmdHistory => "history",
586 MessageKey::CmdDashboard => "dashboard",
587 MessageKey::CmdEnable => "enable",
588 MessageKey::CmdDisable => "disable",
589 MessageKey::CmdSchedule => "schedule",
590 MessageKey::CmdConfig => "config",
591 MessageKey::CmdOpen => "open",
592 MessageKey::CmdCompletion => "completion",
593 MessageKey::CmdSmart => "ai",
594
595 MessageKey::DescAdd => "Add target (interactive selection supported)",
597 MessageKey::DescList => "List targets",
598 MessageKey::DescRemove => "Remove target (interactive selection supported)",
599 MessageKey::DescClear => "Bulk delete",
600 MessageKey::DescRun => "Execute backup (encryption & compression supported)",
601 MessageKey::DescRestore => "Restore backup (auto-detect encryption & compression)",
602 MessageKey::DescCleanup => "Delete old backups",
603 MessageKey::DescStatus => "Display status",
604 MessageKey::DescHistory => "Display history",
605 MessageKey::DescDashboard => "Display dashboard",
606 MessageKey::DescEnable => "Enable auto backup",
607 MessageKey::DescDisable => "Disable auto backup",
608 MessageKey::DescSchedule => "Manage schedule",
609 MessageKey::DescConfig => "Manage configuration (destination, retention period)",
610 MessageKey::DescOpen => "Open backup directory",
611 MessageKey::DescCompletion => "Generate shell completion script",
612 MessageKey::DescSmart => "AI-driven intelligent backup management",
613
614 MessageKey::CmdSmartDetect => "detect",
616 MessageKey::CmdSmartAnalyze => "analyze",
617 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
618 MessageKey::CmdSmartAutoConfigure => "auto-configure",
619 MessageKey::DescSmartDetect => "Detect anomalies in backup history",
620 MessageKey::DescSmartAnalyze => "Analyze file importance",
621 MessageKey::DescSmartSuggestExclude => "Suggest exclude patterns",
622 MessageKey::DescSmartAutoConfigure => "Auto-configure backup settings with Smart rules",
623
624 MessageKey::SmartDetectTitle => "🤖 Smart Anomaly Detection",
626 MessageKey::SmartDetectNoAnomalies => "No anomalies detected in the backup history",
627 MessageKey::SmartDetectAnomalyFound => "Anomaly detected",
628 MessageKey::SmartAnalyzeTitle => "🤖 Smart File Importance Analysis",
629 MessageKey::SmartAnalyzeImportanceHigh => "High importance",
630 MessageKey::SmartAnalyzeImportanceMedium => "Medium importance",
631 MessageKey::SmartAnalyzeImportanceLow => "Low importance",
632 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart Exclude Pattern Suggestions",
633 MessageKey::SmartSuggestExcludeRecommendation => "Recommended exclusion",
634 MessageKey::SmartAutoConfigureTitle => "🤖 Smart Auto-Configuration",
635 MessageKey::SmartAutoConfigureSuccess => "Auto-configuration completed successfully",
636 MessageKey::SmartErrorNotEnabled => {
637 "AI features are not enabled. Compile with --features ai"
638 }
639 MessageKey::SmartErrorInsufficientData => "Insufficient data for Smart analysis",
640 MessageKey::SmartErrorAnalysisFailed => "Smart analysis failed",
641
642 MessageKey::Options => "Options:",
644 MessageKey::HelpOption => "-h, --help Display this help",
645 MessageKey::VersionOption => "-V, --version Display version information",
646
647 MessageKey::UsageExamples => "Usage Examples:",
649 MessageKey::ExampleAddInteractive => "# Add file interactively",
650 MessageKey::ExampleRunHigh => "# Execute backup for high priority",
651 MessageKey::ExampleEncrypt => "# Encrypted backup (AES-256-GCM)",
652 MessageKey::ExampleCompress => "# Compressed backup (zstd fast compression)",
653 MessageKey::ExampleEncryptCompress => "# Encrypted + Compressed backup",
654 MessageKey::ExampleCleanup => "# Delete backups older than 30 days (dry run)",
655 MessageKey::ExampleSchedule => "# Setup schedule and enable",
656 MessageKey::ExampleSmartDetect => "# Detect anomalies in last 7 days",
657 MessageKey::ExampleSmartAnalyze => "# Analyze file importance",
658 MessageKey::ExampleSmartSuggestExclude => "# Get Smart exclude suggestions",
659
660 MessageKey::DetailedInfo => "Detailed Information:",
662 MessageKey::DetailCommand => "Command details: backup-suite <command> --help",
663 MessageKey::ConfigFile => "Configuration file: ~/.config/backup-suite/config.toml",
664 MessageKey::BackupDestination => {
665 "Backup destination: ~/.local/share/backup-suite/backups/"
666 }
667
668 MessageKey::Added => "Added",
670 MessageKey::Removed => "Removed",
671 MessageKey::Deleted => "deleted",
672 MessageKey::Error => "Error",
673 MessageKey::Warning => "Warning",
674 MessageKey::BackupRunning => "Backup Running",
675 MessageKey::RestoreStarting => "Restore Starting",
676
677 MessageKey::EncryptionPassword => "Encryption password",
679 MessageKey::SavePasswordSecurely => "⚠️ Please save this password securely!",
680 MessageKey::EncryptOption => "--encrypt: AES-256-GCM encryption",
681 MessageKey::CompressOption => "--compress zstd/gzip: Compression",
682 MessageKey::CompressLevel => "--compress-level 1-22: Compression level",
683
684 MessageKey::IncrementalOption => {
686 "--incremental: Incremental backup (changed files only)"
687 }
688 MessageKey::GeneratePasswordOption => "--generate-password: Generate secure password",
689 MessageKey::PasswordOption => "--password <PASSWORD>: Specify encryption password",
690 MessageKey::DryRunOption => "--dry-run: Dry run mode (no actual backup)",
691 MessageKey::PriorityOption => {
692 "--priority <PRIORITY>: Filter by priority (high/medium/low)"
693 }
694 MessageKey::CategoryOption => "--category <CATEGORY>: Filter by category",
695
696 MessageKey::FromOption => "--from <BACKUP_NAME>: Backup to restore",
698 MessageKey::ToOption => "--to <DESTINATION>: Restore destination",
699 MessageKey::RestorePasswordOption => {
700 "--password <PASSWORD>: Decryption password (if encrypted)"
701 }
702
703 MessageKey::DaysOption => "--days <DAYS>: Delete backups older than specified days",
705 MessageKey::CleanupDryRunOption => {
706 "--dry-run: Dry run mode (show what would be deleted)"
707 }
708
709 MessageKey::AddPriorityOption => {
711 "--priority <PRIORITY>: Set priority (high/medium/low)"
712 }
713 MessageKey::AddCategoryOption => "--category <CATEGORY>: Set category",
714 MessageKey::InteractiveOption => "--interactive: Interactive selection mode",
715
716 MessageKey::ListPriorityOption => "--priority <PRIORITY>: Filter by priority",
718
719 MessageKey::ScheduleTitle => "📅 Backup Suite Schedule Management",
721 MessageKey::ScheduleDescription => "Automatic backup schedule setup and control system",
722 MessageKey::ScheduleUsage => "Usage:",
723 MessageKey::ScheduleCommands => "📋 Schedule Management Commands",
724 MessageKey::ScheduleEnable => "enable Enable automatic backup",
725 MessageKey::ScheduleDisable => "disable Disable automatic backup",
726 MessageKey::ScheduleStatus => "status Display current schedule status",
727 MessageKey::ScheduleSetup => "setup Setup schedule frequency",
728 MessageKey::ScheduleHelp => "help Display this help",
729
730 MessageKey::ConfigTitle => "⚙️ Backup Suite Configuration Management",
732 MessageKey::ConfigDescription => {
733 "Command to manage backup destination, retention period and other settings"
734 }
735 MessageKey::ConfigUsage => "Usage:",
736 MessageKey::ConfigMgmtCommands => "📋 Configuration Management Commands",
737 MessageKey::ConfigSetDestination => {
738 "set-destination <path> Change backup destination directory"
739 }
740 MessageKey::ConfigGetDestination => {
741 "get-destination Display current backup destination"
742 }
743 MessageKey::ConfigSetKeepDays => {
744 "set-keep-days <days> Change backup retention period (1-3650 days)"
745 }
746 MessageKey::ConfigGetKeepDays => {
747 "get-keep-days Display current backup retention period"
748 }
749 MessageKey::ConfigOpen => {
750 "open Open configuration file in default editor"
751 }
752 MessageKey::ConfigHelp => "help Display this help",
753
754 MessageKey::ScheduleDetailedOptions => "⚙️ Detailed Options",
756 MessageKey::ScheduleEnableOption => "enable --priority <priority>",
757 MessageKey::ScheduleDisableOption => "disable --priority <priority>",
758 MessageKey::ScheduleSetupOption => "setup --high <freq> --medium <freq> --low <freq>",
759 MessageKey::ScheduleFrequencies => "📊 Frequency Settings:",
760 MessageKey::ScheduleDaily => "daily - Every day at 2:00 AM",
761 MessageKey::ScheduleWeekly => "weekly - Every Sunday at 2:00 AM",
762 MessageKey::ScheduleMonthly => "monthly - First day of month at 2:00 AM",
763 MessageKey::ScheduleTips => "💡 Tips:",
764 MessageKey::ScheduleTip1 => {
765 " • After enabling schedule, it runs automatically via macOS launchctl"
766 }
767 MessageKey::ScheduleTip2 => " • Use 'status' command to check actual operation status",
768 MessageKey::ScheduleTip3 => " • Each priority setting is managed independently",
769
770 MessageKey::ConfigExampleExternal => "# Change backup destination to external HDD",
772 MessageKey::ConfigExampleGetDest => "# Check current backup destination",
773 MessageKey::ConfigExampleSetDays => "# Change retention period to 60 days",
774 MessageKey::ConfigExampleOpen => "# Open configuration file in editor",
775 MessageKey::ConfigExampleTilde => "# Tilde expansion is supported",
776 MessageKey::ConfigTip1 => " • Non-existent directories are automatically created",
777 MessageKey::ConfigTip2 => " • Write permissions are automatically checked",
778 MessageKey::ConfigTip3 => {
779 " • Backups older than retention period can be deleted with cleanup command"
780 }
781
782 MessageKey::NoTargetsRegistered => "No backup targets registered",
784 MessageKey::SelectionCancelled => "Selection cancelled",
785 MessageKey::PathNotExists => "Path does not exist",
786 MessageKey::NotInBackupConfig => "Not registered in backup configuration",
787 MessageKey::SpecifyPriorityOrAll => "Specify --priority or --all",
788 MessageKey::CountDeleted => "deleted",
789 MessageKey::DryRun => "dry run",
790 MessageKey::Category => "Category",
791 MessageKey::Encryption => "Encryption",
792 MessageKey::Compression => "Compression",
793 MessageKey::ErrorDetails => "Error Details",
794 MessageKey::Detected => "Detected",
795 MessageKey::NoBackups => "No backups",
796 MessageKey::RestoreStart => "Restore Starting",
797 MessageKey::Restoring => "Restoring...",
798 MessageKey::RestoredSuccess => "Successfully restored backup to",
799 MessageKey::RestoredFileCount => "Restored files:",
800 MessageKey::Deleting => "Deleting",
801 MessageKey::Destination => "Destination",
802 MessageKey::Targets => "Targets",
803 MessageKey::High => "High",
804 MessageKey::Medium => "Medium",
805 MessageKey::Low => "Low",
806 MessageKey::BackupHistory => "Backup History",
807 MessageKey::Days => "days",
808 MessageKey::AutoBackupEnabled => "Automatic backup enabled",
809 MessageKey::AutoBackupDisabled => "Automatic backup disabled",
810 MessageKey::OpenDirectory => "Opening",
811 MessageKey::PriorityScheduleSetup => "Priority schedule setup completed",
812 MessageKey::ScheduleSetupFailed => "Failed to setup priority schedule",
813 MessageKey::LaunchctlUnloadWarning => "launchctl unload warning",
814 MessageKey::PriorityScheduleDeleted => "Priority schedule deleted",
815 MessageKey::ScheduleNotConfigured => "Priority schedule is not configured",
816 MessageKey::ScheduleDeletionFailed => "Failed to delete priority schedule",
817 MessageKey::ActualScheduleStatus => "Actual Schedule Status",
818 MessageKey::Enabled => "Enabled",
819 MessageKey::Disabled => "Disabled",
820 MessageKey::ScheduleSettings => "Schedule Settings",
821 MessageKey::ScheduleUpdated => "Schedule updated and applied",
822 MessageKey::ScheduleUpdatedEnableLater => {
823 "Schedule settings updated (enable with 'schedule enable')"
824 }
825 MessageKey::HighPriority => "High priority",
826 MessageKey::MediumPriority => "Medium priority",
827 MessageKey::LowPriority => "Low priority",
828 MessageKey::DirectoryNotExists => "Directory does not exist. Creating",
829 MessageKey::DirectoryCreating => "Creating",
830 MessageKey::DestinationChanged => "Backup destination changed",
831 MessageKey::Before => "Before",
832 MessageKey::After => "After",
833 MessageKey::CurrentDestination => "Current backup destination",
834 MessageKey::KeepDaysOutOfRange => "keep_days must be between 1-3650 (specified value:",
835 MessageKey::KeepDaysChanged => "Backup retention period changed",
836 MessageKey::CurrentKeepDays => "Current backup retention period",
837 MessageKey::OpeningConfigFile => "Opening configuration file",
838 MessageKey::EditorDidNotExitCleanly => "Editor did not exit cleanly",
839 MessageKey::RustFastTypeSafe => {
840 "Intelligent Backup with AES-256 Encryption & Smart Analysis"
841 }
842 MessageKey::ScheduleCommandPlaceholder => "<command>",
843 MessageKey::ConfigCommandPlaceholder => "<command>",
844 MessageKey::ConfigArgsPlaceholder => "[args]",
845 MessageKey::MainHelp => "Main help",
846 MessageKey::ConfigFileLabel => "Configuration file",
847 MessageKey::EnableOnlySpecifiedPriority => {
848 "Enable only specified priority (high/medium/low)"
849 }
850 MessageKey::DisableOnlySpecifiedPriority => "Disable only specified priority",
851 MessageKey::SetExecutionFrequency => {
852 "Set execution frequency for each priority (daily/weekly/monthly)"
853 }
854 MessageKey::EnableAllAutoBackups => "# Enable all automatic backups",
855 MessageKey::EnableHighOnly => "# Enable high priority only",
856 MessageKey::SetupScheduleFreq => "# Setup schedule frequency",
857 MessageKey::CheckCurrentConfig => "# Check current configuration",
858
859 MessageKey::Files => "files",
861 MessageKey::EncryptedLabel => "Encrypted:",
862 MessageKey::StatusTitle => "Status",
863 MessageKey::DaysUnit => "days",
864 MessageKey::DryRunParens => "(dry run)",
865
866 MessageKey::FilesDetected => "files detected",
868 MessageKey::FullBackupMode => "Full Backup Mode (all files)",
869 MessageKey::IncrementalBackupMode => "Incremental Backup Mode (changed files only)",
870 MessageKey::BackupComplete => "Backup complete",
871 MessageKey::BackupCompleteWithFailures => "Backup complete (with failures)",
872 MessageKey::BackupResultTitle => "Backup Result",
873 MessageKey::TotalFilesLabel => "Total Files",
874 MessageKey::SuccessfulLabel => "Successful",
875 MessageKey::FailedLabel => "Failed",
876 MessageKey::TotalSizeLabel => "Total Size",
877
878 MessageKey::ConfirmRemoveTarget => {
880 "Are you sure you want to remove {} from backup targets?"
881 }
882 MessageKey::UpdatedTarget => "Updated backup target",
883 MessageKey::PathLabel => "Path",
884 MessageKey::PriorityLabel => "Priority",
885 MessageKey::CategoryLabel => "Category",
886 MessageKey::ExcludePatternsLabel => "Exclude Patterns",
887
888 MessageKey::PathHistoryLabel => "Path",
890 MessageKey::StatusHistoryLabel => "Status",
891 MessageKey::FilesHistoryLabel => "Files",
892 MessageKey::SizeLabel => "Size",
893 MessageKey::CompressionLabel => "Compression",
894 MessageKey::EncryptionLabel => "Encryption",
895 MessageKey::DurationLabel => "Duration",
896 MessageKey::EnabledLabel => "Enabled",
897 MessageKey::SecondsUnit => "seconds",
898
899 MessageKey::StatisticsTitle => "📈 Statistics",
901 MessageKey::DiskUsageTitle => "💾 Disk Usage",
902 MessageKey::AllNormalStatus => "⚡ All Normal",
903 MessageKey::WarningsTitle => "⚠️ Warnings",
904
905 MessageKey::PreviousBackupLabel => "Previous backup",
907 MessageKey::ChangedFilesLabel => "Changed files",
908 MessageKey::NoBackupsFound => "ℹ️ No previous backup found. Performing full backup.",
909 MessageKey::FullBackupFallback => {
910 "⚠️ Failed to load previous metadata. Falling back to full backup."
911 }
912 MessageKey::MetadataLoadFailed => " Details",
913 MessageKey::DryRunMode => "📋 Dry run mode: detected {} files for backup",
914
915 MessageKey::TotalTargetsLabel => "Total Targets",
917 MessageKey::HighPriorityTargetsLabel => " High Priority",
918 MessageKey::MediumPriorityTargetsLabel => " Medium Priority",
919 MessageKey::LowPriorityTargetsLabel => " Low Priority",
920 MessageKey::TotalBackupsLabel => "Total Backups",
921 MessageKey::SuccessCountLabel => " Success",
922 MessageKey::TotalFilesCountLabel => "Total Files",
923 MessageKey::TotalDataSizeLabel => "Total Data Size",
924 MessageKey::LastBackupLabel => "Last Backup",
925 MessageKey::EncryptedBackupsLabel => "Encrypted Backups",
926 MessageKey::CompressedBackupsLabel => "Compressed Backups",
927 MessageKey::BackupDirectoryLabel => "Backup Directory",
928 MessageKey::UsedCapacityLabel => "Used Capacity",
929 MessageKey::FileCountLabel => "File Count",
930 MessageKey::DiskTotalCapacityLabel => "Disk Total Capacity",
931 MessageKey::DiskFreeCapacityLabel => "Disk Free Capacity",
932 MessageKey::DiskUsageRateLabel => "Disk Usage Rate",
933 MessageKey::UsageStatusLabel => "Usage Status",
934 MessageKey::RecentBackupsTitle => "🕒 Recent Backups (Latest 5)",
935
936 MessageKey::DaysAgo => "{} days ago",
938 MessageKey::HoursAgo => "{} hours ago",
939 MessageKey::MinutesAgo => "{} minutes ago",
940 MessageKey::JustNow => "Just now",
941 MessageKey::NotYetBackedUp => "Not yet",
942
943 MessageKey::WarningTargetNotExists => "Backup target does not exist: {}",
945 MessageKey::WarningDaysSinceLastBackup => "It has been {} days since the last backup",
946 MessageKey::WarningNoBackupYet => "No backup has been performed yet",
947 MessageKey::WarningFailedBackups => "There are {} failed backups",
948 MessageKey::WarningLowDiskSpace => "Disk space is running low ({:.1}%)",
949 MessageKey::DashboardHintRunBackup => {
950 "💡 Hint: Run 'backup-suite run' to perform a backup"
951 }
952
953 MessageKey::PromptPleaseSelect => "Please select",
955 MessageKey::PromptDeleteBackup => "Do you want to delete this backup?",
956 MessageKey::PromptDeleteOldBackups => "🗑️ Delete old backups",
957 MessageKey::PromptDeleteTarget => "Targets to delete: {} backups",
958 MessageKey::PromptDeleteCount => "targets",
959 MessageKey::PromptConfirmDelete => "Do you want to proceed with deletion?",
960 MessageKey::PromptSelectPriority => "Select priority",
961 MessageKey::PromptBackupConfirm => "Do you want to perform a backup?",
962
963 MessageKey::SmartCategoryDirectory => "Directory",
965 MessageKey::SmartCategoryRustProject => "Rust Project",
966 MessageKey::SmartCategoryNodeJsProject => "Node.js Project",
967 MessageKey::SmartCategoryPythonProject => "Python Project",
968 MessageKey::SmartCategorySourceCodeProject => "Source Code Project",
969 MessageKey::SmartCategoryGitManaged => "Git-managed Directory",
970 MessageKey::SmartCategoryLowPriority => "Low Priority Directory",
971
972 MessageKey::SmartReasonSampling => {
974 "(Sampling: {} files, high importance: {}, score: {})"
975 }
976 MessageKey::SmartReasonScore => "(Score: {})",
977 MessageKey::SmartReasonSecurityDir => {
978 "Credentials/Secret keys ({} directory, encryption required, score: 95)"
979 }
980 MessageKey::SmartReasonLowPriorityDir => {
981 "Cache/Log/Archive etc. (Directory: {}, score: 20)"
982 }
983
984 MessageKey::ExcludeReasonNpmDeps => {
986 "npm/yarn dependencies (regenerable from package.json)"
987 }
988 MessageKey::ExcludeReasonRustBuild => {
989 "Rust build artifacts (regenerable from Cargo.toml)"
990 }
991 MessageKey::ExcludeReasonVendor => "Dependency vendoring (regenerable)",
992 MessageKey::ExcludeReasonPythonCache => "Python cache (auto-generated)",
993 MessageKey::ExcludeReasonPytestCache => "pytest cache (auto-generated)",
994 MessageKey::ExcludeReasonBuildArtifacts => "Build artifacts directory (rebuildable)",
995 MessageKey::ExcludeReasonCacheDir => "Cache directory (temporary data)",
996 MessageKey::ExcludeReasonGitMetadata => {
997 "Git repository metadata (recoverable from remote)"
998 }
999 MessageKey::ExcludeReasonSvnMetadata => {
1000 "SVN repository metadata (recoverable from remote)"
1001 }
1002 MessageKey::ExcludeReasonTempFile => "Temporary file",
1003 MessageKey::ExcludeReasonBackupFile => {
1004 "Backup file (unnecessary if original file exists)"
1005 }
1006 MessageKey::ExcludeReasonEditorTemp => "Editor temporary file",
1007 MessageKey::ExcludeReasonLogFile => "Log file (old logs usually unnecessary)",
1008 MessageKey::ExcludeReasonMacOsMetadata => "macOS metadata file (auto-generated)",
1009 MessageKey::ExcludeReasonWindowsThumb => "Windows thumbnail cache (auto-generated)",
1010 MessageKey::ExcludeReasonWindowsDesktop => {
1011 "Windows desktop settings file (auto-generated)"
1012 }
1013 }
1014 }
1015
1016 fn get_ja(&self) -> &'static str {
1018 match self {
1019 MessageKey::AppVersion => "Backup Suite v1.0.0",
1021 MessageKey::AppTitle => "高速ローカルバックアップツール - Rust製・型安全・高性能",
1022 MessageKey::AppDescription => "Backup Suite - 高速ローカルバックアップツール",
1023
1024 MessageKey::BasicCommands => "📋 基本コマンド",
1026 MessageKey::ExecutionCommands => "🚀 実行コマンド",
1027 MessageKey::InformationCommands => "📊 情報表示",
1028 MessageKey::ConfigCommands => "⚙️ 設定管理",
1029 MessageKey::UtilityCommands => "🔧 ユーティリティ",
1030 MessageKey::SmartCommands => "🤖 Smartコマンド",
1031
1032 MessageKey::CmdAdd => "add",
1034 MessageKey::CmdList => "list, ls",
1035 MessageKey::CmdRemove => "remove",
1036 MessageKey::CmdClear => "clear",
1037 MessageKey::CmdRun => "run",
1038 MessageKey::CmdRestore => "restore",
1039 MessageKey::CmdCleanup => "cleanup",
1040 MessageKey::CmdStatus => "status",
1041 MessageKey::CmdHistory => "history",
1042 MessageKey::CmdDashboard => "dashboard",
1043 MessageKey::CmdEnable => "enable",
1044 MessageKey::CmdDisable => "disable",
1045 MessageKey::CmdSchedule => "schedule",
1046 MessageKey::CmdConfig => "config",
1047 MessageKey::CmdOpen => "open",
1048 MessageKey::CmdCompletion => "completion",
1049 MessageKey::CmdSmart => "ai",
1050
1051 MessageKey::DescAdd => "対象追加(インタラクティブ選択対応)",
1053 MessageKey::DescList => "一覧表示",
1054 MessageKey::DescRemove => "対象削除(インタラクティブ選択対応)",
1055 MessageKey::DescClear => "一括削除",
1056 MessageKey::DescRun => "バックアップ実行(暗号化・圧縮対応)",
1057 MessageKey::DescRestore => "バックアップ復元(暗号化・圧縮自動検出)",
1058 MessageKey::DescCleanup => "古いバックアップ削除",
1059 MessageKey::DescStatus => "ステータス表示",
1060 MessageKey::DescHistory => "履歴表示",
1061 MessageKey::DescDashboard => "ダッシュボード表示",
1062 MessageKey::DescEnable => "自動バックアップ有効化",
1063 MessageKey::DescDisable => "自動バックアップ無効化",
1064 MessageKey::DescSchedule => "スケジュール管理",
1065 MessageKey::DescConfig => "設定管理(保存先・保持期間)",
1066 MessageKey::DescOpen => "バックアップディレクトリを開く",
1067 MessageKey::DescCompletion => "シェル補完スクリプト生成",
1068 MessageKey::DescSmart => "AI駆動のインテリジェントバックアップ管理",
1069
1070 MessageKey::CmdSmartDetect => "detect",
1072 MessageKey::CmdSmartAnalyze => "analyze",
1073 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
1074 MessageKey::CmdSmartAutoConfigure => "auto-configure",
1075 MessageKey::DescSmartDetect => "バックアップ履歴の異常検知",
1076 MessageKey::DescSmartAnalyze => "ファイル重要度分析",
1077 MessageKey::DescSmartSuggestExclude => "除外パターン提案",
1078 MessageKey::DescSmartAutoConfigure => "Smartルールによる自動設定",
1079
1080 MessageKey::SmartDetectTitle => "🤖 Smart異常検知",
1082 MessageKey::SmartDetectNoAnomalies => "バックアップ履歴に異常は検出されませんでした",
1083 MessageKey::SmartDetectAnomalyFound => "異常を検出しました",
1084 MessageKey::SmartAnalyzeTitle => "🤖 Smartファイル重要度分析",
1085 MessageKey::SmartAnalyzeImportanceHigh => "重要度:高",
1086 MessageKey::SmartAnalyzeImportanceMedium => "重要度:中",
1087 MessageKey::SmartAnalyzeImportanceLow => "重要度:低",
1088 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart除外パターン提案",
1089 MessageKey::SmartSuggestExcludeRecommendation => "除外推奨",
1090 MessageKey::SmartAutoConfigureTitle => "🤖 Smart自動設定",
1091 MessageKey::SmartAutoConfigureSuccess => "自動設定が完了しました",
1092 MessageKey::SmartErrorNotEnabled => {
1093 "Smart機能が有効化されていません。--features smart でコンパイルしてください"
1094 }
1095 MessageKey::SmartErrorInsufficientData => "Smart分析に必要なデータが不足しています",
1096 MessageKey::SmartErrorAnalysisFailed => "Smart分析に失敗しました",
1097
1098 MessageKey::Options => "オプション:",
1100 MessageKey::HelpOption => "-h, --help このヘルプを表示",
1101 MessageKey::VersionOption => "-V, --version バージョン情報を表示",
1102
1103 MessageKey::UsageExamples => "使用例:",
1105 MessageKey::ExampleAddInteractive => "# インタラクティブでファイルを追加",
1106 MessageKey::ExampleRunHigh => "# 高優先度のバックアップを実行",
1107 MessageKey::ExampleEncrypt => "# 暗号化バックアップ(AES-256-GCM)",
1108 MessageKey::ExampleCompress => "# 圧縮バックアップ(zstd高速圧縮)",
1109 MessageKey::ExampleEncryptCompress => "# 暗号化+圧縮バックアップ",
1110 MessageKey::ExampleCleanup => "# 30日以上前のバックアップを削除(ドライラン)",
1111 MessageKey::ExampleSchedule => "# スケジュールを設定して有効化",
1112 MessageKey::ExampleSmartDetect => "# 直近7日間の異常検知",
1113 MessageKey::ExampleSmartAnalyze => "# ファイル重要度分析",
1114 MessageKey::ExampleSmartSuggestExclude => "# Smart除外推奨を取得",
1115
1116 MessageKey::DetailedInfo => "詳細情報:",
1118 MessageKey::DetailCommand => "各コマンドの詳細: backup-suite <コマンド> --help",
1119 MessageKey::ConfigFile => "設定ファイル: ~/.config/backup-suite/config.toml",
1120 MessageKey::BackupDestination => "バックアップ先: ~/.local/share/backup-suite/backups/",
1121
1122 MessageKey::Added => "追加",
1124 MessageKey::Removed => "削除",
1125 MessageKey::Deleted => "件削除",
1126 MessageKey::Error => "エラー",
1127 MessageKey::Warning => "⚠️",
1128 MessageKey::BackupRunning => "🚀 バックアップ実行",
1129 MessageKey::RestoreStarting => "🔄 復元開始",
1130
1131 MessageKey::EncryptionPassword => "暗号化パスワード",
1133 MessageKey::SavePasswordSecurely => "⚠️ このパスワードを安全に保管してください!",
1134 MessageKey::EncryptOption => "--encrypt: AES-256-GCM暗号化",
1135 MessageKey::CompressOption => "--compress zstd/gzip: 圧縮",
1136 MessageKey::CompressLevel => "--compress-level 1-22: 圧縮レベル",
1137
1138 MessageKey::IncrementalOption => "--incremental: 増分バックアップ(変更ファイルのみ)",
1140 MessageKey::GeneratePasswordOption => "--generate-password: 安全なパスワードを自動生成",
1141 MessageKey::PasswordOption => "--password <パスワード>: 暗号化パスワード指定",
1142 MessageKey::DryRunOption => "--dry-run: ドライランモード(実際のバックアップなし)",
1143 MessageKey::PriorityOption => "--priority <優先度>: 優先度でフィルタ (high/medium/low)",
1144 MessageKey::CategoryOption => "--category <カテゴリ>: カテゴリでフィルタ",
1145
1146 MessageKey::FromOption => "--from <バックアップ名>: 復元するバックアップ",
1148 MessageKey::ToOption => "--to <復元先>: 復元先ディレクトリ",
1149 MessageKey::RestorePasswordOption => {
1150 "--password <パスワード>: 復号化パスワード(暗号化時)"
1151 }
1152
1153 MessageKey::DaysOption => "--days <日数>: 指定日数より古いバックアップを削除",
1155 MessageKey::CleanupDryRunOption => "--dry-run: ドライランモード(削除対象を表示)",
1156
1157 MessageKey::AddPriorityOption => "--priority <優先度>: 優先度を設定 (high/medium/low)",
1159 MessageKey::AddCategoryOption => "--category <カテゴリ>: カテゴリを設定",
1160 MessageKey::InteractiveOption => "--interactive: インタラクティブ選択モード",
1161
1162 MessageKey::ListPriorityOption => "--priority <優先度>: 優先度でフィルタ",
1164
1165 MessageKey::ScheduleTitle => "📅 Backup Suite スケジュール管理",
1167 MessageKey::ScheduleDescription => "自動バックアップのスケジュール設定・制御システム",
1168 MessageKey::ScheduleUsage => "使用方法:",
1169 MessageKey::ScheduleCommands => "📋 スケジュール管理コマンド",
1170 MessageKey::ScheduleEnable => "enable 自動バックアップを有効化",
1171 MessageKey::ScheduleDisable => "disable 自動バックアップを無効化",
1172 MessageKey::ScheduleStatus => "status 現在のスケジュール状態を表示",
1173 MessageKey::ScheduleSetup => "setup スケジュール頻度を設定",
1174 MessageKey::ScheduleHelp => "help このヘルプを表示",
1175
1176 MessageKey::ConfigTitle => "⚙️ Backup Suite 設定管理",
1178 MessageKey::ConfigDescription => {
1179 "バックアップの保存先や保持期間などの設定を管理するコマンド"
1180 }
1181 MessageKey::ConfigUsage => "使用方法:",
1182 MessageKey::ConfigMgmtCommands => "📋 設定管理コマンド",
1183 MessageKey::ConfigSetDestination => {
1184 "set-destination <パス> バックアップ保存先ディレクトリを変更"
1185 }
1186 MessageKey::ConfigGetDestination => {
1187 "get-destination 現在のバックアップ保存先を表示"
1188 }
1189 MessageKey::ConfigSetKeepDays => {
1190 "set-keep-days <日数> バックアップ保持期間を変更 (1-3650日)"
1191 }
1192 MessageKey::ConfigGetKeepDays => {
1193 "get-keep-days 現在のバックアップ保持期間を表示"
1194 }
1195 MessageKey::ConfigOpen => {
1196 "open 設定ファイルをデフォルトエディタで開く"
1197 }
1198 MessageKey::ConfigHelp => "help このヘルプを表示",
1199
1200 MessageKey::ScheduleDetailedOptions => "⚙️ 詳細オプション",
1202 MessageKey::ScheduleEnableOption => "enable --priority <優先度>",
1203 MessageKey::ScheduleDisableOption => "disable --priority <優先度>",
1204 MessageKey::ScheduleSetupOption => "setup --high <頻度> --medium <頻度> --low <頻度>",
1205 MessageKey::ScheduleFrequencies => "📊 頻度設定値:",
1206 MessageKey::ScheduleDaily => "daily - 毎日 2:00 AM",
1207 MessageKey::ScheduleWeekly => "weekly - 毎週日曜 2:00 AM",
1208 MessageKey::ScheduleMonthly => "monthly - 毎月1日 2:00 AM",
1209 MessageKey::ScheduleTips => "💡 ヒント:",
1210 MessageKey::ScheduleTip1 => {
1211 " • スケジュール有効化後、macOSのlaunchctlで自動実行されます"
1212 }
1213 MessageKey::ScheduleTip2 => " • 'status'コマンドで実際の動作状況を確認できます",
1214 MessageKey::ScheduleTip3 => " • 各優先度の設定は独立して管理できます",
1215
1216 MessageKey::ConfigExampleExternal => "# バックアップ先を外付けHDDに変更",
1218 MessageKey::ConfigExampleGetDest => "# 現在のバックアップ先を確認",
1219 MessageKey::ConfigExampleSetDays => "# バックアップ保持期間を60日に変更",
1220 MessageKey::ConfigExampleOpen => "# 設定ファイルをエディタで開く",
1221 MessageKey::ConfigExampleTilde => "# チルダ展開も対応",
1222 MessageKey::ConfigTip1 => " • 存在しないディレクトリは自動的に作成されます",
1223 MessageKey::ConfigTip2 => " • 書き込み権限のチェックが自動で行われます",
1224 MessageKey::ConfigTip3 => {
1225 " • 保持期間を過ぎたバックアップは cleanup コマンドで削除できます"
1226 }
1227
1228 MessageKey::NoTargetsRegistered => "バックアップ対象が登録されていません",
1230 MessageKey::SelectionCancelled => "選択がキャンセルされました",
1231 MessageKey::PathNotExists => "パスが存在しません",
1232 MessageKey::NotInBackupConfig => "バックアップ設定に登録されていません",
1233 MessageKey::SpecifyPriorityOrAll => "--priority または --all を指定してください",
1234 MessageKey::CountDeleted => "件削除",
1235 MessageKey::DryRun => "ドライラン",
1236 MessageKey::Category => "カテゴリ",
1237 MessageKey::Encryption => "暗号化",
1238 MessageKey::Compression => "圧縮",
1239 MessageKey::ErrorDetails => "エラー詳細",
1240 MessageKey::Detected => "検出",
1241 MessageKey::NoBackups => "バックアップなし",
1242 MessageKey::RestoreStart => "復元開始",
1243 MessageKey::Restoring => "復元中...",
1244 MessageKey::RestoredSuccess => "バックアップを正常に復元しました",
1245 MessageKey::RestoredFileCount => "復元ファイル数:",
1246 MessageKey::Deleting => "削除中",
1247 MessageKey::Destination => "保存先",
1248 MessageKey::Targets => "対象",
1249 MessageKey::High => "高",
1250 MessageKey::Medium => "中",
1251 MessageKey::Low => "低",
1252 MessageKey::BackupHistory => "バックアップ履歴",
1253 MessageKey::Days => "日間",
1254 MessageKey::AutoBackupEnabled => "自動バックアップ有効化",
1255 MessageKey::AutoBackupDisabled => "自動バックアップ無効化",
1256 MessageKey::OpenDirectory => "開く",
1257 MessageKey::PriorityScheduleSetup => "優先度スケジュール設定完了",
1258 MessageKey::ScheduleSetupFailed => "優先度スケジュールの設定に失敗しました",
1259 MessageKey::LaunchctlUnloadWarning => "launchctl unload警告",
1260 MessageKey::PriorityScheduleDeleted => "優先度スケジュール削除完了",
1261 MessageKey::ScheduleNotConfigured => "優先度スケジュールは設定されていません",
1262 MessageKey::ScheduleDeletionFailed => "優先度スケジュールの削除に失敗しました",
1263 MessageKey::ActualScheduleStatus => "実際のスケジュール状態",
1264 MessageKey::Enabled => "有効",
1265 MessageKey::Disabled => "無効",
1266 MessageKey::ScheduleSettings => "スケジュール設定",
1267 MessageKey::ScheduleUpdated => "スケジュール更新・適用完了",
1268 MessageKey::ScheduleUpdatedEnableLater => {
1269 "スケジュール設定更新(有効化は 'schedule enable' で)"
1270 }
1271 MessageKey::HighPriority => "高優先度",
1272 MessageKey::MediumPriority => "中優先度",
1273 MessageKey::LowPriority => "低優先度",
1274 MessageKey::DirectoryNotExists => "ディレクトリが存在しません。作成します",
1275 MessageKey::DirectoryCreating => "作成中",
1276 MessageKey::DestinationChanged => "バックアップ先を変更しました",
1277 MessageKey::Before => "変更前",
1278 MessageKey::After => "変更後",
1279 MessageKey::CurrentDestination => "現在のバックアップ先",
1280 MessageKey::KeepDaysOutOfRange => {
1281 "keep_days は 1-3650 の範囲で指定してください(指定値:"
1282 }
1283 MessageKey::KeepDaysChanged => "バックアップ保持期間を変更しました",
1284 MessageKey::CurrentKeepDays => "現在のバックアップ保持期間",
1285 MessageKey::OpeningConfigFile => "設定ファイルを開きます",
1286 MessageKey::EditorDidNotExitCleanly => "エディタが正常に終了しませんでした",
1287 MessageKey::RustFastTypeSafe => {
1288 "AES-256暗号化 & Smart分析機能搭載のインテリジェントバックアップ"
1289 }
1290 MessageKey::ScheduleCommandPlaceholder => "<コマンド>",
1291 MessageKey::ConfigCommandPlaceholder => "<コマンド>",
1292 MessageKey::ConfigArgsPlaceholder => "[引数]",
1293 MessageKey::MainHelp => "メインヘルプ",
1294 MessageKey::ConfigFileLabel => "設定ファイル",
1295 MessageKey::EnableOnlySpecifiedPriority => "指定した優先度のみ有効化 (high/medium/low)",
1296 MessageKey::DisableOnlySpecifiedPriority => "指定した優先度のみ無効化",
1297 MessageKey::SetExecutionFrequency => "各優先度の実行頻度を設定 (daily/weekly/monthly)",
1298 MessageKey::EnableAllAutoBackups => "# 全ての自動バックアップを有効化",
1299 MessageKey::EnableHighOnly => "# 高優先度のみ有効化",
1300 MessageKey::SetupScheduleFreq => "# スケジュール頻度を設定",
1301 MessageKey::CheckCurrentConfig => "# 現在の設定状況を確認",
1302
1303 MessageKey::Files => "ファイル",
1305 MessageKey::EncryptedLabel => "暗号化:",
1306 MessageKey::StatusTitle => "ステータス",
1307 MessageKey::DaysUnit => "日",
1308 MessageKey::DryRunParens => "(ドライラン)",
1309
1310 MessageKey::FilesDetected => "ファイルを検出",
1312 MessageKey::FullBackupMode => "📦 フルバックアップモード(全ファイル)",
1313 MessageKey::IncrementalBackupMode => "📦 増分バックアップモード(変更ファイルのみ)",
1314 MessageKey::BackupComplete => "✓ バックアップ完了",
1315 MessageKey::BackupCompleteWithFailures => "⚠ バックアップ完了(失敗あり)",
1316 MessageKey::BackupResultTitle => "📈 バックアップ結果",
1317 MessageKey::TotalFilesLabel => "総ファイル数",
1318 MessageKey::SuccessfulLabel => "成功",
1319 MessageKey::FailedLabel => "失敗",
1320 MessageKey::TotalSizeLabel => "合計サイズ",
1321
1322 MessageKey::ConfirmRemoveTarget => "本当に {} をバックアップ対象から削除しますか?",
1324 MessageKey::UpdatedTarget => "バックアップ対象を更新しました",
1325 MessageKey::PathLabel => "パス",
1326 MessageKey::PriorityLabel => "優先度",
1327 MessageKey::CategoryLabel => "カテゴリ",
1328 MessageKey::ExcludePatternsLabel => "除外パターン",
1329
1330 MessageKey::PathHistoryLabel => "パス",
1332 MessageKey::StatusHistoryLabel => "ステータス",
1333 MessageKey::FilesHistoryLabel => "ファイル数",
1334 MessageKey::SizeLabel => "サイズ",
1335 MessageKey::CompressionLabel => "圧縮",
1336 MessageKey::EncryptionLabel => "暗号化",
1337 MessageKey::DurationLabel => "処理時間",
1338 MessageKey::EnabledLabel => "有効",
1339 MessageKey::SecondsUnit => "秒",
1340
1341 MessageKey::StatisticsTitle => "📈 統計情報",
1343 MessageKey::DiskUsageTitle => "💾 ディスク使用量",
1344 MessageKey::AllNormalStatus => "⚡ すべて正常です",
1345 MessageKey::WarningsTitle => "⚠️ 警告・注意事項",
1346
1347 MessageKey::PreviousBackupLabel => "前回バックアップ",
1349 MessageKey::ChangedFilesLabel => "変更ファイル数",
1350 MessageKey::NoBackupsFound => "ℹ️ 前回のバックアップが見つかりません。フルバックアップを実行します。",
1351 MessageKey::FullBackupFallback => "⚠️ 前回のメタデータ読み込みに失敗しました。フルバックアップにフォールバックします。",
1352 MessageKey::MetadataLoadFailed => " 詳細",
1353 MessageKey::DryRunMode => "📋 ドライランモード: {} ファイルをバックアップ対象として検出",
1354
1355 MessageKey::TotalTargetsLabel => "総対象数",
1357 MessageKey::HighPriorityTargetsLabel => " 高優先度",
1358 MessageKey::MediumPriorityTargetsLabel => " 中優先度",
1359 MessageKey::LowPriorityTargetsLabel => " 低優先度",
1360 MessageKey::TotalBackupsLabel => "総バックアップ回数",
1361 MessageKey::SuccessCountLabel => " 成功",
1362 MessageKey::TotalFilesCountLabel => "総ファイル数",
1363 MessageKey::TotalDataSizeLabel => "総データサイズ",
1364 MessageKey::LastBackupLabel => "最終バックアップ",
1365 MessageKey::EncryptedBackupsLabel => "暗号化バックアップ",
1366 MessageKey::CompressedBackupsLabel => "圧縮バックアップ",
1367 MessageKey::BackupDirectoryLabel => "バックアップディレクトリ",
1368 MessageKey::UsedCapacityLabel => "使用容量",
1369 MessageKey::FileCountLabel => "ファイル数",
1370 MessageKey::DiskTotalCapacityLabel => "ディスク総容量",
1371 MessageKey::DiskFreeCapacityLabel => "ディスク空き容量",
1372 MessageKey::DiskUsageRateLabel => "ディスク使用率",
1373 MessageKey::UsageStatusLabel => "使用状況",
1374 MessageKey::RecentBackupsTitle => "🕒 最近のバックアップ(直近5件)",
1375
1376 MessageKey::DaysAgo => "{}日前",
1378 MessageKey::HoursAgo => "{}時間前",
1379 MessageKey::MinutesAgo => "{}分前",
1380 MessageKey::JustNow => "たった今",
1381 MessageKey::NotYetBackedUp => "未実施",
1382
1383 MessageKey::WarningTargetNotExists => "バックアップ対象が存在しません: {}",
1385 MessageKey::WarningDaysSinceLastBackup => "最後のバックアップから{}日経過しています",
1386 MessageKey::WarningNoBackupYet => "まだ一度もバックアップが実行されていません",
1387 MessageKey::WarningFailedBackups => "失敗したバックアップが{}件あります",
1388 MessageKey::WarningLowDiskSpace => "ディスク空き容量が少なくなっています ({:.1}%)",
1389 MessageKey::DashboardHintRunBackup => "💡 ヒント: 'backup-suite run' でバックアップを実行できます",
1390
1391 MessageKey::PromptPleaseSelect => "選択してください",
1393 MessageKey::PromptDeleteBackup => "このバックアップを削除しますか?",
1394 MessageKey::PromptDeleteOldBackups => "🗑️ 古いバックアップを削除",
1395 MessageKey::PromptDeleteTarget => "削除対象: {} 件のバックアップ",
1396 MessageKey::PromptDeleteCount => "件",
1397 MessageKey::PromptConfirmDelete => "削除を実行しますか?",
1398 MessageKey::PromptSelectPriority => "優先度を選択してください",
1399 MessageKey::PromptBackupConfirm => "バックアップを実行しますか?",
1400
1401 MessageKey::SmartCategoryDirectory => "ディレクトリ",
1403 MessageKey::SmartCategoryRustProject => "Rustプロジェクト",
1404 MessageKey::SmartCategoryNodeJsProject => "Node.jsプロジェクト",
1405 MessageKey::SmartCategoryPythonProject => "Pythonプロジェクト",
1406 MessageKey::SmartCategorySourceCodeProject => "ソースコードプロジェクト",
1407 MessageKey::SmartCategoryGitManaged => "Git管理ディレクトリ",
1408 MessageKey::SmartCategoryLowPriority => "低優先度ディレクトリ",
1409
1410 MessageKey::SmartReasonSampling => "(サンプリング: {}ファイル, 高重要度: {}件, スコア: {})",
1412 MessageKey::SmartReasonScore => "(スコア: {})",
1413 MessageKey::SmartReasonSecurityDir => "認証情報・秘密鍵({}ディレクトリ、暗号化必須、スコア: 95)",
1414 MessageKey::SmartReasonLowPriorityDir => "キャッシュ/ログ/アーカイブ等 (ディレクトリ: {}, スコア: 20)",
1415
1416 MessageKey::ExcludeReasonNpmDeps => "npm/yarn依存関係(package.jsonから再生成可能)",
1418 MessageKey::ExcludeReasonRustBuild => "Rustビルド成果物(Cargo.tomlから再生成可能)",
1419 MessageKey::ExcludeReasonVendor => "依存関係ベンダリング(再生成可能)",
1420 MessageKey::ExcludeReasonPythonCache => "Pythonキャッシュ(自動生成)",
1421 MessageKey::ExcludeReasonPytestCache => "pytestキャッシュ(自動生成)",
1422 MessageKey::ExcludeReasonBuildArtifacts => "ビルド成果物ディレクトリ(再ビルド可能)",
1423 MessageKey::ExcludeReasonCacheDir => "キャッシュディレクトリ(一時データ)",
1424 MessageKey::ExcludeReasonGitMetadata => "Gitリポジトリメタデータ(リモートから復元可能)",
1425 MessageKey::ExcludeReasonSvnMetadata => "SVNリポジトリメタデータ(リモートから復元可能)",
1426 MessageKey::ExcludeReasonTempFile => "一時ファイル",
1427 MessageKey::ExcludeReasonBackupFile => "バックアップファイル(元ファイルがあれば不要)",
1428 MessageKey::ExcludeReasonEditorTemp => "エディタ一時ファイル",
1429 MessageKey::ExcludeReasonLogFile => "ログファイル(古いログは通常不要)",
1430 MessageKey::ExcludeReasonMacOsMetadata => "macOSメタデータファイル(自動生成)",
1431 MessageKey::ExcludeReasonWindowsThumb => "Windowsサムネイルキャッシュ(自動生成)",
1432 MessageKey::ExcludeReasonWindowsDesktop => "Windowsデスクトップ設定ファイル(自動生成)",
1433 }
1434 }
1435
1436 fn get_zh_cn(&self) -> &'static str {
1438 match self {
1439 MessageKey::SmartCommands => "🤖 Smart命令",
1441 MessageKey::DescSmart => "AI驱动的智能备份管理",
1442 MessageKey::CmdSmartDetect => "detect",
1443 MessageKey::CmdSmartAnalyze => "analyze",
1444 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
1445 MessageKey::CmdSmartAutoConfigure => "auto-configure",
1446 MessageKey::DescSmartDetect => "检测备份历史中的异常",
1447 MessageKey::DescSmartAnalyze => "分析文件重要性",
1448 MessageKey::DescSmartSuggestExclude => "建议排除模式",
1449 MessageKey::DescSmartAutoConfigure => "使用Smart规则自动配置备份设置",
1450 MessageKey::SmartDetectTitle => "🤖 Smart异常检测",
1451 MessageKey::SmartDetectNoAnomalies => "备份历史中未检测到异常",
1452 MessageKey::SmartDetectAnomalyFound => "检测到异常",
1453 MessageKey::SmartAnalyzeTitle => "🤖 Smart文件重要性分析",
1454 MessageKey::SmartAnalyzeImportanceHigh => "重要性:高",
1455 MessageKey::SmartAnalyzeImportanceMedium => "重要性:中",
1456 MessageKey::SmartAnalyzeImportanceLow => "重要性:低",
1457 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart排除模式建议",
1458 MessageKey::SmartSuggestExcludeRecommendation => "建议排除",
1459 MessageKey::SmartAutoConfigureTitle => "🤖 Smart自动配置",
1460 MessageKey::SmartAutoConfigureSuccess => "自动配置成功完成",
1461 MessageKey::SmartErrorNotEnabled => "Smart功能未启用。请使用 --features smart 编译",
1462 MessageKey::SmartErrorInsufficientData => "Smart分析数据不足",
1463 MessageKey::SmartErrorAnalysisFailed => "Smart分析失败",
1464 MessageKey::ExampleSmartDetect => "# 检测最近7天的异常",
1465 MessageKey::ExampleSmartAnalyze => "# 分析文件重要性",
1466 MessageKey::ExampleSmartSuggestExclude => "# 获取Smart排除建议",
1467 MessageKey::RustFastTypeSafe => "AES-256加密 & Smart分析功能的智能备份",
1468 MessageKey::UsageExamples => "使用示例:",
1470
1471 MessageKey::FilesDetected => "检测到文件",
1473 MessageKey::FullBackupMode => "📦 完全备份模式(所有文件)",
1474 MessageKey::IncrementalBackupMode => "📦 增量备份模式(仅变更文件)",
1475 MessageKey::BackupComplete => "✓ 备份完成",
1476 MessageKey::BackupCompleteWithFailures => "⚠ 备份完成(有失败)",
1477 MessageKey::BackupResultTitle => "📈 备份结果",
1478 MessageKey::TotalFilesLabel => "总文件数",
1479 MessageKey::SuccessfulLabel => "成功",
1480 MessageKey::FailedLabel => "失败",
1481 MessageKey::TotalSizeLabel => "总大小",
1482
1483 MessageKey::ConfirmRemoveTarget => "确定要从备份目标中删除 {} 吗?",
1485 MessageKey::UpdatedTarget => "已更新备份目标",
1486 MessageKey::PathLabel => "路径",
1487 MessageKey::PriorityLabel => "优先级",
1488 MessageKey::CategoryLabel => "类别",
1489 MessageKey::ExcludePatternsLabel => "排除模式",
1490
1491 MessageKey::PathHistoryLabel => "路径",
1493 MessageKey::StatusHistoryLabel => "状态",
1494 MessageKey::FilesHistoryLabel => "文件数",
1495 MessageKey::SizeLabel => "大小",
1496 MessageKey::CompressionLabel => "压缩",
1497 MessageKey::EncryptionLabel => "加密",
1498 MessageKey::DurationLabel => "处理时间",
1499 MessageKey::EnabledLabel => "已启用",
1500 MessageKey::SecondsUnit => "秒",
1501
1502 MessageKey::StatisticsTitle => "📈 统计信息",
1504 MessageKey::DiskUsageTitle => "💾 磁盘使用量",
1505 MessageKey::AllNormalStatus => "⚡ 一切正常",
1506 MessageKey::WarningsTitle => "⚠️ 警告·注意事项",
1507
1508 MessageKey::PreviousBackupLabel => "上次备份",
1510 MessageKey::ChangedFilesLabel => "变更文件数",
1511 MessageKey::NoBackupsFound => "ℹ️ 未找到上次备份。执行完全备份。",
1512 MessageKey::FullBackupFallback => "⚠️ 加载元数据失败。回退到完全备份。",
1513 MessageKey::MetadataLoadFailed => " 详情",
1514 MessageKey::DryRunMode => "📋 演习模式: 检测到 {} 个文件待备份",
1515
1516 MessageKey::TotalTargetsLabel => "总目标数",
1518 MessageKey::HighPriorityTargetsLabel => " 高优先级",
1519 MessageKey::MediumPriorityTargetsLabel => " 中优先级",
1520 MessageKey::LowPriorityTargetsLabel => " 低优先级",
1521 MessageKey::TotalBackupsLabel => "总备份次数",
1522 MessageKey::SuccessCountLabel => " 成功",
1523 MessageKey::TotalFilesCountLabel => "总文件数",
1524 MessageKey::TotalDataSizeLabel => "总数据大小",
1525 MessageKey::LastBackupLabel => "最后备份",
1526 MessageKey::EncryptedBackupsLabel => "加密备份",
1527 MessageKey::CompressedBackupsLabel => "压缩备份",
1528 MessageKey::BackupDirectoryLabel => "备份目录",
1529 MessageKey::UsedCapacityLabel => "已用容量",
1530 MessageKey::FileCountLabel => "文件数",
1531 MessageKey::DiskTotalCapacityLabel => "磁盘总容量",
1532 MessageKey::DiskFreeCapacityLabel => "磁盘可用容量",
1533 MessageKey::DiskUsageRateLabel => "磁盘使用率",
1534 MessageKey::UsageStatusLabel => "使用状态",
1535 MessageKey::RecentBackupsTitle => "🕒 最近备份(最新5次)",
1536
1537 MessageKey::DaysAgo => "{}天前",
1539 MessageKey::HoursAgo => "{}小时前",
1540 MessageKey::MinutesAgo => "{}分钟前",
1541 MessageKey::JustNow => "刚刚",
1542 MessageKey::NotYetBackedUp => "尚未执行",
1543
1544 MessageKey::WarningTargetNotExists => "备份目标不存在: {}",
1546 MessageKey::WarningDaysSinceLastBackup => "距离上次备份已过去{}天",
1547 MessageKey::WarningNoBackupYet => "尚未执行过备份",
1548 MessageKey::WarningFailedBackups => "有{}个失败的备份",
1549 MessageKey::WarningLowDiskSpace => "磁盘空间不足 ({:.1}%)",
1550 MessageKey::DashboardHintRunBackup => "💡 提示: 运行 'backup-suite run' 执行备份",
1551
1552 MessageKey::PromptPleaseSelect => "请选择",
1554 MessageKey::PromptDeleteBackup => "确定要删除此备份吗?",
1555 MessageKey::PromptDeleteOldBackups => "🗑️ 删除旧备份",
1556 MessageKey::PromptDeleteTarget => "删除目标: {} 个备份",
1557 MessageKey::PromptDeleteCount => "个",
1558 MessageKey::PromptConfirmDelete => "确定要执行删除吗?",
1559 MessageKey::PromptSelectPriority => "选择优先级",
1560 MessageKey::PromptBackupConfirm => "确定要执行备份吗?",
1561
1562 MessageKey::SmartCategoryDirectory => "目录",
1564 MessageKey::SmartCategoryRustProject => "Rust项目",
1565 MessageKey::SmartCategoryNodeJsProject => "Node.js项目",
1566 MessageKey::SmartCategoryPythonProject => "Python项目",
1567 MessageKey::SmartCategorySourceCodeProject => "源代码项目",
1568 MessageKey::SmartCategoryGitManaged => "Git管理目录",
1569 MessageKey::SmartCategoryLowPriority => "低优先级目录",
1570
1571 MessageKey::SmartReasonSampling => "(采样: {}文件, 高重要性: {}个, 分数: {})",
1573 MessageKey::SmartReasonScore => "(分数: {})",
1574 MessageKey::SmartReasonSecurityDir => "凭证/密钥({}目录,需要加密,分数: 95)",
1575 MessageKey::SmartReasonLowPriorityDir => "缓存/日志/存档等 (目录: {}, 分数: 20)",
1576
1577 MessageKey::ExcludeReasonNpmDeps => "npm/yarn依赖(可从package.json重新生成)",
1579 MessageKey::ExcludeReasonRustBuild => "Rust构建产物(可从Cargo.toml重新生成)",
1580 MessageKey::ExcludeReasonVendor => "依赖供应(可重新生成)",
1581 MessageKey::ExcludeReasonPythonCache => "Python缓存(自动生成)",
1582 MessageKey::ExcludeReasonPytestCache => "pytest缓存(自动生成)",
1583 MessageKey::ExcludeReasonBuildArtifacts => "构建产物目录(可重新构建)",
1584 MessageKey::ExcludeReasonCacheDir => "缓存目录(临时数据)",
1585 MessageKey::ExcludeReasonGitMetadata => "Git仓库元数据(可从远程恢复)",
1586 MessageKey::ExcludeReasonSvnMetadata => "SVN仓库元数据(可从远程恢复)",
1587 MessageKey::ExcludeReasonTempFile => "临时文件",
1588 MessageKey::ExcludeReasonBackupFile => "备份文件(如果原文件存在则不需要)",
1589 MessageKey::ExcludeReasonEditorTemp => "编辑器临时文件",
1590 MessageKey::ExcludeReasonLogFile => "日志文件(旧日志通常不需要)",
1591 MessageKey::ExcludeReasonMacOsMetadata => "macOS元数据文件(自动生成)",
1592 MessageKey::ExcludeReasonWindowsThumb => "Windows缩略图缓存(自动生成)",
1593 MessageKey::ExcludeReasonWindowsDesktop => "Windows桌面设置文件(自动生成)",
1594
1595 _ => self.get_en(), }
1598 }
1599
1600 fn get_zh_tw(&self) -> &'static str {
1602 match self {
1603 MessageKey::SmartCommands => "🤖 Smart指令",
1605 MessageKey::DescSmart => "AI驅動的智慧備份管理",
1606 MessageKey::CmdSmartDetect => "detect",
1607 MessageKey::CmdSmartAnalyze => "analyze",
1608 MessageKey::CmdSmartSuggestExclude => "suggest-exclude",
1609 MessageKey::CmdSmartAutoConfigure => "auto-configure",
1610 MessageKey::DescSmartDetect => "偵測備份歷史中的異常",
1611 MessageKey::DescSmartAnalyze => "分析檔案重要性",
1612 MessageKey::DescSmartSuggestExclude => "建議排除模式",
1613 MessageKey::DescSmartAutoConfigure => "使用Smart規則自動設定備份",
1614 MessageKey::SmartDetectTitle => "🤖 Smart異常偵測",
1615 MessageKey::SmartDetectNoAnomalies => "備份歷史中未偵測到異常",
1616 MessageKey::SmartDetectAnomalyFound => "偵測到異常",
1617 MessageKey::SmartAnalyzeTitle => "🤖 Smart檔案重要性分析",
1618 MessageKey::SmartAnalyzeImportanceHigh => "重要性:高",
1619 MessageKey::SmartAnalyzeImportanceMedium => "重要性:中",
1620 MessageKey::SmartAnalyzeImportanceLow => "重要性:低",
1621 MessageKey::SmartSuggestExcludeTitle => "🤖 Smart排除模式建議",
1622 MessageKey::SmartSuggestExcludeRecommendation => "建議排除",
1623 MessageKey::SmartAutoConfigureTitle => "🤖 Smart自動設定",
1624 MessageKey::SmartAutoConfigureSuccess => "自動設定成功完成",
1625 MessageKey::SmartErrorNotEnabled => "Smart功能未啟用。請使用 --features smart 編譯",
1626 MessageKey::SmartErrorInsufficientData => "Smart分析資料不足",
1627 MessageKey::SmartErrorAnalysisFailed => "Smart分析失敗",
1628 MessageKey::ExampleSmartDetect => "# 偵測最近7天的異常",
1629 MessageKey::ExampleSmartAnalyze => "# 分析檔案重要性",
1630 MessageKey::ExampleSmartSuggestExclude => "# 取得Smart排除建議",
1631 MessageKey::RustFastTypeSafe => "AES-256加密 & Smart分析功能的智慧備份",
1632 MessageKey::UsageExamples => "使用範例:",
1634
1635 MessageKey::FilesDetected => "檢測到檔案",
1637 MessageKey::FullBackupMode => "📦 完全備份模式(所有檔案)",
1638 MessageKey::IncrementalBackupMode => "📦 增量備份模式(僅變更檔案)",
1639 MessageKey::BackupComplete => "✓ 備份完成",
1640 MessageKey::BackupCompleteWithFailures => "⚠ 備份完成(有失敗)",
1641 MessageKey::BackupResultTitle => "📈 備份結果",
1642 MessageKey::TotalFilesLabel => "總檔案數",
1643 MessageKey::SuccessfulLabel => "成功",
1644 MessageKey::FailedLabel => "失敗",
1645 MessageKey::TotalSizeLabel => "總大小",
1646
1647 MessageKey::ConfirmRemoveTarget => "確定要從備份目標中刪除 {} 嗎?",
1649 MessageKey::UpdatedTarget => "已更新備份目標",
1650 MessageKey::PathLabel => "路徑",
1651 MessageKey::PriorityLabel => "優先級",
1652 MessageKey::CategoryLabel => "類別",
1653 MessageKey::ExcludePatternsLabel => "排除模式",
1654
1655 MessageKey::PathHistoryLabel => "路徑",
1657 MessageKey::StatusHistoryLabel => "狀態",
1658 MessageKey::FilesHistoryLabel => "檔案數",
1659 MessageKey::SizeLabel => "大小",
1660 MessageKey::CompressionLabel => "壓縮",
1661 MessageKey::EncryptionLabel => "加密",
1662 MessageKey::DurationLabel => "處理時間",
1663 MessageKey::EnabledLabel => "已啟用",
1664 MessageKey::SecondsUnit => "秒",
1665
1666 MessageKey::StatisticsTitle => "📈 統計資訊",
1668 MessageKey::DiskUsageTitle => "💾 磁碟使用量",
1669 MessageKey::AllNormalStatus => "⚡ 一切正常",
1670 MessageKey::WarningsTitle => "⚠️ 警告·注意事項",
1671
1672 MessageKey::PreviousBackupLabel => "上次備份",
1674 MessageKey::ChangedFilesLabel => "變更檔案數",
1675 MessageKey::NoBackupsFound => "ℹ️ 未找到上次備份。執行完全備份。",
1676 MessageKey::FullBackupFallback => "⚠️ 載入元數據失敗。回退到完全備份。",
1677 MessageKey::MetadataLoadFailed => " 詳情",
1678 MessageKey::DryRunMode => "📋 演習模式: 檢測到 {} 個檔案待備份",
1679
1680 MessageKey::TotalTargetsLabel => "總目標數",
1682 MessageKey::HighPriorityTargetsLabel => " 高優先級",
1683 MessageKey::MediumPriorityTargetsLabel => " 中優先級",
1684 MessageKey::LowPriorityTargetsLabel => " 低優先級",
1685 MessageKey::TotalBackupsLabel => "總備份次數",
1686 MessageKey::SuccessCountLabel => " 成功",
1687 MessageKey::TotalFilesCountLabel => "總檔案數",
1688 MessageKey::TotalDataSizeLabel => "總資料大小",
1689 MessageKey::LastBackupLabel => "最後備份",
1690 MessageKey::EncryptedBackupsLabel => "加密備份",
1691 MessageKey::CompressedBackupsLabel => "壓縮備份",
1692 MessageKey::BackupDirectoryLabel => "備份目錄",
1693 MessageKey::UsedCapacityLabel => "已用容量",
1694 MessageKey::FileCountLabel => "檔案數",
1695 MessageKey::DiskTotalCapacityLabel => "磁碟總容量",
1696 MessageKey::DiskFreeCapacityLabel => "磁碟可用容量",
1697 MessageKey::DiskUsageRateLabel => "磁碟使用率",
1698 MessageKey::UsageStatusLabel => "使用狀態",
1699 MessageKey::RecentBackupsTitle => "🕒 最近備份(最新5次)",
1700
1701 MessageKey::DaysAgo => "{}天前",
1703 MessageKey::HoursAgo => "{}小時前",
1704 MessageKey::MinutesAgo => "{}分鐘前",
1705 MessageKey::JustNow => "剛剛",
1706 MessageKey::NotYetBackedUp => "尚未執行",
1707
1708 MessageKey::WarningTargetNotExists => "備份目標不存在: {}",
1710 MessageKey::WarningDaysSinceLastBackup => "距離上次備份已過去{}天",
1711 MessageKey::WarningNoBackupYet => "尚未執行過備份",
1712 MessageKey::WarningFailedBackups => "有{}個失敗的備份",
1713 MessageKey::WarningLowDiskSpace => "磁碟空間不足 ({:.1}%)",
1714 MessageKey::DashboardHintRunBackup => "💡 提示: 執行 'backup-suite run' 進行備份",
1715
1716 MessageKey::PromptPleaseSelect => "請選擇",
1718 MessageKey::PromptDeleteBackup => "確定要刪除此備份嗎?",
1719 MessageKey::PromptDeleteOldBackups => "🗑️ 刪除舊備份",
1720 MessageKey::PromptDeleteTarget => "刪除目標: {} 個備份",
1721 MessageKey::PromptDeleteCount => "個",
1722 MessageKey::PromptConfirmDelete => "確定要執行刪除嗎?",
1723 MessageKey::PromptSelectPriority => "選擇優先級",
1724 MessageKey::PromptBackupConfirm => "確定要執行備份嗎?",
1725
1726 MessageKey::SmartCategoryDirectory => "目錄",
1728 MessageKey::SmartCategoryRustProject => "Rust專案",
1729 MessageKey::SmartCategoryNodeJsProject => "Node.js專案",
1730 MessageKey::SmartCategoryPythonProject => "Python專案",
1731 MessageKey::SmartCategorySourceCodeProject => "原始碼專案",
1732 MessageKey::SmartCategoryGitManaged => "Git管理目錄",
1733 MessageKey::SmartCategoryLowPriority => "低優先級目錄",
1734
1735 MessageKey::SmartReasonSampling => "(採樣: {}檔案, 高重要性: {}個, 分數: {})",
1737 MessageKey::SmartReasonScore => "(分數: {})",
1738 MessageKey::SmartReasonSecurityDir => "憑證/密鑰({}目錄,需要加密,分數: 95)",
1739 MessageKey::SmartReasonLowPriorityDir => "快取/日誌/封存等 (目錄: {}, 分數: 20)",
1740
1741 MessageKey::ExcludeReasonNpmDeps => "npm/yarn依賴(可從package.json重新生成)",
1743 MessageKey::ExcludeReasonRustBuild => "Rust建置產物(可從Cargo.toml重新生成)",
1744 MessageKey::ExcludeReasonVendor => "依賴供應(可重新生成)",
1745 MessageKey::ExcludeReasonPythonCache => "Python快取(自動生成)",
1746 MessageKey::ExcludeReasonPytestCache => "pytest快取(自動生成)",
1747 MessageKey::ExcludeReasonBuildArtifacts => "建置產物目錄(可重新建置)",
1748 MessageKey::ExcludeReasonCacheDir => "快取目錄(暫存資料)",
1749 MessageKey::ExcludeReasonGitMetadata => "Git儲存庫元數據(可從遠端恢復)",
1750 MessageKey::ExcludeReasonSvnMetadata => "SVN儲存庫元數據(可從遠端恢復)",
1751 MessageKey::ExcludeReasonTempFile => "暫存檔案",
1752 MessageKey::ExcludeReasonBackupFile => "備份檔案(如果原檔案存在則不需要)",
1753 MessageKey::ExcludeReasonEditorTemp => "編輯器暫存檔案",
1754 MessageKey::ExcludeReasonLogFile => "日誌檔案(舊日誌通常不需要)",
1755 MessageKey::ExcludeReasonMacOsMetadata => "macOS元數據檔案(自動生成)",
1756 MessageKey::ExcludeReasonWindowsThumb => "Windows縮圖快取(自動生成)",
1757 MessageKey::ExcludeReasonWindowsDesktop => "Windows桌面設定檔案(自動生成)",
1758
1759 _ => self.get_en(), }
1762 }
1763}
1764
1765#[must_use]
1767pub fn get_message(key: MessageKey, lang: Language) -> &'static str {
1768 key.get(lang)
1769}
1770
1771#[cfg(test)]
1772mod tests {
1773 use super::*;
1774
1775 #[test]
1776 fn test_language_detection() {
1777 let _lang = Language::detect();
1779 }
1782
1783 #[test]
1784 fn test_language_parsing() {
1785 assert_eq!(Language::parse("en"), Some(Language::English));
1787 assert_eq!(Language::parse("english"), Some(Language::English));
1788
1789 assert_eq!(Language::parse("ja"), Some(Language::Japanese));
1791 assert_eq!(Language::parse("japanese"), Some(Language::Japanese));
1792 assert_eq!(Language::parse("日本語"), Some(Language::Japanese));
1793
1794 assert_eq!(Language::parse("zh-cn"), Some(Language::SimplifiedChinese));
1796 assert_eq!(Language::parse("zh_cn"), Some(Language::SimplifiedChinese));
1797 assert_eq!(
1798 Language::parse("zh-hans"),
1799 Some(Language::SimplifiedChinese)
1800 );
1801 assert_eq!(
1802 Language::parse("zh_hans"),
1803 Some(Language::SimplifiedChinese)
1804 );
1805 assert_eq!(
1806 Language::parse("simplified chinese"),
1807 Some(Language::SimplifiedChinese)
1808 );
1809 assert_eq!(
1810 Language::parse("简体中文"),
1811 Some(Language::SimplifiedChinese)
1812 );
1813
1814 assert_eq!(Language::parse("zh-tw"), Some(Language::TraditionalChinese));
1816 assert_eq!(Language::parse("zh_tw"), Some(Language::TraditionalChinese));
1817 assert_eq!(Language::parse("zh-hk"), Some(Language::TraditionalChinese));
1818 assert_eq!(Language::parse("zh_hk"), Some(Language::TraditionalChinese));
1819 assert_eq!(
1820 Language::parse("zh-hant"),
1821 Some(Language::TraditionalChinese)
1822 );
1823 assert_eq!(
1824 Language::parse("zh_hant"),
1825 Some(Language::TraditionalChinese)
1826 );
1827 assert_eq!(
1828 Language::parse("traditional chinese"),
1829 Some(Language::TraditionalChinese)
1830 );
1831 assert_eq!(
1832 Language::parse("繁體中文"),
1833 Some(Language::TraditionalChinese)
1834 );
1835 assert_eq!(
1836 Language::parse("繁体中文"),
1837 Some(Language::TraditionalChinese)
1838 );
1839
1840 assert_eq!(Language::parse("unknown"), None);
1842 }
1843
1844 #[test]
1845 fn test_language_parse_null_byte_rejection() {
1846 assert_eq!(Language::parse("en\0"), None);
1848 assert_eq!(Language::parse("\0ja"), None);
1849 assert_eq!(Language::parse("test\0malicious"), None);
1850 }
1851
1852 #[test]
1853 fn test_language_code() {
1854 assert_eq!(Language::English.code(), "en");
1855 assert_eq!(Language::Japanese.code(), "ja");
1856 assert_eq!(Language::SimplifiedChinese.code(), "zh-cn");
1857 assert_eq!(Language::TraditionalChinese.code(), "zh-tw");
1858 }
1859
1860 #[test]
1861 fn test_message_translation() {
1862 assert_eq!(
1864 get_message(MessageKey::AppVersion, Language::English),
1865 "Backup Suite v1.0.0"
1866 );
1867
1868 assert_eq!(
1870 get_message(MessageKey::AppVersion, Language::Japanese),
1871 "Backup Suite v1.0.0"
1872 );
1873
1874 assert_eq!(
1876 get_message(MessageKey::AppVersion, Language::SimplifiedChinese),
1877 "Backup Suite v1.0.0"
1878 );
1879
1880 assert_eq!(
1882 get_message(MessageKey::AppVersion, Language::TraditionalChinese),
1883 "Backup Suite v1.0.0"
1884 );
1885
1886 assert!(get_message(MessageKey::AppTitle, Language::English).contains("Fast"));
1888 assert!(get_message(MessageKey::AppTitle, Language::Japanese).contains("高速"));
1889 }
1890
1891 #[test]
1892 fn test_ai_messages() {
1893 assert_eq!(
1895 get_message(MessageKey::SmartCommands, Language::English),
1896 "🤖 Smart Commands"
1897 );
1898 assert_eq!(
1899 get_message(MessageKey::SmartCommands, Language::Japanese),
1900 "🤖 Smartコマンド"
1901 );
1902 }
1903}