Compare commits

...

10 Commits

Author SHA1 Message Date
birdbird
35334c93cc Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1039
2023-06-06 09:42:20 +00:00
aorinngoDo
a98f50412f
Translated using Weblate (Japanese)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/ja/
2023-06-06 11:24:22 +02:00
Batman
b0e8ddfa66
Translated using Weblate (Polish)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pl/
2023-06-06 11:24:22 +02:00
Maxence G
c18f07362f
Translated using Weblate (French)
Currently translated at 97.6% (416 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/fr/
2023-06-06 11:24:22 +02:00
birdbird
26e9fcd40f Merge branch 'AddShortcutCapability' into 'develop'
Start implementing "Play Random Songs" as a shortcut

See merge request ultrasonic/ultrasonic!950
2023-06-06 09:24:15 +00:00
Maxmystere
b2498367b1 Start implementing "Play Random Songs" as a shortcut 2023-06-06 09:24:15 +00:00
birdbird
f68eee5233 Merge branch 'material190' into 'develop'
Upgrade material to 1.9.0

See merge request ultrasonic/ultrasonic!1009
2023-06-06 09:21:12 +00:00
tzugen
fd22c0f8b5
Add little dropdown icon to server selector header to show interactivity. 2023-06-06 10:52:00 +02:00
tzugen
bfe24e5dfd
Modernize backhandling to support predictive back handling 2023-06-06 10:51:33 +02:00
tzugen
bfec814b43
Upgrade material to 1.9.0 2023-06-04 13:21:22 +02:00
14 changed files with 202 additions and 87 deletions

View File

@ -12,7 +12,7 @@ preferences = "1.2.0"
media3 = "1.0.2" media3 = "1.0.2"
androidSupport = "1.6.0" androidSupport = "1.6.0"
materialDesign = "1.8.0" materialDesign = "1.9.0"
constraintLayout = "2.1.4" constraintLayout = "2.1.4"
multidex = "2.0.1" multidex = "2.0.1"
room = "2.5.1" room = "2.5.1"

View File

@ -33,6 +33,7 @@
android:supportsRtl="false" android:supportsRtl="false"
android:preserveLegacyExternalStorage="true" android:preserveLegacyExternalStorage="true"
tools:ignore="UnusedAttribute"> tools:ignore="UnusedAttribute">
<!-- Add for API 34 android:enableOnBackInvokedCallBack="true" -->
<meta-data android:name="com.google.android.gms.car.application" <meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/> android:resource="@xml/automotive_app_desc"/>

View File

@ -21,6 +21,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
@ -51,18 +52,20 @@ import org.moire.ultrasonic.R
import org.moire.ultrasonic.app.UApp import org.moire.ultrasonic.app.UApp
import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider
import org.moire.ultrasonic.data.ServerSettingDao import org.moire.ultrasonic.data.ServerSettingDao
import org.moire.ultrasonic.fragment.OnBackPressedHandler
import org.moire.ultrasonic.model.ServerSettingsModel import org.moire.ultrasonic.model.ServerSettingsModel
import org.moire.ultrasonic.provider.SearchSuggestionProvider import org.moire.ultrasonic.provider.SearchSuggestionProvider
import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport
import org.moire.ultrasonic.service.MediaPlayerManager import org.moire.ultrasonic.service.MediaPlayerManager
import org.moire.ultrasonic.service.MusicServiceFactory
import org.moire.ultrasonic.service.RxBus import org.moire.ultrasonic.service.RxBus
import org.moire.ultrasonic.service.plusAssign import org.moire.ultrasonic.service.plusAssign
import org.moire.ultrasonic.subsonic.DownloadHandler
import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.Constants
import org.moire.ultrasonic.util.InfoDialog import org.moire.ultrasonic.util.InfoDialog
import org.moire.ultrasonic.util.LocaleHelper import org.moire.ultrasonic.util.LocaleHelper
import org.moire.ultrasonic.util.ServerColor import org.moire.ultrasonic.util.ServerColor
import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.Settings
import org.moire.ultrasonic.util.ShortcutUtil
import org.moire.ultrasonic.util.Storage import org.moire.ultrasonic.util.Storage
import org.moire.ultrasonic.util.UncaughtExceptionHandler import org.moire.ultrasonic.util.UncaughtExceptionHandler
import org.moire.ultrasonic.util.Util import org.moire.ultrasonic.util.Util
@ -126,6 +129,8 @@ class NavigationActivity : AppCompatActivity() {
navigationView = findViewById(R.id.nav_view) navigationView = findViewById(R.id.nav_view)
drawerLayout = findViewById(R.id.drawer_layout) drawerLayout = findViewById(R.id.drawer_layout)
setupDrawerLayout(drawerLayout!!)
val toolbar = findViewById<Toolbar>(R.id.toolbar) val toolbar = findViewById<Toolbar>(R.id.toolbar)
setSupportActionBar(toolbar) setSupportActionBar(toolbar)
@ -210,6 +215,33 @@ class NavigationActivity : AppCompatActivity() {
cachedServerCount = count ?: 0 cachedServerCount = count ?: 0
updateNavigationHeaderForServer() updateNavigationHeaderForServer()
} }
// Setup app shortcuts on supported devices, but not on first start, when the server
// is not configured yet.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && !UApp.instance!!.isFirstRun) {
ShortcutUtil.registerShortcuts(this)
}
}
private fun setupDrawerLayout(drawerLayout: DrawerLayout) {
onBackPressedDispatcher.addCallback(this, closeNavigationDrawerOnBack)
drawerLayout.addDrawerListener(object : DrawerLayout.DrawerListener {
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
// Nothing
}
override fun onDrawerOpened(drawerView: View) {
closeNavigationDrawerOnBack.isEnabled = true
}
override fun onDrawerClosed(drawerView: View) {
closeNavigationDrawerOnBack.isEnabled = false
}
override fun onDrawerStateChanged(newState: Int) {
// Nothing
}
})
} }
override fun onResume() { override fun onResume() {
@ -315,11 +347,18 @@ class NavigationActivity : AppCompatActivity() {
selectServerButton = selectServerButton =
navigationView?.getHeaderView(0)?.findViewById(R.id.header_select_server) navigationView?.getHeaderView(0)?.findViewById(R.id.header_select_server)
selectServerButton?.setOnClickListener { val dropDownButton: ImageView? =
navigationView?.getHeaderView(0)?.findViewById(R.id.edit_server_button)
val onClick: (View) -> Unit = {
if (drawerLayout?.isDrawerVisible(GravityCompat.START) == true) if (drawerLayout?.isDrawerVisible(GravityCompat.START) == true)
this.drawerLayout?.closeDrawer(GravityCompat.START) this.drawerLayout?.closeDrawer(GravityCompat.START)
navController.navigate(R.id.serverSelectorFragment) navController.navigate(R.id.serverSelectorFragment)
} }
selectServerButton?.setOnClickListener(onClick)
dropDownButton?.setOnClickListener(onClick)
headerBackgroundImage = headerBackgroundImage =
navigationView?.getHeaderView(0)?.findViewById(R.id.img_header_bg) navigationView?.getHeaderView(0)?.findViewById(R.id.img_header_bg)
} }
@ -328,13 +367,9 @@ class NavigationActivity : AppCompatActivity() {
setupActionBarWithNavController(navController, appBarConfig) setupActionBarWithNavController(navController, appBarConfig)
} }
override fun onBackPressed() { private val closeNavigationDrawerOnBack = object : OnBackPressedCallback(true) {
if (drawerLayout?.isDrawerVisible(GravityCompat.START) == true) { override fun handleOnBackPressed() {
this.drawerLayout?.closeDrawer(GravityCompat.START) drawerLayout?.closeDrawer(GravityCompat.START)
} else {
val currentFragment = host!!.childFragmentManager.fragments.last()
if (currentFragment is OnBackPressedHandler) currentFragment.onBackPressed()
else super.onBackPressed()
} }
} }
@ -352,22 +387,34 @@ class NavigationActivity : AppCompatActivity() {
super.onOptionsItemSelected(item) super.onOptionsItemSelected(item)
} }
// TODO: Why is this needed? Shouldn't it just work by default?
override fun onSupportNavigateUp(): Boolean { override fun onSupportNavigateUp(): Boolean {
val currentFragment = host!!.childFragmentManager.fragments.last() return findNavController(R.id.nav_host_fragment).navigateUp(appBarConfiguration)
return if (currentFragment is OnBackPressedHandler) {
currentFragment.onBackPressed()
true
} else {
findNavController(R.id.nav_host_fragment).navigateUp(appBarConfiguration)
}
} }
// TODO Test if this works with external Intents // TODO: Test if this works with external Intents
// android.intent.action.SEARCH and android.media.action.MEDIA_PLAY_FROM_SEARCH calls here // android.intent.action.SEARCH and android.media.action.MEDIA_PLAY_FROM_SEARCH calls here
override fun onNewIntent(intent: Intent?) { override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent) super.onNewIntent(intent)
if (intent == null) return if (intent == null) return
if (intent.action == Constants.INTENT_PLAY_RANDOM_SONGS) {
val currentFragment = host?.childFragmentManager?.fragments?.last() ?: return
val service = MusicServiceFactory.getMusicService()
val musicDirectory = service.getRandomSongs(Settings.maxSongs)
val downloadHandler: DownloadHandler by inject()
downloadHandler.addTracksToMediaController(
songs = musicDirectory.getTracks(),
append = false,
playNext = false,
autoPlay = true,
shuffle = false,
fragment = currentFragment,
playlistName = null
)
return
}
if (intent.getBooleanExtra(Constants.INTENT_SHOW_PLAYER, false)) { if (intent.getBooleanExtra(Constants.INTENT_SHOW_PLAYER, false)) {
findNavController(R.id.nav_host_fragment).navigate(R.id.playerFragment) findNavController(R.id.nav_host_fragment).navigate(R.id.playerFragment)
return return

View File

@ -7,12 +7,14 @@
package org.moire.ultrasonic.fragment package org.moire.ultrasonic.fragment
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button import android.widget.Button
import android.widget.ImageView import android.widget.ImageView
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@ -52,7 +54,7 @@ private const val DIALOG_PADDING = 12
/** /**
* Displays a form where server settings can be created / edited * Displays a form where server settings can be created / edited
*/ */
class EditServerFragment : Fragment(), OnBackPressedHandler { class EditServerFragment : Fragment() {
private val serverSettingsModel: ServerSettingsModel by viewModel() private val serverSettingsModel: ServerSettingsModel by viewModel()
private val activeServerProvider: ActiveServerProvider by inject() private val activeServerProvider: ActiveServerProvider by inject()
@ -82,6 +84,13 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
} }
override fun onAttach(context: Context) {
requireActivity().onBackPressedDispatcher.addCallback(
this, confirmCloseCallback
)
super.onAttach(context)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
@ -189,11 +198,25 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
} }
} }
private val confirmCloseCallback = object : OnBackPressedCallback(
true // default to enabled
) {
override fun handleOnBackPressed() {
finishActivity()
}
}
override fun onStop() { override fun onStop() {
Util.hideKeyboard(activity) Util.hideKeyboard(activity)
confirmCloseCallback.isEnabled = false
super.onStop() super.onStop()
} }
override fun onResume() {
confirmCloseCallback.isEnabled = true
super.onResume()
}
private fun correctServerAddress() { private fun correctServerAddress() {
serverAddressEditText?.editText?.setText( serverAddressEditText?.editText?.setText(
serverAddressEditText?.editText?.text?.trim(' ', '/') serverAddressEditText?.editText?.text?.trim(' ', '/')
@ -206,11 +229,6 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
image?.setTint(currentColor) image?.setTint(currentColor)
serverColorImageView?.background = image serverColorImageView?.background = image
} }
override fun onBackPressed() {
finishActivity()
}
override fun onSaveInstanceState(savedInstanceState: Bundle) { override fun onSaveInstanceState(savedInstanceState: Bundle) {
savedInstanceState.putString( savedInstanceState.putString(
::serverNameEditText.name, serverNameEditText!!.editText?.text.toString() ::serverNameEditText.name, serverNameEditText!!.editText?.text.toString()

View File

@ -1,15 +0,0 @@
/*
* OnBackPressedHandler.kt
* Copyright (C) 2009-2022 Ultrasonic developers
*
* Distributed under terms of the GNU GPLv3 license.
*/
package org.moire.ultrasonic.fragment
/**
* Interface for fragments handling their own Back button
*/
interface OnBackPressedHandler {
fun onBackPressed()
}

View File

@ -25,6 +25,7 @@ object Constants {
const val CMD_PREVIOUS = "org.moire.ultrasonic.CMD_PREVIOUS" const val CMD_PREVIOUS = "org.moire.ultrasonic.CMD_PREVIOUS"
const val CMD_NEXT = "org.moire.ultrasonic.CMD_NEXT" const val CMD_NEXT = "org.moire.ultrasonic.CMD_NEXT"
const val INTENT_SHOW_PLAYER = "org.moire.ultrasonic.SHOW_PLAYER" const val INTENT_SHOW_PLAYER = "org.moire.ultrasonic.SHOW_PLAYER"
const val INTENT_PLAY_RANDOM_SONGS = "org.moire.ultrasonic.CMD_RANDOM_SONGS"
// Legacy Preferences keys // Legacy Preferences keys
// Warning: Don't add any new here! // Warning: Don't add any new here!

View File

@ -0,0 +1,37 @@
/*
* ShortcutUtil.kt
* Copyright (C) 2009-2023 Ultrasonic developers
*
* Distributed under terms of the GNU GPLv3 license.
*/
package org.moire.ultrasonic.util
import android.app.Activity
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.os.Build
import androidx.annotation.RequiresApi
import org.moire.ultrasonic.R
import org.moire.ultrasonic.activity.NavigationActivity
object ShortcutUtil {
@RequiresApi(Build.VERSION_CODES.N_MR1)
fun registerShortcuts(activity: Activity) {
val shortcutIntent = Intent(activity, NavigationActivity::class.java).apply {
action = Constants.INTENT_PLAY_RANDOM_SONGS
}
val shortcut = ShortcutInfo.Builder(activity, "shortcut_play_random_songs")
.setShortLabel(activity.getString(R.string.shortcut_play_random_songs_short))
.setLongLabel(activity.getString(R.string.shortcut_play_random_songs_long))
.setIcon(Icon.createWithResource(activity, R.drawable.media_shuffle))
.setIntent(shortcutIntent)
.build()
val shortcutManager = activity.getSystemService(ShortcutManager::class.java)
shortcutManager?.dynamicShortcuts = listOf(shortcut)
}
}

View File

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:tint="#000000" android:viewportHeight="24"
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7,10l5,5 5,-5z"/>
</vector>

View File

@ -42,6 +42,7 @@
<com.google.android.material.navigation.NavigationView <com.google.android.material.navigation.NavigationView
a:id="@+id/nav_view" a:id="@+id/nav_view"
a:layout_width="wrap_content" a:layout_width="wrap_content"
a:maxWidth="300dp"
a:layout_height="match_parent" a:layout_height="match_parent"
a:layout_gravity="start" a:layout_gravity="start"
a:fitsSystemWindows="true" a:fitsSystemWindows="true"

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
a:id="@+id/view_container" a:id="@+id/view_container"
@ -13,19 +12,18 @@
a:id="@+id/img_header_bg" a:id="@+id/img_header_bg"
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="0dp" a:layout_height="0dp"
a:importantForAccessibility="no"
a:scaleType="fitXY" a:scaleType="fitXY"
a:src="@drawable/ic_header_bg" a:src="@drawable/ic_header_bg"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent" />
a:importantForAccessibility="no" />
<Button <Button
a:id="@+id/header_select_server" a:id="@+id/header_select_server"
style="@style/Widget.Material3.Button.TextButton.Icon" style="@style/Widget.Material3.Button.TextButton.Icon"
a:layout_width="match_parent" a:layout_width="0dp"
a:layout_height="wrap_content" a:layout_height="wrap_content"
a:layout_marginStart="3dp" a:layout_marginTop="48dp"
a:layout_marginTop="24dp"
a:background="@drawable/default_ripple" a:background="@drawable/default_ripple"
a:gravity="center_vertical" a:gravity="center_vertical"
a:paddingHorizontal="22dp" a:paddingHorizontal="22dp"
@ -39,9 +37,27 @@
app:iconPadding="12dp" app:iconPadding="12dp"
app:iconSize="24dp" app:iconSize="24dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/edit_server_button"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:iconTint="@color/selected_menu_dark" tools:iconTint="@color/selected_menu_dark"
tools:textColor="@color/selected_menu_dark" /> tools:textColor="@color/selected_menu_dark" />
<ImageView
a:id="@+id/edit_server_button"
style="@style/Widget.Material3.Button.TextButton.Icon"
a:layout_width="wrap_content"
a:layout_height="0dp"
a:layout_marginTop="6dp"
a:layout_marginBottom="6dp"
a:contentDescription="@string/server_menu.edit"
a:maxHeight="32dp"
a:src="@drawable/arrow_drop_down"
a:text="@null"
app:layout_constraintBottom_toBottomOf="@id/header_select_server"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/header_select_server"
app:layout_constraintTop_toTopOf="@id/header_select_server"
app:tint="@color/selected_menu_dark" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -392,7 +392,7 @@
<!-- Subsonic features --> <!-- Subsonic features -->
<string name="settings.five_star_rating_title">Utiliser les étoiles pour noter les morceaux</string> <string name="settings.five_star_rating_title">Utiliser les étoiles pour noter les morceaux</string>
<string name="main.albums_by_year">Chronologique</string> <string name="main.albums_by_year">Chronologique</string>
<string name="grid_view">Reprise</string> <string name="grid_view">Couverture</string>
<string name="settings.preload_1000">1000 morceaux</string> <string name="settings.preload_1000">1000 morceaux</string>
<string name="settings.preload_100">100 morceaux</string> <string name="settings.preload_100">100 morceaux</string>
<string name="settings.preload_500">500 morceaux</string> <string name="settings.preload_500">500 morceaux</string>

View File

@ -446,4 +446,5 @@
<string name="settings.use_hw_offload_title">ハードウェア再生を使用する (実験的)</string> <string name="settings.use_hw_offload_title">ハードウェア再生を使用する (実験的)</string>
<string name="settings.use_hw_offload_description">端末のメディアデコーダーチップを使用してメディアを再生するよう試行します。これにより、バッテリー使用量を改善できます。このオプションを有効化することで、再生の不具合が起こる場合も報告されています!</string> <string name="settings.use_hw_offload_description">端末のメディアデコーダーチップを使用してメディアを再生するよう試行します。これにより、バッテリー使用量を改善できます。このオプションを有効化することで、再生の不具合が起こる場合も報告されています!</string>
<string name="foreground_exception_text">メディア通知の再生ボタンがある場合はそれをタップします。ない場合はアプリを開いて再生を開始し、セッションをコントローラーに再接続します</string> <string name="foreground_exception_text">メディア通知の再生ボタンがある場合はそれをタップします。ない場合はアプリを開いて再生を開始し、セッションをコントローラーに再接続します</string>
<string name="settings.max_bitrate_pinning">最高ビットレート - 永続的に固定された曲の場合</string>
</resources> </resources>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="background_task.loading">Ładowanie…</string> <string name="background_task.loading">Ładowanie…</string>
<string name="background_task.network_error">Wystąpił błąd sieci. Proszę sprawdzić adres serwera i spróbować później.</string> <string name="background_task.network_error">Wystąpił błąd sieci. Proszę sprawdzić adres serwera lub spróbować później.</string>
<string name="background_task.unsupported_api">Server api v%1$s does not support this function.</string> <string name="background_task.unsupported_api">API serwera w wersji v%1$s nie wspiera tej funkcjonalności.</string>
<string name="background_task.no_network">Ta aplikacja wymaga dostępu do sieci. Proszę włączyć wi-fi lub dane komórkowe.</string> <string name="background_task.no_network">Ta aplikacja wymaga dostępu do sieci. Proszę włączyć Wi-Fi lub dane komórkowe.</string>
<string name="background_task.not_found">Nie znaleziono zasobów. Proszę sprawdzić adres serwera.</string> <string name="background_task.not_found">Nie udało się odnaleźć zasobu. Proszę sprawdzić adres serwera.</string>
<string name="background_task.parse_error">Brak prawidłowej odpowiedzi. Proszę sprawdzić adres serwera.</string> <string name="background_task.parse_error">Brak prawidłowej odpowiedzi. Proszę sprawdzić adres serwera.</string>
<string name="background_task.ssl_cert_error">Błąd certyfikatu HTTPS: %1$s.</string> <string name="background_task.ssl_cert_error">Błąd certyfikatu HTTPS: %1$s.</string>
<string name="background_task.ssl_error">Błąd połączenia SSL. Proszę sprawdzić certyfikat serwera.</string> <string name="background_task.ssl_error">Błąd połączenia SSL. Proszę sprawdzić certyfikat serwera.</string>
@ -15,8 +15,8 @@
<string name="button_bar.now_playing">Teraz gra</string> <string name="button_bar.now_playing">Teraz gra</string>
<string name="buttons.shuffle">Wymieszaj</string> <string name="buttons.shuffle">Wymieszaj</string>
<string name="podcasts.label">Podcasty</string> <string name="podcasts.label">Podcasty</string>
<string name="podcasts_channels.empty">Brak kanałów</string> <string name="podcasts_channels.empty">Nie zarejestrowano żadnych kanałów podcastowych</string>
<string name="button_bar.podcasts">Podcast</string> <string name="button_bar.podcasts">Podcasty</string>
<string name="button_bar.search">Szukaj</string> <string name="button_bar.search">Szukaj</string>
<string name="chat.send_a_message">Wyślij wiadomość</string> <string name="chat.send_a_message">Wyślij wiadomość</string>
<string name="common.appname">Ultrasonic</string> <string name="common.appname">Ultrasonic</string>
@ -34,10 +34,10 @@
<string name="common.play_next">Odtwórz następne</string> <string name="common.play_next">Odtwórz następne</string>
<string name="common.play_now">Odtwórz teraz</string> <string name="common.play_now">Odtwórz teraz</string>
<string name="common.play_shuffled">Odtwórz losowo</string> <string name="common.play_shuffled">Odtwórz losowo</string>
<string name="common.public">Publicznie</string> <string name="common.public">Publiczna</string>
<string name="common.save">Zapisz</string> <string name="common.save">Zapisz</string>
<string name="common.unpin">Odepnij</string> <string name="common.unpin">Odepnij</string>
<string name="common.various_artists">Różni artyści</string> <string name="common.various_artists">Różni wykonawcy</string>
<string name="delete_playlist">Czy chcesz usunąć %1$s</string> <string name="delete_playlist">Czy chcesz usunąć %1$s</string>
<string name="download.bookmark_removed" formatted="false">Zakładka usunięta.</string> <string name="download.bookmark_removed" formatted="false">Zakładka usunięta.</string>
<string name="download.bookmark_set_at_position" formatted="false">Zakładka ustawiona na %s.</string> <string name="download.bookmark_set_at_position" formatted="false">Zakładka ustawiona na %s.</string>
@ -54,7 +54,7 @@
<string name="download.menu_save">Zapisz playlistę</string> <string name="download.menu_save">Zapisz playlistę</string>
<string name="download.menu_screen_off">Ekran wyłączony</string> <string name="download.menu_screen_off">Ekran wyłączony</string>
<string name="download.menu_screen_on">Ekran włączony</string> <string name="download.menu_screen_on">Ekran włączony</string>
<string name="download.menu_show_album">Wyświetl album</string> <string name="download.menu_show_album">Przejdź do albumu</string>
<string name="download.menu_shuffle">Wymieszaj</string> <string name="download.menu_shuffle">Wymieszaj</string>
<string name="download.playerstate_playing_shuffle">Odtwarzanie losowe</string> <string name="download.playerstate_playing_shuffle">Odtwarzanie losowe</string>
<string name="download.playlist_done">Playlista została zapisana.</string> <string name="download.playlist_done">Playlista została zapisana.</string>
@ -71,7 +71,7 @@
<string name="error.label">Błąd</string> <string name="error.label">Błąd</string>
<string name="jukebox.is_default">Jukebox domyślnie</string> <string name="jukebox.is_default">Jukebox domyślnie</string>
<string name="lyrics.nomatch">Brak tekstu utworu</string> <string name="lyrics.nomatch">Brak tekstu utworu</string>
<string name="main.albums_alphaByArtist">wg artystów</string> <string name="main.albums_alphaByArtist">wg wykonawców</string>
<string name="main.albums_alphaByName">wg tytułu</string> <string name="main.albums_alphaByName">wg tytułu</string>
<string name="main.albums_frequent">Najczęściej odtwarzane</string> <string name="main.albums_frequent">Najczęściej odtwarzane</string>
<string name="main.albums_highest">Najlepiej oceniane</string> <string name="main.albums_highest">Najlepiej oceniane</string>
@ -80,7 +80,7 @@
<string name="main.albums_recent">Ostatnio odtwarzane</string> <string name="main.albums_recent">Ostatnio odtwarzane</string>
<string name="main.albums_starred">Ulubione</string> <string name="main.albums_starred">Ulubione</string>
<string name="main.albums_title">Albumy</string> <string name="main.albums_title">Albumy</string>
<string name="main.artists_title">Artyści</string> <string name="main.artists_title">Wykonawcy</string>
<string name="main.genres_title">Gatunki</string> <string name="main.genres_title">Gatunki</string>
<string name="main.offline">Offline</string> <string name="main.offline">Offline</string>
<string name="main.songs_random">Losowe</string> <string name="main.songs_random">Losowe</string>
@ -98,11 +98,11 @@
<string name="music_library.label">Biblioteka mediów</string> <string name="music_library.label">Biblioteka mediów</string>
<string name="music_library.label_offline">Media offline</string> <string name="music_library.label_offline">Media offline</string>
<string name="playlist.label">Playlisty</string> <string name="playlist.label">Playlisty</string>
<string name="playlist.update_info">Aktualizacja informacji</string> <string name="playlist.update_info">Zmień informacje</string>
<string name="playlist.updated_info">Zaktualizowano informacje dla playlisty %s</string> <string name="playlist.updated_info">Zaktualizowano informacje dla playlisty %s</string>
<string name="playlist.updated_info_error">Błąc podczas aktualizacji playlisty %s</string> <string name="playlist.updated_info_error">Błąd podczas aktualizacji playlisty %s</string>
<string name="search.albums">Albumy</string> <string name="search.albums">Albumy</string>
<string name="search.artists">Artyści</string> <string name="search.artists">Wykonawcy</string>
<string name="search.label">Wyszukaj</string> <string name="search.label">Wyszukaj</string>
<string name="search.more">Wyświetl więcej</string> <string name="search.more">Wyświetl więcej</string>
<string name="search.no_match">Brak wyników, proszę spróbować ponownie</string> <string name="search.no_match">Brak wyników, proszę spróbować ponownie</string>
@ -150,12 +150,12 @@
<string name="settings.cache_size_9000">9 GB</string> <string name="settings.cache_size_9000">9 GB</string>
<string name="settings.cache_size_unlimited">Nieograniczona</string> <string name="settings.cache_size_unlimited">Nieograniczona</string>
<string name="settings.cache_title">Pamięć podręczna muzyki</string> <string name="settings.cache_title">Pamięć podręczna muzyki</string>
<string name="settings.chat_refresh">Okres odświeżania czatu</string> <string name="settings.chat_refresh">Odświeżaj czat co</string>
<string name="settings.clear_bookmark">Czyszczenie zakładek</string> <string name="settings.clear_bookmark">Usuwanie zakładek</string>
<string name="settings.clear_bookmark_summary">Czyść zakładkę po zakończeniu odtwarzania utworu</string> <string name="settings.clear_bookmark_summary">Usuwaj zakładkę po zakończeniu odtwarzania utworu</string>
<string name="settings.clear_search_history">Wyczyść historię wyszukiwania</string> <string name="settings.clear_search_history">Wyczyść historię wyszukiwania</string>
<string name="settings.default_albums">Domyślna ilość wyników - albumy</string> <string name="settings.default_albums">Domyślna ilość wyników - albumy</string>
<string name="settings.default_artists">Domyślna ilość wyników - artyści</string> <string name="settings.default_artists">Domyślna ilość wyników - wykonawcy</string>
<string name="settings.default_songs">Domyślna ilość wyników - utwory</string> <string name="settings.default_songs">Domyślna ilość wyników - utwory</string>
<string name="settings.directory_cache_time">Okres przechowywania pamięci podręcznej katalogu</string> <string name="settings.directory_cache_time">Okres przechowywania pamięci podręcznej katalogu</string>
<string name="settings.directory_cache_time_0">Wyłączone</string> <string name="settings.directory_cache_time_0">Wyłączone</string>
@ -165,15 +165,15 @@
<string name="settings.directory_cache_time_30">30 minut</string> <string name="settings.directory_cache_time_30">30 minut</string>
<string name="settings.directory_cache_time_5">5 minut</string> <string name="settings.directory_cache_time_5">5 minut</string>
<string name="settings.directory_cache_time_60">1 godzina</string> <string name="settings.directory_cache_time_60">1 godzina</string>
<string name="settings.disc_sort">Sortuj utwory wg dysku</string> <string name="settings.disc_sort">Sortuj utwory wg numeru płyty</string>
<string name="settings.disc_sort_summary">Sortuje listę utworów wg numeru dysku i numeru utworu</string> <string name="settings.disc_sort_summary">Sortuj listę utworów wg numeru płyty i numeru utworu</string>
<string name="settings.display_bitrate_summary">Dołącza bitrate i typ pliku do nazwy artysty</string> <string name="settings.display_bitrate_summary">Dołącz bitrate i rozszerzenie pliku obok nazwy wykonawcy</string>
<string name="settings.hide_media_summary">Ukrywa pliki muzyczne przed innymi aplikacjami.</string> <string name="settings.hide_media_summary">Ukrywa pliki muzyczne przed innymi aplikacjami.</string>
<string name="settings.hide_media_title">Ukryj pliki</string> <string name="settings.hide_media_title">Ukryj pliki</string>
<string name="settings.hide_media_toast">Efekt widoczny będzie po następnym skanowaniu muzyki przez system Android.</string> <string name="settings.hide_media_toast">Efekt widoczny będzie po następnym skanowaniu muzyki przez system Android.</string>
<string name="settings.invalid_url">Proszę wprowadzić prawidłowy URL.</string> <string name="settings.invalid_url">Proszę wprowadzić prawidłowy URL.</string>
<string name="settings.max_albums">Maksymalna ilość wyników - albumy</string> <string name="settings.max_albums">Maksymalna ilość wyników - albumy</string>
<string name="settings.max_artists">Maksymalna ilość wyników - artyści</string> <string name="settings.max_artists">Maksymalna ilość wyników - wykonawcy</string>
<string name="settings.max_bitrate_112">112 Kbps</string> <string name="settings.max_bitrate_112">112 Kbps</string>
<string name="settings.max_bitrate_128">128 Kbps</string> <string name="settings.max_bitrate_128">128 Kbps</string>
<string name="settings.max_bitrate_160">160 Kbps</string> <string name="settings.max_bitrate_160">160 Kbps</string>
@ -186,9 +186,9 @@
<string name="settings.max_bitrate_96">96 Kbps</string> <string name="settings.max_bitrate_96">96 Kbps</string>
<string name="settings.max_bitrate_mobile">Maksymalny bitrate dla połączenia komórkowego</string> <string name="settings.max_bitrate_mobile">Maksymalny bitrate dla połączenia komórkowego</string>
<string name="settings.max_bitrate_unlimited">Bez limitu</string> <string name="settings.max_bitrate_unlimited">Bez limitu</string>
<string name="settings.max_bitrate_wifi">Maksymalny bitrate dla połączenia Wi-fi</string> <string name="settings.max_bitrate_wifi">Maksymalny bitrate dla połączenia Wi-Fi</string>
<string name="settings.max_songs">Maksymalna ilość wyników - utwory</string> <string name="settings.max_songs">Maksymalna ilość wyników - utwory</string>
<string name="settings.media_button_summary">Reaguje na przyciski telefonu, słuchawek i Bluetooth</string> <string name="settings.media_button_summary">Reaguj na przyciski multimedialne telefonu, słuchawek i urządzeń Bluetooth</string>
<string name="settings.media_button_title">Przyciski</string> <string name="settings.media_button_title">Przyciski</string>
<string name="settings.network_timeout">Przekroczenie limitu czasu sieci</string> <string name="settings.network_timeout">Przekroczenie limitu czasu sieci</string>
<string name="settings.network_timeout_105000">105 sekund</string> <string name="settings.network_timeout_105000">105 sekund</string>
@ -208,7 +208,7 @@
<string name="settings.playback.bluetooth_all">Wszystkie urządzenia Bluetooth</string> <string name="settings.playback.bluetooth_all">Wszystkie urządzenia Bluetooth</string>
<string name="settings.playback.bluetooth_a2dp">Tylko urządzenia audio (A2DP)</string> <string name="settings.playback.bluetooth_a2dp">Tylko urządzenia audio (A2DP)</string>
<string name="settings.playback.bluetooth_disabled">Wyłączone</string> <string name="settings.playback.bluetooth_disabled">Wyłączone</string>
<string name="settings.playback.resume_play_on_headphones_plug.title">Wznawiaj po podłączeniu słuchawek</string> <string name="settings.playback.resume_play_on_headphones_plug.title">Wznów po podłączeniu słuchawek</string>
<string name="settings.playback.resume_play_on_headphones_plug.summary">Aplikacja wznowi zatrzymane odtwarzanie po podpięciu słuchawek.</string> <string name="settings.playback.resume_play_on_headphones_plug.summary">Aplikacja wznowi zatrzymane odtwarzanie po podpięciu słuchawek.</string>
<string name="settings.preload">Ilość wstępnie ładowanych utworów</string> <string name="settings.preload">Ilość wstępnie ładowanych utworów</string>
<string name="settings.preload_1">1 utwór</string> <string name="settings.preload_1">1 utwór</string>
@ -249,8 +249,8 @@
<string name="settings.theme_title">Motyw</string> <string name="settings.theme_title">Motyw</string>
<string name="settings.title.allow_self_signed_certificate">Zezwalaj na własne certyfikaty HTTPS</string> <string name="settings.title.allow_self_signed_certificate">Zezwalaj na własne certyfikaty HTTPS</string>
<string name="settings.title.force_plain_text_password">Wymuś uwierzytelnianie zwykłym hasłem</string> <string name="settings.title.force_plain_text_password">Wymuś uwierzytelnianie zwykłym hasłem</string>
<string name="settings.use_folder_for_album_artist">Używaj folderów jako nazw artystów</string> <string name="settings.use_folder_for_album_artist">Używaj folderów jako nazw wykonawców</string>
<string name="settings.use_folder_for_album_artist_summary">Zakłada, że folder najwyższego poziomu jest nazwą artysty albumu</string> <string name="settings.use_folder_for_album_artist_summary">Zakłada, że folder najwyższego poziomu jest nazwą wykonawcy albumu</string>
<string name="settings.use_id3">Przeglądaj używając tagów ID3</string> <string name="settings.use_id3">Przeglądaj używając tagów ID3</string>
<string name="settings.use_id3_summary">Używa metod z tagów ID3 zamiast metod opartych na systemie plików</string> <string name="settings.use_id3_summary">Używa metod z tagów ID3 zamiast metod opartych na systemie plików</string>
<string name="main.video" tools:ignore="UnusedResources">Wideo</string> <string name="main.video" tools:ignore="UnusedResources">Wideo</string>
@ -276,7 +276,7 @@
<string name="download.bookmark_delete">Usuń zakładkę</string> <string name="download.bookmark_delete">Usuń zakładkę</string>
<string name="download.menu_star">Ulubione</string> <string name="download.menu_star">Ulubione</string>
<string name="download.menu_clear_playlist">Wyczyść playlistę</string> <string name="download.menu_clear_playlist">Wyczyść playlistę</string>
<string name="button_bar.shares">Udostępnienia</string> <string name="button_bar.shares">Udostępnione</string>
<string name="select_share.empty">Brak udostępnień na serwerze</string> <string name="select_share.empty">Brak udostępnień na serwerze</string>
<string name="menu_deleted_share">Usunięto udostępnienie %s</string> <string name="menu_deleted_share">Usunięto udostępnienie %s</string>
<string name="menu_deleted_share_error">Nieudane usunięcie udostępnienia %s</string> <string name="menu_deleted_share_error">Nieudane usunięcie udostępnienia %s</string>
@ -294,7 +294,7 @@
<string name="share_default_greeting">Sprawdź muzykę, którą udostępniam na %s</string> <string name="share_default_greeting">Sprawdź muzykę, którą udostępniam na %s</string>
<string name="share_via">Udostępnij utwory za pomocą</string> <string name="share_via">Udostępnij utwory za pomocą</string>
<string name="menu.share">Udostępnianie</string> <string name="menu.share">Udostępnianie</string>
<string name="download.menu_show_artist">Wyświetlaj artystę</string> <string name="download.menu_show_artist">Przejdź do wykonawcy</string>
<string name="common_multiple_years">Z różnych lat</string> <string name="common_multiple_years">Z różnych lat</string>
<string name="server_selector.label">Skonfigurowane serwery</string> <string name="server_selector.label">Skonfigurowane serwery</string>
<string name="server_selector.delete_confirmation">Czy na pewno chcesz usunąć ten serwer\?</string> <string name="server_selector.delete_confirmation">Czy na pewno chcesz usunąć ten serwer\?</string>
@ -326,7 +326,7 @@
<string name="api.subsonic.upgrade_client">Brak zgodności wersji. Uaktualnij aplikację Ultrasonic na Androida.</string> <string name="api.subsonic.upgrade_client">Brak zgodności wersji. Uaktualnij aplikację Ultrasonic na Androida.</string>
<string name="api.subsonic.upgrade_server">Brak zgodności wersji. Uaktualnij serwer Subsonic.</string> <string name="api.subsonic.upgrade_server">Brak zgodności wersji. Uaktualnij serwer Subsonic.</string>
<!-- Subsonic features --> <!-- Subsonic features -->
<string name="settings.five_star_rating_title">Użyj pięciu gwiazdek dla utworów</string> <string name="settings.five_star_rating_title">5-gwiazdkowy system ocen utworów</string>
<string name="settings.show_confirmation_dialog_summary">Pokaż okno potwierdzające usunięcie lub odpięcie utworów</string> <string name="settings.show_confirmation_dialog_summary">Pokaż okno potwierdzające usunięcie lub odpięcie utworów</string>
<string name="language.en">Angielski</string> <string name="language.en">Angielski</string>
<string name="settings.scrobble_summary">Pamiętaj o ustawieniu nazwy użytkownika i hasła do usługi Scrobble na serwerze</string> <string name="settings.scrobble_summary">Pamiętaj o ustawieniu nazwy użytkownika i hasła do usługi Scrobble na serwerze</string>
@ -336,7 +336,7 @@
<string name="buttons.stop">Zatrzymaj</string> <string name="buttons.stop">Zatrzymaj</string>
<string name="language.fr">Francuski</string> <string name="language.fr">Francuski</string>
<string name="common.unpin_selection_confirmation">Czy na pewno chcesz odpiąć zaznaczone pozycje\?</string> <string name="common.unpin_selection_confirmation">Czy na pewno chcesz odpiąć zaznaczone pozycje\?</string>
<string name="settings.custom_cache_location">Użyj niestandardowej lokacji pamięci podręcznej</string> <string name="settings.custom_cache_location">Niestandardowa lokalizacja pamięci podręcznej</string>
<string name="common.select_all">Wybierz wszystko</string> <string name="common.select_all">Wybierz wszystko</string>
<string name="download.menu_shuffle_on">Włączony tryb losowy</string> <string name="download.menu_shuffle_on">Włączony tryb losowy</string>
<string name="buttons.next">Następne</string> <string name="buttons.next">Następne</string>
@ -352,7 +352,7 @@
<string name="settings.preload_1000">1000 piosenek</string> <string name="settings.preload_1000">1000 piosenek</string>
<string name="supported_server_features">Wspierane funkcje</string> <string name="supported_server_features">Wspierane funkcje</string>
<string name="language.pl">Polski</string> <string name="language.pl">Polski</string>
<string name="common.artist">Artysta</string> <string name="common.artist">Wykonawca</string>
<string name="language.nl">Holenderski</string> <string name="language.nl">Holenderski</string>
<string name="language.hu">Węgierski</string> <string name="language.hu">Węgierski</string>
<string name="settings.debug.log_summary">Zapisanych jest %1$s plików z logami, które zajmują ~%2$s MB miejsca w katalogu %3$s. Czy chcesz je zachować\?</string> <string name="settings.debug.log_summary">Zapisanych jest %1$s plików z logami, które zajmują ~%2$s MB miejsca w katalogu %3$s. Czy chcesz je zachować\?</string>
@ -366,7 +366,7 @@
<string name="buttons.repeat">Powtarzaj</string> <string name="buttons.repeat">Powtarzaj</string>
<string name="download.empty">Nic nie jest pobierane</string> <string name="download.empty">Nic nie jest pobierane</string>
<string name="language.ru">Rosyjski</string> <string name="language.ru">Rosyjski</string>
<string name="download.playerstate_loading">Byforowanie…</string> <string name="download.playerstate_loading">Buforowanie…</string>
<string name="main.setup_server">%s - Ustaw serwer</string> <string name="main.setup_server">%s - Ustaw serwer</string>
<string name="settings.preload_50">50 piosenek</string> <string name="settings.preload_50">50 piosenek</string>
<string name="language.zh_CN">Chiński (Chiny)</string> <string name="language.zh_CN">Chiński (Chiny)</string>
@ -383,13 +383,13 @@
<string name="language.pt">Portugalski</string> <string name="language.pt">Portugalski</string>
<string name="settings.server_color">Kolor serwera</string> <string name="settings.server_color">Kolor serwera</string>
<string name="buttons.pause">Pauza</string> <string name="buttons.pause">Pauza</string>
<string name="settings.show_artist_picture">Pokaż obraz wykonawcy na liście</string> <string name="settings.show_artist_picture">Wyświetlaj obraz wykonawcy w liście</string>
<string name="common.title">Tytuł</string> <string name="common.title">Tytuł</string>
<string name="common.delete_selection_confirmation">Czy na pewno chcesz usunąć zaznaczone pozycje\?</string> <string name="common.delete_selection_confirmation">Czy na pewno chcesz usunąć zaznaczone pozycje\?</string>
<string name="albumArt">Okładka albumu</string> <string name="albumArt">Okładka albumu</string>
<string name="common.album">Album</string> <string name="common.album">Album</string>
<string name="settings.preload_500">500 piosenek</string> <string name="settings.preload_500">500 piosenek</string>
<string name="settings.share_on_server_summary">Udostępnianie spowoduje utworzenie go na serwerze i udostępnienie jego adresu URL. Jeśli ta opcja jest wyłączona, udostępniane są tylko szczegóły utworu</string> <string name="settings.share_on_server_summary">Udostępnianie umożliwi dostęp do utworu na serwerze i wygeneruje do niego adres URL. Jeśli ta opcja jest wyłączona, udostępniane będą tylko informacje o utworze</string>
<string name="settings.download_transition">Pokaż Obecnie odtwarzane po kliknięciu przycisku Odtwarzaj</string> <string name="settings.download_transition">Pokaż Obecnie odtwarzane po kliknięciu przycisku Odtwarzaj</string>
<string name="language.es">Hiszpański</string> <string name="language.es">Hiszpański</string>
<string name="settings.override_language_summary">Wymagane jest ponowne uruchomienie aplikacji po zmianie języka</string> <string name="settings.override_language_summary">Wymagane jest ponowne uruchomienie aplikacji po zmianie języka</string>
@ -398,7 +398,7 @@
<string name="language.zh_TW">Chiński (Tajwan)</string> <string name="language.zh_TW">Chiński (Tajwan)</string>
<string name="settings.theme_day_night">Dzień i noc</string> <string name="settings.theme_day_night">Dzień i noc</string>
<string name="settings.theme_black">Czarny</string> <string name="settings.theme_black">Czarny</string>
<string name="settings.summary.force_plain_text_password">Zmusza to aplikację do wysyłania hasła w postaci niezaszyfrowanej. Przydatne, jeśli serwer Subsonic nie obsługuje nowego interfejsu API uwierzytelniania dla użytkowników.</string> <string name="settings.summary.force_plain_text_password">Zmusza aplikację do przesyłania hasła w postaci niezaszyfrowanej. Przydaje się, gdy serwer Subsonic nie obsługuje nowego API uwierzytelniania użytkowników.</string>
<string name="settings.show_now_playing_details_summary">Pokaż więcej informacji o utworze w sekcji Obecnie odtwarzane (gatunek, rok, przepustowość)</string> <string name="settings.show_now_playing_details_summary">Pokaż więcej informacji o utworze w sekcji Obecnie odtwarzane (gatunek, rok, przepustowość)</string>
<string name="settings.show_now_playing_details">Pokaż szczegóły w sekcji Obecnie odtwarzane</string> <string name="settings.show_now_playing_details">Pokaż szczegóły w sekcji Obecnie odtwarzane</string>
<string name="settings.wifi_required_title">Pobieraj tylko przez Wi-Fi</string> <string name="settings.wifi_required_title">Pobieraj tylko przez Wi-Fi</string>
@ -423,7 +423,7 @@
<item quantity="many">Odpięto %d utworów</item> <item quantity="many">Odpięto %d utworów</item>
<item quantity="other">Odpięto %d utworów</item> <item quantity="other">Odpięto %d utworów</item>
</plurals> </plurals>
<string name="settings.use_hw_offload_title">Użyj odtwarzania sprzętowwego (eksperymentalne)</string> <string name="settings.use_hw_offload_title">Użyj odtwarzania sprzętowego (eksperymentalne)</string>
<string name="jukebox">Jukebox</string> <string name="jukebox">Jukebox</string>
<string name="select_album.no_network">Uwaga: Brak dostępnych sieci do użycia. <string name="select_album.no_network">Uwaga: Brak dostępnych sieci do użycia.
\n Jeżeli używasz danych mobilnych, potrzebne może być włączenie płatnych połączeń w ustawieniach.</string> \n Jeżeli używasz danych mobilnych, potrzebne może być włączenie płatnych połączeń w ustawieniach.</string>
@ -434,7 +434,7 @@
<string name="settings.scrobble_title">Scrobbluj moje odtworzenia</string> <string name="settings.scrobble_title">Scrobbluj moje odtworzenia</string>
<string name="settings.use_id3_offline_summary">Jeśli włączysz to ustawienie, będzie ono wyświetlać tylko muzykę pobraną za pomocą Ultrasonic w wersji 4.0 lub nowszej. Wcześniejsze pobrane pliki nie zawierają wymaganych metadanych. Możesz przełączać się między trybami Przypinania i Zapisywania, aby wyzwolić pobieranie brakujących metadanych.</string> <string name="settings.use_id3_offline_summary">Jeśli włączysz to ustawienie, będzie ono wyświetlać tylko muzykę pobraną za pomocą Ultrasonic w wersji 4.0 lub nowszej. Wcześniejsze pobrane pliki nie zawierają wymaganych metadanych. Możesz przełączać się między trybami Przypinania i Zapisywania, aby wyzwolić pobieranie brakujących metadanych.</string>
<string name="settings.show_artist_picture_summary">Wyświetla obraz wykonawcy na liście wykonawców, jeśli jest dostępny</string> <string name="settings.show_artist_picture_summary">Wyświetla obraz wykonawcy na liście wykonawców, jeśli jest dostępny</string>
<string name="settings.wifi_required_summary">Pobieraj tylko podczas połączeń niepłatnuch</string> <string name="settings.wifi_required_summary">Pobieraj tylko podczas połączeń niepłatnych</string>
<string name="download.share_song">Udostępnij obecnie odtwarzaną piosenkę</string> <string name="download.share_song">Udostępnij obecnie odtwarzaną piosenkę</string>
<string name="settings.show_confirmation_dialog">Pokaż okno potwierdzające</string> <string name="settings.show_confirmation_dialog">Pokaż okno potwierdzające</string>
<string name="settings.debug.title">Opcje debugowania</string> <string name="settings.debug.title">Opcje debugowania</string>
@ -443,7 +443,7 @@
<string name="server_editor.disabled_feature">Jedna lub więcej funkcji zostało wyłączonych ponieważ serwer ich nie obsługiwał. <string name="server_editor.disabled_feature">Jedna lub więcej funkcji zostało wyłączonych ponieważ serwer ich nie obsługiwał.
\nMożesz uruchomić ten test ponownie kiedykolwiek.</string> \nMożesz uruchomić ten test ponownie kiedykolwiek.</string>
<string name="server_menu.demo">Serwer demonstracyjny</string> <string name="server_menu.demo">Serwer demonstracyjny</string>
<string name="settings.five_star_rating_description">Użyj systemu pięciu gwiazdek do oceniania utworów zamiast po prostu dodawać lub usuwać utwory z ulubionych.</string> <string name="settings.five_star_rating_description">Używaj 5-gwiazdkowego systemu ocen utworów zamiast zwykłego oznaczania/odznaczania utworów gwiazdką.</string>
<string name="list_view">Lista</string> <string name="list_view">Lista</string>
<string name="grid_view">Okładka</string> <string name="grid_view">Okładka</string>
<string name="settings.use_hw_offload_description">Spróbuj odtworzyć pliki multimedialne za pomocą układu dekodującego w telefonie. Może to zmniejszyć zużycie baterii!</string> <string name="settings.use_hw_offload_description">Spróbuj odtworzyć pliki multimedialne za pomocą układu dekodującego w telefonie. Może to zmniejszyć zużycie baterii!</string>
@ -463,10 +463,11 @@
\n \n
\nDzięki <b>Ultrasonic</b> możesz łatwo przesyłać strumieniowo lub pobierać muzykę z komputera domowego na telefon za pomocą serwera multimediów kompatybilnego z Subsonic. Oprogramowanie serwera Subsonic wymaga oddzielnej konfiguracji od Ultrasonic. \nDzięki <b>Ultrasonic</b> możesz łatwo przesyłać strumieniowo lub pobierać muzykę z komputera domowego na telefon za pomocą serwera multimediów kompatybilnego z Subsonic. Oprogramowanie serwera Subsonic wymaga oddzielnej konfiguracji od Ultrasonic.
\n \n
\nDomyślnie Ultrasonic nie jest skonfigurowane. Po skonfigurowaniu własnego serwera zmień ustawienia serwera, aby połączyć się z komputerem.</string> \nDomyślnie Ultrasonic jest nieskonfigurowany. Po skonfigurowaniu własnego serwera zmień ustawienia serwera, aby połączyć się z komputerem.</string>
<string name="main.welcome_text_demo">Aby używać Ultrasonic z własną muzyką, potrzebujesz <b>własnego serwera</b>. <string name="main.welcome_text_demo">Aby używać Ultrasonic z własną muzyką, potrzebujesz <b>własnego serwera</b>.
\n \n
\n➤ Jeśli chcesz najpierw wypróbować aplikację, możesz teraz dodać serwer demonstracyjny. \n➤ Jeśli chcesz najpierw wypróbować aplikację, możesz teraz dodać serwer demonstracyjny.
\n \n
\n➤ W przeciwnym razie możesz skonfigurować serwer w <b>ustawieniach</b>.</string> \n➤ W przeciwnym razie możesz skonfigurować serwer w <b>ustawieniach</b>.</string>
<string name="settings.max_bitrate_pinning">Maksymalny bitrate - Przy trwałym przypięciu utworu</string>
</resources> </resources>

View File

@ -456,6 +456,8 @@
<string name="foreground_exception_text">Press on the play button on the media notification if it <string name="foreground_exception_text">Press on the play button on the media notification if it
is still present, otherwise please open the app to start the playback and re-connect the session is still present, otherwise please open the app to start the playback and re-connect the session
to the controller</string> to the controller</string>
<string name="shortcut_play_random_songs_short">Random songs</string>
<string name="shortcut_play_random_songs_long">Play random songs</string>
</resources> </resources>