1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-27 19:17:43 +00:00

Merge pull request #8171 from sylvestre/l10n-cut

l10n: port cut for translation + add french
This commit is contained in:
Daniel Hofstetter 2025-06-14 09:53:57 +02:00 committed by GitHub
commit 08abb544f2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 206 additions and 52 deletions

View file

@ -90,3 +90,25 @@ cut-after-help = Each call must specify a mode (what to use for columns),
echo 'ab\\0cd' | cut -z -c 1
will result in 'a\\0c\\0'
# Help messages
cut-help-bytes = filter byte columns from the input source
cut-help-characters = alias for character mode
cut-help-delimiter = specify the delimiter character that separates fields in the input source. Defaults to Tab.
cut-help-whitespace-delimited = Use any number of whitespace (Space, Tab) to separate fields in the input source (FreeBSD extension).
cut-help-fields = filter field columns from the input source
cut-help-complement = invert the filter - instead of displaying only the filtered columns, display all but those columns
cut-help-only-delimited = in field mode, only print lines which contain the delimiter
cut-help-zero-terminated = instead of filtering columns based on line, filter columns based on \\0 (NULL character)
cut-help-output-delimiter = in field mode, replace the delimiter in output lines with this option's argument
# Error messages
cut-error-is-directory = Is a directory
cut-error-write-error = write error
cut-error-delimiter-and-whitespace-conflict = invalid input: Only one of --delimiter (-d) or -w option can be specified
cut-error-delimiter-must-be-single-character = the delimiter must be a single character
cut-error-multiple-mode-args = invalid usage: expects no more than one of --fields (-f), --chars (-c) or --bytes (-b)
cut-error-missing-mode-arg = invalid usage: expects one of --fields (-f), --chars (-c) or --bytes (-b)
cut-error-delimiter-only-with-fields = invalid input: The '--delimiter' ('-d') option only usable if printing a sequence of fields
cut-error-whitespace-only-with-fields = invalid input: The '-w' option only usable if printing a sequence of fields
cut-error-only-delimited-only-with-fields = invalid input: The '--only-delimited' ('-s') option only usable if printing a sequence of fields

View file

@ -0,0 +1,114 @@
cut-about = Affiche les colonnes d'octets ou de champs spécifiées de chaque ligne de stdin ou des fichiers d'entrée
cut-usage = cut OPTION... [FICHIER]...
cut-after-help = Chaque appel doit spécifier un mode (quoi utiliser pour les colonnes),
une séquence (quelles colonnes afficher), et fournir une source de données
### Spécifier un mode
Utilisez --bytes (-b) ou --characters (-c) pour spécifier le mode octet
Utilisez --fields (-f) pour spécifier le mode champ, où chaque ligne est divisée en
champs identifiés par un caractère délimiteur. Par exemple pour un CSV typique
vous pourriez utiliser ceci en combinaison avec la définition de la virgule comme délimiteur
### Spécifier une séquence
Une séquence est un groupe de 1 ou plusieurs nombres ou plages inclusives séparés
par des virgules.
cut -f 2,5-7 quelque_fichier.txt
affichera les 2ème, 5ème, 6ème, et 7ème champs pour chaque ligne source
Les plages peuvent s'étendre jusqu'à la fin de la ligne en excluant le second nombre
cut -f 3- quelque_fichier.txt
affichera le 3ème champ et tous les champs suivants pour chaque ligne source
Le premier nombre d'une plage peut être exclu, et ceci est effectivement
identique à utiliser 1 comme premier nombre : cela fait commencer la plage à la
première colonne. Les plages peuvent aussi afficher une seule colonne
cut -f 1,3-5 quelque_fichier.txt
affichera les 1er, 3ème, 4ème, et 5ème champs pour chaque ligne source
L'option --complement, quand utilisée, inverse l'effet de la séquence
cut --complement -f 4-6 quelque_fichier.txt
affichera tous les champs sauf les 4ème, 5ème, et 6ème
### Spécifier une source de données
Si aucun argument de fichier source n'est spécifié, stdin est utilisé comme source
de lignes à afficher
Si des arguments de fichier source sont spécifiés, stdin est ignoré et tous les fichiers sont
lus consécutivement si un fichier source n'est pas lu avec succès, un avertissement
sera affiché sur stderr, et le code de statut final sera 1, mais cut
continuera à lire les fichiers sources suivants
Pour afficher les colonnes depuis STDIN et un argument de fichier, utilisez - (tiret) comme
argument de fichier source pour représenter stdin.
### Options du Mode Champ
Les champs dans chaque ligne sont identifiés par un délimiteur (séparateur)
#### Définir le délimiteur
Définissez le délimiteur qui sépare les champs dans le fichier en utilisant l'option
--delimiter (-d). Définir le délimiteur est optionnel.
Si non défini, un délimiteur par défaut de Tab sera utilisé.
Si l'option -w est fournie, les champs seront séparés par tout nombre
de caractères d'espacement (Espace et Tab). Le délimiteur de sortie sera
un Tab sauf si explicitement spécifié. Seulement une des options -d ou -w peut être spécifiée.
Ceci est une extension adoptée de FreeBSD.
#### Filtrage optionnel basé sur le délimiteur
Si le drapeau --only-delimited (-s) est fourni, seules les lignes qui
contiennent le délimiteur seront affichées
#### Remplacer le délimiteur
Si l'option --output-delimiter est fournie, l'argument utilisé pour
elle remplacera le caractère délimiteur dans chaque ligne affichée. Ceci est
utile pour transformer les données tabulaires - par ex. pour convertir un CSV en
TSV (fichier séparé par tabulations)
### Fins de ligne
Quand l'option --zero-terminated (-z) est utilisée, cut voit \\0 (null) comme le
caractère de 'fin de ligne' (à la fois pour lire les lignes et
séparer les lignes affichées) au lieu de \\n (nouvelle ligne). Ceci est utile pour
les données tabulaires où certaines cellules peuvent contenir des nouvelles lignes
echo 'ab\\0cd' | cut -z -c 1
donnera comme résultat 'a\\0c\\0'
# Messages d'aide
cut-help-bytes = filtrer les colonnes d'octets depuis la source d'entrée
cut-help-characters = alias pour le mode caractère
cut-help-delimiter = spécifier le caractère délimiteur qui sépare les champs dans la source d'entrée. Par défaut Tab.
cut-help-whitespace-delimited = Utiliser tout nombre d'espaces (Espace, Tab) pour séparer les champs dans la source d'entrée (extension FreeBSD).
cut-help-fields = filtrer les colonnes de champs depuis la source d'entrée
cut-help-complement = inverser le filtre - au lieu d'afficher seulement les colonnes filtrées, afficher toutes sauf ces colonnes
cut-help-only-delimited = en mode champ, afficher seulement les lignes qui contiennent le délimiteur
cut-help-zero-terminated = au lieu de filtrer les colonnes basées sur la ligne, filtrer les colonnes basées sur \\0 (caractère NULL)
cut-help-output-delimiter = en mode champ, remplacer le délimiteur dans les lignes de sortie avec l'argument de cette option
# Messages d'erreur
cut-error-is-directory = Est un répertoire
cut-error-write-error = erreur d'écriture
cut-error-delimiter-and-whitespace-conflict = entrée invalide : Seulement une des options --delimiter (-d) ou -w peut être spécifiée
cut-error-delimiter-must-be-single-character = le délimiteur doit être un caractère unique
cut-error-multiple-mode-args = usage invalide : attend au plus une des options --fields (-f), --chars (-c) ou --bytes (-b)
cut-error-missing-mode-arg = usage invalide : attend une des options --fields (-f), --chars (-c) ou --bytes (-b)
cut-error-delimiter-only-with-fields = entrée invalide : L'option '--delimiter' ('-d') n'est utilisable que si on affiche une séquence de champs
cut-error-whitespace-only-with-fields = entrée invalide : L'option '-w' n'est utilisable que si on affiche une séquence de champs
cut-error-only-delimited-only-with-fields = entrée invalide : L'option '--only-delimited' ('-s') n'est utilisable que si on affiche une séquence de champs

View file

@ -372,7 +372,11 @@ fn cut_files(mut filenames: Vec<String>, mode: &Mode) {
let path = Path::new(&filename[..]);
if path.is_dir() {
show_error!("{}: Is a directory", filename.maybe_quote());
show_error!(
"{}: {}",
filename.maybe_quote(),
get_message("cut-error-is-directory")
);
set_exit_code(1);
continue;
}
@ -392,7 +396,10 @@ fn cut_files(mut filenames: Vec<String>, mode: &Mode) {
}
}
show_if_err!(out.flush().map_err_context(|| "write error".into()));
show_if_err!(
out.flush()
.map_err_context(|| get_message("cut-error-write-error"))
);
}
// Get delimiter and output delimiter from `-d`/`--delimiter` and `--output-delimiter` options respectively
@ -404,7 +411,7 @@ fn get_delimiters(matches: &ArgMatches) -> UResult<(Delimiter, Option<&[u8]>)> {
Some(_) if whitespace_delimited => {
return Err(USimpleError::new(
1,
"invalid input: Only one of --delimiter (-d) or -w option can be specified",
get_message("cut-error-delimiter-and-whitespace-conflict"),
));
}
Some(os_string) => {
@ -420,7 +427,7 @@ fn get_delimiters(matches: &ArgMatches) -> UResult<(Delimiter, Option<&[u8]>)> {
{
return Err(USimpleError::new(
1,
"the delimiter must be a single character",
get_message("cut-error-delimiter-must-be-single-character"),
));
} else {
Delimiter::from(os_string)
@ -502,39 +509,50 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
matches.get_one::<String>(options::CHARACTERS),
matches.get_one::<String>(options::FIELDS),
) {
(1, Some(byte_ranges), None, None) => list_to_ranges(byte_ranges, complement).map(|ranges| {
Mode::Bytes(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
}),
(1, None, Some(char_ranges), None) => list_to_ranges(char_ranges, complement).map(|ranges| {
Mode::Characters(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
}),
(1, None, None, Some(field_ranges)) => list_to_ranges(field_ranges, complement).map(|ranges| {
Mode::Fields(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: Some(FieldOptions { delimiter, only_delimited })},
)
}),
(2.., _, _, _) => Err(
"invalid usage: expects no more than one of --fields (-f), --chars (-c) or --bytes (-b)".into()
),
_ => Err("invalid usage: expects one of --fields (-f), --chars (-c) or --bytes (-b)".into()),
(1, Some(byte_ranges), None, None) => {
list_to_ranges(byte_ranges, complement).map(|ranges| {
Mode::Bytes(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
})
}
(1, None, Some(char_ranges), None) => {
list_to_ranges(char_ranges, complement).map(|ranges| {
Mode::Characters(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: None,
},
)
})
}
(1, None, None, Some(field_ranges)) => {
list_to_ranges(field_ranges, complement).map(|ranges| {
Mode::Fields(
ranges,
Options {
out_delimiter,
line_ending,
field_opts: Some(FieldOptions {
delimiter,
only_delimited,
}),
},
)
})
}
(2.., _, _, _) => Err(get_message("cut-error-multiple-mode-args")),
_ => Err(get_message("cut-error-missing-mode-arg")),
};
let mode_parse = match mode_parse {
@ -543,17 +561,17 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
Mode::Bytes(_, _) | Mode::Characters(_, _)
if matches.contains_id(options::DELIMITER) =>
{
Err("invalid input: The '--delimiter' ('-d') option only usable if printing a sequence of fields".into())
Err(get_message("cut-error-delimiter-only-with-fields"))
}
Mode::Bytes(_, _) | Mode::Characters(_, _)
if matches.get_flag(options::WHITESPACE_DELIMITED) =>
{
Err("invalid input: The '-w' option only usable if printing a sequence of fields".into())
Err(get_message("cut-error-whitespace-only-with-fields"))
}
Mode::Bytes(_, _) | Mode::Characters(_, _)
if matches.get_flag(options::ONLY_DELIMITED) =>
{
Err("invalid input: The '--only-delimited' ('-s') option only usable if printing a sequence of fields".into())
Err(get_message("cut-error-only-delimited-only-with-fields"))
}
_ => Ok(mode),
},
@ -593,7 +611,7 @@ pub fn uu_app() -> Command {
Arg::new(options::BYTES)
.short('b')
.long(options::BYTES)
.help("filter byte columns from the input source")
.help(get_message("cut-help-bytes"))
.allow_hyphen_values(true)
.value_name("LIST")
.action(ArgAction::Append),
@ -602,7 +620,7 @@ pub fn uu_app() -> Command {
Arg::new(options::CHARACTERS)
.short('c')
.long(options::CHARACTERS)
.help("alias for character mode")
.help(get_message("cut-help-characters"))
.allow_hyphen_values(true)
.value_name("LIST")
.action(ArgAction::Append),
@ -612,13 +630,13 @@ pub fn uu_app() -> Command {
.short('d')
.long(options::DELIMITER)
.value_parser(ValueParser::os_string())
.help("specify the delimiter character that separates fields in the input source. Defaults to Tab.")
.help(get_message("cut-help-delimiter"))
.value_name("DELIM"),
)
.arg(
Arg::new(options::WHITESPACE_DELIMITED)
.short('w')
.help("Use any number of whitespace (Space, Tab) to separate fields in the input source (FreeBSD extension).")
.help(get_message("cut-help-whitespace-delimited"))
.value_name("WHITESPACE")
.action(ArgAction::SetTrue),
)
@ -626,7 +644,7 @@ pub fn uu_app() -> Command {
Arg::new(options::FIELDS)
.short('f')
.long(options::FIELDS)
.help("filter field columns from the input source")
.help(get_message("cut-help-fields"))
.allow_hyphen_values(true)
.value_name("LIST")
.action(ArgAction::Append),
@ -634,34 +652,34 @@ pub fn uu_app() -> Command {
.arg(
Arg::new(options::COMPLEMENT)
.long(options::COMPLEMENT)
.help("invert the filter - instead of displaying only the filtered columns, display all but those columns")
.help(get_message("cut-help-complement"))
.action(ArgAction::SetTrue),
)
.arg(
Arg::new(options::ONLY_DELIMITED)
.short('s')
.long(options::ONLY_DELIMITED)
.help("in field mode, only print lines which contain the delimiter")
.help(get_message("cut-help-only-delimited"))
.action(ArgAction::SetTrue),
)
.arg(
Arg::new(options::ZERO_TERMINATED)
.short('z')
.long(options::ZERO_TERMINATED)
.help("instead of filtering columns based on line, filter columns based on \\0 (NULL character)")
.help(get_message("cut-help-zero-terminated"))
.action(ArgAction::SetTrue),
)
.arg(
Arg::new(options::OUTPUT_DELIMITER)
.long(options::OUTPUT_DELIMITER)
.value_parser(ValueParser::os_string())
.help("in field mode, replace the delimiter in output lines with this option's argument")
.help(get_message("cut-help-output-delimiter"))
.value_name("NEW_DELIM"),
)
.arg(
Arg::new(options::FILE)
.hide(true)
.action(ArgAction::Append)
.value_hint(clap::ValueHint::FilePath)
.hide(true)
.action(ArgAction::Append)
.value_hint(clap::ValueHint::FilePath),
)
}