mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
Merge pull request #8171 from sylvestre/l10n-cut
l10n: port cut for translation + add french
This commit is contained in:
commit
08abb544f2
3 changed files with 206 additions and 52 deletions
|
@ -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
|
echo 'ab\\0cd' | cut -z -c 1
|
||||||
|
|
||||||
will result in 'a\\0c\\0'
|
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
|
||||||
|
|
114
src/uu/cut/locales/fr-FR.ftl
Normal file
114
src/uu/cut/locales/fr-FR.ftl
Normal 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
|
|
@ -372,7 +372,11 @@ fn cut_files(mut filenames: Vec<String>, mode: &Mode) {
|
||||||
let path = Path::new(&filename[..]);
|
let path = Path::new(&filename[..]);
|
||||||
|
|
||||||
if path.is_dir() {
|
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);
|
set_exit_code(1);
|
||||||
continue;
|
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
|
// 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 => {
|
Some(_) if whitespace_delimited => {
|
||||||
return Err(USimpleError::new(
|
return Err(USimpleError::new(
|
||||||
1,
|
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) => {
|
Some(os_string) => {
|
||||||
|
@ -420,7 +427,7 @@ fn get_delimiters(matches: &ArgMatches) -> UResult<(Delimiter, Option<&[u8]>)> {
|
||||||
{
|
{
|
||||||
return Err(USimpleError::new(
|
return Err(USimpleError::new(
|
||||||
1,
|
1,
|
||||||
"the delimiter must be a single character",
|
get_message("cut-error-delimiter-must-be-single-character"),
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
Delimiter::from(os_string)
|
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::CHARACTERS),
|
||||||
matches.get_one::<String>(options::FIELDS),
|
matches.get_one::<String>(options::FIELDS),
|
||||||
) {
|
) {
|
||||||
(1, Some(byte_ranges), None, None) => list_to_ranges(byte_ranges, complement).map(|ranges| {
|
(1, Some(byte_ranges), None, None) => {
|
||||||
Mode::Bytes(
|
list_to_ranges(byte_ranges, complement).map(|ranges| {
|
||||||
ranges,
|
Mode::Bytes(
|
||||||
Options {
|
ranges,
|
||||||
out_delimiter,
|
Options {
|
||||||
line_ending,
|
out_delimiter,
|
||||||
field_opts: None,
|
line_ending,
|
||||||
},
|
field_opts: None,
|
||||||
)
|
},
|
||||||
}),
|
)
|
||||||
(1, None, Some(char_ranges), None) => list_to_ranges(char_ranges, complement).map(|ranges| {
|
})
|
||||||
Mode::Characters(
|
}
|
||||||
ranges,
|
|
||||||
Options {
|
(1, None, Some(char_ranges), None) => {
|
||||||
out_delimiter,
|
list_to_ranges(char_ranges, complement).map(|ranges| {
|
||||||
line_ending,
|
Mode::Characters(
|
||||||
field_opts: None,
|
ranges,
|
||||||
},
|
Options {
|
||||||
)
|
out_delimiter,
|
||||||
}),
|
line_ending,
|
||||||
(1, None, None, Some(field_ranges)) => list_to_ranges(field_ranges, complement).map(|ranges| {
|
field_opts: None,
|
||||||
Mode::Fields(
|
},
|
||||||
ranges,
|
)
|
||||||
Options {
|
})
|
||||||
out_delimiter,
|
}
|
||||||
line_ending,
|
|
||||||
field_opts: Some(FieldOptions { delimiter, only_delimited })},
|
(1, None, None, Some(field_ranges)) => {
|
||||||
)
|
list_to_ranges(field_ranges, complement).map(|ranges| {
|
||||||
}),
|
Mode::Fields(
|
||||||
(2.., _, _, _) => Err(
|
ranges,
|
||||||
"invalid usage: expects no more than one of --fields (-f), --chars (-c) or --bytes (-b)".into()
|
Options {
|
||||||
),
|
out_delimiter,
|
||||||
_ => Err("invalid usage: expects one of --fields (-f), --chars (-c) or --bytes (-b)".into()),
|
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 {
|
let mode_parse = match mode_parse {
|
||||||
|
@ -543,17 +561,17 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
|
||||||
Mode::Bytes(_, _) | Mode::Characters(_, _)
|
Mode::Bytes(_, _) | Mode::Characters(_, _)
|
||||||
if matches.contains_id(options::DELIMITER) =>
|
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(_, _)
|
Mode::Bytes(_, _) | Mode::Characters(_, _)
|
||||||
if matches.get_flag(options::WHITESPACE_DELIMITED) =>
|
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(_, _)
|
Mode::Bytes(_, _) | Mode::Characters(_, _)
|
||||||
if matches.get_flag(options::ONLY_DELIMITED) =>
|
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),
|
_ => Ok(mode),
|
||||||
},
|
},
|
||||||
|
@ -593,7 +611,7 @@ pub fn uu_app() -> Command {
|
||||||
Arg::new(options::BYTES)
|
Arg::new(options::BYTES)
|
||||||
.short('b')
|
.short('b')
|
||||||
.long(options::BYTES)
|
.long(options::BYTES)
|
||||||
.help("filter byte columns from the input source")
|
.help(get_message("cut-help-bytes"))
|
||||||
.allow_hyphen_values(true)
|
.allow_hyphen_values(true)
|
||||||
.value_name("LIST")
|
.value_name("LIST")
|
||||||
.action(ArgAction::Append),
|
.action(ArgAction::Append),
|
||||||
|
@ -602,7 +620,7 @@ pub fn uu_app() -> Command {
|
||||||
Arg::new(options::CHARACTERS)
|
Arg::new(options::CHARACTERS)
|
||||||
.short('c')
|
.short('c')
|
||||||
.long(options::CHARACTERS)
|
.long(options::CHARACTERS)
|
||||||
.help("alias for character mode")
|
.help(get_message("cut-help-characters"))
|
||||||
.allow_hyphen_values(true)
|
.allow_hyphen_values(true)
|
||||||
.value_name("LIST")
|
.value_name("LIST")
|
||||||
.action(ArgAction::Append),
|
.action(ArgAction::Append),
|
||||||
|
@ -612,13 +630,13 @@ pub fn uu_app() -> Command {
|
||||||
.short('d')
|
.short('d')
|
||||||
.long(options::DELIMITER)
|
.long(options::DELIMITER)
|
||||||
.value_parser(ValueParser::os_string())
|
.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"),
|
.value_name("DELIM"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new(options::WHITESPACE_DELIMITED)
|
Arg::new(options::WHITESPACE_DELIMITED)
|
||||||
.short('w')
|
.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")
|
.value_name("WHITESPACE")
|
||||||
.action(ArgAction::SetTrue),
|
.action(ArgAction::SetTrue),
|
||||||
)
|
)
|
||||||
|
@ -626,7 +644,7 @@ pub fn uu_app() -> Command {
|
||||||
Arg::new(options::FIELDS)
|
Arg::new(options::FIELDS)
|
||||||
.short('f')
|
.short('f')
|
||||||
.long(options::FIELDS)
|
.long(options::FIELDS)
|
||||||
.help("filter field columns from the input source")
|
.help(get_message("cut-help-fields"))
|
||||||
.allow_hyphen_values(true)
|
.allow_hyphen_values(true)
|
||||||
.value_name("LIST")
|
.value_name("LIST")
|
||||||
.action(ArgAction::Append),
|
.action(ArgAction::Append),
|
||||||
|
@ -634,34 +652,34 @@ pub fn uu_app() -> Command {
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new(options::COMPLEMENT)
|
Arg::new(options::COMPLEMENT)
|
||||||
.long(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),
|
.action(ArgAction::SetTrue),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new(options::ONLY_DELIMITED)
|
Arg::new(options::ONLY_DELIMITED)
|
||||||
.short('s')
|
.short('s')
|
||||||
.long(options::ONLY_DELIMITED)
|
.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),
|
.action(ArgAction::SetTrue),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new(options::ZERO_TERMINATED)
|
Arg::new(options::ZERO_TERMINATED)
|
||||||
.short('z')
|
.short('z')
|
||||||
.long(options::ZERO_TERMINATED)
|
.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),
|
.action(ArgAction::SetTrue),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new(options::OUTPUT_DELIMITER)
|
Arg::new(options::OUTPUT_DELIMITER)
|
||||||
.long(options::OUTPUT_DELIMITER)
|
.long(options::OUTPUT_DELIMITER)
|
||||||
.value_parser(ValueParser::os_string())
|
.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"),
|
.value_name("NEW_DELIM"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new(options::FILE)
|
Arg::new(options::FILE)
|
||||||
.hide(true)
|
.hide(true)
|
||||||
.action(ArgAction::Append)
|
.action(ArgAction::Append)
|
||||||
.value_hint(clap::ValueHint::FilePath)
|
.value_hint(clap::ValueHint::FilePath),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue