pinch-points 0.1.0

A fast, kid-friendly crab-routing game: route streams of crabs into your sandcastle before the tide comes in
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
//! French strings (informal tu, for kids as much as anyone).

use super::Tr;

pub static FR: Tr = Tr {
    tagline: "la mer est basse - ramène les crabes à la maison",
    menu_names: [
        "Mare aux crabes",
        "Bataille de plage",
        "Bois flotté",
        "Rediffusion",
        "Salon de plage",
        "Réglages",
        "Grand Défi",
        "Trophées",
        "Défi du jour",
        "Reprendre",
    ],
    menu_blurbs: [
        "campagne de casse-têtes en solo",
        "match local, jusqu'à 6 joueurs",
        "éditeur de niveaux",
        "revoir les manches gardées",
        "partie en ligne (réseau local)",
        "commandes, son, vitesse",
        "défis de score",
        "tes stats et trophées",
        "la plage du jour, la même pour tous",
        "reprends la partie mise de côté",
    ],
    menu_daily_blurb: "{d}/{m} - la même plage pour tous",
    menu_prompt: "W/S : choisir | Entrée : jouer | V : coller | M : musique | Échap : quitter",
    title_achievements: "Trophées",
    ach_names: [
        "Premier crabe rentré",
        "Chef de plage",
        "Maître des marées",
        "Doigts d'or",
        "Trésor amassé",
        "Charmeur de crabes",
        "Chasseur de tempêtes",
        "Roi des châteaux",
        "Dynastie",
        "Pagayeur des mares",
        "Savant des mares",
        "Professeur des mares",
        "Château au sec",
        "Gros bras",
        "Roulette complète",
        "La belle marée",
        "Champion de la plage",
        "Bon voisin",
        "Habitué",
        "Maître du bois flotté",
        "Vieux loup de mer",
        "Gardien du rivage",
        "Étalon-or",
        "Gros porteur",
        "Marée du siècle",
        "La maison gagne",
        "Fidèle au poste",
        "Atelier bois flotté",
        "Pâtée pour mouettes",
        "La plage est sauvée",
        "Du lever au coucher",
        "Champion de l'été",
    ],
    ach_descs: [
        "rentre ton premier crabe",
        "rentre 100 crabes",
        "rentre 1000 crabes",
        "rentre un crabe doré",
        "rentre 10 crabes dorés",
        "déclenche 5 appâts de mue",
        "lance 5 événements de marée",
        "gagne une manche",
        "gagne 10 manches",
        "réussis 5 casse-têtes",
        "réussis 25 casse-têtes",
        "réussis 50 casse-têtes",
        "gagne sans te faire piller",
        "rentre 25 crabes géants",
        "déclenche chaque marée",
        "rentre 50 crabes en une manche",
        "gagne une série au meilleur des 5",
        "gagne une manche en ligne",
        "joue le défi du jour 7 jours",
        "enregistre un niveau créé",
        "joue 100 manches",
        "rentre 5000 crabes",
        "rentre 50 crabes dorés",
        "rentre 100 crabes géants",
        "rentre 100 crabes en une manche",
        "gagne 50 manches",
        "joue le défi du jour 30 jours",
        "enregistre 10 niveaux créés",
        "perds 25 crabes aux mouettes",
        "termine toutes les mares",
        "termine tous les défis de plage",
        "gagne 5 séries au meilleur des 5",
    ],
    stats_footer: "rentrés {banked} · dorés {golden} · victoires {wins}/{rounds} · casse-têtes {puzzles}",
    daily_best: "Record du défi du jour : {n}",
    crab_names: [
        "commun",
        "juvénile",
        "géant",
        "en mue",
        "doré",
        "scintillant",
    ],
    crab_notes: ["", "rapide", "lent", "appât !", "jackpot", "surprise !"],
    title_pick_language: "Choisis ta langue",
    title_new_version: "Nouvelle version disponible",
    prompt_new_version: "W/S : choisir | Entrée : confirmer | Échap : pas maintenant",
    prompt_pick_language: "W/S : choisir | Entrée : confirmer",
    pick_language_later: "tu pourras changer plus tard dans les Réglages",
    title_tide_pool: "Mare aux crabes",
    title_beach_day: "Grand Défi",
    title_turf_war: "Bataille de plage",
    title_replay: "REDIFFUSION",
    title_online: "EN LIGNE (tu es {p})",
    title_vs_ai: "BATAILLE contre {n} IA - tu es {p}",
    title_editor: "Bois flotté - éditeur",
    title_playtest: "Bois flotté - essai",
    title_lobby: "Salon de plage",
    title_settings: "Réglages",
    title_match_setup: "Bataille de plage - préparation",
    title_replays: "Rediffusions",
    prompt_replays: "W/S : choisir | Entrée : regarder | C : copier le code | V : coller | Échap : menu",
    replays_empty: "Aucune manche gardée - finis une bataille et elle arrive ici",
    replays_heading: "MANCHES GARDÉES",
    replay_speed: "x{n}  (S : plus vite)",
    hint_offer: "Bloqué ? Appuie sur H pour un indice.",
    hint_showing: "Un panneau de la solution, en pâle. Appuie encore sur H une fois posé.",
    title_stages: "Choisis un niveau",
    prompt_stages: "flèches : choisir | Entrée : jouer | Échap : menu",
    stage_progress: "{a} sur {b} réussis",
    stage_key: "panneaux",
    stage_custom: "ton bois flotté",
    ach_progress: "{a} sur {b} débloqués",
    stage_cleared: "réussi",
    stage_open: "panneaux : {n}",
    stage_free: "aucun panneau",
    stage_locked: "fermé - réussis d'abord le niveau {n}",
    team_banner: "{mode}   ÉQUIPES : {s}",
    the_gulls: "LES MOUETTES !",
    tide_event: "ÉVÉNEMENT : {e} !",
    lure_started: "{p} a rentré un crabe en mue - APPÂT !",
    lure_banner: "APPÂT {s}s : panneaux ignorés -> {p} !",
    desync: "DÉSYNC à l'image {f} !",
    waiting_peer: "en attente du joueur...",
    waiting_for: "en attente de {p}...",
    saved_count: "Sauvés {a}/{b}",
    signposts_count: "Panneaux : {a}/{b}",
    goal_bank: "Ramène {a}/{b}{t}",
    goal_survive: "Ne perds aucun crabe !{t}",
    goal_golden: "Attrape le crabe doré{t}",
    prompt_setup: "WASD bouger | flèches placer | Espace retirer | Entrée lancer | N/P niveau",
    prompt_setup_full: "Tous les panneaux posés - Espace en retire un | Entrée lancer | N/P niveau",
    prompt_setup_no_posts: "Pas de panneau ici - ça marche tout seul. Entrée pour lancer | N/P niveau",
    prompt_running: "En cours... R pour recommencer",
    prompt_won: "Tous les crabes sauvés ! Entrée : niveau suivant | R : revoir",
    prompt_lost: "Des crabes se sont perdus. Entrée : réessayer",
    prompt_versus_short: "WASD bouger | flèches placer | Espace retirer | Échap pause",
    prompt_versus_local: "J1 : WASD + flèches/Espace | J2 : IJKL + pavé 8546/0 | manettes : dernières places d'abord",
    prompt_setup_custom: "tes touches (Réglages) | Entrée démarrer | N/P niveau",
    prompt_versus_custom: "tes touches (Réglages) | Échap pause",
    prompt_enter_menu: "Entrée : menu",
    prompt_esc_menu: "Échap : menu",
    prompt_mute: "M : muet",
    replay_draw: "égalité",
    pause_title: "PAUSE",
    pause_continue: "Continuer",
    pause_to_menu: "Retour au menu",
    pause_quit: "Quitter le jeu",
    pause_put_down: "Mettre la partie de côté",
    round_put_down: "partie mise de côté - reprends-la depuis le menu",
    round_put_down_failed: "impossible de mettre de côté : {e}",
    round_copied: "partie copiée en code ({n} caractères)",
    round_code_bad: "ce code n'est pas une partie en cours",
    update_title: "Nouvelle version disponible : {v}",
    update_have: "Tu as la {v}",
    update_no_notes: "(pas de notes de version)",
    update_question: "Tu veux mettre à jour ?",
    update_yes: "Oui, montre-moi la nouvelle version",
    update_no: "Non, pas maintenant",
    update_note: "tu peux désactiver cette vérification dans les Réglages",
    update_opened: "la page de la version a été passée à ton navigateur",
    update_open_failed: "pas de navigateur pour l'ouvrir : {url}",
    prompt_settings: "W/S : choisir | A/D : ajuster | Échap : garder et retour",
    prompt_match_setup: "W/S : choisir | A/D : ajuster | Entrée : lancer | Échap : retour",
    prompt_match_name: "W/S : choisir | Tab : renommer | Entrée : lancer | Échap : retour",
    player_label: "J{p}",
    events: [
        "Folie des crabes",
        "Folie des mouettes",
        "Monopole des crabes",
        "Attaque de mouettes",
        "Accélération",
        "Ralenti",
        "Sable neuf",
        "Échange de châteaux",
    ],
    event_blurbs: [
        "les mouettes sont balayées et les trous crachent des crabes",
        "les trous crachent des mouettes au lieu des crabes",
        "la moitié des crabes libres filent droit chez le banquier",
        "une mouette se pose près de chaque château rival",
        "tous les crabes de la plage accélèrent",
        "tous les crabes avancent au ralenti",
        "tous les panneaux de la plage sont emportés",
        "les châteaux changent de propriétaire - attention !",
    ],
    ann_lure: "APPÂT !",
    ann_lure_sub: "pendant dix secondes tous les crabes libres filent chez {p}",
    ann_surge: "LES MOUETTES !",
    ann_surge_sub: "la nuée arrive pour la fin de la manche",
    tide_is_in: "~ LA MER REMONTE ~",
    wins: "{p} a gagné !",
    dead_heat: "Égalité parfaite !",
    team_wins: "{t} ont gagné !",
    tag_you: " (toi)",
    tag_ai: " (IA)",
    haul: "{n} crabes sont rentrés à la maison",
    highlight_saved: "résumé animé : {path}",
    all_safe: "TOUS LES CRABES SAUVÉS !",
    last_level: "C'était la dernière. Entrée : retour au menu",
    campaign_done: "LA PLAGE EST SAUVÉE !",
    set_group_controls: "COMMANDES",
    set_group_sound: "SON",
    set_group_round: "LA MANCHE",
    set_group_look: "AFFICHAGE",
    set_group_danger: "TOUT RECOMMENCER",
    set_group_game: "LE JEU",
    set_seat_input: "J{n} joue avec",
    val_input_auto: "ce qui est branché",
    val_input_keys: "clavier seulement",
    val_input_pad: "manette {n}",
    set_commit_keys: "Touches de pose J1",
    set_repeat_delay: "Délai de répétition",
    set_repeat_rate: "Vitesse de répétition",
    set_music: "Volume musique",
    set_sfx: "Effets sonores",
    set_speed: "Vitesse casse-tête",
    set_versus_mode: "Score en versus",
    set_language: "Langue",
    set_rumble: "Vibrations manette",
    set_deadzone: "Zone morte du stick",
    pad_help1: "Manette : croix/stick bouger, boutons poser",
    pad_help2: "L1 retirer, R1 effacer, Start pause/rejoindre, B retour",
    set_palette: "Couleurs des joueurs",
    set_ui_scale: "Taille de l'interface",
    set_reduced_motion: "Animations réduites",
    set_update_check: "Nouvelles versions",
    set_replay_cap: "Manches gardées",
    set_key_bindings: "Touches",
    set_reset_progress: "Effacer la progression",
    val_palette_classic: "classiques",
    val_palette_safe: "adapté daltoniens",
    val_open: "Entrée pour ouvrir",
    val_reset: "Entrée pour effacer",
    val_reset_confirm: "Encore Entrée pour confirmer",
    val_reset_done: "progression effacée",
    title_controls: "Touches",
    prompt_controls: "W/S : choisir | Entrée : redéfinir | Retour arrière : par défaut | Échap : retour",
    ctl_seat: "Siège",
    ctl_group_seat: "TOUCHES DE QUEL JOUEUR",
    ctl_group_move: "DÉPLACER LE CURSEUR",
    ctl_group_place: "POSER UN PANNEAU",
    ctl_group_posts: "FAIRE LE MÉNAGE",
    ctl_listening: "appuie sur une touche...",
    ctl_reset_key: "Retour arrière",
    ctl_press_key: "appuie sur une touche... (Échap annule)",
    ctl_taken: "{k} sert déjà à « {a} »",
    ctl_reset: "Tout remettre par défaut",
    bind_actions: [
        "Curseur haut",
        "Curseur bas",
        "Curseur gauche",
        "Curseur droite",
        "Poser vers le haut",
        "Poser vers le bas",
        "Poser vers la gauche",
        "Poser vers la droite",
        "Retirer un panneau",
        "Retirer tous ses panneaux",
    ],
    match_pad_joined: "Manettes en jeu : {list}",
    match_pad_hint: "Start sur une manette : rejoindre la partie",
    val_arrows: "Flèches",
    val_ijkl: "IJKL (une main)",
    val_on: "oui",
    val_off: "non",
    team_modes: [
        "chacun pour soi",
        "duos (2c2, 2c2c2 à 6)",
        "trios (3c3, 6 places)",
    ],
    match_heading: "LA PARTIE",
    match_players: "Joueurs",
    match_ai: "Adversaires IA",
    human_one: "1 humain",
    human_many: "{n} humains",
    match_ai_level: "Niveau des IA",
    bot_levels: ["facile", "normal", "féroce"],
    match_map: "Plage",
    match_gulls: "Mouettes",
    match_round: "Durée",
    match_mode: "Mode",
    match_name: "Nom",
    match_name_empty: "- (Tab pour nommer)",
    match_name_typing: "(Entrée pour garder)",
    mode_names: ["manche unique", "au meilleur des 5"],
    tour_round: "Manche {n} sur 5",
    tour_champion: "{p} remporte la série !",
    tour_next: "Entrée : manche suivante",
    log_raid: "{p} pillé ! -{n}",
    log_golden: "{p} rentre l'or ! +{n}",
    log_lure: "{p} lance un appât !",
    log_tier: "Le château de {p} grandit",
    log_gull: "une mouette arrive",
    log_surge: "la vague ! les crabes déferlent",
    map_names: [
        "Arène classique (12x9)",
        "Générée - petite (9x7)",
        "Générée - classique (12x9)",
        "Générée - grande (16x11)",
        "Générée - XL (20x13)",
        "Grand large, sans bords (16x11)",
    ],
    map_custom: "{n} (à toi)",
    map_custom_local: "{n} (à toi, local seulement)",
    map_none_seats: "aucune de tes plages n'a {n} places",
    gull_names: ["calmes", "normales", "déchaînées"],
    round_names: ["2 minutes", "3 minutes", "5 minutes"],
    lobby_hosting: "partie ouverte sur le port {p} - en attente d'un rival",
    lobby_hosting_noport: "partie ouverte - en attente d'un rival",
    lobby_rivals_one: "1 rival à bord - Entrée pour commencer (jusqu'à 5)",
    lobby_rivals_many: "{n} rivaux à bord - Entrée pour commencer (jusqu'à 5)",
    lobby_ai_seats: " + {n} IA",
    lobby_watchers: " ({n} spectateurs)",
    lobby_watch_armed: "mode spectateur : un chiffre (ou J) regarde | W : jouer | Échap : menu",
    lobby_watching: "spectateur - la partie commence quand l'hôte lance",
    title_watching: "SPECTATEUR",
    lobby_aboard: "à bord - en attente de l'hôte",
    lobby_listening: "recherche de plages...",
    lobby_none_yet: "Aucune plage trouvée... | H : ouvrir | J : par adresse | W : regarder | Échap : menu",
    lobby_in_progress: "(en cours)",
    lobby_full_tag: "(complet)",
    lobby_chat_hint: "T : dire un mot",
    lobby_ask_player_name: "Ton nom : ",
    lobby_ask_game_name: "Nomme ta plage : ",
    lobby_needs_name: "Écris un nom d'abord",
    lobby_ask_address: "Adresse de la plage (ip:port) : ",
    lobby_bad_address: "Ce n'est pas une adresse - essaie 192.168.1.5:47777",
    lobby_hosting_at: "cette plage est à l'adresse {a}",
    lobby_calling: "appel de {a}...",
    lobby_no_answer: "aucune réponse de {a} - vérifie l'adresse, ou demande-leur d'ouvrir",
    lobby_card_beaches: "PLAGES EN LIGNE",
    lobby_card_chat: "SALON",
    lobby_joined: "{p} arrive",
    lobby_left: "{p} s'en va",
    lobby_card_players: "SUR CETTE PLAGE",
    lobby_card_terms: "LA MANCHE",
    online_seat_abandoned: "{p} a quitté - une IA prend le château",
    online_host_gone: "l'hôte est parti - cette manche n'a pas pu continuer",
    lobby_queued_next: "Manche en cours - tu es le prochain",
    lobby_queued_behind: "Manche en cours - {n} devant toi",
    lobby_beach_full: "Cette plage est pleine",
    lobby_join_list: "{n} plages en ligne | flèches : choisir | Entrée : rejoindre | H : ouvrir | J : par adresse | W : regarder | Échap : menu",
    lobby_join_list_one: "1 plage en ligne | Entrée : rejoindre | H : ouvrir | J : par adresse | W : regarder | Échap : menu",
    lobby_broadcasting: "En ligne - flèches : la manche | T : parler | Entrée : lancer (jusqu'à 5 rivaux) | Échap : menu",
    lobby_aboard_prompt: "À bord - la partie démarre quand l'hôte lance | Échap : menu",
    lobby_could_not_host: "impossible d'ouvrir : {e}",
    lobby_could_not_join: "impossible de rejoindre : {e}",
    lobby_version_clash: "cette plage utilise une autre version du jeu (la sienne {t}, la tienne {o})",
    ed_prompt: "WASD bouger | flèches murs | Tab/lettre choisir | Espace peindre | +/- panneaux | F5 taille | K nuée O bords | F1 nom F6 genre | V vérifier | F2 sauver F3/F4 code | Entrée test",
    ed_brushes: [
        "Sable (efface)",
        "Rocher",
        "Château",
        "Trou",
        "Rondin",
        "Algues",
        "Flaque",
        "Crabe",
        "Mouette",
    ],
    ed_under: "dessous : {t}",
    ed_playtest_prompt: "flèches placer | Espace retirer | Échap fin d'essai",
    ed_solvable: "résoluble : {placements}",
    ed_solvable_free: "résoluble sans aucun panneau",
    ed_not_solvable: "PAS résoluble avec {n} panneaux",
    ed_solver_gave_up: "abandon - trop grand à vérifier. Essaie moins de panneaux.",
    ed_validating: "vérification...",
    ed_already_validating: "vérification en cours...",
    ed_resized: "nouvelle plage {w}x{h}",
    ed_default_name: "Ma plage",
    ed_name_row: "nom : {n}   (F1 pour renommer)",
    ed_naming: "donne-lui un nom, puis Entrée",
    ed_saved_to: "gardé dans {path}",
    ed_save_failed: "échec de la sauvegarde : {e}",
    code_kind_beach: "une partie en cours",
    code_kind_level: "un niveau",
    code_kind_round: "une manche",
    code_wrong_kind: "ce code est {got}, pas {want}",
    code_copied: "code copié - {n} caractères dans le presse-papiers",
    code_copy_failed: "presse-papiers inaccessible : {e}",
    code_none_pasted: "aucun code de partage dans le presse-papiers",
    code_level_checking: "niveau chargé depuis un code - vérification...",
    code_level_bad: "ce code n'est pas un niveau lisible par cette version : {e}",
    code_round_saved: "manche gardée depuis un code",
    code_round_bad: "ce code n'est pas une manche lisible par cette version : {e}",
    ed_posts: "panneaux : {n} | {msg}",
    ed_fresh_sand: "sable tout neuf",
    ed_back: "retour sur le sable",
    ed_wrap_on: "pleine mer : les bords se rejoignent",
    ed_wrap_off: "les bords sont de nouveau fermés",
    ed_gulls_every: "mouettes : toutes les {period} pulsations",
    ed_gulls_off: "mouettes : aucune",
    ed_seats: "places : {n} | {msg}",
    ed_puzzle_no_crabs: "aucun crabe à guider : aucune liste ne le montrera",
    ed_kind_row: "F6 - tu construis",
    ed_kind_puzzle: "casse-tête",
    ed_kind_arena: "plage de bataille",
    ed_now_puzzle: "casse-tête : il rejoint la Mare aux crabes",
    ed_now_arena: "plage de bataille : elle rejoint le choix des cartes",
    ed_arena_ok: "une plage pour {n}, avec {h} trous qui la nourrissent",
    ed_arena_needs_seats: "des châteaux pour {n} - il en faut un par joueur",
    ed_arena_no_crabs: "ni crabes ni trous : rien à se disputer",
};