8000 l10n: port shred for translation + add french · uutils/coreutils@b5f5c7f · GitHub
[go: up one dir, main page]

Skip to content

Commit b5f5c7f

Browse files
committed
l10n: port shred for translation + add french
1 parent f825409 commit b5f5c7f

File tree

3 files changed

+164
-32
lines changed

3 files changed

+164
-32
lines changed

src/uu/shred/locales/en-US.ftl

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,30 @@ shred-after-help = Delete FILE(s) if --remove (-u) is specified. The default is
3535
In addition, file system backups and remote mirrors may contain copies of
3636
the file that cannot be removed, and that will allow a shredded file to be
3737
recovered later.
38+
39+
# Error messages
40+
shred-missing-file-operand = missing file operand
41+
shred-invalid-number-of-passes = invalid number of passes: {$passes}
42+
shred-cannot-open-random-source = cannot open random source: {$source}
43+
shred-invalid-file-size = invalid file size: {$size}
44+
shred-no-such-file-or-directory = {$file}: No such file or directory
45+
shred-not-a-file = {$file}: Not a file
46+
47+
# Option help text
48+
shred-force-help = change permissions to allow writing if necessary
49+
shred-iterations-help = overwrite N times instead of the default (3)
50+
shred-size-help = shred this many bytes (suffixes like K, M, G accepted)
51+
shred-deallocate-help = deallocate and remove file after overwriting
52+
shred-remove-help = like -u but give control on HOW to delete; See below
53+
shred-verbose-help = show progress
54+
shred-exact-help = do not round file sizes up to the next full block;
55+
this is the default for non-regular files
56+
shred-zero-help = add a final overwrite with zeros to hide shredding
57+
shred-random-source-help = take random bytes from FILE
58+
59+
# Verbose messages
60+
shred-removing = {$file}: removing
61+
shred-removed = {$file}: removed
62+
shred-renamed-to = {$file}: renamed to {$new_name}
63+
shred-pass-progress = {$file}: pass
64+
shred-couldnt-rename = {$file}: Couldn't rename to {$new_name}: {$error}

src/uu/shred/locales/fr-FR.ftl

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
shred-about = Écrase les FICHIER(s) spécifiés de manière répétée, afin de rendre plus difficile
2+
même pour du matériel de sondage très coûteux de récupérer les données.
3+
shred-usage = shred [OPTION]... FICHIER...
4+
shred-after-help = Supprime le ou les FICHIER(s) si --remove (-u) est spécifié. Par défaut, les fichiers
5+
ne sont pas supprimés car il est courant d'opérer sur des fichiers de périphérique comme /dev/hda,
6+
et ces fichiers ne doivent généralement pas être supprimés.
7+
8+
ATTENTION : Notez que shred repose sur une hypothèse très importante : que le système
9+
de fichiers écrase les données sur place. C'est la façon traditionnelle de procéder, mais
10+
de nombreuses conceptions de systèmes de fichiers modernes ne satisfont pas cette hypothèse.
11+
Voici des exemples de systèmes de fichiers sur lesquels shred n'est pas efficace, ou n'est pas
12+
garanti d'être efficace dans tous les modes de système de fichiers :
13+
14+
- systèmes de fichiers structurés en journal ou en log, tels que ceux fournis avec
15+
AIX et Solaris (et JFS, ReiserFS, XFS, Ext3, etc.)
16+
17+
- systèmes de fichiers qui écrivent des données redondantes et continuent même si certaines écritures
18+
échouent, tels que les systèmes de fichiers basés sur RAID
19+
20+
- systèmes de fichiers qui font des instantanés, tels que le serveur NFS de Network Appliance
21+
22+
- systèmes de fichiers qui mettent en cache dans des emplacements temporaires, tels que NFS
23+
version 3 clients
24+
25+
- systèmes de fichiers compressés
26+
27+
Dans le cas des systèmes de fichiers ext3, la clause de non-responsabilité ci-dessus s'applique (et shred est
28+
donc d'efficacité limitée) seulement en mode data=journal, qui journalise les données de fichier
29+
en plus des métadonnées seulement. Dans les modes data=ordered (par défaut) et
30+
data=writeback, shred fonctionne comme d'habitude. Les modes de journal Ext3 peuvent être changés
31+
en ajoutant l'option data=something aux options de montage pour un système de fichiers particulier
32+
dans le fichier /etc/fstab, comme documenté dans la page de manuel mount (`man mount`).
33+
34+
De plus, les sauvegardes de système de fichiers et les miroirs distants peuvent contenir des copies
35+
du fichier qui ne peuvent pas être supprimées, et qui permettront à un fichier détruit d'être
36+
récupéré plus tard.
37+
38+
# Messages d'erreur
39+
shred-missing-file-operand = opérande de fichier manquant
40+
shred-invalid-number-of-passes = nombre de passes invalide : {$passes}
41+
shred-cannot-open-random-source = impossible d'ouvrir la source aléatoire : {$source}
42+
shred-invalid-file-size = taille de fichier invalide : {$size}
43+
shred-no-such-file-or-directory = {$file} : Aucun fichier ou répertoire de ce type
44+
shred-not-a-file = {$file} : N'est pas un fichier
45+
46+
# Texte d'aide des options
47+
shred-force-help = modifier les permissions pour permettre l'écriture si nécessaire
48+
shred-iterations-help = écraser N fois au lieu de la valeur par défaut (3)
49+
shred-size-help = détruire ce nombre d'octets (suffixes comme K, M, G acceptés)
50+
shred-deallocate-help = désallouer et supprimer le fichier après écrasement
51+
shred-remove-help = comme -u mais donne le contrôle sur COMMENT supprimer ; Voir ci-dessous
52+
shred-verbose-help = afficher le progrès
53+
shred-exact-help = ne pas arrondir les tailles de fichier au bloc complet suivant ;
54+
c'est la valeur par défaut pour les fichiers non réguliers
55+
shred-zero-help = ajouter un écrasement final avec des zéros pour cacher la destruction
56+
shred-random-source-help = prendre des octets aléatoires du FICHIER
57+
58+
# Messages verbeux
59+
shred-removing = {$file} : suppression
60+
shred-removed = {$file} : supprimé
61+
shred-renamed-to = {$file} : renommé en {$new_name}
62+
shred-pass-progress = {$file}: passage
63+
shred-couldnt-rename = {$file} : Impossible de renommer en {$new_name} : {$error}

src/uu/shred/src/shred.rs

Lines changed: 74 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ use uucore::parser::parse_size::parse_size_u64;
2020
use uucore::parser::shortcut_value_parser::ShortcutValueParser;
2121
use uucore::{format_usage, show_error, show_if_err};
2222

23-
use uucore::locale::get_message;
23+
use std::collections::HashMap;
24+
use uucore::locale::{get_message, get_message_with_args};
2425

2526
pub mod options {
2627
pub const FORCE: &str = "force";
@@ -242,7 +243,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
242243
let matches = uu_app().try_get_matches_from(args)?;
243244

244245
if !matches.contains_id(options::FILE) {
245-
return Err(UUsageError::new(1, "missing file operand"));
246+
return Err(UUsageError::new(
247+
1,
248+
get_message("shred-missing-file-operand"),
249+
));
246250
}
247251

248252
let iterations = match matches.get_one::<String>(options::ITERATIONS) {
@@ -251,7 +255,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
251255
Err(_) => {
252256
return Err(USimpleError::new(
253257
1,
254-
format!("invalid number of passes: {}", s.quote()),
258+
get_message_with_args(
259+
"shred-invalid-number-of-passes",
260+
HashMap::from([("passes".to_string(), s.quote().to_string())]),
261+
),
255262
));
256263
}
257264
},
@@ -262,7 +269,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
262269
Some(filepath) => RandomSource::Read(File::open(filepath).map_err(|_| {
263270
USimpleError::new(
264271
1,
265-
format!("cannot open random source: {}", filepath.quote()),
272+
get_message_with_args(
273+
"shred-cannot-open-random-source",
274+
HashMap::from([("source".to_string(), filepath.quote().to_string())]),
275+
),
266276
)
267277
})?),
268278
None => RandomSource::System,
@@ -321,14 +331,14 @@ pub fn uu_app() -> Command {
321331
Arg::new(options::FORCE)
322332
.long(options::FORCE)
323333
.short('f')
324-
.help("change permissions to allow writing if necessary")
334+
.help(get_message("shred-force-help"))
325335
.action(ArgAction::SetTrue),
326336
)
327337
.arg(
328338
Arg::new(options::ITERATIONS)
329339
.long(options::ITERATIONS)
330340
.short('n')
331-
.help("overwrite N times instead of the default (3)")
341+
.help(get_message("shred-iterations-help"))
332342
.value_name("NUMBER")
333343
.default_value("3"),
334344
)
@@ -337,12 +347,12 @@ pub fn uu_app() -> Command {
337347
.long(options::SIZE)
338348
.short('s')
339349
.value_name("N")
340-
.help("shred this many bytes (suffixes like K, M, G accepted)"),
350+
.help(get_message("shred-size-help")),
341351
)
342352
.arg(
343353
Arg::new(options::WIPESYNC)
344354
.short('u')
345-
.help("deallocate and remove file after overwriting")
355+
.help(get_message("shred-deallocate-help"))
346356
.action(ArgAction::SetTrue),
347357
)
348358
.arg(
@@ -357,37 +367,34 @@ pub fn uu_app() -> Command {
357367
.num_args(0..=1)
358368
.require_equals(true)
359369
.default_missing_value(options::remove::WIPESYNC)
360-
.help("like -u but give control on HOW to delete; See below")
370+
.help(get_message("shred-remove-help"))
361371
.action(ArgAction::Set),
362372
)
363373
.arg(
364374
Arg::new(options::VERBOSE)
365375
.long(options::VERBOSE)
366376
.short('v')
367-
.help("show progress")
377+
.help(get_message("shred-verbose-help"))
368378
.action(ArgAction::SetTrue),
369379
)
370380
.arg(
371381
Arg::new(options::EXACT)
372382
.long(options::EXACT)
373383
.short('x')
374-
.help(
375-
"do not round file sizes up to the next full block;\n\
376-
this is the default for non-regular files",
377-
)
384+
.help(get_message("shred-exact-help"))
378385
.action(ArgAction::SetTrue),
379386
)
380387
.arg(
381388
Arg::new(options::ZERO)
382389
.long(options::ZERO)
383390
.short('z')
384-
.help("add a final overwrite with zeros to hide shredding")
391+
.help(get_message("shred-zero-help"))
385392
.action(ArgAction::SetTrue),
386393
)
387394
.arg(
388395
Arg::new(options::RANDOM_SOURCE)
389396
.long(options::RANDOM_SOURCE)
390-
.help("take random bytes from FILE")
397+
.help(get_message("shred-random-source-help"))
391398
.value_hint(clap::ValueHint::FilePath)
392399
.action(ArgAction::Set),
393400
)
@@ -405,7 +412,13 @@ fn get_size(size_str_opt: Option<String>) -> Option<u64> {
405412
.and_then(|size| parse_size_u64(size.as_str()).ok())
406413
.or_else(|| {
407414
if let Some(size) = size_str_opt {
408-
show_error!("invalid file size: {}", size.quote());
415+
show_error!(
416+
"{}",
417+
get_message_with_args(
418+
"shred-invalid-file-size",
419+
HashMap::from([("size".to_string(), size.quote().to_string())])
420+
)
421+
);
409422
// TODO: replace with our error management
410423
std::process::exit(1);
411424
}
@@ -439,13 +452,19 @@ fn wipe_file(
439452
if !path.exists() {
440453
return Err(USimpleError::new(
441454
1,
442-
format!("{}: No such file or directory", path.maybe_quote()),
455+
get_message_with_args(
456+
"shred-no-such-file-or-directory",
457+
HashMap::from([("file".to_string(), path.maybe_quote().to_string())]),
458+
),
443459
));
444460
}
445461
if !path.is_file() {
446462
return Err(USimpleError::new(
447463
1,
448-
format!("{}: Not a file", path.maybe_quote()),
464+
get_message_with_args(
465+
"shred-not-a-file",
466+
HashMap::from([("file".to_string(), path.maybe_quote().to_string())]),
467+
),
449468
));
450469
}
451470

@@ -528,10 +547,14 @@ fn wipe_file(
528547
for (i, pass_type) in pass_sequence.into_iter().enumerate() {
529548
if verbose {
530549
let pass_name = pass_name(&pass_type);
550+
let msg = get_message_with_args(
551+
"shred-pass-progress",
552+
HashMap::from([("file".to_string(), path.maybe_quote().to_string())]),
553+
);
531554
show_error!(
532-
"{}: pass {}/{total_passes} ({pass_name})...",
533-
path.maybe_quote(),
534-
i + 1,
555+
"{} {}/{total_passes} ({pass_name})...",
556+
msg,
557+
(i + 1).to_string()
535558
);
536559
}
537560
// size is an optional argument for exactly how many bytes we want to shred
@@ -614,11 +637,14 @@ fn wipe_name(orig_path: &Path, verbose: bool, remove_method: RemoveMethod) -> Op
614637
match fs::rename(&last_path, &new_path) {
615638
Ok(()) => {
616639
if verbose {
617-
show_error!(
618-
"{}: renamed to {}",
619-
last_path.maybe_quote(),
620-
new_path.display()
640+
let msg = get_message_with_args(
641+
"shred-renamed-to",
642+
HashMap::from([
643+
("file".to_string(), last_path.maybe_quote().to_string()),
644+
("new_name".to_string(), new_path.display().to_string()),
645+
]),
621646
);
647+
show_error!("{}", msg);
622648
}
623649

624650
if remove_method == RemoveMethod::WipeSync {
@@ -634,11 +660,15 @@ fn wipe_name(orig_path: &Path, verbose: bool, remove_method: RemoveMethod) -> Op
634660
break;
635661
}
636662
Err(e) => {
637-
show_error!(
638-
"{}: Couldn't rename to {}: {e}",
639-
last_path.maybe_quote(),
640-
new_path.quote(),
663+
let msg = get_message_with_args(
664+
"shred-couldnt-rename",
665+
HashMap::from([
666+
("file".to_string(), last_path.maybe_quote().to_string()),
667+
("new_name".to_string(), new_path.quote().to_string()),
668+
("error".to_string(), e.to_string()),
669+
]),
641670
);
671+
show_error!("{}", msg);
642672
// TODO: replace with our error management
643673
std::process::exit(1);
644674
}
@@ -656,7 +686,13 @@ fn do_remove(
656686
remove_method: RemoveMethod,
657687
) -> Result<(), io::Error> {
658688
if verbose {
659-
show_error!("{}: removing", orig_filename.maybe_quote());
689+
show_error!(
690+
"{}",
691+
get_message_with_args(
692+
"shred-removing",
693+
HashMap::from([("file".to_string(), orig_filename.maybe_quote().to_string())])
694+
)
695+
);
660696
}
661697

662698
let remove_path = if remove_method == RemoveMethod::Unlink {
@@ -670,7 +706,13 @@ fn do_remove(
670706
}
671707

672708
if verbose {
673-
show_error!("{}: removed", orig_filename.maybe_quote());
709+
show_error!(
710+
"{}",
711+
get_message_with_args(
712+
"shred-removed",
713+
HashMap::from([("file".to_string(), orig_filename.maybe_quote().to_string())])
714+
)
715+
);
674716
}
675717

676718
Ok(())

0 commit comments

Comments
 (0)
0