goosemusic 1.3.2

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",
    lyrics_translations: "Traducciones",
    lyrics_original: "Original",
    add_custom: "Añadir letra",
    lyrics_name: "Nombre",
    translate_with_ai: "Traducir con IA",
    translate_title: "Traducir la letra con IA",
    translate_language_lbl: "Idioma de destino",
    translate_prompt_lbl: "Prompt",
    translate_submit: "Traducir",
    translate_reset: "Restablecer el prompt",
    translating: "Traduciendo…",
    translation_ready: "Traducción lista — revisa y guarda",
    translation_language_empty: "Introduce un idioma de destino",
    no_lyrics_to_translate: "No hay letra para traducir en esta canción.",
    translation_not_configured: "Configura la URL del servidor y el modelo en Ajustes.",
    translation_failed: |e| format!("Error de traducción: {e}"),
    sec_translation: "Traducción con IA",
    translation_base_url_lbl: "URL del servidor (compatible con OpenAI)",
    translation_api_key_lbl: "Clave API (vacía para servidores locales)",
    translation_model_lbl: "Modelo",
    translation_refresh_models: "Solicitar lista de modelos",
    translation_no_models: "No se encontraron modelos en este servidor.",
    translation_models_failed: |e| format!("No se pudo cargar la lista de modelos: {e}"),
    edit_lyrics: "Editar letra",
    lyrics_editor_hint: "Una línea por verso. Añade [mm:ss.xx] al inicio para letra sincronizada, o déjala simple. Añade una línea `# note` bajo cualquier verso para mostrar una nota debajo de la letra.",

    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_queue: "Añadir a la cola",
    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",
    ctx_remove_from_recent: "Quitar de recientes",
    ctx_clear_cache: "Borrar caché",
    sub_play_via: "Reproducir vía",
    sub_download_from: "Descargar desde",
    sub_via: "Vía",
    sub_on: "En",
    sub_clear_cache_from: "Borrar de",
    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",
    cookie_browser_lbl: "Cookies del navegador (vídeos con restricción de edad)",
    cookies_off: "No",
    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.",
    lyrics_saved: "Letra personalizada guardada",
    lyrics_deleted: "Letra personalizada eliminada",
    lyrics_empty: "La letra no puede estar vacía",
    lyrics_name_empty: "Ponle un nombre a tu letra",
    select_playlist_drop: "Selecciona una lista para soltar las pistas",
    reordered_playlist: "Lista reordenada",
    max_panes_reached: "Número máximo de paneles alcanzado",

    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}"),
    resolving_player_client: "Resolviendo el cliente de reproducción compatible…",
    resolved_player_client: |c| format!("Cliente de reproducción resuelto: {c}"),
    player_client_unavailable: "No se encontró un cliente compatible, usando el predeterminado…",
    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}"),
    cache_cleared_for: |p| format!("Caché borrada para {p}"),
    radio_label: |w, name| format!("Radio ({w}): {name}"),
    ctx_add_to_playlist_n: |n| format!("Añadir {} a la lista", es_tracks(n)),
    ctx_add_to_queue_n: |n| format!("Añadir {} a la cola", 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)),
    ctx_remove_from_recent_n: |n| format!("Quitar {} de recientes", 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 para YouTube y SoundCloud)",
    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}"),
    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: "Atajos de teclado",
    sc_sec_list: "Lista de canciones",
    sc_move: "Moverse por la lista (circular)",
    sc_focus_panel: "Enfocar la cola o la lista",
    sc_first_last: "Primera / última fila",
    sc_page: "Página / media página",
    sc_play: "Reproducir la canción enfocada",
    sc_sec_select: "Selección y edición",
    sc_extend: "Extender la selección",
    sc_toggle_sel: "Activar la selección de la fila",
    sc_select_all: "Seleccionar todo en la lista",
    sc_copy_paste: "Copiar / pegar canciones seleccionadas",
    sc_delete: "Eliminar canciones seleccionadas",
    sc_esc: "Cerrar ventana, luego limpiar selección, luego volver a Buscar",
    sc_sec_search: "Buscar",
    sc_focus_search: "Enfocar la búsqueda",
    sc_stage_provider: "Preparar proveedor de búsqueda (pendiente)",
    sc_stage_scope: "Preparar ámbito de búsqueda (pendiente)",
    sc_run_search: "Ejecutar la búsqueda preparada",
    sc_find_list: "Búsqueda difusa en la lista (cambiar de coincidencia)",
    sc_sec_playlists: "Listas e historial",
    sc_prev_next_pl: "Lista anterior / siguiente",
    sc_jump: "Saltador de listas (Enter abre, Shift+Enter reproduce)",
    sc_back_fwd: "Atrás / adelante en el panel",
    sc_sec_playback: "Reproducción",
    sc_play_pause: "Reproducir / pausar",
    sc_next_prev: "Canción siguiente / anterior",
    sc_mute: "Silenciar",
    sc_volume: "Bajar / subir volumen",
    sc_seek: "Retroceder / avanzar 5 s (Shift: 10 s)",
    sc_toggles: "Cola / repetir / letra / pestaña de cola",
    sc_sec_panes: "Paneles",
    sc_split: "Dividir lado a lado / apilado",
    sc_close_pane: "Cerrar el panel",
    sc_adj_pane: "Enfocar el panel adyacente",
    sc_cycle_pane: "Recorrer / saltar entre paneles",
    sc_sec_menu: "Menú contextual",
    sc_open_menu: "Abrir para la canción enfocada",
    sc_nav_menu: "Navegar por el menú",
};

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