1use std::env;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum)]
4pub enum Lang {
5 Pl,
6 En,
7}
8
9impl Lang {
10 pub fn detect() -> Self {
11 if env::var("LANG")
12 .unwrap_or_default()
13 .to_lowercase()
14 .starts_with("pl")
15 {
16 Self::Pl
17 } else {
18 Self::En
19 }
20 }
21}
22
23pub struct I18n {
24 pub lang: Lang,
25}
26
27impl I18n {
28 pub fn new(lang: Option<Lang>) -> Self {
29 Self {
30 lang: lang.unwrap_or_else(Lang::detect),
31 }
32 }
33
34 pub fn save_success(&self, name: &str, path: &str) -> String {
38 match self.lang {
39 Lang::Pl => format!("💾 Pomyślnie zapisano {} do pliku: {}", name, path),
40 Lang::En => format!("💾 Successfully saved {} to file: {}", name, path),
41 }
42 }
43 pub fn save_err(&self, name: &str, path: &str, err: &str) -> String {
44 match self.lang {
45 Lang::Pl => format!("❌ Błąd zapisu {} do pliku {}: {}", name, path, err),
46 Lang::En => format!("❌ Error saving {} to file {}: {}", name, path, err),
47 }
48 }
49 pub fn dir_create_err(&self, dir: &str, err: &str) -> String {
50 match self.lang {
51 Lang::Pl => format!("❌ Błąd: Nie można utworzyć katalogu {} ({})", dir, err),
52 Lang::En => format!("❌ Error: Cannot create directory {} ({})", dir, err),
53 }
54 }
55
56 pub fn skip_binary(&self) -> &'static str {
60 match self.lang {
61 Lang::Pl => "> *(Plik binarny/graficzny - pominięto zawartość)*",
62 Lang::En => "> *(Binary/graphic file - content skipped)*",
63 }
64 }
65 pub fn read_err(&self) -> &'static str {
66 match self.lang {
67 Lang::Pl => "> *(Błąd odczytu / plik nie jest UTF-8)*",
68 Lang::En => "> *(Read error / file is not UTF-8)*",
69 }
70 }
71
72 pub fn footer_tool(&self) -> &str {
73 match self.lang {
74 Lang::Pl => "Narzędzie",
75 _ => "Tool",
76 }
77 }
78 pub fn footer_input(&self) -> &str {
79 match self.lang {
80 Lang::Pl => "Folder",
81 _ => "Input",
82 }
83 }
84 pub fn footer_cmd(&self) -> &str {
85 match self.lang {
86 Lang::Pl => "Komenda",
87 _ => "Command",
88 }
89 }
90 pub fn footer_tag(&self) -> &str {
91 match self.lang {
92 Lang::Pl => "Tag",
93 _ => "TimeTag",
94 }
95 }
96 pub fn footer_links(&self) -> &str {
97 match self.lang {
98 Lang::Pl => "Linki",
99 _ => "Links",
100 }
101 }
102 pub fn footer_help(&self) -> &str {
103 match self.lang {
104 Lang::Pl => "Pomoc",
105 _ => "Help",
106 }
107 }
108
109 pub fn cli_base_abs(&self, path: &str) -> String {
113 match self.lang {
114 Lang::Pl => format!("📂 Baza terminala (Absolutna): {}", path),
115 Lang::En => format!("📂 Terminal base (Absolute): {}", path),
116 }
117 }
118 pub fn cli_target_abs(&self, path: &str) -> String {
119 match self.lang {
120 Lang::Pl => format!("📂 Cel skanowania (Absolutna): {}", path),
121 Lang::En => format!("📂 Scan target (Absolute): {}", path),
122 }
123 }
124 pub fn cli_target_rel(&self, path: &str) -> String {
125 match self.lang {
126 Lang::Pl => format!("📂 Cel skanowania (Relatywna): {}", path),
127 Lang::En => format!("📂 Scan target (Relative): {}", path),
128 }
129 }
130 pub fn cli_case_sensitive(&self, val: bool) -> String {
131 match self.lang {
132 Lang::Pl => format!("🔠 Wrażliwość na litery: {}", val),
133 Lang::En => format!("🔠 Case sensitive: {}", val),
134 }
135 }
136 pub fn cli_patterns_raw(&self, pat: &str) -> String {
137 match self.lang {
138 Lang::Pl => format!("🔍 Wzorce (RAW): {}", pat),
139 Lang::En => format!("🔍 Patterns (RAW): {}", pat),
140 }
141 }
142 pub fn cli_patterns_tok(&self, pat: &str) -> String {
143 match self.lang {
144 Lang::Pl => format!("⚙️ Wzorce (TOK): {}", pat),
145 Lang::En => format!("⚙️ Patterns (TOK): {}", pat),
146 }
147 }
148 pub fn cli_summary_matched(&self, count: usize, total: usize) -> String {
149 match self.lang {
150 Lang::Pl => format!("📊 Podsumowanie: Dopasowano {} z {} ścieżek.", count, total),
151 Lang::En => format!("📊 Summary: Matched {} of {} paths.", count, total),
152 }
153 }
154 pub fn cli_summary_rejected(&self, count: usize, total: usize) -> String {
155 match self.lang {
156 Lang::Pl => format!("📊 Podsumowanie: Odrzucono {} z {} ścieżek.", count, total),
157 Lang::En => format!("📊 Summary: Rejected {} of {} paths.", count, total),
158 }
159 }
160}