1use std::env;
2use std::sync::OnceLock;
3
4pub struct Lang {
5 pub hud_cuques: &'static str,
6 pub hud_fps: &'static str,
7 pub fps_unit: &'static str,
11 pub help_game: &'static str,
12 pub help_stats: &'static str,
13 pub help_ach: &'static str,
14 pub fingerers_title: &'static str,
15 pub owned: &'static str,
16 pub cost: &'static str,
17 pub fps_each: &'static str,
18 pub fingerer_names: &'static [&'static str],
19 pub stats_title: &'static str,
20 pub stat_session_time: &'static str,
21 pub stat_total_time: &'static str,
22 pub stat_total_clicks: &'static str,
23 pub stat_lifetime_cuques: &'static str,
24 pub stat_best_fps: &'static str,
25 pub stat_achievements: &'static str,
26 pub stat_fingerers_owned: &'static str,
27 pub stat_golden_caught: &'static str,
28 pub stat_lucky_caught: &'static str,
29 pub stat_frenzy_caught: &'static str,
30 pub stat_buff_caught: &'static str,
31 pub stat_green_coin_caught: &'static str,
32 pub achievements_title: &'static str,
33 pub ach_unlocked: &'static str,
34 pub ach_locked: &'static str,
35 pub ach_summary: &'static str,
36 pub achievement_names: &'static [&'static str],
37 pub achievement_descs: &'static [&'static str],
38 pub upgrades_title: &'static str,
39 pub upgrades_none: &'static str,
40 pub upgrade_names: &'static [&'static str],
41 pub upgrade_descs: &'static [&'static str],
42 pub help_upgrades: &'static str,
43 pub prestige_title: &'static str,
44 pub prestige_currency: &'static str,
45 pub prestige_owned_label: &'static str,
46 pub prestige_bonus_label: &'static str,
47 pub prestige_available_label: &'static str,
48 pub prestige_lifetime_needed: &'static str,
49 pub prestige_confirm_hint: &'static str,
50 pub prestige_not_enough: &'static str,
51 pub help_prestige: &'static str,
52}
53
54pub const EN: Lang = Lang {
55 hud_cuques: "Cuques",
56 hud_fps: "FPS (Fingers per Second®)",
57 fps_unit: "FPS",
58 help_game: "[Space/Click] finger [Click/1-0] buy [Shift] x10 [Alt/RClick] max [-/+/Wheel] zoom\n[u] upgrades [p] prestige [s] stats [a] achievements [g] grab golden/powerup [q] quit",
59 help_stats: "[s/Esc] back to game [q] quit",
60 help_ach: "[a/Esc] back to game [q] quit",
61 fingerers_title: " Fingerers ",
62 owned: "owned",
63 cost: "cost",
64 fps_each: "FPS each",
65 fingerer_names: &[
66 "Index Finger",
67 "Whole Hand",
68 "Latex Glove",
69 "Greek Kiss",
70 "Robotic Finger",
71 "Tentacle",
72 "Finger Vortex",
73 "Dimensional Hole",
74 "Cosmic Finger",
75 "Hand of God",
76 ],
77 stats_title: " Stats ",
78 stat_session_time: "Session time",
79 stat_total_time: "Total play time",
80 stat_total_clicks: "Total fingerings",
81 stat_lifetime_cuques: "Lifetime cuques",
82 stat_best_fps: "Best FPS",
83 stat_achievements: "Achievements",
84 stat_fingerers_owned: "Fingerers owned",
85 stat_golden_caught: "Powerups caught",
86 stat_lucky_caught: " ↳ Golden",
87 stat_frenzy_caught: " ↳ Frenzy",
88 stat_buff_caught: " ↳ Buff",
89 stat_green_coin_caught: " ↳ Green Coin",
90 achievements_title: " Achievements ",
91 ach_unlocked: "[X]",
92 ach_locked: "[ ]",
93 ach_summary: "unlocked",
94 achievement_names: &[
95 "First Finger",
96 "Warming Up",
97 "Seasoned Fingerer",
98 "Cuque Mogul",
99 "Automation",
100 "Factory of Fingers",
101 "Latex Enjoyer",
102 "Golden Touch",
103 "Golden Hoarder",
104 "Rise of the Machines",
105 ],
106 achievement_descs: &[
107 "Finger the cuque for the first time",
108 "Accumulate 100 cuques",
109 "Accumulate 10,000 cuques",
110 "Accumulate 1,000,000 cuques",
111 "Buy your first fingerer",
112 "Own 10 Whole Hands",
113 "Own 10 Latex Gloves",
114 "Catch your first Golden Cuque",
115 "Catch 10 Golden Cuques",
116 "Own a Robotic Finger",
117 ],
118 upgrades_title: " Upgrades ",
119 upgrades_none: "No upgrades available yet.\nKeep fingering!",
120 upgrade_names: &[
121 "Licked Finger",
122 "Greased Palm",
123 "Calloused Tip",
124 "Sharper Nail",
125 "Reinforced Index",
126 "Chrome Phalanx",
127 "Full Grip",
128 "Whole Fist",
129 "Double Hand",
130 "Slicker Latex",
131 "Medical Grade",
132 "Industrial Latex",
133 "Finer Joints",
134 "Quantum Servo",
135 "Singularity Core",
136 "Holy Lubrication",
137 "Barbed Suckers",
138 "Kraken Coupling",
139 "Deep Sea Mastery",
140 "Spin Doubler",
141 "Hurricane Spin",
142 "Galaxy Rotator",
143 "Wider Aperture",
144 "Rift Stabilizer",
145 "Wormhole Loom",
146 "Cosmic Attunement",
147 "Astral Projection",
148 "Heat Death Bypass",
149 "Divine Manicure",
150 "Miracle Protocol",
151 "Omnipotent Touch",
152 "Wetter Tongue",
153 "Breath Training",
154 "Olympic Technique",
155 ],
156 upgrade_descs: &[
157 "Clicks are twice as effective",
158 "Clicks are twice as effective again",
159 "Clicks are twice as effective once more",
160 "Index Fingers produce twice as much",
161 "Index Fingers produce twice as much (again)",
162 "Index Fingers produce twice as much (a third time)",
163 "Whole Hands produce twice as much",
164 "Whole Hands produce twice as much (again)",
165 "Whole Hands produce twice as much (a third time)",
166 "Latex Gloves produce twice as much",
167 "Latex Gloves produce twice as much (again)",
168 "Latex Gloves produce twice as much (a third time)",
169 "Robotic Fingers produce twice as much",
170 "Robotic Fingers produce twice as much (again)",
171 "Robotic Fingers produce twice as much (a third time)",
172 "All fingerers are 50% more effective",
173 "Tentacles produce twice as much",
174 "Tentacles produce twice as much (again)",
175 "Tentacles produce twice as much (a third time)",
176 "Finger Vortices produce twice as much",
177 "Finger Vortices produce twice as much (again)",
178 "Finger Vortices produce twice as much (a third time)",
179 "Dimensional Holes produce twice as much",
180 "Dimensional Holes produce twice as much (again)",
181 "Dimensional Holes produce twice as much (a third time)",
182 "Cosmic Fingers produce twice as much",
183 "Cosmic Fingers produce twice as much (again)",
184 "Cosmic Fingers produce twice as much (a third time)",
185 "Hands of God produce twice as much",
186 "Hands of God produce twice as much (again)",
187 "Hands of God produce twice as much (a third time)",
188 "Greek Kisses produce twice as much",
189 "Greek Kisses produce twice as much (again)",
190 "Greek Kisses produce twice as much (a third time)",
191 ],
192 help_upgrades: "[u/Esc] back [Click/1-9,0] buy upgrade [q] quit",
193 prestige_title: " Prestige ",
194 prestige_currency: "Tissue Paper",
195 prestige_owned_label: "Currently owned",
196 prestige_bonus_label: "FPS bonus",
197 prestige_available_label: "Available to claim",
198 prestige_lifetime_needed: "Next papel at",
199 prestige_confirm_hint: "Press [r] to reset and claim",
200 prestige_not_enough: "Earn more lifetime cuques to claim.\nFormula: sqrt(lifetime / 1,000,000)",
201 help_prestige: "[p/Esc] back [r] reset & claim [q] quit",
202};
203
204pub const PT_BR: Lang = Lang {
205 hud_cuques: "Cuques",
206 hud_fps: "DPS (Dedadas por Segundo®)",
207 fps_unit: "DPS",
208 help_game: "[Espaço/Clique] dedar [Clique/1-0] comprar [Shift] x10 [Alt/Bot.Dir.] max [-/+/Roda] zoom\n[u] melhorias [p] prestígio [s] stats [a] conquistas [g] pegar dourado/bônus [q] sair",
209 help_stats: "[s/Esc] voltar ao jogo [q] sair",
210 help_ach: "[a/Esc] voltar ao jogo [q] sair",
211 fingerers_title: " Dedadores ",
212 owned: "possui",
213 cost: "custo",
214 fps_each: "DPS cada",
215 fingerer_names: &[
216 "Dedo Indicador",
217 "Mão Inteira",
218 "Luva de Látex",
219 "Beijo Grego",
220 "Dedo Robótico",
221 "Tentáculo",
222 "Vórtice de Dedos",
223 "Buraco Dimensional",
224 "Dedo Cósmico",
225 "Mão de Deus",
226 ],
227 stats_title: " Estatísticas ",
228 stat_session_time: "Tempo de sessão",
229 stat_total_time: "Tempo total de jogo",
230 stat_total_clicks: "Total de dedadas",
231 stat_lifetime_cuques: "Cuques na vida",
232 stat_best_fps: "Melhor DPS",
233 stat_achievements: "Conquistas",
234 stat_fingerers_owned: "Dedadores possuídos",
235 stat_golden_caught: "Powerups pegos",
236 stat_lucky_caught: " ↳ Dourado",
237 stat_frenzy_caught: " ↳ Frenzy",
238 stat_buff_caught: " ↳ Buff",
239 stat_green_coin_caught: " ↳ Moeda Verde",
240 achievements_title: " Conquistas ",
241 ach_unlocked: "[X]",
242 ach_locked: "[ ]",
243 ach_summary: "desbloqueadas",
244 achievement_names: &[
245 "Primeiro Dedo",
246 "Esquentando",
247 "Dedador Experiente",
248 "Magnata do Cuque",
249 "Automação",
250 "Fábrica de Dedos",
251 "Amante de Látex",
252 "Toque Dourado",
253 "Acumulador Dourado",
254 "Ascensão das Máquinas",
255 ],
256 achievement_descs: &[
257 "Dedar o cuque pela primeira vez",
258 "Acumular 100 cuques",
259 "Acumular 10.000 cuques",
260 "Acumular 1.000.000 de cuques",
261 "Comprar o primeiro dedador",
262 "Possuir 10 Mãos Inteiras",
263 "Possuir 10 Luvas de Látex",
264 "Pegar o primeiro Cuque Dourado",
265 "Pegar 10 Cuques Dourados",
266 "Possuir um Dedo Robótico",
267 ],
268 upgrades_title: " Melhorias ",
269 upgrades_none: "Nenhuma melhoria disponível.\nContinue dedando!",
270 upgrade_names: &[
271 "Dedo Lambido",
272 "Palma Lubrificada",
273 "Ponta Calejada",
274 "Unha Afiada",
275 "Indicador Reforçado",
276 "Falange de Cromo",
277 "Pegada Firme",
278 "Punho Inteiro",
279 "Mão Dupla",
280 "Látex Escorregadio",
281 "Grau Médico",
282 "Látex Industrial",
283 "Juntas Refinadas",
284 "Servo Quântico",
285 "Núcleo de Singularidade",
286 "Lubrificação Sagrada",
287 "Ventosas Farpadas",
288 "Acoplamento Kraken",
289 "Maestria Abissal",
290 "Giro Duplo",
291 "Giro Furacão",
292 "Rotator Galáctico",
293 "Abertura Ampliada",
294 "Estabilizador de Fenda",
295 "Tear de Buraco de Minhoca",
296 "Sintonia Cósmica",
297 "Projeção Astral",
298 "Bypass da Morte Térmica",
299 "Manicure Divina",
300 "Protocolo Milagroso",
301 "Toque Onipotente",
302 "Língua Molhada",
303 "Treino de Respiração",
304 "Técnica Olímpica",
305 ],
306 upgrade_descs: &[
307 "Dedadas valem o dobro",
308 "Dedadas valem o dobro de novo",
309 "Dedadas valem o dobro mais uma vez",
310 "Dedos Indicadores produzem o dobro",
311 "Dedos Indicadores produzem o dobro (de novo)",
312 "Dedos Indicadores produzem o dobro (terceira vez)",
313 "Mãos Inteiras produzem o dobro",
314 "Mãos Inteiras produzem o dobro (de novo)",
315 "Mãos Inteiras produzem o dobro (terceira vez)",
316 "Luvas de Látex produzem o dobro",
317 "Luvas de Látex produzem o dobro (de novo)",
318 "Luvas de Látex produzem o dobro (terceira vez)",
319 "Dedos Robóticos produzem o dobro",
320 "Dedos Robóticos produzem o dobro (de novo)",
321 "Dedos Robóticos produzem o dobro (terceira vez)",
322 "Todos os dedadores 50% mais eficientes",
323 "Tentáculos produzem o dobro",
324 "Tentáculos produzem o dobro (de novo)",
325 "Tentáculos produzem o dobro (terceira vez)",
326 "Vórtices de Dedos produzem o dobro",
327 "Vórtices de Dedos produzem o dobro (de novo)",
328 "Vórtices de Dedos produzem o dobro (terceira vez)",
329 "Buracos Dimensionais produzem o dobro",
330 "Buracos Dimensionais produzem o dobro (de novo)",
331 "Buracos Dimensionais produzem o dobro (terceira vez)",
332 "Dedos Cósmicos produzem o dobro",
333 "Dedos Cósmicos produzem o dobro (de novo)",
334 "Dedos Cósmicos produzem o dobro (terceira vez)",
335 "Mãos de Deus produzem o dobro",
336 "Mãos de Deus produzem o dobro (de novo)",
337 "Mãos de Deus produzem o dobro (terceira vez)",
338 "Beijos Gregos produzem o dobro",
339 "Beijos Gregos produzem o dobro (de novo)",
340 "Beijos Gregos produzem o dobro (terceira vez)",
341 ],
342 help_upgrades: "[u/Esc] voltar [Clique/1-9,0] comprar melhoria [q] sair",
343 prestige_title: " Prestígio ",
344 prestige_currency: "Papel de Seda",
345 prestige_owned_label: "Possui atualmente",
346 prestige_bonus_label: "Bônus de DPS",
347 prestige_available_label: "Disponível para resgatar",
348 prestige_lifetime_needed: "Próximo papel em",
349 prestige_confirm_hint: "Pressione [r] para resetar e resgatar",
350 prestige_not_enough: "Acumule mais cuques totais para resgatar.\nFórmula: raiz(total / 1.000.000)",
351 help_prestige: "[p/Esc] voltar [r] resetar & resgatar [q] sair",
352};
353
354static LANG: OnceLock<&'static Lang> = OnceLock::new();
355
356pub fn init() {
357 let _ = LANG.set(detect());
358}
359
360pub fn t() -> &'static Lang {
361 LANG.get().copied().unwrap_or(&EN)
362}
363
364fn detect() -> &'static Lang {
365 let raw = env::var("LANG").unwrap_or_default().to_lowercase();
366 let code = raw.split('.').next().unwrap_or("");
367 if code.starts_with("pt") { &PT_BR } else { &EN }
368}