i18n: add Settings audio, offline library, and updates translations
Complete Spanish translations for: - Audio settings (backend, ALSA plugin, hardware volume, streaming) - Offline library section (repair, manage, clear) - Updates section (check on launch, show changelog) - Flatpak warning messages
This commit is contained in:
1 parent
55d383c431
commit
805fec1529
3 files changed
+126
-44
No files matched your search
@@ -1894,8 +1894,8 @@
|
|||||||
<div class="loading-overlay">
|
<div class="loading-overlay">
|
||||||
<div class="loading-content">
|
<div class="loading-content">
|
||||||
<Loader2 size={48} class="spinner" />
|
<Loader2 size={48} class="spinner" />
|
||||||
<p>Loading audio devices...</p>
|
<p>{$t('settings.audio.loadingAudioDevices')}</p>
|
||||||
<p class="loading-subtitle">Parsing hardware information</p>
|
<p class="loading-subtitle">{$t('settings.audio.parsingHardware')}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -1953,15 +1953,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Limit Quality to Device</span>
|
<span class="setting-label">{$t('settings.audio.limitQualityToDevice')}</span>
|
||||||
<span class="setting-desc">When enabled, overrides the quality setting above if your audio device doesn't support the selected sample rate. Prevents resampling to guarantee bit-perfect playback.</span>
|
<span class="setting-desc">{$t('settings.audio.limitQualityToDeviceDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Toggle enabled={limitQualityToDevice} onchange={handleLimitQualityToDeviceChange} />
|
<Toggle enabled={limitQualityToDevice} onchange={handleLimitQualityToDeviceChange} />
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Audio Backend</span>
|
<span class="setting-label">{$t('settings.audio.audioBackend')}</span>
|
||||||
<span class="setting-desc">Choose audio system: Auto (recommended), PipeWire (modern), ALSA Direct (bit-perfect, exclusive), or PulseAudio (legacy).</span>
|
<span class="setting-desc">{$t('settings.audio.audioBackendDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Dropdown
|
<Dropdown
|
||||||
value={selectedBackend}
|
value={selectedBackend}
|
||||||
@@ -1975,10 +1975,10 @@
|
|||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">{$t('settings.audio.outputDevice')}</span>
|
<span class="setting-label">{$t('settings.audio.outputDevice')}</span>
|
||||||
<span class="setting-desc">Select your preferred audio output device. Devices shown are from the selected backend.</span>
|
<span class="setting-desc">{$t('settings.audio.outputDeviceDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
{#if isLoadingDevices}
|
{#if isLoadingDevices}
|
||||||
<span class="loading-text">Loading devices...</span>
|
<span class="loading-text">{$t('settings.audio.loadingDevices')}</span>
|
||||||
{:else if selectedBackend === 'ALSA Direct'}
|
{:else if selectedBackend === 'ALSA Direct'}
|
||||||
<div class="dropdown-with-help">
|
<div class="dropdown-with-help">
|
||||||
<DeviceDropdown
|
<DeviceDropdown
|
||||||
@@ -1992,7 +1992,7 @@
|
|||||||
<button
|
<button
|
||||||
class="help-icon-btn"
|
class="help-icon-btn"
|
||||||
onclick={() => showAlsaUtilsHelpModal = true}
|
onclick={() => showAlsaUtilsHelpModal = true}
|
||||||
title="Help with bit-perfect device detection"
|
title={$t('settings.audio.helpBitPerfect')}
|
||||||
>
|
>
|
||||||
<HelpCircle size={16} />
|
<HelpCircle size={16} />
|
||||||
</button>
|
</button>
|
||||||
@@ -2020,8 +2020,8 @@
|
|||||||
{#if showAlsaPluginSelector}
|
{#if showAlsaPluginSelector}
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">ALSA Plugin</span>
|
<span class="setting-label">{$t('settings.audio.alsaPlugin')}</span>
|
||||||
<span class="setting-desc">hw: Bit-perfect, exclusive. plughw: Auto-convert. pcm: Most compatible.</span>
|
<span class="setting-desc">{$t('settings.audio.alsaPluginDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Dropdown
|
<Dropdown
|
||||||
value={selectedAlsaPlugin}
|
value={selectedAlsaPlugin}
|
||||||
@@ -2036,8 +2036,8 @@
|
|||||||
{#if showAlsaHardwareVolume}
|
{#if showAlsaHardwareVolume}
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Enable Hardware Volume Control</span>
|
<span class="setting-label">{$t('settings.audio.hardwareVolume')}</span>
|
||||||
<span class="setting-desc">Experimental: Controls DAC volume via ALSA mixer. Some DACs don't support this - disable for maximum compatibility. If it fails, playback continues normally.</span>
|
<span class="setting-desc">{$t('settings.audio.hardwareVolumeDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Toggle enabled={alsaHardwareVolume} onchange={handleAlsaHardwareVolumeChange} />
|
<Toggle enabled={alsaHardwareVolume} onchange={handleAlsaHardwareVolumeChange} />
|
||||||
</div>
|
</div>
|
||||||
@@ -2060,24 +2060,24 @@
|
|||||||
<div class="flatpak-warning">
|
<div class="flatpak-warning">
|
||||||
<div class="warning-icon">⚠️</div>
|
<div class="warning-icon">⚠️</div>
|
||||||
<div class="warning-content">
|
<div class="warning-content">
|
||||||
<strong>Flatpak Limitation:</strong> PipeWire cannot guarantee bit-perfect playback in sandboxed environments due to daemon access restrictions.
|
<strong>{$t('settings.audio.flatpakWarningTitle')}</strong> {$t('settings.audio.flatpakWarningDesc')}
|
||||||
<br />
|
<br />
|
||||||
<strong>Recommended:</strong> Switch to ALSA Direct backend for true bit-perfect audio.
|
<strong>{$t('settings.audio.flatpakRecommended')}</strong> {$t('settings.audio.flatpakRecommendedDesc')}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Stream Uncached Tracks</span>
|
<span class="setting-label">{$t('settings.audio.streamUncached')}</span>
|
||||||
<span class="setting-desc">Start playback faster when track is not in cache. Seeking may be limited during initial buffering.</span>
|
<span class="setting-desc">{$t('settings.audio.streamUncachedDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Toggle enabled={streamFirstTrack} onchange={handleStreamFirstTrackChange} />
|
<Toggle enabled={streamFirstTrack} onchange={handleStreamFirstTrackChange} />
|
||||||
</div>
|
</div>
|
||||||
{#if streamFirstTrack}
|
{#if streamFirstTrack}
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Initial Buffer Size</span>
|
<span class="setting-label">{$t('settings.audio.initialBuffer')}</span>
|
||||||
<span class="setting-desc">Seconds to buffer before starting playback ({streamBufferSeconds}s)</span>
|
<span class="setting-desc">{$t('settings.audio.initialBufferDesc', { values: { seconds: streamBufferSeconds } })}</span>
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input
|
||||||
type="range"
|
type="range"
|
||||||
@@ -2092,8 +2092,8 @@
|
|||||||
{/if}
|
{/if}
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Streaming Only</span>
|
<span class="setting-label">{$t('settings.audio.streamingOnly')}</span>
|
||||||
<span class="setting-desc">Disables temporary cache. Not recommended without a fast connection. Offline library tracks always play first.</span>
|
<span class="setting-desc">{$t('settings.audio.streamingOnlyDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Toggle enabled={streamingOnly} onchange={handleStreamingOnlyChange} />
|
<Toggle enabled={streamingOnly} onchange={handleStreamingOnlyChange} />
|
||||||
</div>
|
</div>
|
||||||
@@ -2312,7 +2312,7 @@
|
|||||||
<section class="section collapsible-section" bind:this={downloadsSection}>
|
<section class="section collapsible-section" bind:this={downloadsSection}>
|
||||||
<button class="section-title-btn" onclick={() => offlineLibraryCollapsed = !offlineLibraryCollapsed}>
|
<button class="section-title-btn" onclick={() => offlineLibraryCollapsed = !offlineLibraryCollapsed}>
|
||||||
<h3 class="section-title">{$t('settings.offlineLibrary.title')}</h3>
|
<h3 class="section-title">{$t('settings.offlineLibrary.title')}</h3>
|
||||||
<span class="section-summary">Cached tracks for offline playback</span>
|
<span class="section-summary">{$t('settings.offlineLibrary.sectionSummary')}</span>
|
||||||
{#if offlineLibraryCollapsed}
|
{#if offlineLibraryCollapsed}
|
||||||
<ChevronDown size={16} />
|
<ChevronDown size={16} />
|
||||||
{:else}
|
{:else}
|
||||||
@@ -2333,37 +2333,37 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-with-description">
|
<div class="setting-with-description">
|
||||||
<span class="setting-label">Repair Offline Library</span>
|
<span class="setting-label">{$t('settings.offlineLibrary.repair')}</span>
|
||||||
<span class="setting-description">Fix offline markers lost during library scans</span>
|
<span class="setting-description">{$t('settings.offlineLibrary.repairDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
class="clear-btn"
|
class="clear-btn"
|
||||||
onclick={handleRepairDownloads}
|
onclick={handleRepairDownloads}
|
||||||
disabled={isRepairingDownloads || !downloadStats || downloadStats.readyTracks === 0}
|
disabled={isRepairingDownloads || !downloadStats || downloadStats.readyTracks === 0}
|
||||||
>
|
>
|
||||||
{isRepairingDownloads ? 'Repairing...' : 'Repair'}
|
{isRepairingDownloads ? $t('settings.offlineLibrary.repairing') : $t('actions.repair')}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<span class="setting-label">Clear Offline Library</span>
|
<span class="setting-label">{$t('settings.offlineLibrary.clearCache')}</span>
|
||||||
<button
|
<button
|
||||||
class="clear-btn"
|
class="clear-btn"
|
||||||
onclick={handleClearDownloads}
|
onclick={handleClearDownloads}
|
||||||
disabled={isClearingDownloads || !downloadStats || downloadStats.readyTracks === 0}
|
disabled={isClearingDownloads || !downloadStats || downloadStats.readyTracks === 0}
|
||||||
>
|
>
|
||||||
{isClearingDownloads ? 'Clearing...' : 'Clear All'}
|
{isClearingDownloads ? $t('settings.storage.clearing') : $t('settings.offlineLibrary.clearCache')}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-row last">
|
<div class="setting-row last">
|
||||||
<div class="setting-with-description">
|
<div class="setting-with-description">
|
||||||
<span class="setting-label">Manage Offline Cache</span>
|
<span class="setting-label">{$t('settings.offlineLibrary.manageCache')}</span>
|
||||||
<span class="setting-description">Open the cache folder in your file manager</span>
|
<span class="setting-description">{$t('settings.offlineLibrary.manageCacheDesc')}</span>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
class="clear-btn"
|
class="clear-btn"
|
||||||
onclick={handleOpenCacheFolder}
|
onclick={handleOpenCacheFolder}
|
||||||
>
|
>
|
||||||
Open Folder
|
{$t('settings.offlineLibrary.openFolder')}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -2547,11 +2547,11 @@
|
|||||||
|
|
||||||
<!-- Updates Section -->
|
<!-- Updates Section -->
|
||||||
<section class="section" bind:this={updatesSection}>
|
<section class="section" bind:this={updatesSection}>
|
||||||
<h3 class="section-title">Updates</h3>
|
<h3 class="section-title">{$t('settings.updates.title')}</h3>
|
||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Check for new releases on launch</span>
|
<span class="setting-label">{$t('settings.updates.checkOnLaunch')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Toggle
|
<Toggle
|
||||||
enabled={updatePreferences.checkOnLaunch}
|
enabled={updatePreferences.checkOnLaunch}
|
||||||
@@ -2561,7 +2561,7 @@
|
|||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Check for updates now</span>
|
<span class="setting-label">{$t('settings.updates.checkNow')}</span>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
class="connect-btn updates-check-btn"
|
class="connect-btn updates-check-btn"
|
||||||
@@ -2571,16 +2571,16 @@
|
|||||||
>
|
>
|
||||||
{#if isCheckingUpdates}
|
{#if isCheckingUpdates}
|
||||||
<Loader2 size={14} class="spin" />
|
<Loader2 size={14} class="spin" />
|
||||||
<span>Checking...</span>
|
<span>{$t('settings.updates.checking')}</span>
|
||||||
{:else}
|
{:else}
|
||||||
<span>Check</span>
|
<span>{$t('settings.updates.check')}</span>
|
||||||
{/if}
|
{/if}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="setting-row">
|
<div class="setting-row">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Show what's new on new version launch</span>
|
<span class="setting-label">{$t('settings.updates.showWhatsNew')}</span>
|
||||||
</div>
|
</div>
|
||||||
<Toggle
|
<Toggle
|
||||||
enabled={updatePreferences.showWhatsNewOnLaunch}
|
enabled={updatePreferences.showWhatsNewOnLaunch}
|
||||||
@@ -2590,9 +2590,9 @@
|
|||||||
|
|
||||||
<div class="setting-row last">
|
<div class="setting-row last">
|
||||||
<div class="setting-info">
|
<div class="setting-info">
|
||||||
<span class="setting-label">Show changelog for current version</span>
|
<span class="setting-label">{$t('settings.updates.showChangelog')}</span>
|
||||||
{#if updatesCurrentVersion}
|
{#if updatesCurrentVersion}
|
||||||
<small class="setting-note">Current version: v{updatesCurrentVersion}</small>
|
<small class="setting-note">{$t('settings.updates.currentVersion', { values: { version: updatesCurrentVersion } })}</small>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
@@ -2600,7 +2600,7 @@
|
|||||||
onclick={handleShowCurrentChangelog}
|
onclick={handleShowCurrentChangelog}
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
Show
|
{$t('actions.show')}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -2763,7 +2763,7 @@
|
|||||||
onclick={handleClearAllCaches}
|
onclick={handleClearAllCaches}
|
||||||
disabled={isClearingAllCaches}
|
disabled={isClearingAllCaches}
|
||||||
>
|
>
|
||||||
{isClearingAllCaches ? $t('settings.storage.clearing') : 'Clear All'}
|
{isClearingAllCaches ? $t('settings.storage.clearing') : $t('actions.clearAll')}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -344,8 +344,10 @@
|
|||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"close": "Close",
|
"close": "Close",
|
||||||
"open": "Open",
|
"open": "Open",
|
||||||
|
"show": "Show",
|
||||||
"refresh": "Refresh",
|
"refresh": "Refresh",
|
||||||
"retry": "Retry",
|
"retry": "Retry",
|
||||||
|
"repair": "Repair",
|
||||||
"clear": "Clear",
|
"clear": "Clear",
|
||||||
"clearAll": "Clear All",
|
"clearAll": "Clear All",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
@@ -373,13 +375,36 @@
|
|||||||
"streamingQualityDesc": "Maximum quality for streaming and playback cache",
|
"streamingQualityDesc": "Maximum quality for streaming and playback cache",
|
||||||
"qualityChangedCacheCleared": "Quality changed. Playback cache cleared.",
|
"qualityChangedCacheCleared": "Quality changed. Playback cache cleared.",
|
||||||
"outputDevice": "Output Device",
|
"outputDevice": "Output Device",
|
||||||
|
"outputDeviceDesc": "Select your preferred audio output device. Devices shown are from the selected backend.",
|
||||||
"audioDevice": "Audio Device",
|
"audioDevice": "Audio Device",
|
||||||
"exclusiveMode": "Exclusive Mode",
|
"exclusiveMode": "Exclusive Mode",
|
||||||
"exclusiveModeDesc": "Lock audio device for exclusive use",
|
"exclusiveModeDesc": "Lock audio device for exclusive use",
|
||||||
"dacPassthrough": "DAC Passthrough",
|
"dacPassthrough": "DAC Passthrough",
|
||||||
"dacPassthroughDesc": "Bypass system mixer for bit-perfect output",
|
"dacPassthroughDesc": "Bypass system mixer for bit-perfect output",
|
||||||
"currentSampleRate": "Current Sample Rate",
|
"currentSampleRate": "Current Sample Rate",
|
||||||
"noActivePlayback": "No active playback"
|
"noActivePlayback": "No active playback",
|
||||||
|
"loadingDevices": "Loading devices...",
|
||||||
|
"loadingAudioDevices": "Loading audio devices...",
|
||||||
|
"parsingHardware": "Parsing hardware information",
|
||||||
|
"limitQualityToDevice": "Limit Quality to Device",
|
||||||
|
"limitQualityToDeviceDesc": "When enabled, overrides the quality setting above if your audio device doesn't support the selected sample rate. Prevents resampling to guarantee bit-perfect playback.",
|
||||||
|
"audioBackend": "Audio Backend",
|
||||||
|
"audioBackendDesc": "Choose audio system: Auto (recommended), PipeWire (modern), ALSA Direct (bit-perfect, exclusive), or PulseAudio (legacy).",
|
||||||
|
"alsaPlugin": "ALSA Plugin",
|
||||||
|
"alsaPluginDesc": "hw: Bit-perfect, exclusive. plughw: Auto-convert. pcm: Most compatible.",
|
||||||
|
"hardwareVolume": "Enable Hardware Volume Control",
|
||||||
|
"hardwareVolumeDesc": "Experimental: Controls DAC volume via ALSA mixer. Some DACs don't support this - disable for maximum compatibility. If it fails, playback continues normally.",
|
||||||
|
"helpBitPerfect": "Help with bit-perfect device detection",
|
||||||
|
"flatpakWarningTitle": "Flatpak Limitation:",
|
||||||
|
"flatpakWarningDesc": "PipeWire cannot guarantee bit-perfect playback in sandboxed environments due to daemon access restrictions.",
|
||||||
|
"flatpakRecommended": "Recommended:",
|
||||||
|
"flatpakRecommendedDesc": "Switch to ALSA Direct backend for true bit-perfect audio.",
|
||||||
|
"streamUncached": "Stream Uncached Tracks",
|
||||||
|
"streamUncachedDesc": "Start playback faster when track is not in cache. Seeking may be limited during initial buffering.",
|
||||||
|
"initialBuffer": "Initial Buffer Size",
|
||||||
|
"initialBufferDesc": "Seconds to buffer before starting playback ({seconds}s)",
|
||||||
|
"streamingOnly": "Streaming Only",
|
||||||
|
"streamingOnlyDesc": "Disables temporary cache. Not recommended without a fast connection. Offline library tracks always play first."
|
||||||
},
|
},
|
||||||
"playback": {
|
"playback": {
|
||||||
"title": "Playback",
|
"title": "Playback",
|
||||||
@@ -465,7 +490,23 @@
|
|||||||
"disclaimer": "The offline library is a temporary playback cache for offline listening while you have a valid Qobuz subscription. You do not receive a license to keep or redistribute the content. If your subscription becomes invalid, QBZ will remove all cached content after 3 days.",
|
"disclaimer": "The offline library is a temporary playback cache for offline listening while you have a valid Qobuz subscription. You do not receive a license to keep or redistribute the content. If your subscription becomes invalid, QBZ will remove all cached content after 3 days.",
|
||||||
"cachedTracks": "Offline Tracks",
|
"cachedTracks": "Offline Tracks",
|
||||||
"clearCache": "Clear All",
|
"clearCache": "Clear All",
|
||||||
"openFolder": "Open Folder"
|
"openFolder": "Open Folder",
|
||||||
|
"repair": "Repair Offline Library",
|
||||||
|
"repairDesc": "Fix offline markers lost during library scans",
|
||||||
|
"manageCache": "Manage Offline Cache",
|
||||||
|
"manageCacheDesc": "Open the cache folder in your file manager",
|
||||||
|
"sectionSummary": "Cached tracks for offline playback",
|
||||||
|
"repairing": "Repairing..."
|
||||||
|
},
|
||||||
|
"updates": {
|
||||||
|
"title": "Updates",
|
||||||
|
"checkOnLaunch": "Check for new releases on launch",
|
||||||
|
"checkNow": "Check for updates now",
|
||||||
|
"checking": "Checking...",
|
||||||
|
"check": "Check",
|
||||||
|
"showWhatsNew": "Show what's new on new version launch",
|
||||||
|
"showChangelog": "Show changelog for current version",
|
||||||
|
"currentVersion": "Current version: v{version}"
|
||||||
},
|
},
|
||||||
"networkCacheWarning": "The selected folder is on a network drive.",
|
"networkCacheWarning": "The selected folder is on a network drive.",
|
||||||
"networkCacheWarningDetail": "Cached tracks may not be available when the network is disconnected or in offline mode. Are you sure you want to use this location?",
|
"networkCacheWarningDetail": "Cached tracks may not be available when the network is disconnected or in offline mode. Are you sure you want to use this location?",
|
||||||
|
|||||||
@@ -344,8 +344,10 @@
|
|||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
"open": "Abrir",
|
"open": "Abrir",
|
||||||
|
"show": "Mostrar",
|
||||||
"refresh": "Actualizar",
|
"refresh": "Actualizar",
|
||||||
"retry": "Reintentar",
|
"retry": "Reintentar",
|
||||||
|
"repair": "Reparar",
|
||||||
"clear": "Limpiar",
|
"clear": "Limpiar",
|
||||||
"clearAll": "Limpiar Todo",
|
"clearAll": "Limpiar Todo",
|
||||||
"confirm": "Confirmar",
|
"confirm": "Confirmar",
|
||||||
@@ -373,13 +375,36 @@
|
|||||||
"streamingQualityDesc": "Calidad máxima para streaming y caché de reproducción",
|
"streamingQualityDesc": "Calidad máxima para streaming y caché de reproducción",
|
||||||
"qualityChangedCacheCleared": "Calidad cambiada. Caché de reproducción limpiado.",
|
"qualityChangedCacheCleared": "Calidad cambiada. Caché de reproducción limpiado.",
|
||||||
"outputDevice": "Dispositivo de Salida",
|
"outputDevice": "Dispositivo de Salida",
|
||||||
|
"outputDeviceDesc": "Selecciona tu dispositivo de audio preferido. Se muestran los dispositivos del backend seleccionado.",
|
||||||
"audioDevice": "Dispositivo de Audio",
|
"audioDevice": "Dispositivo de Audio",
|
||||||
"exclusiveMode": "Modo Exclusivo",
|
"exclusiveMode": "Modo Exclusivo",
|
||||||
"exclusiveModeDesc": "Bloquear dispositivo de audio para uso exclusivo",
|
"exclusiveModeDesc": "Bloquear dispositivo de audio para uso exclusivo",
|
||||||
"dacPassthrough": "Passthrough DAC",
|
"dacPassthrough": "Passthrough DAC",
|
||||||
"dacPassthroughDesc": "Bypass del mixer del sistema para salida bit-perfect",
|
"dacPassthroughDesc": "Bypass del mixer del sistema para salida bit-perfect",
|
||||||
"currentSampleRate": "Tasa de Muestreo Actual",
|
"currentSampleRate": "Tasa de Muestreo Actual",
|
||||||
"noActivePlayback": "Sin reproducción activa"
|
"noActivePlayback": "Sin reproducción activa",
|
||||||
|
"loadingDevices": "Cargando dispositivos...",
|
||||||
|
"loadingAudioDevices": "Cargando dispositivos de audio...",
|
||||||
|
"parsingHardware": "Analizando información de hardware",
|
||||||
|
"limitQualityToDevice": "Limitar Calidad al Dispositivo",
|
||||||
|
"limitQualityToDeviceDesc": "Cuando está activado, anula la configuración de calidad si tu dispositivo de audio no soporta la tasa de muestreo seleccionada. Previene el remuestreo para garantizar reproducción bit-perfect.",
|
||||||
|
"audioBackend": "Backend de Audio",
|
||||||
|
"audioBackendDesc": "Elige el sistema de audio: Auto (recomendado), PipeWire (moderno), ALSA Direct (bit-perfect, exclusivo), o PulseAudio (legacy).",
|
||||||
|
"alsaPlugin": "Plugin ALSA",
|
||||||
|
"alsaPluginDesc": "hw: Bit-perfect, exclusivo. plughw: Auto-conversión. pcm: Más compatible.",
|
||||||
|
"hardwareVolume": "Habilitar Control de Volumen por Hardware",
|
||||||
|
"hardwareVolumeDesc": "Experimental: Controla el volumen del DAC vía mixer ALSA. Algunos DACs no lo soportan - desactívalo para máxima compatibilidad. Si falla, la reproducción continúa normalmente.",
|
||||||
|
"helpBitPerfect": "Ayuda con detección de dispositivos bit-perfect",
|
||||||
|
"flatpakWarningTitle": "Limitación de Flatpak:",
|
||||||
|
"flatpakWarningDesc": "PipeWire no puede garantizar reproducción bit-perfect en entornos sandbox debido a restricciones de acceso al daemon.",
|
||||||
|
"flatpakRecommended": "Recomendado:",
|
||||||
|
"flatpakRecommendedDesc": "Cambiar al backend ALSA Direct para audio bit-perfect verdadero.",
|
||||||
|
"streamUncached": "Transmitir Pistas Sin Caché",
|
||||||
|
"streamUncachedDesc": "Inicia la reproducción más rápido cuando la pista no está en caché. La búsqueda puede estar limitada durante el buffering inicial.",
|
||||||
|
"initialBuffer": "Tamaño del Buffer Inicial",
|
||||||
|
"initialBufferDesc": "Segundos a almacenar en buffer antes de iniciar reproducción ({seconds}s)",
|
||||||
|
"streamingOnly": "Solo Streaming",
|
||||||
|
"streamingOnlyDesc": "Desactiva el caché temporal. No recomendado sin una conexión rápida. Las pistas de la biblioteca offline siempre se reproducen primero."
|
||||||
},
|
},
|
||||||
"playback": {
|
"playback": {
|
||||||
"title": "Reproducción",
|
"title": "Reproducción",
|
||||||
@@ -465,7 +490,23 @@
|
|||||||
"disclaimer": "La biblioteca offline es un caché temporal de reproducción para escucha sin conexión mientras tengas una suscripción válida de Qobuz. No recibes una licencia para conservar o redistribuir el contenido. Si tu suscripción deja de ser válida, QBZ eliminará todo el contenido en caché después de 3 días.",
|
"disclaimer": "La biblioteca offline es un caché temporal de reproducción para escucha sin conexión mientras tengas una suscripción válida de Qobuz. No recibes una licencia para conservar o redistribuir el contenido. Si tu suscripción deja de ser válida, QBZ eliminará todo el contenido en caché después de 3 días.",
|
||||||
"cachedTracks": "Pistas Offline",
|
"cachedTracks": "Pistas Offline",
|
||||||
"clearCache": "Limpiar Todo",
|
"clearCache": "Limpiar Todo",
|
||||||
"openFolder": "Abrir Carpeta"
|
"openFolder": "Abrir Carpeta",
|
||||||
|
"repair": "Reparar Biblioteca Offline",
|
||||||
|
"repairDesc": "Corregir marcadores offline perdidos durante escaneos de biblioteca",
|
||||||
|
"manageCache": "Administrar Caché Offline",
|
||||||
|
"manageCacheDesc": "Abrir la carpeta de caché en tu administrador de archivos",
|
||||||
|
"sectionSummary": "Pistas en caché para reproducción offline",
|
||||||
|
"repairing": "Reparando..."
|
||||||
|
},
|
||||||
|
"updates": {
|
||||||
|
"title": "Actualizaciones",
|
||||||
|
"checkOnLaunch": "Buscar nuevas versiones al iniciar",
|
||||||
|
"checkNow": "Buscar actualizaciones ahora",
|
||||||
|
"checking": "Verificando...",
|
||||||
|
"check": "Verificar",
|
||||||
|
"showWhatsNew": "Mostrar novedades al lanzar nueva versión",
|
||||||
|
"showChangelog": "Mostrar registro de cambios para la versión actual",
|
||||||
|
"currentVersion": "Versión actual: v{version}"
|
||||||
},
|
},
|
||||||
"networkCacheWarning": "La carpeta seleccionada está en una unidad de red.",
|
"networkCacheWarning": "La carpeta seleccionada está en una unidad de red.",
|
||||||
"networkCacheWarningDetail": "Las pistas en caché pueden no estar disponibles cuando la red esté desconectada o en modo offline. ¿Estás seguro de que quieres usar esta ubicación?",
|
"networkCacheWarningDetail": "Las pistas en caché pueden no estar disponibles cuando la red esté desconectada o en modo offline. ¿Estás seguro de que quieres usar esta ubicación?",
|
||||||
|
|||||||
Reference in new issue
Block a user