use super::Strings;
use crate::providers::ProviderId;
pub const STRINGS: Strings = Strings {
search: "Rechercher",
downloads: "Téléchargements",
settings: "Paramètres",
library: "Bibliothèque",
nothing_saved_yet: "Rien n'est encore enregistré",
new_playlist_name: "Nom de la nouvelle playlist",
queue: "File d'attente",
recently_played: "Écoutés récemment",
now_playing_from: "Lecture en cours depuis",
now_playing: "En lecture",
up_next: "À venir",
no_track_playing: "Aucune piste en lecture",
no_more_tracks_in_queue: "Plus de pistes dans la file",
no_recently_played_tracks: "Aucune piste écoutée récemment",
not_playing: "Aucune lecture",
no_tracks_found: "Aucune piste trouvée",
searching: "Recherche…",
loading: "Chargement…",
load_more: "Charger plus",
no_results_found: "Aucun résultat",
no_recent_searches: "Aucune recherche récente",
generating_radio: "Génération de la radio…",
not_an_artist_page: "Ce n'est pas une page d'artiste",
provided_by: "Fourni par",
retry: "Réessayer",
nothing_here: "Rien par ici",
most_popular_songs: "Titres les plus populaires",
albums: "Albums",
playlists: "Playlists",
fans_also_like: "Les fans aiment aussi",
looking_up_lyrics: "Recherche des paroles…",
play_a_track_for_lyrics: "Lisez une piste pour voir ses paroles.",
lyrics_selectable: "Sélectionnable",
lyrics_synced: "Synchronisées",
lyrics_plain: "Simple",
add_custom: "Ajouter des paroles",
lyrics_name: "Nom",
translate_with_ai: "Traduire avec l'IA",
translate_title: "Traduire les paroles avec l'IA",
translate_language_lbl: "Langue cible",
translate_prompt_lbl: "Prompt",
translate_submit: "Traduire",
translate_reset: "Réinitialiser le prompt",
translating: "Traduction en cours…",
translation_ready: "Traduction prête — relisez et enregistrez",
translation_language_empty: "Saisissez une langue cible",
no_lyrics_to_translate: "Aucunes paroles à traduire pour ce titre.",
translation_not_configured: "Définissez l'URL du serveur et le modèle dans les paramètres.",
translation_failed: |e| format!("Échec de la traduction : {e}"),
sec_translation: "Traduction IA",
translation_base_url_lbl: "URL du serveur (compatible OpenAI)",
translation_api_key_lbl: "Clé API (vide pour les serveurs locaux)",
translation_model_lbl: "Modèle",
translation_refresh_models: "Récupérer la liste des modèles",
translation_no_models: "Aucun modèle trouvé sur ce serveur.",
translation_models_failed: |e| format!("Impossible de charger la liste des modèles : {e}"),
edit_lyrics: "Modifier les paroles",
lyrics_editor_hint: "Une ligne par parole. Préfixez avec [mm:ss.xx] pour des paroles synchronisées, ou laissez en clair. Ajoutez une ligne `# note` sous une parole pour afficher une note sous les paroles.",
playlist_not_found: "Playlist introuvable",
add_local: "Ajouter local",
downloaded_tracks: "Pistes téléchargées",
no_downloaded_tracks: "Aucune piste téléchargée",
ctx_play: "Lire",
ctx_play_local: "Lire le fichier local",
ctx_edit: "Modifier",
ctx_go_to_artist: "Aller à l'artiste",
ctx_add_to_queue: "Ajouter à la file d'attente",
ctx_add_to_playlist: "Ajouter à la playlist",
ctx_download: "Télécharger",
ctx_song_radio: "Radio du titre",
ctx_artist_radio: "Radio de l'artiste",
ctx_remove_from_queue: "Retirer de la file",
ctx_remove_from_playlist: "Retirer de la playlist",
ctx_remove_from_recent: "Retirer des récents",
ctx_clear_cache: "Vider le cache",
sub_play_via: "Lire via",
sub_download_from: "Télécharger depuis",
sub_via: "Via",
sub_on: "Sur",
sub_clear_cache_from: "Effacer de",
via_search_suffix: "(recherche)",
current: "(actuelle)",
select: "sélectionner",
find: "Rechercher",
finding: "Recherche…",
found_on: |p| format!("Trouvé sur {p}"),
not_linked: "Non lié",
providers: "Fournisseurs",
no_provider_data: "Cette piste n'a aucune donnée de fournisseur.",
save: "Enregistrer",
cancel: "Annuler",
edit_track: "Modifier la piste",
lbl_title: "Titre",
lbl_artist: "Artiste",
ph_track_title: "Titre de la piste",
ph_track_artist: "Artiste de la piste",
delete: "Supprimer",
delete_playlist_q: "Supprimer la playlist ?",
tracks_wont_be_deleted: "Les pistes ne seront pas supprimées.",
lbl_id: "ID",
lbl_url: "URL",
lbl_artist_id: "Id de l'artiste",
lbl_duration_secs: "Durée (en secondes)",
lbl_thumbnail: "Miniature",
lbl_album: "Album",
sec_playback: "Lecture",
sec_storage: "Stockage",
sec_history: "Historique",
sec_appearance: "Apparence",
sec_dependencies: "Dépendances",
theme_lbl: "Thème",
language_lbl: "Langue",
default_provider_lbl: "Fournisseur de streaming et de téléchargement par défaut",
cookie_browser_lbl: "Cookies du navigateur (vidéos soumises à une limite d’âge)",
cookies_off: "Désactivé",
normalize_volume_lbl: "Normaliser le volume entre les pistes",
download_dir_lbl: "Dossier de téléchargement",
cache_size_lbl: "Taille max. du cache de streaming (Mo)",
hist_rows_lbl: "Lignes d'historique de recherche affichées",
hist_entries_lbl: "Entrées d'historique de recherche conservées",
recent_kept_lbl: "Pistes récemment écoutées conservées",
reset_defaults: "Réinitialiser",
find_in_list: "Rechercher dans la liste…",
scope_songs: "Titres",
scope_videos: "Vidéos",
scope_artists: "Artistes",
scope_albums: "Albums",
scope_playlists: "Playlists",
radio_word_song: "titre",
radio_word_artist: "artiste",
lyrics_copied: "Paroles copiées dans le presse-papiers",
saved_to_library: "Enregistré dans la bibliothèque",
removed_from_library: "Retiré de la bibliothèque",
no_lyrics_found: "Aucune parole trouvée pour cette piste.",
lyrics_saved: "Paroles personnalisées enregistrées",
lyrics_deleted: "Paroles personnalisées supprimées",
lyrics_empty: "Les paroles ne peuvent pas être vides",
lyrics_name_empty: "Donnez un nom à vos paroles",
select_playlist_drop: "Sélectionnez une playlist pour y déposer les pistes",
reordered_playlist: "Playlist réorganisée",
max_panes_reached: "Nombre maximal de volets atteint",
n_saved: |n| format!("{n} enregistré{}", if n == 1 { "" } else { "s" }),
n_plays: |n| format!("{} écoutes", crate::util::format_count(n)),
search_placeholder: |p| match p {
ProviderId::YouTube => "Rechercher sur YouTube Music…".into(),
ProviderId::Local => "Rechercher…".into(),
other => format!("Rechercher sur {}…", other.label()),
},
added: |n| format!("Ajoutées {}", fr_tracks(n)),
added_to: |n, to| format!("Ajoutées {} à {to}", fr_tracks(n)),
removed_n: |n| format!("Retirées {}", fr_tracks(n)),
removed_from: |n, from| format!("Retirées {} de {from}", fr_tracks(n)),
pasted_into: |n, into| format!("Collées {} dans {into}", fr_tracks(n)),
saved_title: |t| format!("« {t} » enregistré dans la bibliothèque"),
playlist_created: |n| format!("Playlist « {n} » créée"),
added_local: |n| format!("Ajoutées {} (sélectionnez une playlist pour les organiser)", fr_tracks(n)),
downloading_n: |n| format!("Téléchargement de {}…", fr_tracks(n)),
resolving_on: |title, p| format!("Résolution de « {title} » sur {p}…"),
resolving_player_client: "Recherche d'un client lecteur compatible…",
resolved_player_client: |c| format!("Client lecteur compatible : {c}"),
player_client_unavailable: "Aucun client lecteur compatible trouvé, utilisation de celui par défaut…",
provider_no_radio: |p| format!("{p} ne prend pas en charge la radio"),
generating_radio_for: |w, name| format!("Génération de la radio pour {w} : {name}…"),
could_not_find_on: |name, p| format!("Impossible de trouver « {name} » sur {p}"),
opening: |l| format!("Ouverture : {l}…"),
opening_artist: |name| format!("Ouverture de l'artiste : {name}…"),
download_complete: |path| format!("Téléchargement terminé ! Enregistré dans {path}"),
failed_resolve_on: |title, p, e| format!("Échec de la résolution de « {title} » sur {p} : {e}"),
couldnt_load: |e| format!("Impossible de charger : {e}"),
couldnt_load_lyrics: |e| format!("Impossible de charger les paroles : {e}"),
search_failed: |e| format!("Échec de la recherche : {e}"),
cache_cleared_for: |p| format!("Cache effacé pour {p}"),
radio_label: |w, name| format!("Radio ({w}) : {name}"),
ctx_add_to_playlist_n: |n| format!("Ajouter {} à la playlist", fr_tracks(n)),
ctx_add_to_queue_n: |n| format!("Ajouter {} à la file d'attente", fr_tracks(n)),
ctx_download_n: |n| format!("Télécharger {}", fr_tracks(n)),
ctx_remove_from_queue_n: |n| format!("Retirer {} de la file", fr_tracks(n)),
ctx_remove_from_playlist_n: |n| format!("Retirer {} de la playlist", fr_tracks(n)),
ctx_remove_from_recent_n: |n| format!("Retirer {} des récents", fr_tracks(n)),
import_playlist: "Importer une playlist",
import_method_native: "Native",
import_method_filelist: "Liste de fichiers",
import_method_csv: "CSV",
import_native_hint: "Importe des playlists depuis un fichier playlists.json.",
import_csv_name_col: "Colonne de nom",
import_csv_artist_col: "Colonne d'artiste",
import_csv_album_col: "Colonne d'album",
import_csv_preset: "Préréglage",
import_csv_preset_default: "Par défaut",
import_csv_preset_exportify: "Exportify",
import_csv_exportify_note: "Prend en charge les playlists Spotify exportées depuis https://exportify.net/.",
import_pattern_lbl: "Motif de nom de fichier",
import_playlist_name: "Nom de la playlist",
import_add_pattern: "Ajouter un motif",
import_select_file: "Sélectionner un fichier",
import_select_folder: "Sélectionner un dossier",
import_pattern_conflict: |a, b| {
format!(
"Les motifs « {a} » et « {b} » peuvent correspondre au même fichier avec des champs en conflit. Supprimez ou corrigez l'un d'eux."
)
},
import_playlists_imported: |n| format!("Importées {}", fr_tracks(n)),
import_imported_into: |n, into| format!("Importées {} dans {}", fr_tracks(n), into),
import_no_tracks: "Aucune piste à importer.",
import_no_match: "Aucun fichier ne correspond aux motifs.",
import_bad_file: "Impossible de lire le fichier sélectionné.",
deps_title: "Dépendances manquantes",
deps_intro: "Certains outils utilisés par l'application sont manquants. Sélectionnez ceux à installer ou abandonnez pour continuer (la recherche et le streaming peuvent ne pas fonctionner tant qu'ils ne sont pas présents).",
deps_install: "Installer",
deps_install_selected: "Installer la sélection",
deps_discard: "Abandonner",
deps_installing: "Installation…",
deps_installed: "Installé",
deps_failed: "Échec",
deps_installed_toast: "Dépendances sélectionnées installées.",
deps_yt_dlp_desc: "Diffuse et télécharge l'audio (requis pour YouTube et SoundCloud)",
deps_ytmusicapi_desc: "Recherche YouTube Music (optionnel, repli sur yt-dlp)",
deps_python3_desc: "Requis par ytmusicapi (recherche YouTube Music)",
deps_ytmusicapi_requires_python: "Nécessite Python 3 (à installer d'abord)",
deps_play_requires_yt_dlp: "La lecture nécessite yt-dlp ; installez-le depuis la boîte de dialogue de démarrage pour lire ceci.",
deps_source_not_playable: "Cette source ne peut pas être lue.",
deps_found_section_title: "Trouvées sur votre système",
deps_found_section_intro: "Celles-ci sont déjà disponibles. Cochez-en pour installer une copie gérée par l'application (la copie de l'application prime sur celle du système).",
deps_found_on_system: "Trouvées sur votre système",
deps_managed_by_app: "Installées (gérées par l'application)",
deps_not_installed: "Non installées",
deps_delete: "Supprimer",
deps_deleting: "Suppression…",
deps_deleted: "Supprimées",
deps_delete_failed: "Échec de la suppression",
sec_updates: "Mises à jour",
check_for_updates: "Vérifier les mises à jour",
checking_for_updates: "Recherche de mises à jour…",
up_to_date: "À jour",
current_version: |v| format!("Version {v}"),
update_available: |v| format!("Version {v} disponible. Allez dans Paramètres pour mettre à jour."),
update_now: "Mettre à jour",
updating: "Mise à jour…",
update_applied: |v| format!("Mis à jour vers {v}. Redémarrage…"),
package_managed: "Impossible de mettre à jour automatiquement (pas d'accès en écriture dans le répertoire de l'application). Si installé via un gestionnaire de paquets, utilisez-le pour mettre à jour.",
update_failed: |e| format!("Échec de la mise à jour : {e}"),
percent: |pct| format!("{pct}%"),
list_match_pos: |pos, total| format!("{pos}/{total}"),
sub_menu_label: |base, provider, suffix| format!("{base} {provider} {suffix}"),
deps_failed_detail: |e| format!("Failed: {e}"),
deps_delete_failed_detail: |e| format!("Delete failed: {e}"),
sc_title: "Raccourcis clavier",
sc_sec_list: "Liste des titres",
sc_move: "Naviguer dans la liste (en boucle)",
sc_focus_panel: "Activer la file d'attente ou la liste",
sc_first_last: "Première / dernière ligne",
sc_page: "Page / demi-page",
sc_play: "Lire le titre ciblé",
sc_sec_select: "Sélection et édition",
sc_extend: "Étendre la sélection",
sc_toggle_sel: "Basculer la sélection de la ligne",
sc_select_all: "Tout sélectionner dans la liste",
sc_copy_paste: "Copier / coller les titres sélectionnés",
sc_delete: "Supprimer les titres sélectionnés",
sc_esc: "Fermer la fenêtre, puis effacer la sélection, puis retour à la recherche",
sc_sec_search: "Recherche",
sc_focus_search: "Aller à la recherche",
sc_stage_provider: "Préparer le fournisseur (en attente)",
sc_stage_scope: "Préparer la portée (en attente)",
sc_run_search: "Lancer la recherche préparée",
sc_find_list: "Recherche floue dans la liste (changer d'occurrence)",
sc_sec_playlists: "Playlists et historique",
sc_prev_next_pl: "Playlist précédente / suivante",
sc_jump: "Sélecteur de playlist (Entrée ouvre, Maj+Entrée lit)",
sc_back_fwd: "Précédent / suivant dans le volet",
sc_sec_playback: "Lecture",
sc_play_pause: "Lecture / pause",
sc_next_prev: "Titre suivant / précédent",
sc_mute: "Muet",
sc_volume: "Baisser / monter le volume",
sc_seek: "Reculer / avancer de 5 s (Maj : 10 s)",
sc_toggles: "File d'attente / répétition / paroles / onglet file",
sc_sec_panes: "Volets",
sc_split: "Diviser côte à côte / empilé",
sc_close_pane: "Fermer le volet",
sc_adj_pane: "Cibler le volet adjacent",
sc_cycle_pane: "Parcourir / sauter entre volets",
sc_sec_menu: "Menu contextuel",
sc_open_menu: "Ouvrir pour le titre ciblé",
sc_nav_menu: "Naviguer dans le menu",
};
fn fr_tracks(n: usize) -> String {
if n <= 1 {
format!("{n} piste")
} else {
format!("{n} pistes")
}
}