goosemusic 1.2.0

A music player with YouTube search, local playback, and OS media controls
use super::Strings;
use crate::providers::ProviderId;

pub const STRINGS: Strings = Strings {
    search: "Buscar",
    downloads: "Descargas",
    settings: "Ajustes",
    library: "Biblioteca",
    nothing_saved_yet: "Aún no hay nada guardado",
    new_playlist_name: "Nombre de la nueva lista",

    queue: "Cola",
    recently_played: "Reproducido recientemente",
    now_playing_from: "Reproduciendo desde",
    now_playing: "Reproduciendo",
    up_next: "A continuación",
    no_track_playing: "No se está reproduciendo ninguna pista",
    no_more_tracks_in_queue: "No hay más pistas en la cola",
    no_recently_played_tracks: "No hay pistas reproducidas recientemente",

    not_playing: "No se está reproduciendo",
    no_tracks_found: "No se encontraron pistas",

    searching: "Buscando…",
    loading: "Cargando…",
    load_more: "Cargar más",
    no_results_found: "No se encontraron resultados",
    no_recent_searches: "No hay búsquedas recientes",
    generating_radio: "Generando radio…",

    not_an_artist_page: "No es una página de artista",
    provided_by: "Ofrecido por",
    retry: "Reintentar",
    nothing_here: "No hay nada aquí",
    most_popular_songs: "Canciones más populares",
    albums: "Álbumes",
    playlists: "Listas de reproducción",
    fans_also_like: "A los fans también les gusta",

    looking_up_lyrics: "Buscando la letra…",
    play_a_track_for_lyrics: "Reproduce una pista para ver su letra.",
    lyrics_selectable: "Seleccionable",
    lyrics_synced: "Sincronizada",
    lyrics_plain: "Simple",

    playlist_not_found: "Lista de reproducción no encontrada",
    add_local: "Añadir local",
    downloaded_tracks: "Pistas descargadas",
    no_downloaded_tracks: "No hay pistas descargadas",

    ctx_play: "Reproducir",
    ctx_play_local: "Reproducir local",
    ctx_edit: "Editar",
    ctx_go_to_artist: "Ir al artista",
    ctx_add_to_playlist: "Añadir a la lista",
    ctx_download: "Descargar",
    ctx_song_radio: "Radio de la canción",
    ctx_artist_radio: "Radio del artista",
    ctx_remove_from_queue: "Quitar de la cola",
    ctx_remove_from_playlist: "Quitar de la lista",
    sub_play_via: "Reproducir vía",
    sub_download_from: "Descargar desde",
    sub_via: "Vía",
    sub_on: "En",
    via_search_suffix: "(búsqueda)",

    current: "(actual)",
    select: "seleccionar",
    find: "Buscar",
    finding: "Buscando…",
    found_on: |p| format!("Encontrado en {p}"),
    not_linked: "Sin enlazar",
    providers: "Proveedores",
    no_provider_data: "Esta pista no tiene datos de proveedor.",
    save: "Guardar",
    cancel: "Cancelar",
    edit_track: "Editar pista",
    lbl_title: "Título",
    lbl_artist: "Artista",
    ph_track_title: "Título de la pista",
    ph_track_artist: "Artista de la pista",
    delete: "Eliminar",
    delete_playlist_q: "¿Eliminar la lista?",
    tracks_wont_be_deleted: "Las pistas no se eliminarán.",
    lbl_id: "Id",
    lbl_url: "Url",
    lbl_artist_id: "Id del artista",
    lbl_duration_secs: "Duración (en segundos)",
    lbl_thumbnail: "Miniatura",
    lbl_album: "Álbum",

    sec_playback: "Reproducción",
    sec_storage: "Almacenamiento",
    sec_history: "Historial",
    sec_appearance: "Apariencia",
    sec_dependencies: "Dependencias",
    theme_lbl: "Tema",
    language_lbl: "Idioma",
    default_provider_lbl: "Proveedor predeterminado de streaming y descarga",
    normalize_volume_lbl: "Normalizar el volumen entre pistas",
    download_dir_lbl: "Directorio de descargas",
    cache_size_lbl: "Tamaño máximo de caché de streaming (MB)",
    hist_rows_lbl: "Filas del historial de búsqueda mostradas",
    hist_entries_lbl: "Entradas del historial de búsqueda guardadas",
    recent_kept_lbl: "Pistas reproducidas recientemente guardadas",
    reset_defaults: "Restablecer valores",

    find_in_list: "Buscar en la lista…",
    scope_songs: "Canciones",
    scope_videos: "Vídeos",
    scope_artists: "Artistas",
    scope_albums: "Álbumes",
    scope_playlists: "Listas de reproducción",
    radio_word_song: "canción",
    radio_word_artist: "artista",

    lyrics_copied: "Letra copiada al portapapeles",
    saved_to_library: "Guardado en la biblioteca",
    removed_from_library: "Eliminado de la biblioteca",
    no_lyrics_found: "No se encontró la letra de esta pista.",
    select_playlist_drop: "Selecciona una lista para soltar las pistas",
    reordered_playlist: "Lista reordenada",

    n_saved: |n| format!("{n} guardado{}", if n == 1 { "" } else { "s" }),
    n_plays: |n| format!("{} reproducciones", crate::util::format_count(n)),
    search_placeholder: |p| match p {
        ProviderId::YouTube => "Buscar en YouTube Music…".into(),
        ProviderId::Local => "Buscar…".into(),
        other => format!("Buscar en {}", other.label()),
    },
    added: |n| format!("Añadidas {}", es_tracks(n)),
    added_to: |n, to| format!("Añadidas {} a {to}", es_tracks(n)),
    removed_n: |n| format!("Eliminadas {}", es_tracks(n)),
    removed_from: |n, from| format!("Eliminadas {} de {from}", es_tracks(n)),
    pasted_into: |n, into| format!("Pegadas {} en {into}", es_tracks(n)),
    saved_title: |t| format!("Guardada \"{t}\" en la biblioteca"),
    playlist_created: |n| format!("Lista \"{n}\" creada"),
    added_local: |n| format!("Añadidas {} (selecciona una lista para organizar)", es_tracks(n)),
    downloading_n: |n| format!("Descargando {}", es_tracks(n)),
    resolving_on: |title, p| format!("Resolviendo \"{title}\" en {p}"),
    provider_no_radio: |p| format!("{p} no admite radio"),
    generating_radio_for: |w, name| format!("Generando radio para {w}: {name}"),
    could_not_find_on: |name, p| format!("No se pudo encontrar \"{name}\" en {p}"),
    opening: |l| format!("Abriendo: {l}"),
    opening_artist: |name| format!("Abriendo artista: {name}"),
    download_complete: |path| format!("¡Descarga completa! Guardada en {path}"),
    failed_resolve_on: |title, p, e| format!("Error al resolver \"{title}\" en {p}: {e}"),
    couldnt_load: |e| format!("No se pudo cargar: {e}"),
    couldnt_load_lyrics: |e| format!("No se pudo cargar la letra: {e}"),
    search_failed: |e| format!("Error en la búsqueda: {e}"),
    radio_label: |w, name| format!("Radio ({w}): {name}"),
    ctx_add_to_playlist_n: |n| format!("Añadir {} a la lista", es_tracks(n)),
    ctx_download_n: |n| format!("Descargar {}", es_tracks(n)),
    ctx_remove_from_queue_n: |n| format!("Quitar {} de la cola", es_tracks(n)),
    ctx_remove_from_playlist_n: |n| format!("Quitar {} de la lista", es_tracks(n)),

    import_playlist: "Importar lista",
    import_method_native: "Nativo",
    import_method_filelist: "Lista de archivos",
    import_method_csv: "CSV",
    import_native_hint: "Importa listas desde un archivo playlists.json.",
    import_csv_name_col: "Columna de nombre",
    import_csv_artist_col: "Columna de artista",
    import_csv_album_col: "Columna de álbum",
    import_csv_preset: "Ajuste preestablecido",
    import_csv_preset_default: "Predeterminado",
    import_csv_preset_exportify: "Exportify",
    import_csv_exportify_note: "Admite listas de Spotify exportadas desde https://exportify.net/.",
    import_pattern_lbl: "Patrón de nombre de archivo",
    import_playlist_name: "Nombre de la lista",
    import_add_pattern: "Añadir patrón",
    import_select_file: "Seleccionar archivo",
    import_select_folder: "Seleccionar carpeta",
    import_pattern_conflict: |a, b| {
        format!(
            "Los patrones \"{a}\" y \"{b}\" pueden coincidir con el mismo archivo con campos en conflicto. Elimina o corrige uno."
        )
    },
    import_playlists_imported: |n| format!("Importadas {}", es_tracks(n)),
    import_imported_into: |n, into| format!("Importadas {} en {}", es_tracks(n), into),
    import_no_tracks: "No se encontraron pistas para importar.",
    import_no_match: "Ningún archivo coincide con los patrones.",
    import_bad_file: "No se pudo leer el archivo seleccionado.",

    deps_title: "Faltan dependencias",
    deps_intro: "Faltan algunas herramientas que usa la aplicación. Selecciona cuáles instalar o descarta para continuar (la búsqueda y el streaming podrían no funcionar hasta que estén presentes).",
    deps_install: "Instalar",
    deps_install_selected: "Instalar seleccionadas",
    deps_discard: "Descartar",
    deps_installing: "Instalando…",
    deps_installed: "Instalado",
    deps_failed: "Error",
    deps_installed_toast: "Dependencias seleccionadas instaladas.",
    deps_yt_dlp_desc: "Transmite y descarga audio (requerido)",
    deps_ytmusicapi_desc: "Búsqueda en YouTube Music (opcional, usa yt-dlp como respaldo)",
    deps_python3_desc: "Requerido por ytmusicapi (búsqueda en YouTube Music)",
    deps_ytmusicapi_requires_python: "Requiere Python 3 (instálalo primero)",
    deps_play_requires_yt_dlp: "La reproducción necesita yt-dlp; instálalo desde el diálogo de inicio para reproducir esto.",
    deps_source_not_playable: "Esta fuente no se puede reproducir.",
    deps_found_section_title: "Encontradas en tu sistema",
    deps_found_section_intro: "Estas ya están disponibles. Marca alguna para instalar una copia gestionada por la aplicación (la copia de la app tiene prioridad sobre la del sistema).",
    deps_found_on_system: "Encontradas en tu sistema",
    deps_managed_by_app: "Instaladas (gestionadas por la app)",
    deps_not_installed: "No instaladas",
    deps_delete: "Eliminar",
    deps_deleting: "Eliminando…",
    deps_deleted: "Eliminadas",
    deps_delete_failed: "Error al eliminar",

    sec_updates: "Actualizaciones",
    check_for_updates: "Buscar actualizaciones",
    checking_for_updates: "Buscando actualizaciones…",
    up_to_date: "Actualizado",
    current_version: |v| format!("Versión {v}"),
    update_available: |v| format!("Versión {v} disponible. Ve a Configuración para actualizar."),
    update_now: "Actualizar ahora",
    updating: "Actualizando…",
    update_applied: |v| format!("Actualizado a {v}. Reiniciando…"),
    package_managed: "No se puede actualizar automáticamente (sin permiso de escritura en el directorio de la aplicación). Si está instalado mediante un gestor de paquetes, úselo para actualizar.",
    update_failed: |e| format!("La actualización falló: {e}"),
};

fn es_tracks(n: usize) -> String {
    if n == 1 {
        "1 pista".into()
    } else {
        format!("{n} pistas")
    }
}