backup_suite/
i18n.rs

1//! # Internationalization (i18n) Module
2//!
3//! Provides multi-language support for the Backup Suite CLI.
4//! Default language: English
5//! Supported languages: English, Japanese, Simplified Chinese, Traditional Chinese
6
7/// Supported languages
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum Language {
10    English,
11    Japanese,
12    SimplifiedChinese,
13    TraditionalChinese,
14}
15
16impl Language {
17    /// Detect language from environment and CLI arguments
18    /// Priority: CLI flag > Environment variable > Default (English)
19    #[must_use]
20    pub fn detect() -> Self {
21        // Check LANG environment variable
22        if let Ok(lang) = std::env::var("LANG") {
23            let lang_lower = lang.to_lowercase();
24
25            // Japanese detection
26            if lang_lower.starts_with("ja") || lang_lower.starts_with("jp") {
27                return Language::Japanese;
28            }
29
30            // Simplified Chinese detection (zh-CN, zh-Hans, zh_CN, zh_Hans)
31            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            // Traditional Chinese detection (zh-TW, zh-HK, zh-Hant, zh_TW, zh_HK, zh_Hant)
40            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        // Check LC_ALL environment variable as fallback
52        if let Ok(lang) = std::env::var("LC_ALL") {
53            let lang_lower = lang.to_lowercase();
54
55            // Japanese detection
56            if lang_lower.starts_with("ja") || lang_lower.starts_with("jp") {
57                return Language::Japanese;
58            }
59
60            // Simplified Chinese detection
61            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            // Traditional Chinese detection
70            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        // Default to English
82        Language::English
83    }
84
85    /// Parse language from string
86    ///
87    /// # Security
88    /// - Rejects null bytes (security vulnerability)
89    /// - Rejects command injection patterns (semicolons, pipes, etc.)
90    /// - Rejects path traversal attempts (../, ..\)
91    /// - Rejects excessively long inputs (> 100 chars)
92    /// - Whitelist-based validation (only known language codes accepted)
93    #[must_use]
94    pub fn parse(s: &str) -> Option<Self> {
95        // Security: Reject null bytes
96        if s.contains('\0') {
97            return None;
98        }
99
100        // Security: Reject command injection patterns
101        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        // Security: Reject path traversal attempts
113        if s.contains("..") || s.contains('/') || s.contains('\\') {
114            return None;
115        }
116
117        // Security: Reject excessively long inputs (DoS prevention)
118        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    /// Convert to language code
142    #[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/// Message keys for internationalization
154#[derive(Debug, Clone, Copy)]
155pub enum MessageKey {
156    // Version and title
157    AppVersion,
158    AppTitle,
159    AppDescription,
160
161    // Command categories
162    BasicCommands,
163    ExecutionCommands,
164    InformationCommands,
165    ConfigCommands,
166    UtilityCommands,
167    SmartCommands,
168
169    // Commands
170    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    // Command descriptions
189    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    // AI subcommands
208    CmdSmartDetect,
209    CmdSmartAnalyze,
210    CmdSmartSuggestExclude,
211    CmdSmartAutoConfigure,
212    DescSmartDetect,
213    DescSmartAnalyze,
214    DescSmartSuggestExclude,
215    DescSmartAutoConfigure,
216
217    // AI messages
218    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
234    Options,
235    HelpOption,
236    VersionOption,
237
238    // Usage examples
239    UsageExamples,
240    ExampleAddInteractive,
241    ExampleRunHigh,
242    ExampleEncrypt,
243    ExampleCompress,
244    ExampleEncryptCompress,
245    ExampleCleanup,
246    ExampleSchedule,
247    ExampleSmartDetect,
248    ExampleSmartAnalyze,
249    ExampleSmartSuggestExclude,
250
251    // Detailed info
252    DetailedInfo,
253    DetailCommand,
254    ConfigFile,
255    BackupDestination,
256
257    // Status messages
258    Added,
259    Removed,
260    Deleted,
261    Error,
262    Warning,
263    BackupRunning,
264    RestoreStarting,
265
266    // Encryption and compression
267    EncryptionPassword,
268    SavePasswordSecurely,
269    EncryptOption,
270    CompressOption,
271    CompressLevel,
272
273    // Run command options
274    IncrementalOption,
275    GeneratePasswordOption,
276    PasswordOption,
277    DryRunOption,
278    PriorityOption,
279    CategoryOption,
280
281    // Restore command options
282    FromOption,
283    ToOption,
284    RestorePasswordOption,
285
286    // Cleanup command options
287    DaysOption,
288    CleanupDryRunOption,
289
290    // Add command options
291    AddPriorityOption,
292    AddCategoryOption,
293    InteractiveOption,
294
295    // List command options
296    ListPriorityOption,
297
298    // Schedule help
299    ScheduleTitle,
300    ScheduleDescription,
301    ScheduleUsage,
302    ScheduleCommands,
303    ScheduleEnable,
304    ScheduleDisable,
305    ScheduleStatus,
306    ScheduleSetup,
307    ScheduleHelp,
308
309    // Config help
310    ConfigTitle,
311    ConfigDescription,
312    ConfigUsage,
313    ConfigMgmtCommands,
314    ConfigSetDestination,
315    ConfigGetDestination,
316    ConfigSetKeepDays,
317    ConfigGetKeepDays,
318    ConfigOpen,
319    ConfigHelp,
320
321    // Schedule detailed options
322    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    // Config examples and tips
336    ConfigExampleExternal,
337    ConfigExampleGetDest,
338    ConfigExampleSetDays,
339    ConfigExampleOpen,
340    ConfigExampleTilde,
341    ConfigTip1,
342    ConfigTip2,
343    ConfigTip3,
344
345    // Runtime messages
346    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    // Additional runtime units and labels
415    Files,
416    EncryptedLabel,
417    StatusTitle,
418    DaysUnit,
419    DryRunParens,
420
421    // Backup progress and result messages
422    FilesDetected,
423    FullBackupMode,
424    IncrementalBackupMode,
425    BackupComplete,
426    BackupCompleteWithFailures,
427    BackupResultTitle,
428    TotalFilesLabel,
429    SuccessfulLabel,
430    FailedLabel,
431    TotalSizeLabel,
432
433    // Remove/Update command messages
434    ConfirmRemoveTarget,
435    UpdatedTarget,
436    PathLabel,
437    PriorityLabel,
438    CategoryLabel,
439    ExcludePatternsLabel,
440
441    // History detailed view
442    PathHistoryLabel,
443    StatusHistoryLabel,
444    FilesHistoryLabel,
445    SizeLabel,
446    CompressionLabel,
447    EncryptionLabel,
448    DurationLabel,
449    EnabledLabel,
450    SecondsUnit,
451
452    // Dashboard sections
453    StatisticsTitle,
454    DiskUsageTitle,
455    AllNormalStatus,
456    WarningsTitle,
457
458    // Dashboard statistics labels
459    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    // Incremental backup messages
480    PreviousBackupLabel,
481    ChangedFilesLabel,
482    NoBackupsFound,
483    FullBackupFallback,
484    MetadataLoadFailed,
485    DryRunMode,
486
487    // Relative time messages
488    DaysAgo,
489    HoursAgo,
490    MinutesAgo,
491    JustNow,
492    NotYetBackedUp,
493
494    // Dashboard warning messages
495    WarningTargetNotExists,
496    WarningDaysSinceLastBackup,
497    WarningNoBackupYet,
498    WarningFailedBackups,
499    WarningLowDiskSpace,
500    DashboardHintRunBackup,
501
502    // Interactive prompts
503    PromptPleaseSelect,
504    PromptDeleteBackup,
505    PromptDeleteOldBackups,
506    PromptDeleteTarget,
507    PromptDeleteCount,
508    PromptConfirmDelete,
509    PromptSelectPriority,
510    PromptBackupConfirm,
511
512    // Smart Analyze categories
513    SmartCategoryDirectory,
514    SmartCategoryRustProject,
515    SmartCategoryNodeJsProject,
516    SmartCategoryPythonProject,
517    SmartCategorySourceCodeProject,
518    SmartCategoryGitManaged,
519    SmartCategoryLowPriority,
520
521    // Smart Analyze reasons
522    SmartReasonSampling,
523    SmartReasonScore,
524    SmartReasonSecurityDir,
525    SmartReasonLowPriorityDir,
526
527    // Smart Exclude reasons
528    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    /// Get translated message for the given language
548    #[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    /// Get English message
559    fn get_en(&self) -> &'static str {
560        match self {
561            // Version and title
562            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            // Command categories
569            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            // Commands
577            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            // Command descriptions
596            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            // AI subcommands
615            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            // AI messages
625            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            // Options
643            MessageKey::Options => "Options:",
644            MessageKey::HelpOption => "-h, --help       Display this help",
645            MessageKey::VersionOption => "-V, --version    Display version information",
646
647            // Usage examples
648            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            // Detailed info
661            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            // Status messages
669            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            // Encryption and compression
678            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            // Run command options
685            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            // Restore command options
697            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            // Cleanup command options
704            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            // Add command options
710            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            // List command options
717            MessageKey::ListPriorityOption => "--priority <PRIORITY>: Filter by priority",
718
719            // Schedule help
720            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            // Config help
731            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            // Schedule detailed options
755            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            // Config examples and tips
771            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            // Runtime messages
783            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            // Additional runtime units and labels
860            MessageKey::Files => "files",
861            MessageKey::EncryptedLabel => "Encrypted:",
862            MessageKey::StatusTitle => "Status",
863            MessageKey::DaysUnit => "days",
864            MessageKey::DryRunParens => "(dry run)",
865
866            // Backup progress and result messages
867            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            // Remove/Update command messages
879            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            // History detailed view
889            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            // Dashboard sections
900            MessageKey::StatisticsTitle => "📈 Statistics",
901            MessageKey::DiskUsageTitle => "💾 Disk Usage",
902            MessageKey::AllNormalStatus => "⚡ All Normal",
903            MessageKey::WarningsTitle => "⚠️  Warnings",
904
905            // Incremental backup messages
906            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            // Dashboard statistics labels
916            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            // Relative time messages
937            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            // Dashboard warning messages
944            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            // Interactive prompts
954            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            // Smart Analyze categories
964            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            // Smart Analyze reasons
973            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            // Smart Exclude reasons
985            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    /// Get Japanese message
1017    fn get_ja(&self) -> &'static str {
1018        match self {
1019            // Version and title
1020            MessageKey::AppVersion => "Backup Suite v1.0.0",
1021            MessageKey::AppTitle => "高速ローカルバックアップツール - Rust製・型安全・高性能",
1022            MessageKey::AppDescription => "Backup Suite - 高速ローカルバックアップツール",
1023
1024            // Command categories
1025            MessageKey::BasicCommands => "📋 基本コマンド",
1026            MessageKey::ExecutionCommands => "🚀 実行コマンド",
1027            MessageKey::InformationCommands => "📊 情報表示",
1028            MessageKey::ConfigCommands => "⚙️  設定管理",
1029            MessageKey::UtilityCommands => "🔧 ユーティリティ",
1030            MessageKey::SmartCommands => "🤖 Smartコマンド",
1031
1032            // Commands
1033            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            // Command descriptions
1052            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            // AI subcommands
1071            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            // AI messages
1081            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            // Options
1099            MessageKey::Options => "オプション:",
1100            MessageKey::HelpOption => "-h, --help       このヘルプを表示",
1101            MessageKey::VersionOption => "-V, --version    バージョン情報を表示",
1102
1103            // Usage examples
1104            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            // Detailed info
1117            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            // Status messages
1123            MessageKey::Added => "追加",
1124            MessageKey::Removed => "削除",
1125            MessageKey::Deleted => "件削除",
1126            MessageKey::Error => "エラー",
1127            MessageKey::Warning => "⚠️",
1128            MessageKey::BackupRunning => "🚀 バックアップ実行",
1129            MessageKey::RestoreStarting => "🔄 復元開始",
1130
1131            // Encryption and compression
1132            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            // Run command options
1139            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            // Restore command options
1147            MessageKey::FromOption => "--from <バックアップ名>: 復元するバックアップ",
1148            MessageKey::ToOption => "--to <復元先>: 復元先ディレクトリ",
1149            MessageKey::RestorePasswordOption => {
1150                "--password <パスワード>: 復号化パスワード(暗号化時)"
1151            }
1152
1153            // Cleanup command options
1154            MessageKey::DaysOption => "--days <日数>: 指定日数より古いバックアップを削除",
1155            MessageKey::CleanupDryRunOption => "--dry-run: ドライランモード(削除対象を表示)",
1156
1157            // Add command options
1158            MessageKey::AddPriorityOption => "--priority <優先度>: 優先度を設定 (high/medium/low)",
1159            MessageKey::AddCategoryOption => "--category <カテゴリ>: カテゴリを設定",
1160            MessageKey::InteractiveOption => "--interactive: インタラクティブ選択モード",
1161
1162            // List command options
1163            MessageKey::ListPriorityOption => "--priority <優先度>: 優先度でフィルタ",
1164
1165            // Schedule help
1166            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            // Config help
1177            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            // Schedule detailed options
1201            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            // Config examples and tips
1217            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            // Runtime messages
1229            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            // Additional runtime units and labels
1304            MessageKey::Files => "ファイル",
1305            MessageKey::EncryptedLabel => "暗号化:",
1306            MessageKey::StatusTitle => "ステータス",
1307            MessageKey::DaysUnit => "日",
1308            MessageKey::DryRunParens => "(ドライラン)",
1309
1310            // Backup progress and result messages
1311            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            // Remove/Update command messages
1323            MessageKey::ConfirmRemoveTarget => "本当に {} をバックアップ対象から削除しますか?",
1324            MessageKey::UpdatedTarget => "バックアップ対象を更新しました",
1325            MessageKey::PathLabel => "パス",
1326            MessageKey::PriorityLabel => "優先度",
1327            MessageKey::CategoryLabel => "カテゴリ",
1328            MessageKey::ExcludePatternsLabel => "除外パターン",
1329
1330            // History detailed view
1331            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            // Dashboard sections
1342            MessageKey::StatisticsTitle => "📈 統計情報",
1343            MessageKey::DiskUsageTitle => "💾 ディスク使用量",
1344            MessageKey::AllNormalStatus => "⚡ すべて正常です",
1345            MessageKey::WarningsTitle => "⚠️  警告・注意事項",
1346
1347            // Incremental backup messages
1348            MessageKey::PreviousBackupLabel => "前回バックアップ",
1349            MessageKey::ChangedFilesLabel => "変更ファイル数",
1350            MessageKey::NoBackupsFound => "ℹ️  前回のバックアップが見つかりません。フルバックアップを実行します。",
1351            MessageKey::FullBackupFallback => "⚠️  前回のメタデータ読み込みに失敗しました。フルバックアップにフォールバックします。",
1352            MessageKey::MetadataLoadFailed => "   詳細",
1353            MessageKey::DryRunMode => "📋 ドライランモード: {} ファイルをバックアップ対象として検出",
1354
1355            // Dashboard statistics labels
1356            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            // Relative time messages
1377            MessageKey::DaysAgo => "{}日前",
1378            MessageKey::HoursAgo => "{}時間前",
1379            MessageKey::MinutesAgo => "{}分前",
1380            MessageKey::JustNow => "たった今",
1381            MessageKey::NotYetBackedUp => "未実施",
1382
1383            // Dashboard warning messages
1384            MessageKey::WarningTargetNotExists => "バックアップ対象が存在しません: {}",
1385            MessageKey::WarningDaysSinceLastBackup => "最後のバックアップから{}日経過しています",
1386            MessageKey::WarningNoBackupYet => "まだ一度もバックアップが実行されていません",
1387            MessageKey::WarningFailedBackups => "失敗したバックアップが{}件あります",
1388            MessageKey::WarningLowDiskSpace => "ディスク空き容量が少なくなっています ({:.1}%)",
1389            MessageKey::DashboardHintRunBackup => "💡 ヒント: 'backup-suite run' でバックアップを実行できます",
1390
1391            // Interactive prompts
1392            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            // Smart Analyze categories
1402            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            // Smart Analyze reasons
1411            MessageKey::SmartReasonSampling => "(サンプリング: {}ファイル, 高重要度: {}件, スコア: {})",
1412            MessageKey::SmartReasonScore => "(スコア: {})",
1413            MessageKey::SmartReasonSecurityDir => "認証情報・秘密鍵({}ディレクトリ、暗号化必須、スコア: 95)",
1414            MessageKey::SmartReasonLowPriorityDir => "キャッシュ/ログ/アーカイブ等 (ディレクトリ: {}, スコア: 20)",
1415
1416            // Smart Exclude reasons
1417            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    /// Get Simplified Chinese message
1437    fn get_zh_cn(&self) -> &'static str {
1438        match self {
1439            // AI-related messages
1440            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            // Common messages
1469            MessageKey::UsageExamples => "使用示例:",
1470
1471            // Backup progress and result messages
1472            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            // Remove/Update command messages
1484            MessageKey::ConfirmRemoveTarget => "确定要从备份目标中删除 {} 吗?",
1485            MessageKey::UpdatedTarget => "已更新备份目标",
1486            MessageKey::PathLabel => "路径",
1487            MessageKey::PriorityLabel => "优先级",
1488            MessageKey::CategoryLabel => "类别",
1489            MessageKey::ExcludePatternsLabel => "排除模式",
1490
1491            // History detailed view
1492            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            // Dashboard sections
1503            MessageKey::StatisticsTitle => "📈 统计信息",
1504            MessageKey::DiskUsageTitle => "💾 磁盘使用量",
1505            MessageKey::AllNormalStatus => "⚡ 一切正常",
1506            MessageKey::WarningsTitle => "⚠️  警告·注意事项",
1507
1508            // Incremental backup messages
1509            MessageKey::PreviousBackupLabel => "上次备份",
1510            MessageKey::ChangedFilesLabel => "变更文件数",
1511            MessageKey::NoBackupsFound => "ℹ️  未找到上次备份。执行完全备份。",
1512            MessageKey::FullBackupFallback => "⚠️  加载元数据失败。回退到完全备份。",
1513            MessageKey::MetadataLoadFailed => "   详情",
1514            MessageKey::DryRunMode => "📋 演习模式: 检测到 {} 个文件待备份",
1515
1516            // Dashboard statistics labels
1517            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            // Relative time messages
1538            MessageKey::DaysAgo => "{}天前",
1539            MessageKey::HoursAgo => "{}小时前",
1540            MessageKey::MinutesAgo => "{}分钟前",
1541            MessageKey::JustNow => "刚刚",
1542            MessageKey::NotYetBackedUp => "尚未执行",
1543
1544            // Dashboard warning messages
1545            MessageKey::WarningTargetNotExists => "备份目标不存在: {}",
1546            MessageKey::WarningDaysSinceLastBackup => "距离上次备份已过去{}天",
1547            MessageKey::WarningNoBackupYet => "尚未执行过备份",
1548            MessageKey::WarningFailedBackups => "有{}个失败的备份",
1549            MessageKey::WarningLowDiskSpace => "磁盘空间不足 ({:.1}%)",
1550            MessageKey::DashboardHintRunBackup => "💡 提示: 运行 'backup-suite run' 执行备份",
1551
1552            // Interactive prompts
1553            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            // Smart Analyze categories
1563            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            // Smart Analyze reasons
1572            MessageKey::SmartReasonSampling => "(采样: {}文件, 高重要性: {}个, 分数: {})",
1573            MessageKey::SmartReasonScore => "(分数: {})",
1574            MessageKey::SmartReasonSecurityDir => "凭证/密钥({}目录,需要加密,分数: 95)",
1575            MessageKey::SmartReasonLowPriorityDir => "缓存/日志/存档等 (目录: {}, 分数: 20)",
1576
1577            // Smart Exclude reasons
1578            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            // Keep all existing Simplified Chinese translations
1596            _ => self.get_en(), // Fallback to English for non-implemented keys
1597        }
1598    }
1599
1600    /// Get Traditional Chinese message
1601    fn get_zh_tw(&self) -> &'static str {
1602        match self {
1603            // AI-related messages
1604            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            // Common messages
1633            MessageKey::UsageExamples => "使用範例:",
1634
1635            // Backup progress and result messages
1636            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            // Remove/Update command messages
1648            MessageKey::ConfirmRemoveTarget => "確定要從備份目標中刪除 {} 嗎?",
1649            MessageKey::UpdatedTarget => "已更新備份目標",
1650            MessageKey::PathLabel => "路徑",
1651            MessageKey::PriorityLabel => "優先級",
1652            MessageKey::CategoryLabel => "類別",
1653            MessageKey::ExcludePatternsLabel => "排除模式",
1654
1655            // History detailed view
1656            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            // Dashboard sections
1667            MessageKey::StatisticsTitle => "📈 統計資訊",
1668            MessageKey::DiskUsageTitle => "💾 磁碟使用量",
1669            MessageKey::AllNormalStatus => "⚡ 一切正常",
1670            MessageKey::WarningsTitle => "⚠️  警告·注意事項",
1671
1672            // Incremental backup messages
1673            MessageKey::PreviousBackupLabel => "上次備份",
1674            MessageKey::ChangedFilesLabel => "變更檔案數",
1675            MessageKey::NoBackupsFound => "ℹ️  未找到上次備份。執行完全備份。",
1676            MessageKey::FullBackupFallback => "⚠️  載入元數據失敗。回退到完全備份。",
1677            MessageKey::MetadataLoadFailed => "   詳情",
1678            MessageKey::DryRunMode => "📋 演習模式: 檢測到 {} 個檔案待備份",
1679
1680            // Dashboard statistics labels
1681            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            // Relative time messages
1702            MessageKey::DaysAgo => "{}天前",
1703            MessageKey::HoursAgo => "{}小時前",
1704            MessageKey::MinutesAgo => "{}分鐘前",
1705            MessageKey::JustNow => "剛剛",
1706            MessageKey::NotYetBackedUp => "尚未執行",
1707
1708            // Dashboard warning messages
1709            MessageKey::WarningTargetNotExists => "備份目標不存在: {}",
1710            MessageKey::WarningDaysSinceLastBackup => "距離上次備份已過去{}天",
1711            MessageKey::WarningNoBackupYet => "尚未執行過備份",
1712            MessageKey::WarningFailedBackups => "有{}個失敗的備份",
1713            MessageKey::WarningLowDiskSpace => "磁碟空間不足 ({:.1}%)",
1714            MessageKey::DashboardHintRunBackup => "💡 提示: 執行 'backup-suite run' 進行備份",
1715
1716            // Interactive prompts
1717            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            // Smart Analyze categories
1727            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            // Smart Analyze reasons
1736            MessageKey::SmartReasonSampling => "(採樣: {}檔案, 高重要性: {}個, 分數: {})",
1737            MessageKey::SmartReasonScore => "(分數: {})",
1738            MessageKey::SmartReasonSecurityDir => "憑證/密鑰({}目錄,需要加密,分數: 95)",
1739            MessageKey::SmartReasonLowPriorityDir => "快取/日誌/封存等 (目錄: {}, 分數: 20)",
1740
1741            // Smart Exclude reasons
1742            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            // Keep all existing Traditional Chinese translations
1760            _ => self.get_en(), // Fallback to English for non-implemented keys
1761        }
1762    }
1763}
1764
1765/// Get message by key and language
1766#[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        // Default should be English
1778        let _lang = Language::detect();
1779        // This test might fail if LANG is set to ja
1780        // assert_eq!(_lang, Language::English);
1781    }
1782
1783    #[test]
1784    fn test_language_parsing() {
1785        // English
1786        assert_eq!(Language::parse("en"), Some(Language::English));
1787        assert_eq!(Language::parse("english"), Some(Language::English));
1788
1789        // Japanese
1790        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        // Simplified Chinese
1795        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        // Traditional Chinese
1815        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        // Unknown
1841        assert_eq!(Language::parse("unknown"), None);
1842    }
1843
1844    #[test]
1845    fn test_language_parse_null_byte_rejection() {
1846        // Security: Null bytes should be rejected
1847        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        // Test English
1863        assert_eq!(
1864            get_message(MessageKey::AppVersion, Language::English),
1865            "Backup Suite v1.0.0"
1866        );
1867
1868        // Test Japanese
1869        assert_eq!(
1870            get_message(MessageKey::AppVersion, Language::Japanese),
1871            "Backup Suite v1.0.0"
1872        );
1873
1874        // Test Simplified Chinese
1875        assert_eq!(
1876            get_message(MessageKey::AppVersion, Language::SimplifiedChinese),
1877            "Backup Suite v1.0.0"
1878        );
1879
1880        // Test Traditional Chinese
1881        assert_eq!(
1882            get_message(MessageKey::AppVersion, Language::TraditionalChinese),
1883            "Backup Suite v1.0.0"
1884        );
1885
1886        // Test different messages
1887        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        // Test AI message keys
1894        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}