From 2aeca365e375be9fdaeabefcf6a85d2758d4a518 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sat, 14 Jun 2025 23:01:31 +0200 Subject: [PATCH] l10n: port mknod for translation + add french --- src/uu/mknod/locales/en-US.ftl | 17 +++++++++++++++ src/uu/mknod/locales/fr-FR.ftl | 34 ++++++++++++++++++++++++++++++ src/uu/mknod/src/mknod.rs | 38 ++++++++++++++++++++-------------- 3 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 src/uu/mknod/locales/fr-FR.ftl diff --git a/src/uu/mknod/locales/en-US.ftl b/src/uu/mknod/locales/en-US.ftl index c0e391381..4d655d4c0 100644 --- a/src/uu/mknod/locales/en-US.ftl +++ b/src/uu/mknod/locales/en-US.ftl @@ -15,3 +15,20 @@ mknod-after-help = Mandatory arguments to long options are mandatory for short o NOTE: your shell may have its own version of mknod, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports. + +# Help messages +mknod-help-mode = set file permission bits to MODE, not a=rw - umask +mknod-help-name = name of the new file +mknod-help-type = type of the new file (b, c, u or p) +mknod-help-major = major file type +mknod-help-minor = minor file type +mknod-help-selinux = set SELinux security context of each created directory to the default type +mknod-help-context = like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX + +# Error messages +mknod-error-fifo-no-major-minor = Fifos do not have major and minor device numbers. +mknod-error-special-require-major-minor = Special files require major and minor device numbers. +mknod-error-invalid-mode = invalid mode ({ $error }) +mknod-error-mode-permission-bits-only = mode must specify only file permission bits +mknod-error-missing-device-type = missing device type +mknod-error-invalid-device-type = invalid device type { $type } diff --git a/src/uu/mknod/locales/fr-FR.ftl b/src/uu/mknod/locales/fr-FR.ftl new file mode 100644 index 000000000..a17ad862e --- /dev/null +++ b/src/uu/mknod/locales/fr-FR.ftl @@ -0,0 +1,34 @@ +mknod-about = Créer le fichier spécial NOM du TYPE donné. +mknod-usage = mknod [OPTION]... NOM TYPE [MAJEUR MINEUR] +mknod-after-help = Les arguments obligatoires pour les options longues le sont aussi pour les options courtes. + -m, --mode=MODE définir les bits de permission de fichier à MODE, pas a=rw - umask + + MAJEUR et MINEUR doivent tous deux être spécifiés quand TYPE est b, c, ou u, et ils + doivent être omis quand TYPE est p. Si MAJEUR ou MINEUR commence par 0x ou 0X, + il est interprété comme hexadécimal ; sinon, s'il commence par 0, comme octal ; + sinon, comme décimal. TYPE peut être : + + - b créer un fichier spécial bloc (mis en mémoire tampon) + - c, u créer un fichier spécial caractère (non mis en mémoire tampon) + - p créer un FIFO + + NOTE : votre shell peut avoir sa propre version de mknod, qui remplace généralement + la version décrite ici. Veuillez vous référer à la documentation de votre shell + pour les détails sur les options qu'il supporte. + +# Messages d'aide +mknod-help-mode = définir les bits de permission de fichier à MODE, pas a=rw - umask +mknod-help-name = nom du nouveau fichier +mknod-help-type = type du nouveau fichier (b, c, u ou p) +mknod-help-major = type de fichier majeur +mknod-help-minor = type de fichier mineur +mknod-help-selinux = définir le contexte de sécurité SELinux de chaque répertoire créé au type par défaut +mknod-help-context = comme -Z, ou si CTX est spécifié, définir le contexte de sécurité SELinux ou SMACK à CTX + +# Messages d'erreur +mknod-error-fifo-no-major-minor = Les fifos n'ont pas de numéros de périphérique majeur et mineur. +mknod-error-special-require-major-minor = Les fichiers spéciaux nécessitent des numéros de périphérique majeur et mineur. +mknod-error-invalid-mode = mode invalide ({ $error }) +mknod-error-mode-permission-bits-only = le mode ne doit spécifier que les bits de permission de fichier +mknod-error-missing-device-type = type de périphérique manquant +mknod-error-invalid-device-type = type de périphérique invalide { $type } diff --git a/src/uu/mknod/src/mknod.rs b/src/uu/mknod/src/mknod.rs index 94aa043ca..55a7bba1b 100644 --- a/src/uu/mknod/src/mknod.rs +++ b/src/uu/mknod/src/mknod.rs @@ -8,13 +8,13 @@ use clap::{Arg, ArgAction, Command, value_parser}; use libc::{S_IFBLK, S_IFCHR, S_IFIFO, S_IRGRP, S_IROTH, S_IRUSR, S_IWGRP, S_IWOTH, S_IWUSR}; use libc::{dev_t, mode_t}; +use std::collections::HashMap; use std::ffi::CString; use uucore::display::Quotable; use uucore::error::{UResult, USimpleError, UUsageError, set_exit_code}; use uucore::format_usage; - -use uucore::locale::get_message; +use uucore::locale::{get_message, get_message_with_args}; const MODE_RW_UGO: mode_t = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; @@ -130,14 +130,14 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { (FileType::Fifo, _, _) => { return Err(UUsageError::new( 1, - "Fifos do not have major and minor device numbers.", + get_message("mknod-error-fifo-no-major-minor"), )); } (_, Some(&major), Some(&minor)) => makedev(major, minor), _ => { return Err(UUsageError::new( 1, - "Special files require major and minor device numbers.", + get_message("mknod-error-special-require-major-minor"), )); } }; @@ -166,38 +166,38 @@ pub fn uu_app() -> Command { .short('m') .long("mode") .value_name("MODE") - .help("set file permission bits to MODE, not a=rw - umask"), + .help(get_message("mknod-help-mode")), ) .arg( Arg::new("name") .value_name("NAME") - .help("name of the new file") + .help(get_message("mknod-help-name")) .required(true) .value_hint(clap::ValueHint::AnyPath), ) .arg( Arg::new(options::TYPE) .value_name("TYPE") - .help("type of the new file (b, c, u or p)") + .help(get_message("mknod-help-type")) .required(true) .value_parser(parse_type), ) .arg( Arg::new(options::MAJOR) .value_name(options::MAJOR) - .help("major file type") + .help(get_message("mknod-help-major")) .value_parser(value_parser!(u64)), ) .arg( Arg::new(options::MINOR) .value_name(options::MINOR) - .help("minor file type") + .help(get_message("mknod-help-minor")) .value_parser(value_parser!(u64)), ) .arg( Arg::new(options::SELINUX) .short('Z') - .help("set SELinux security context of each created directory to the default type") + .help(get_message("mknod-help-selinux")) .action(ArgAction::SetTrue), ) .arg( @@ -207,7 +207,7 @@ pub fn uu_app() -> Command { .value_parser(value_parser!(String)) .num_args(0..=1) .require_equals(true) - .help("like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX") + .help(get_message("mknod-help-context")), ) } @@ -215,10 +215,15 @@ fn get_mode(str_mode: Option<&String>) -> Result { match str_mode { None => Ok(MODE_RW_UGO), Some(str_mode) => uucore::mode::parse_mode(str_mode) - .map_err(|e| format!("invalid mode ({e})")) + .map_err(|e| { + get_message_with_args( + "mknod-error-invalid-mode", + HashMap::from([("error".to_string(), e.to_string())]), + ) + }) .and_then(|mode| { if mode > 0o777 { - Err("mode must specify only file permission bits".to_string()) + Err(get_message("mknod-error-mode-permission-bits-only")) } else { Ok(mode) } @@ -231,11 +236,14 @@ fn parse_type(tpe: &str) -> Result { // 'mknod /dev/rst0 character 18 0'. tpe.chars() .next() - .ok_or_else(|| "missing device type".to_string()) + .ok_or_else(|| get_message("mknod-error-missing-device-type")) .and_then(|first_char| match first_char { 'b' => Ok(FileType::Block), 'c' | 'u' => Ok(FileType::Character), 'p' => Ok(FileType::Fifo), - _ => Err(format!("invalid device type {}", tpe.quote())), + _ => Err(get_message_with_args( + "mknod-error-invalid-device-type", + HashMap::from([("type".to_string(), tpe.quote().to_string())]), + )), }) }