detail: add metadata to song detail view
Add metadata items to the song detail view. Should provide a useful view into how Auxio is interpreting song metadata. Resolves #330.
This commit is contained in:
parent
bb704ea3fd
commit
975f239b8b
50 changed files with 440 additions and 494 deletions
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -5,9 +5,10 @@
|
|||
#### What's New
|
||||
- Added support for disc subtitles
|
||||
- Added support for ALAC files
|
||||
- Song properties view now shows tags
|
||||
|
||||
#### What's Improved
|
||||
- Auxio will now accept zeroed track/disc numbers in the presence of non-zero total
|
||||
- Will now accept zeroed track/disc numbers in the presence of non-zero total
|
||||
track/disc fields
|
||||
- Music loading has been made slightly faster
|
||||
- Improved sort menu usability
|
||||
|
@ -17,10 +18,18 @@ track/disc fields
|
|||
#### What's Fixed
|
||||
- Fixed non-functioning "repeat all" repeat mode
|
||||
- Fixed visual clipping of shuffle button shadow
|
||||
- Fixed SeekBar remaining in a "stuck" state if gesture navigation was used
|
||||
while selecting it.
|
||||
|
||||
#### Dev/Meta
|
||||
- Started using dependency injection
|
||||
- Started code obsfucation
|
||||
- Only bundle audio-related extractors with ExoPlayer
|
||||
- Switched to Room for database management
|
||||
- Updated to MDC 1.8.0 alpha-01
|
||||
- Updated to AGP 7.4.1
|
||||
- Updated to Gradle 8.0
|
||||
- Updated to ExoPlayer 2.18.3
|
||||
|
||||
## 3.0.2
|
||||
|
||||
|
|
|
@ -17,22 +17,28 @@
|
|||
|
||||
package org.oxycblt.auxio.detail
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.text.format.Formatter
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import org.oxycblt.auxio.R
|
||||
import org.oxycblt.auxio.databinding.DialogSongDetailBinding
|
||||
import org.oxycblt.auxio.detail.recycler.SongPropertyAdapter
|
||||
import org.oxycblt.auxio.detail.recycler.SongProperty
|
||||
import org.oxycblt.auxio.list.adapter.BasicListInstructions
|
||||
import org.oxycblt.auxio.music.Music
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.music.metadata.AudioInfo
|
||||
import org.oxycblt.auxio.music.resolveNames
|
||||
import org.oxycblt.auxio.playback.formatDurationMs
|
||||
import org.oxycblt.auxio.ui.ViewBindingDialogFragment
|
||||
import org.oxycblt.auxio.util.collectImmediately
|
||||
import org.oxycblt.auxio.util.concatLocalized
|
||||
|
||||
/**
|
||||
* A [ViewBindingDialogFragment] that shows information about a Song.
|
||||
|
@ -44,6 +50,7 @@ class SongDetailDialog : ViewBindingDialogFragment<DialogSongDetailBinding>() {
|
|||
// Information about what song to display is initially within the navigation arguments
|
||||
// as a UID, as that is the only safe way to parcel an song.
|
||||
private val args: SongDetailDialogArgs by navArgs()
|
||||
private val detailAdapter = SongPropertyAdapter()
|
||||
|
||||
override fun onCreateBinding(inflater: LayoutInflater) =
|
||||
DialogSongDetailBinding.inflate(inflater)
|
||||
|
@ -55,6 +62,7 @@ class SongDetailDialog : ViewBindingDialogFragment<DialogSongDetailBinding>() {
|
|||
|
||||
override fun onBindingCreated(binding: DialogSongDetailBinding, savedInstanceState: Bundle?) {
|
||||
super.onBindingCreated(binding, savedInstanceState)
|
||||
binding.detailProperties.adapter = detailAdapter
|
||||
// DetailViewModel handles most initialization from the navigation argument.
|
||||
detailModel.setSongUid(args.itemUid)
|
||||
collectImmediately(detailModel.currentSong, detailModel.songAudioInfo, ::updateSong)
|
||||
|
@ -67,35 +75,59 @@ class SongDetailDialog : ViewBindingDialogFragment<DialogSongDetailBinding>() {
|
|||
return
|
||||
}
|
||||
|
||||
val binding = requireBinding()
|
||||
if (info != null) {
|
||||
// Finished loading song audio info, populate and show the list of Song information.
|
||||
binding.detailLoading.isInvisible = true
|
||||
binding.detailContainer.isInvisible = false
|
||||
|
||||
val context = requireContext()
|
||||
binding.detailFileName.setText(song.path.name)
|
||||
binding.detailRelativeDir.setText(song.path.parent.resolveName(context))
|
||||
binding.detailFormat.setText(info.resolvedMimeType.resolveName(context))
|
||||
binding.detailSize.setText(Formatter.formatFileSize(context, song.size))
|
||||
binding.detailDuration.setText(song.durationMs.formatDurationMs(true))
|
||||
|
||||
if (info.bitrateKbps != null) {
|
||||
binding.detailBitrate.setText(getString(R.string.fmt_bitrate, info.bitrateKbps))
|
||||
} else {
|
||||
binding.detailBitrate.setText(R.string.def_bitrate)
|
||||
}
|
||||
|
||||
if (info.sampleRateHz != null) {
|
||||
binding.detailSampleRate.setText(
|
||||
getString(R.string.fmt_sample_rate, info.sampleRateHz))
|
||||
} else {
|
||||
binding.detailSampleRate.setText(R.string.def_sample_rate)
|
||||
}
|
||||
} else {
|
||||
// Loading is still on-going, don't show anything yet.
|
||||
binding.detailLoading.isInvisible = false
|
||||
binding.detailContainer.isInvisible = true
|
||||
detailAdapter.submitList(
|
||||
buildList {
|
||||
add(SongProperty(R.string.lbl_name, song.zipName(context)))
|
||||
add(SongProperty(R.string.lbl_album, song.album.zipName(context)))
|
||||
add(SongProperty(R.string.lbl_artists, song.artists.zipNames(context)))
|
||||
add(SongProperty(R.string.lbl_genres, song.genres.resolveNames(context)))
|
||||
song.date?.let { add(SongProperty(R.string.lbl_date, it.resolveDate(context))) }
|
||||
song.track?.let {
|
||||
add(SongProperty(R.string.lbl_track, getString(R.string.fmt_number, it)))
|
||||
}
|
||||
song.disc?.let {
|
||||
val formattedNumber = getString(R.string.fmt_number, it.number)
|
||||
val zipped =
|
||||
if (it.name != null) {
|
||||
getString(R.string.fmt_zipped_names, it.name, formattedNumber)
|
||||
} else {
|
||||
formattedNumber
|
||||
}
|
||||
add(SongProperty(R.string.lbl_disc, zipped))
|
||||
}
|
||||
add(SongProperty(R.string.lbl_file_name, song.path.name))
|
||||
add(
|
||||
SongProperty(
|
||||
R.string.lbl_relative_path, song.path.parent.resolveName(context)))
|
||||
info.resolvedMimeType.resolveName(context)?.let {
|
||||
SongProperty(R.string.lbl_format, it)
|
||||
}
|
||||
add(
|
||||
SongProperty(
|
||||
R.string.lbl_size, Formatter.formatFileSize(context, song.size)))
|
||||
add(SongProperty(R.string.lbl_duration, song.durationMs.formatDurationMs(true)))
|
||||
info.bitrateKbps?.let {
|
||||
add(SongProperty(R.string.lbl_bitrate, getString(R.string.fmt_bitrate, it)))
|
||||
}
|
||||
info.sampleRateHz?.let {
|
||||
add(
|
||||
SongProperty(
|
||||
R.string.lbl_sample_rate, getString(R.string.fmt_sample_rate, it)))
|
||||
}
|
||||
},
|
||||
BasicListInstructions.REPLACE)
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T : Music> T.zipName(context: Context) =
|
||||
if (rawSortName != null) {
|
||||
getString(R.string.fmt_zipped_names, resolveName(context), rawSortName)
|
||||
} else {
|
||||
resolveName(context)
|
||||
}
|
||||
|
||||
private fun <T : Music> List<T>.zipNames(context: Context) =
|
||||
concatLocalized(context) { it.zipName(context) }
|
||||
}
|
||||
|
|
|
@ -33,7 +33,9 @@ import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter
|
|||
import org.oxycblt.auxio.list.adapter.SimpleDiffCallback
|
||||
import org.oxycblt.auxio.music.Album
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.music.areRawNamesTheSame
|
||||
import org.oxycblt.auxio.music.metadata.Disc
|
||||
import org.oxycblt.auxio.music.resolveNames
|
||||
import org.oxycblt.auxio.playback.formatDurationMs
|
||||
import org.oxycblt.auxio.util.context
|
||||
import org.oxycblt.auxio.util.getPlural
|
||||
|
@ -136,7 +138,7 @@ private class AlbumDetailViewHolder private constructor(private val binding: Ite
|
|||
|
||||
// Artist name maps to the subhead text
|
||||
binding.detailSubhead.apply {
|
||||
text = album.resolveArtistContents(context)
|
||||
text = album.artists.resolveNames(context)
|
||||
|
||||
// Add a QoL behavior where navigation to the artist will occur if the artist
|
||||
// name is pressed.
|
||||
|
@ -173,7 +175,7 @@ private class AlbumDetailViewHolder private constructor(private val binding: Ite
|
|||
object : SimpleDiffCallback<Album>() {
|
||||
override fun areContentsTheSame(oldItem: Album, newItem: Album) =
|
||||
oldItem.rawName == newItem.rawName &&
|
||||
oldItem.areArtistContentsTheSame(newItem) &&
|
||||
oldItem.artists.areRawNamesTheSame(newItem.artists) &&
|
||||
oldItem.dates == newItem.dates &&
|
||||
oldItem.songs.size == newItem.songs.size &&
|
||||
oldItem.durationMs == newItem.durationMs &&
|
||||
|
|
|
@ -30,10 +30,7 @@ import org.oxycblt.auxio.list.Item
|
|||
import org.oxycblt.auxio.list.SelectableListListener
|
||||
import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter
|
||||
import org.oxycblt.auxio.list.adapter.SimpleDiffCallback
|
||||
import org.oxycblt.auxio.music.Album
|
||||
import org.oxycblt.auxio.music.Artist
|
||||
import org.oxycblt.auxio.music.Music
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.music.*
|
||||
import org.oxycblt.auxio.util.context
|
||||
import org.oxycblt.auxio.util.getPlural
|
||||
import org.oxycblt.auxio.util.inflater
|
||||
|
@ -122,7 +119,7 @@ private class ArtistDetailViewHolder private constructor(private val binding: It
|
|||
// Information about the artist's genre(s) map to the sub-head text
|
||||
binding.detailSubhead.apply {
|
||||
isVisible = true
|
||||
text = artist.resolveGenreContents(binding.context)
|
||||
text = artist.genres.resolveNames(context)
|
||||
}
|
||||
|
||||
// Song and album counts map to the info
|
||||
|
@ -168,7 +165,7 @@ private class ArtistDetailViewHolder private constructor(private val binding: It
|
|||
object : SimpleDiffCallback<Artist>() {
|
||||
override fun areContentsTheSame(oldItem: Artist, newItem: Artist) =
|
||||
oldItem.rawName == newItem.rawName &&
|
||||
oldItem.areGenreContentsTheSame(newItem) &&
|
||||
oldItem.genres.areRawNamesTheSame(newItem.genres) &&
|
||||
oldItem.albums.size == newItem.albums.size &&
|
||||
oldItem.songs.size == newItem.songs.size
|
||||
}
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* Copyright (c) 2023 Auxio Project
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.oxycblt.auxio.detail.recycler
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import org.oxycblt.auxio.databinding.ItemSongPropertyBinding
|
||||
import org.oxycblt.auxio.list.Item
|
||||
import org.oxycblt.auxio.list.adapter.BasicListInstructions
|
||||
import org.oxycblt.auxio.list.adapter.DiffAdapter
|
||||
import org.oxycblt.auxio.list.adapter.ListDiffer
|
||||
import org.oxycblt.auxio.list.adapter.SimpleDiffCallback
|
||||
import org.oxycblt.auxio.list.recycler.DialogRecyclerView
|
||||
import org.oxycblt.auxio.util.context
|
||||
import org.oxycblt.auxio.util.inflater
|
||||
|
||||
/**
|
||||
* An adapter for [SongProperty] instances.
|
||||
* @author Alexander Capehart (OxygenCobalt)
|
||||
*/
|
||||
class SongPropertyAdapter :
|
||||
DiffAdapter<SongProperty, BasicListInstructions, SongPropertyViewHolder>(
|
||||
ListDiffer.Blocking(SongPropertyViewHolder.DIFF_CALLBACK)) {
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
|
||||
SongPropertyViewHolder.from(parent)
|
||||
|
||||
override fun onBindViewHolder(holder: SongPropertyViewHolder, position: Int) {
|
||||
holder.bind(getItem(position))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A property entry for use in [SongPropertyAdapter].
|
||||
* @param name The contextual title to use for the property.
|
||||
* @param value The value of the property.
|
||||
* @author Alexander Capehart (OxygenCobalt)
|
||||
*/
|
||||
data class SongProperty(@StringRes val name: Int, val value: String) : Item
|
||||
|
||||
/**
|
||||
* A [RecyclerView.ViewHolder] that displays a [SongProperty]. Use [from] to create an instance.
|
||||
* @author Alexander Capehart (OxygenCobalt)
|
||||
*/
|
||||
class SongPropertyViewHolder private constructor(private val binding: ItemSongPropertyBinding) :
|
||||
DialogRecyclerView.ViewHolder(binding.root) {
|
||||
fun bind(property: SongProperty) {
|
||||
val context = binding.context
|
||||
binding.propertyName.hint = context.getString(property.name)
|
||||
binding.propertyValue.setText(property.value)
|
||||
}
|
||||
|
||||
companion object {
|
||||
/**
|
||||
* Create a new instance.
|
||||
* @param parent The parent to inflate this instance from.
|
||||
* @return A new instance.
|
||||
*/
|
||||
fun from(parent: View) =
|
||||
SongPropertyViewHolder(ItemSongPropertyBinding.inflate(parent.context.inflater))
|
||||
|
||||
/** A comparator that can be used with DiffUtil. */
|
||||
val DIFF_CALLBACK =
|
||||
object : SimpleDiffCallback<SongProperty>() {
|
||||
override fun areContentsTheSame(oldItem: SongProperty, newItem: SongProperty) =
|
||||
oldItem.name == newItem.name && oldItem.value == newItem.value
|
||||
}
|
||||
}
|
||||
}
|
|
@ -49,7 +49,7 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) :
|
|||
listener.bind(song, this, menuButton = binding.songMenu)
|
||||
binding.songAlbumCover.bind(song)
|
||||
binding.songName.text = song.resolveName(binding.context)
|
||||
binding.songInfo.text = song.resolveArtistContents(binding.context)
|
||||
binding.songInfo.text = song.artists.resolveNames(binding.context)
|
||||
}
|
||||
|
||||
override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) {
|
||||
|
@ -76,7 +76,8 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) :
|
|||
val DIFF_CALLBACK =
|
||||
object : SimpleDiffCallback<Song>() {
|
||||
override fun areContentsTheSame(oldItem: Song, newItem: Song) =
|
||||
oldItem.rawName == newItem.rawName && oldItem.areArtistContentsTheSame(newItem)
|
||||
oldItem.rawName == newItem.rawName &&
|
||||
oldItem.artists.areRawNamesTheSame(newItem.artists)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -96,7 +97,7 @@ class AlbumViewHolder private constructor(private val binding: ItemParentBinding
|
|||
listener.bind(album, this, menuButton = binding.parentMenu)
|
||||
binding.parentImage.bind(album)
|
||||
binding.parentName.text = album.resolveName(binding.context)
|
||||
binding.parentInfo.text = album.resolveArtistContents(binding.context)
|
||||
binding.parentInfo.text = album.artists.resolveNames(binding.context)
|
||||
}
|
||||
|
||||
override fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) {
|
||||
|
@ -124,7 +125,7 @@ class AlbumViewHolder private constructor(private val binding: ItemParentBinding
|
|||
object : SimpleDiffCallback<Album>() {
|
||||
override fun areContentsTheSame(oldItem: Album, newItem: Album) =
|
||||
oldItem.rawName == newItem.rawName &&
|
||||
oldItem.areArtistContentsTheSame(newItem) &&
|
||||
oldItem.artists.areRawNamesTheSame(newItem.artists) &&
|
||||
oldItem.releaseType == newItem.releaseType
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import android.os.Parcelable
|
|||
import java.security.MessageDigest
|
||||
import java.text.CollationKey
|
||||
import java.util.UUID
|
||||
import kotlin.math.max
|
||||
import kotlinx.parcelize.IgnoredOnParcel
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.oxycblt.auxio.list.Item
|
||||
|
@ -31,6 +32,7 @@ import org.oxycblt.auxio.music.metadata.Disc
|
|||
import org.oxycblt.auxio.music.metadata.ReleaseType
|
||||
import org.oxycblt.auxio.music.storage.MimeType
|
||||
import org.oxycblt.auxio.music.storage.Path
|
||||
import org.oxycblt.auxio.util.concatLocalized
|
||||
import org.oxycblt.auxio.util.toUuidOrNull
|
||||
|
||||
/**
|
||||
|
@ -269,28 +271,11 @@ interface Song : Music {
|
|||
* this field.
|
||||
*/
|
||||
val artists: List<Artist>
|
||||
/**
|
||||
* Resolves one or more [Artist]s into a single piece of human-readable names.
|
||||
* @param context [Context] required for [resolveName]. formatter.
|
||||
*/
|
||||
fun resolveArtistContents(context: Context): String
|
||||
/**
|
||||
* Checks if the [Artist] *display* of this [Song] and another [Song] are equal. This will only
|
||||
* compare surface-level names, and not [Music.UID]s.
|
||||
* @param other The [Song] to compare to.
|
||||
* @return True if the [Artist] displays are equal, false otherwise
|
||||
*/
|
||||
fun areArtistContentsTheSame(other: Song): Boolean
|
||||
/**
|
||||
* The parent [Genre]s of this [Song]. Is often one, but there can be multiple if more than one
|
||||
* [Genre] name was specified in the metadata.
|
||||
*/
|
||||
val genres: List<Genre>
|
||||
/**
|
||||
* Resolves one or more [Genre]s into a single piece human-readable names.
|
||||
* @param context [Context] required for [resolveName].
|
||||
*/
|
||||
fun resolveGenreContents(context: Context): String
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -321,18 +306,6 @@ interface Album : MusicParent {
|
|||
* are prioritized for this field.
|
||||
*/
|
||||
val artists: List<Artist>
|
||||
/**
|
||||
* Resolves one or more [Artist]s into a single piece of human-readable names.
|
||||
* @param context [Context] required for [resolveName].
|
||||
*/
|
||||
fun resolveArtistContents(context: Context): String
|
||||
/**
|
||||
* Checks if the [Artist] *display* of this [Album] and another [Album] are equal. This will
|
||||
* only compare surface-level names, and not [Music.UID]s.
|
||||
* @param other The [Album] to compare to.
|
||||
* @return True if the [Artist] displays are equal, false otherwise
|
||||
*/
|
||||
fun areArtistContentsTheSame(other: Album): Boolean
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -359,18 +332,6 @@ interface Artist : MusicParent {
|
|||
val isCollaborator: Boolean
|
||||
/** The [Genre]s of this artist. */
|
||||
val genres: List<Genre>
|
||||
/**
|
||||
* Resolves one or more [Genre]s into a single piece of human-readable names.
|
||||
* @param context [Context] required for [resolveName].
|
||||
*/
|
||||
fun resolveGenreContents(context: Context): String
|
||||
/**
|
||||
* Checks if the [Genre] *display* of this [Artist] and another [Artist] are equal. This will
|
||||
* only compare surface-level names, and not [Music.UID]s.
|
||||
* @param other The [Artist] to compare to.
|
||||
* @return True if the [Genre] displays are equal, false otherwise
|
||||
*/
|
||||
fun areGenreContentsTheSame(other: Artist): Boolean
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -385,3 +346,18 @@ interface Genre : MusicParent {
|
|||
/** The total duration of the songs in this genre, in milliseconds. */
|
||||
val durationMs: Long
|
||||
}
|
||||
|
||||
fun <T : Music> List<T>.resolveNames(context: Context) =
|
||||
concatLocalized(context) { it.resolveName(context) }
|
||||
|
||||
fun <T : Music> List<T>.areRawNamesTheSame(other: List<T>): Boolean {
|
||||
for (i in 0 until max(size, other.size)) {
|
||||
val a = getOrNull(i) ?: return false
|
||||
val b = other.getOrNull(i) ?: return false
|
||||
if (a.rawName != b.rawName) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -22,7 +22,6 @@ import androidx.annotation.VisibleForTesting
|
|||
import java.security.MessageDigest
|
||||
import java.text.CollationKey
|
||||
import java.text.Collator
|
||||
import kotlin.math.max
|
||||
import org.oxycblt.auxio.R
|
||||
import org.oxycblt.auxio.list.Sort
|
||||
import org.oxycblt.auxio.music.Album
|
||||
|
@ -124,23 +123,10 @@ class SongImpl(rawSong: RawSong, musicSettings: MusicSettings) : Song {
|
|||
private val _artists = mutableListOf<ArtistImpl>()
|
||||
override val artists: List<Artist>
|
||||
get() = _artists
|
||||
override fun resolveArtistContents(context: Context) = resolveNames(context, artists)
|
||||
override fun areArtistContentsTheSame(other: Song): Boolean {
|
||||
for (i in 0 until max(artists.size, other.artists.size)) {
|
||||
val a = artists.getOrNull(i) ?: return false
|
||||
val b = other.artists.getOrNull(i) ?: return false
|
||||
if (a.rawName != b.rawName) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private val _genres = mutableListOf<GenreImpl>()
|
||||
override val genres: List<Genre>
|
||||
get() = _genres
|
||||
override fun resolveGenreContents(context: Context) = resolveNames(context, genres)
|
||||
|
||||
/**
|
||||
* The [RawAlbum] instances collated by the [Song]. This can be used to group [Song]s into an
|
||||
|
@ -268,18 +254,7 @@ class AlbumImpl(val rawAlbum: RawAlbum, override val songs: List<SongImpl>) : Al
|
|||
private val _artists = mutableListOf<ArtistImpl>()
|
||||
override val artists: List<Artist>
|
||||
get() = _artists
|
||||
override fun resolveArtistContents(context: Context) = resolveNames(context, artists)
|
||||
override fun areArtistContentsTheSame(other: Album): Boolean {
|
||||
for (i in 0 until max(artists.size, other.artists.size)) {
|
||||
val a = artists.getOrNull(i) ?: return false
|
||||
val b = other.artists.getOrNull(i) ?: return false
|
||||
if (a.rawName != b.rawName) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
init {
|
||||
var totalDuration: Long = 0
|
||||
var earliestDateAdded: Long = Long.MAX_VALUE
|
||||
|
@ -361,18 +336,6 @@ class ArtistImpl(private val rawArtist: RawArtist, songAlbums: List<Music>) : Ar
|
|||
other is ArtistImpl && uid == other.uid && songs == other.songs
|
||||
|
||||
override lateinit var genres: List<Genre>
|
||||
override fun resolveGenreContents(context: Context) = resolveNames(context, genres)
|
||||
override fun areGenreContentsTheSame(other: Artist): Boolean {
|
||||
for (i in 0 until max(genres.size, other.genres.size)) {
|
||||
val a = genres.getOrNull(i) ?: return false
|
||||
val b = other.genres.getOrNull(i) ?: return false
|
||||
if (a.rawName != b.rawName) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
init {
|
||||
val distinctSongs = mutableSetOf<Song>()
|
||||
|
@ -534,27 +497,6 @@ fun MessageDigest.update(n: Int?) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Join a list of [Music]'s resolved names into a string in a localized manner, using
|
||||
* [R.string.fmt_list].
|
||||
* @param context [Context] required to obtain localized formatting.
|
||||
* @param values The list of [Music] to format.
|
||||
* @return A single string consisting of the values delimited by a localized separator.
|
||||
*/
|
||||
private fun resolveNames(context: Context, values: List<Music>): String {
|
||||
if (values.isEmpty()) {
|
||||
// Nothing to do.
|
||||
return ""
|
||||
}
|
||||
|
||||
var joined = values.first().resolveName(context)
|
||||
for (i in 1..values.lastIndex) {
|
||||
// Chain all previous values with the next value in the list with another delimiter.
|
||||
joined = context.getString(R.string.fmt_list, joined, values[i].resolveName(context))
|
||||
}
|
||||
return joined
|
||||
}
|
||||
|
||||
/** Cached collator instance re-used with [makeCollationKey]. */
|
||||
private val COLLATOR: Collator = Collator.getInstance().apply { strength = Collator.PRIMARY }
|
||||
|
||||
|
|
|
@ -142,10 +142,9 @@ data class MimeType(val fromExtension: String, val fromFormat: String?) {
|
|||
* Resolve the mime type into a human-readable format name, such as "Ogg Vorbis".
|
||||
* @param context [Context] required to obtain human-readable strings.
|
||||
* @return A human-readable name for this mime type. Will first try [fromFormat], then falling
|
||||
* back to [fromExtension], then falling back to the extension name, and then finally a
|
||||
* placeholder "No Format" string.
|
||||
* back to [fromExtension], and then null if that fails.
|
||||
*/
|
||||
fun resolveName(context: Context): String {
|
||||
fun resolveName(context: Context): String? {
|
||||
// We try our best to produce a more readable name for the common audio formats.
|
||||
val formatName =
|
||||
when (fromFormat) {
|
||||
|
@ -201,8 +200,6 @@ data class MimeType(val fromExtension: String, val fromFormat: String?) {
|
|||
} else {
|
||||
// Fall back to the extension if we can't find a special name for this format.
|
||||
MimeTypeMap.getSingleton().getExtensionFromMimeType(fromExtension)?.uppercase()
|
||||
// Fall back to a placeholder if even that fails.
|
||||
?: context.getString(R.string.def_codec)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||
import org.oxycblt.auxio.R
|
||||
import org.oxycblt.auxio.databinding.FragmentPlaybackBarBinding
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.music.resolveNames
|
||||
import org.oxycblt.auxio.playback.state.RepeatMode
|
||||
import org.oxycblt.auxio.ui.MainNavigationAction
|
||||
import org.oxycblt.auxio.ui.NavigationViewModel
|
||||
|
@ -122,7 +123,7 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
|
|||
val binding = requireBinding()
|
||||
binding.playbackCover.bind(song)
|
||||
binding.playbackSong.text = song.resolveName(context)
|
||||
binding.playbackInfo.text = song.resolveArtistContents(context)
|
||||
binding.playbackInfo.text = song.artists.resolveNames(context)
|
||||
binding.playbackProgressBar.max = song.durationMs.msToDs().toInt()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.oxycblt.auxio.R
|
|||
import org.oxycblt.auxio.databinding.FragmentPlaybackPanelBinding
|
||||
import org.oxycblt.auxio.music.MusicParent
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.music.resolveNames
|
||||
import org.oxycblt.auxio.playback.state.RepeatMode
|
||||
import org.oxycblt.auxio.playback.ui.StyledSeekBar
|
||||
import org.oxycblt.auxio.ui.MainNavigationAction
|
||||
|
@ -184,7 +185,7 @@ class PlaybackPanelFragment :
|
|||
val context = requireContext()
|
||||
binding.playbackCover.bind(song)
|
||||
binding.playbackSong.text = song.resolveName(context)
|
||||
binding.playbackArtist.text = song.resolveArtistContents(context)
|
||||
binding.playbackArtist.text = song.artists.resolveNames(context)
|
||||
binding.playbackAlbum.text = song.album.resolveName(context)
|
||||
binding.playbackSeekBar.durationDs = song.durationMs.msToDs()
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.oxycblt.auxio.list.adapter.ListDiffer
|
|||
import org.oxycblt.auxio.list.adapter.PlayingIndicatorAdapter
|
||||
import org.oxycblt.auxio.list.recycler.SongViewHolder
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.music.resolveNames
|
||||
import org.oxycblt.auxio.util.*
|
||||
|
||||
/**
|
||||
|
@ -149,7 +150,7 @@ class QueueSongViewHolder private constructor(private val binding: ItemQueueSong
|
|||
listener.bind(song, this, bodyView, binding.songDragHandle)
|
||||
binding.songAlbumCover.bind(song)
|
||||
binding.songName.text = song.resolveName(binding.context)
|
||||
binding.songInfo.text = song.resolveArtistContents(binding.context)
|
||||
binding.songInfo.text = song.artists.resolveNames(binding.context)
|
||||
// Not swiping this ViewHolder if it's being re-bound, ensure that the background is
|
||||
// not visible. See QueueDragCallback for why this is done.
|
||||
binding.background.isInvisible = true
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.oxycblt.auxio.image.BitmapProvider
|
|||
import org.oxycblt.auxio.image.ImageSettings
|
||||
import org.oxycblt.auxio.music.MusicParent
|
||||
import org.oxycblt.auxio.music.Song
|
||||
import org.oxycblt.auxio.music.resolveNames
|
||||
import org.oxycblt.auxio.playback.ActionMode
|
||||
import org.oxycblt.auxio.playback.PlaybackSettings
|
||||
import org.oxycblt.auxio.playback.queue.Queue
|
||||
|
@ -285,7 +286,7 @@ constructor(
|
|||
// Populate MediaMetadataCompat. For efficiency, cache some fields that are re-used
|
||||
// several times.
|
||||
val title = song.resolveName(context)
|
||||
val artist = song.resolveArtistContents(context)
|
||||
val artist = song.artists.resolveNames(context)
|
||||
val builder =
|
||||
MediaMetadataCompat.Builder()
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_TITLE, title)
|
||||
|
@ -295,14 +296,14 @@ constructor(
|
|||
.putText(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
|
||||
.putText(
|
||||
MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST,
|
||||
song.album.resolveArtistContents(context))
|
||||
song.album.artists.resolveNames(context))
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_AUTHOR, artist)
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_COMPOSER, artist)
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_WRITER, artist)
|
||||
.putText(
|
||||
METADATA_KEY_PARENT,
|
||||
parent?.resolveName(context) ?: context.getString(R.string.lbl_all_songs))
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_GENRE, song.resolveGenreContents(context))
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_GENRE, song.genres.resolveNames(context))
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, title)
|
||||
.putText(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, artist)
|
||||
.putText(
|
||||
|
@ -348,7 +349,7 @@ constructor(
|
|||
// as it's used to request a song to be played from the queue.
|
||||
.setMediaId(song.uid.toString())
|
||||
.setTitle(song.resolveName(context))
|
||||
.setSubtitle(song.resolveArtistContents(context))
|
||||
.setSubtitle(song.artists.resolveNames(context))
|
||||
// Since we usually have to load many songs into the queue, use the
|
||||
// MediaStore URI instead of loading a bitmap.
|
||||
.setIconUri(song.album.coverUri)
|
||||
|
|
|
@ -39,6 +39,7 @@ import androidx.core.content.ContextCompat
|
|||
import kotlin.reflect.KClass
|
||||
import org.oxycblt.auxio.IntegerTable
|
||||
import org.oxycblt.auxio.MainActivity
|
||||
import org.oxycblt.auxio.R
|
||||
|
||||
/**
|
||||
* Get a [LayoutInflater] instance from this [Context].
|
||||
|
@ -57,6 +58,25 @@ val Context.isNight
|
|||
val Context.isLandscape
|
||||
get() = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
|
||||
|
||||
/**
|
||||
* Concatenate values in a list together in a localized manner.
|
||||
* @param context [Context] require.d
|
||||
* @param map Function to map the [T] values to a string value to be concatenated.
|
||||
*/
|
||||
inline fun <T> List<T>.concatLocalized(context: Context, map: (T) -> String): String {
|
||||
if (isEmpty()) {
|
||||
// Nothing to do.
|
||||
return ""
|
||||
}
|
||||
|
||||
var joined = map(first())
|
||||
for (i in 1..lastIndex) {
|
||||
// Chain all previous values with the next value in the list with another delimiter.
|
||||
joined = context.getString(R.string.fmt_list, joined, map(get(i)))
|
||||
}
|
||||
return joined
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get a plural resource.
|
||||
* @param pluralRes A plural resource ID.
|
||||
|
|
|
@ -31,6 +31,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||
import javax.inject.Inject
|
||||
import org.oxycblt.auxio.BuildConfig
|
||||
import org.oxycblt.auxio.R
|
||||
import org.oxycblt.auxio.music.resolveNames
|
||||
import org.oxycblt.auxio.playback.state.RepeatMode
|
||||
import org.oxycblt.auxio.playback.system.PlaybackService
|
||||
import org.oxycblt.auxio.ui.UISettings
|
||||
|
@ -265,7 +266,7 @@ class WidgetProvider : AppWidgetProvider() {
|
|||
): RemoteViews {
|
||||
setupCover(context, state)
|
||||
setTextViewText(R.id.widget_song, state.song.resolveName(context))
|
||||
setTextViewText(R.id.widget_artist, state.song.resolveArtistContents(context))
|
||||
setTextViewText(R.id.widget_artist, state.song.artists.resolveNames(context))
|
||||
return this
|
||||
}
|
||||
|
||||
|
|
|
@ -1,153 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<org.oxycblt.auxio.list.recycler.DialogRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/detail_properties"
|
||||
style="@style/Widget.Auxio.RecyclerView.Linear"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
style="@style/Widget.Auxio.Dialog.NestedScrollView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:animateLayoutChanges="true">
|
||||
|
||||
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
android:id="@+id/detail_loading"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:indeterminate="true"
|
||||
android:paddingStart="@dimen/spacing_large"
|
||||
android:paddingEnd="@dimen/spacing_large"
|
||||
app:indeterminateAnimationType="disjoint" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/detail_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingStart="@dimen/spacing_large"
|
||||
android:paddingEnd="@dimen/spacing_large">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/lbl_file_name"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/detail_file_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="file.mp3" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/spacing_mid_medium"
|
||||
android:hint="@string/lbl_relative_path"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/detail_relative_dir"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="/path/to" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/spacing_mid_medium"
|
||||
android:hint="@string/lbl_format"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/detail_format"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="MP3" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/spacing_mid_medium"
|
||||
android:hint="@string/lbl_size"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/detail_size"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="16 MB" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/spacing_mid_medium"
|
||||
android:hint="@string/lbl_sort_duration"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/detail_duration"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="3:20" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/spacing_mid_medium"
|
||||
android:hint="@string/lbl_bitrate"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/detail_bitrate"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="320 kb/s" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/spacing_mid_medium"
|
||||
android:hint="@string/lbl_sample_rate"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/detail_sample_rate"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="44100 Hz" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
|
||||
</FrameLayout>
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingStart="@dimen/spacing_small"
|
||||
android:paddingEnd="@dimen/spacing_small"
|
||||
tools:listitem="@layout/item_song_property" />
|
||||
|
|
22
app/src/main/res/layout/item_song_property.xml
Normal file
22
app/src/main/res/layout/item_song_property.xml
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.textfield.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/property_name"
|
||||
android:paddingStart="@dimen/spacing_medium"
|
||||
android:paddingEnd="@dimen/spacing_medium"
|
||||
android:paddingTop="@dimen/spacing_small"
|
||||
android:paddingBottom="@dimen/spacing_small"
|
||||
tools:hint="@string/lbl_file_name"
|
||||
app:expandedHintEnabled="false">
|
||||
|
||||
<org.oxycblt.auxio.detail.ReadOnlyTextInput
|
||||
android:id="@+id/property_value"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAlignment="viewStart"
|
||||
tools:text="file.mp3" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
|
@ -4,10 +4,10 @@
|
|||
android:id="@+id/sort_modes">
|
||||
<item
|
||||
android:id="@+id/option_sort_disc"
|
||||
android:title="@string/lbl_sort_disc" />
|
||||
android:title="@string/lbl_disc" />
|
||||
<item
|
||||
android:id="@+id/option_sort_track"
|
||||
android:title="@string/lbl_sort_track" />
|
||||
android:title="@string/lbl_track" />
|
||||
</group>
|
||||
<group android:checkableBehavior="single"
|
||||
android:id="@+id/sort_direction">
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
android:id="@+id/sort_modes">
|
||||
<item
|
||||
android:id="@+id/option_sort_name"
|
||||
android:title="@string/lbl_sort_name" />
|
||||
android:title="@string/lbl_name" />
|
||||
<item
|
||||
android:id="@+id/option_sort_album"
|
||||
android:title="@string/lbl_album" />
|
||||
<item
|
||||
android:id="@+id/option_sort_year"
|
||||
android:title="@string/lbl_sort_date" />
|
||||
android:title="@string/lbl_date" />
|
||||
<item
|
||||
android:id="@+id/option_sort_duration"
|
||||
android:title="@string/lbl_sort_duration" />
|
||||
android:title="@string/lbl_duration" />
|
||||
</group>
|
||||
<group android:checkableBehavior="single"
|
||||
android:id="@+id/sort_direction">
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
android:id="@+id/sort_modes">
|
||||
<item
|
||||
android:id="@+id/option_sort_name"
|
||||
android:title="@string/lbl_sort_name" />
|
||||
android:title="@string/lbl_name" />
|
||||
<item
|
||||
android:id="@+id/option_sort_artist"
|
||||
android:title="@string/lbl_artist" />
|
||||
|
@ -13,10 +13,10 @@
|
|||
android:title="@string/lbl_album" />
|
||||
<item
|
||||
android:id="@+id/option_sort_year"
|
||||
android:title="@string/lbl_sort_date" />
|
||||
android:title="@string/lbl_date" />
|
||||
<item
|
||||
android:id="@+id/option_sort_duration"
|
||||
android:title="@string/lbl_sort_duration" />
|
||||
android:title="@string/lbl_duration" />
|
||||
</group>
|
||||
<group android:checkableBehavior="single"
|
||||
android:id="@+id/sort_direction">
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
android:id="@+id/sort_modes">
|
||||
<item
|
||||
android:id="@+id/option_sort_name"
|
||||
android:title="@string/lbl_sort_name" />
|
||||
android:title="@string/lbl_name" />
|
||||
<item
|
||||
android:id="@+id/option_sort_artist"
|
||||
android:title="@string/lbl_artist" />
|
||||
|
@ -27,16 +27,16 @@
|
|||
android:title="@string/lbl_album" />
|
||||
<item
|
||||
android:id="@+id/option_sort_year"
|
||||
android:title="@string/lbl_sort_date" />
|
||||
android:title="@string/lbl_date" />
|
||||
<item
|
||||
android:id="@+id/option_sort_duration"
|
||||
android:title="@string/lbl_sort_duration" />
|
||||
android:title="@string/lbl_duration" />
|
||||
<item
|
||||
android:id="@+id/option_sort_count"
|
||||
android:title="@string/lbl_sort_count" />
|
||||
android:title="@string/lbl_song_count" />
|
||||
<item
|
||||
android:id="@+id/option_sort_date_added"
|
||||
android:title="@string/lbl_sort_date_added" />
|
||||
android:title="@string/lbl_date_added" />
|
||||
</group>
|
||||
<group android:checkableBehavior="single"
|
||||
android:id="@+id/sort_direction">
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
<string name="lbl_filter">تصفية</string>
|
||||
<string name="lbl_filter_all">الكل</string>
|
||||
<string name="lbl_sort">فرز</string>
|
||||
<string name="lbl_sort_name">اسم</string>
|
||||
<string name="lbl_name">اسم</string>
|
||||
<string name="lbl_artist">فنان</string>
|
||||
<string name="lbl_album">البوم</string>
|
||||
<string name="lbl_sort_date">سنة</string>
|
||||
<string name="lbl_date">سنة</string>
|
||||
<string name="lbl_sort_asc">تصاعدي</string>
|
||||
<string name="lbl_playback">يعمل الآن</string>
|
||||
<string name="lbl_play">تشغيل</string>
|
||||
|
|
|
@ -59,16 +59,16 @@
|
|||
<string name="lbl_search">Пошук</string>
|
||||
<string name="lbl_filter">Фільтр</string>
|
||||
<string name="lbl_filter_all">Усе</string>
|
||||
<string name="lbl_sort_name">Назва</string>
|
||||
<string name="lbl_name">Назва</string>
|
||||
<string name="lbl_genres">Жанры</string>
|
||||
<string name="lbl_sort">Сартаваць</string>
|
||||
<string name="lbl_sort_date_added">Дата дабаўлення</string>
|
||||
<string name="lbl_date_added">Дата дабаўлення</string>
|
||||
<string name="lbl_state_restored">Дзяржава адноўлена</string>
|
||||
<string name="lbl_sort_disc">Дыск</string>
|
||||
<string name="lbl_sort_date">Дата</string>
|
||||
<string name="lbl_sort_duration">Працягласць</string>
|
||||
<string name="lbl_sort_count">Колькасць песень</string>
|
||||
<string name="lbl_sort_track">Кампазіцыя</string>
|
||||
<string name="lbl_disc">Дыск</string>
|
||||
<string name="lbl_date">Дата</string>
|
||||
<string name="lbl_duration">Працягласць</string>
|
||||
<string name="lbl_song_count">Колькасць песень</string>
|
||||
<string name="lbl_track">Кампазіцыя</string>
|
||||
<string name="lbl_playback">Зараз іграе</string>
|
||||
<string name="lbl_play">Гуляць</string>
|
||||
<string name="lbl_shuffle">Ператасаваць</string>
|
||||
|
|
|
@ -17,14 +17,14 @@
|
|||
<string name="lbl_filter">Filtr</string>
|
||||
<string name="lbl_filter_all">Vše</string>
|
||||
<string name="lbl_sort">Řadit</string>
|
||||
<string name="lbl_sort_name">Název</string>
|
||||
<string name="lbl_name">Název</string>
|
||||
<string name="lbl_artist">Umělec</string>
|
||||
<string name="lbl_album">Album</string>
|
||||
<string name="lbl_sort_date">Rok</string>
|
||||
<string name="lbl_sort_duration">Trvání</string>
|
||||
<string name="lbl_sort_count">Počet skladeb</string>
|
||||
<string name="lbl_sort_disc">Disk</string>
|
||||
<string name="lbl_sort_track">Stopa</string>
|
||||
<string name="lbl_date">Rok</string>
|
||||
<string name="lbl_duration">Trvání</string>
|
||||
<string name="lbl_song_count">Počet skladeb</string>
|
||||
<string name="lbl_disc">Disk</string>
|
||||
<string name="lbl_track">Stopa</string>
|
||||
<string name="lbl_sort_asc">Vzestupně</string>
|
||||
<string name="lbl_playback">Právě hraje</string>
|
||||
<string name="lbl_play">Přehrát</string>
|
||||
|
@ -204,7 +204,7 @@
|
|||
<string name="lng_observing">Sledování změn v hudební knihovně…</string>
|
||||
<string name="set_observing_desc">Znovu načíst hudební knihovnu při změně (vyžaduje trvalé oznámení)</string>
|
||||
<string name="lbl_indexing">Načítání hudby</string>
|
||||
<string name="lbl_sort_date_added">Datum přidání</string>
|
||||
<string name="lbl_date_added">Datum přidání</string>
|
||||
<string name="lbl_single">Singl</string>
|
||||
<string name="lbl_singles">Singly</string>
|
||||
<string name="lbl_ep">EP</string>
|
||||
|
|
|
@ -119,7 +119,7 @@
|
|||
<string name="lng_widget">Musikwiedergabe anzeigen und kontrollieren</string>
|
||||
<string name="lbl_artist">Künstler</string>
|
||||
<string name="lbl_album">Album</string>
|
||||
<string name="lbl_sort_date">Jahr</string>
|
||||
<string name="lbl_date">Jahr</string>
|
||||
<string name="set_black_mode">Schwarzes Farbschema</string>
|
||||
<string name="set_black_mode_desc">Ein rein schwarzes dunkles Farbschema verwenden</string>
|
||||
<string name="set_repeat_pause">Pause bei Wiederholung</string>
|
||||
|
@ -131,15 +131,15 @@
|
|||
<string name="def_playback">Keine Musik wird gespielt</string>
|
||||
<string name="set_lib_tabs">Bibliotheks-Registerkarten</string>
|
||||
<string name="set_lib_tabs_desc">Sichtbarkeit und Ordnung der Bibliotheksregisterkarten ändern</string>
|
||||
<string name="lbl_sort_name">Name</string>
|
||||
<string name="lbl_name">Name</string>
|
||||
<string name="desc_shuffle_all">Alle Lieder zufällig</string>
|
||||
<string name="desc_clear_queue_item">Lied in der Warteschlange löschen</string>
|
||||
<string name="desc_tab_handle">Tab versetzen</string>
|
||||
<string name="def_artist">Unbekannter Künstler</string>
|
||||
<string name="lbl_sort_duration">Dauer</string>
|
||||
<string name="lbl_sort_count">Anzahl der Lieder</string>
|
||||
<string name="lbl_sort_disc">Schallplatte</string>
|
||||
<string name="lbl_sort_track">Titel</string>
|
||||
<string name="lbl_duration">Dauer</string>
|
||||
<string name="lbl_song_count">Anzahl der Lieder</string>
|
||||
<string name="lbl_disc">Schallplatte</string>
|
||||
<string name="lbl_track">Titel</string>
|
||||
<string name="lbl_ok">OK</string>
|
||||
<string name="lbl_library_counts">Bibliotheksstatistiken</string>
|
||||
<string name="set_replay_gain_mode_dynamic">Album bevorzugen, wenn eines abgespielt wird</string>
|
||||
|
@ -190,7 +190,7 @@
|
|||
<string name="lbl_observing">Überwachen der Musikbibliothek</string>
|
||||
<string name="lbl_indexing">Musik wird geladen</string>
|
||||
<string name="lng_observing">Musikbibliothek wird auf Änderungen überwacht…</string>
|
||||
<string name="lbl_sort_date_added">Hinzugefügt am</string>
|
||||
<string name="lbl_date_added">Hinzugefügt am</string>
|
||||
<string name="set_observing_desc">Musikbibliothek neu laden, sobald es Änderungen gibt (erfordert persistente Benachrichtigung)</string>
|
||||
<string name="set_observing">Automatisch neuladen</string>
|
||||
<string name="lbl_state_restored">Zustand wiederhergestellt</string>
|
||||
|
|
|
@ -68,13 +68,13 @@
|
|||
<string name="fmt_db_pos">+%.1f dB</string>
|
||||
<string name="fmt_indexing">Φόρτωση της συλλογής μουσικής σας… (%1$d/%2$d)</string>
|
||||
<string name="fmt_lib_genre_count">Είδη που φορτώθηκαν: %d</string>
|
||||
<string name="lbl_sort_count">Αριθμός τραγουδιών</string>
|
||||
<string name="lbl_song_count">Αριθμός τραγουδιών</string>
|
||||
<string name="err_bad_dir">Αυτός ο φάκελος δεν υποστηρίζεται</string>
|
||||
<string name="fmt_disc_no">Δίσκος %d</string>
|
||||
<string name="fmt_lib_album_count">Album που φορτώθηκαν: %d</string>
|
||||
<string name="fmt_lib_artist_count">Καλλιτέχνες που φορτώθηκαν: %d</string>
|
||||
<string name="lbl_sort_date">Έτος</string>
|
||||
<string name="lbl_sort_disc">Δίσκος</string>
|
||||
<string name="lbl_date">Έτος</string>
|
||||
<string name="lbl_disc">Δίσκος</string>
|
||||
<string name="err_no_music">Δεν βρέθηκε καθόλου μουσική</string>
|
||||
<string name="err_index_failed">Η φόρτωση μουσικής απέτυχε</string>
|
||||
<string name="fmt_bitrate">%d kbps</string>
|
||||
|
@ -93,8 +93,8 @@
|
|||
<string name="lbl_genre">Είδος</string>
|
||||
<string name="fmt_db_neg">-%.1f dB</string>
|
||||
<string name="fmt_sample_rate">%d Hz</string>
|
||||
<string name="lbl_sort_name">Όνομα</string>
|
||||
<string name="lbl_sort_duration">Διάρκεια</string>
|
||||
<string name="lbl_name">Όνομα</string>
|
||||
<string name="lbl_duration">Διάρκεια</string>
|
||||
<string name="fmt_lib_total_duration">Συνολική διάρκεια: %s</string>
|
||||
<string name="err_no_dirs">Καθόλου φάκελοι</string>
|
||||
<string name="info_app_desc">Μιά απλή, λογική εφαρμογή αναπαραγωγής μουσικής για Android.</string>
|
||||
|
@ -104,7 +104,7 @@
|
|||
<string name="lbl_eps">EP</string>
|
||||
<string name="lbl_ep">EP</string>
|
||||
<string name="lbl_artist">Καλλιτέχνης</string>
|
||||
<string name="lbl_sort_date_added">Ημερομηνία πρόσθεσης</string>
|
||||
<string name="lbl_date_added">Ημερομηνία πρόσθεσης</string>
|
||||
<string name="lbl_format">Μορφή</string>
|
||||
<string name="set_content">Περιεχομένο</string>
|
||||
<string name="lbl_shuffle_shortcut_long">Tυχαία αναπαραγωγή όλων</string>
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
<string name="lbl_filter">Filtrar</string>
|
||||
<string name="lbl_filter_all">Todo</string>
|
||||
<string name="lbl_sort">Organizar</string>
|
||||
<string name="lbl_sort_name">Nombre</string>
|
||||
<string name="lbl_name">Nombre</string>
|
||||
<string name="lbl_artist">Artista</string>
|
||||
<string name="lbl_album">Álbum</string>
|
||||
<string name="lbl_sort_date">Año</string>
|
||||
<string name="lbl_date">Año</string>
|
||||
<string name="lbl_sort_asc">Ascendente</string>
|
||||
<string name="lbl_playback">En reproducción</string>
|
||||
<string name="lbl_play">Reproducir</string>
|
||||
|
@ -139,9 +139,9 @@
|
|||
<string name="lbl_size">Tamaño</string>
|
||||
<string name="lbl_format">Formato</string>
|
||||
<string name="lbl_bitrate">Tasa de bits</string>
|
||||
<string name="lbl_sort_duration">Duración</string>
|
||||
<string name="lbl_sort_track">Pista</string>
|
||||
<string name="lbl_sort_disc">Disco</string>
|
||||
<string name="lbl_duration">Duración</string>
|
||||
<string name="lbl_track">Pista</string>
|
||||
<string name="lbl_disc">Disco</string>
|
||||
<string name="lbl_song_detail">Ver propiedades</string>
|
||||
<string name="lbl_shuffle_shortcut_short">Mezclar</string>
|
||||
<string name="lbl_shuffle_shortcut_long">Mezclar todo</string>
|
||||
|
@ -163,7 +163,7 @@
|
|||
<string name="fmt_lib_artist_count">Artistas cargados: %d</string>
|
||||
<string name="fmt_lib_genre_count">Géneros cargados: %d</string>
|
||||
<string name="lbl_indexer">Carga de música</string>
|
||||
<string name="lbl_sort_count">Número de canciones</string>
|
||||
<string name="lbl_song_count">Número de canciones</string>
|
||||
<string name="lbl_state_restored">Estado restaurado</string>
|
||||
<string name="set_observing">Recarga automática</string>
|
||||
<string name="set_observing_desc">Recargar la biblioteca musical cada vez que cambie (requiere una notificación persistente)</string>
|
||||
|
@ -174,7 +174,7 @@
|
|||
<string name="lng_observing">Monitorizando cambios en tu librería de música…</string>
|
||||
<string name="cdc_ogg">Audio ogg</string>
|
||||
<string name="set_detail_song_playback_mode">Cuando se reproduce desde los detalles</string>
|
||||
<string name="lbl_sort_date_added">Fecha de añadido</string>
|
||||
<string name="lbl_date_added">Fecha de añadido</string>
|
||||
<string name="lbl_props">Propiedades de la canción</string>
|
||||
<string name="lbl_sample_rate">Frecuencia de muestreo</string>
|
||||
<string name="lbl_cancel">Cancelar</string>
|
||||
|
|
|
@ -19,10 +19,10 @@
|
|||
<string name="lbl_single_remix">Remix single</string>
|
||||
<string name="lbl_compilations">Mga Compilation</string>
|
||||
<string name="lbl_sort">Ayusin</string>
|
||||
<string name="lbl_sort_name">Pangalan</string>
|
||||
<string name="lbl_sort_date">Taon</string>
|
||||
<string name="lbl_sort_duration">Tagal</string>
|
||||
<string name="lbl_sort_count">Bilang ng kanta</string>
|
||||
<string name="lbl_name">Pangalan</string>
|
||||
<string name="lbl_date">Taon</string>
|
||||
<string name="lbl_duration">Tagal</string>
|
||||
<string name="lbl_song_count">Bilang ng kanta</string>
|
||||
<string name="lbl_compilation">Compilation</string>
|
||||
<string name="lbl_soundtracks">Mga Soundtrack</string>
|
||||
<string name="lbl_soundtrack">Soundtrack</string>
|
||||
|
@ -32,8 +32,8 @@
|
|||
<string name="lbl_artists">Mga Artista</string>
|
||||
<string name="lbl_filter">Salain</string>
|
||||
<string name="lbl_filter_all">Lahat</string>
|
||||
<string name="lbl_sort_disc">Disko</string>
|
||||
<string name="lbl_sort_date_added">Petsa ng pagdagdag</string>
|
||||
<string name="lbl_disc">Disko</string>
|
||||
<string name="lbl_date_added">Petsa ng pagdagdag</string>
|
||||
<string name="lbl_sort_asc">Pataas</string>
|
||||
<string name="lbl_playback">Tinutugtog Ngayon</string>
|
||||
<string name="lbl_play">Tugtugin</string>
|
||||
|
|
|
@ -95,14 +95,14 @@
|
|||
<string name="lbl_indexer">Chargement de musique</string>
|
||||
<string name="lng_widget">Afficher et contrôler la lecture de la musique</string>
|
||||
<string name="lng_indexing">Chargement de votre bibliothèque musicale…</string>
|
||||
<string name="lbl_sort_name">Nom</string>
|
||||
<string name="lbl_name">Nom</string>
|
||||
<string name="lbl_artist">Artiste</string>
|
||||
<string name="lbl_album">Album</string>
|
||||
<string name="lbl_sort_date">Année</string>
|
||||
<string name="lbl_sort_duration">Durée</string>
|
||||
<string name="lbl_sort_count">Nombre de chansons</string>
|
||||
<string name="lbl_sort_disc">Disque</string>
|
||||
<string name="lbl_sort_track">Piste</string>
|
||||
<string name="lbl_date">Année</string>
|
||||
<string name="lbl_duration">Durée</string>
|
||||
<string name="lbl_song_count">Nombre de chansons</string>
|
||||
<string name="lbl_disc">Disque</string>
|
||||
<string name="lbl_track">Piste</string>
|
||||
<string name="lbl_song_detail">Voir les propriétés</string>
|
||||
<string name="lbl_props">Propriétés de la chanson</string>
|
||||
<string name="lbl_ep_live">EP live</string>
|
||||
|
@ -123,7 +123,7 @@
|
|||
<string name="lbl_mixtapes">Mixtapes</string>
|
||||
<string name="lbl_mixtape">Mixtape</string>
|
||||
<string name="lbl_remix_group">Remix</string>
|
||||
<string name="lbl_sort_date_added">Date d\'ajout</string>
|
||||
<string name="lbl_date_added">Date d\'ajout</string>
|
||||
<string name="lbl_album_live">Album live</string>
|
||||
<string name="lbl_album_remix">Album de remixes</string>
|
||||
<string name="lbl_genre">Genre</string>
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<item quantity="one">%d एल्बम</item>
|
||||
<item quantity="other">%d एल्बम</item>
|
||||
</plurals>
|
||||
<string name="lbl_sort_name">नाम</string>
|
||||
<string name="lbl_name">नाम</string>
|
||||
<string name="lbl_genre">शैली</string>
|
||||
<string name="lbl_playback">अब खेल रहे हैं</string>
|
||||
<string name="lbl_compilation">संकलन</string>
|
||||
|
@ -55,5 +55,5 @@
|
|||
<string name="lbl_size">आकार</string>
|
||||
<string name="lbl_ok">ठीक है</string>
|
||||
<string name="lbl_artist">कलाकार</string>
|
||||
<string name="lbl_sort_date_added">तिथि जोड़ी गई</string>
|
||||
<string name="lbl_date_added">तिथि जोड़ी गई</string>
|
||||
</resources>
|
|
@ -26,13 +26,13 @@
|
|||
<string name="lbl_artists">Izvođači</string>
|
||||
<string name="lbl_genres">Žanrovi</string>
|
||||
<string name="lbl_sort">Sortiraj</string>
|
||||
<string name="lbl_sort_name">Naziv</string>
|
||||
<string name="lbl_sort_date">Godina</string>
|
||||
<string name="lbl_sort_duration">Trajanje</string>
|
||||
<string name="lbl_sort_count">Broj pjesama</string>
|
||||
<string name="lbl_sort_disc">Disk</string>
|
||||
<string name="lbl_sort_track">Zvučni zapis</string>
|
||||
<string name="lbl_sort_date_added">Datum dodavanja</string>
|
||||
<string name="lbl_name">Naziv</string>
|
||||
<string name="lbl_date">Godina</string>
|
||||
<string name="lbl_duration">Trajanje</string>
|
||||
<string name="lbl_song_count">Broj pjesama</string>
|
||||
<string name="lbl_disc">Disk</string>
|
||||
<string name="lbl_track">Zvučni zapis</string>
|
||||
<string name="lbl_date_added">Datum dodavanja</string>
|
||||
<string name="lbl_sort_asc">Uzlazno</string>
|
||||
<string name="lbl_playback">Trenutačno svira</string>
|
||||
<string name="lbl_play">Reproduciraj</string>
|
||||
|
|
|
@ -70,15 +70,15 @@
|
|||
<string name="lbl_sample_rate">Tingkat sampel</string>
|
||||
<string name="set_lib_tabs">Tab Pustaka</string>
|
||||
<string name="lng_indexing">Memuat pustaka musik Anda…</string>
|
||||
<string name="lbl_sort_name">Nama</string>
|
||||
<string name="lbl_name">Nama</string>
|
||||
<string name="lbl_artist">Artis</string>
|
||||
<string name="lbl_album">Album</string>
|
||||
<string name="info_app_desc">Pemutar musik yang sederhana dan rasional untuk android.</string>
|
||||
<string name="lbl_indexer">Pemuatan musik</string>
|
||||
<string name="lng_widget">Lihat dan kendalikan pemutaran musik</string>
|
||||
<string name="lbl_sort_date">Tanggal</string>
|
||||
<string name="lbl_sort_duration">Durasi</string>
|
||||
<string name="lbl_sort_disc">Disk</string>
|
||||
<string name="lbl_date">Tanggal</string>
|
||||
<string name="lbl_duration">Durasi</string>
|
||||
<string name="lbl_disc">Disk</string>
|
||||
<string name="lbl_song_detail">Lihat properti</string>
|
||||
<string name="lbl_format">Format</string>
|
||||
<string name="lng_author">Dikembangkan oleh Alexander Capehart</string>
|
||||
|
@ -179,8 +179,8 @@
|
|||
<string name="clr_green">Hijau</string>
|
||||
<string name="clr_orange">Jingga</string>
|
||||
<string name="fmt_lib_genre_count">Genre yang dimuat: %d</string>
|
||||
<string name="lbl_sort_count">Jumlah lagu</string>
|
||||
<string name="lbl_sort_track">Trek</string>
|
||||
<string name="lbl_song_count">Jumlah lagu</string>
|
||||
<string name="lbl_track">Trek</string>
|
||||
<string name="clr_pink">Merah muda</string>
|
||||
<string name="set_replay_gain">ReplayGain</string>
|
||||
<string name="set_observing">Muat ulang otomatis</string>
|
||||
|
@ -192,7 +192,7 @@
|
|||
<string name="set_round_mode_desc">Aktifkan sudut yang bundar pada elemen UI tambahan (mewajibkan sampul album bersudut bundar)</string>
|
||||
<string name="set_separators_comma">Koma (,)</string>
|
||||
<string name="set_separators_plus">Tambah (+)</string>
|
||||
<string name="lbl_sort_date_added">Tanggal ditambahkan</string>
|
||||
<string name="lbl_date_added">Tanggal ditambahkan</string>
|
||||
<string name="set_cover_mode_quality">Kualitas tinggi</string>
|
||||
<string name="set_separators_semicolon">Titik koma (;)</string>
|
||||
<string name="lbl_wiki">Wiki</string>
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
<string name="lbl_filter">Filtro</string>
|
||||
<string name="lbl_filter_all">Tutto</string>
|
||||
<string name="lbl_sort">Ordine</string>
|
||||
<string name="lbl_sort_name">Nome</string>
|
||||
<string name="lbl_name">Nome</string>
|
||||
<string name="lbl_artist">Artista</string>
|
||||
<string name="lbl_album">Disco</string>
|
||||
<string name="lbl_sort_date">Anno</string>
|
||||
<string name="lbl_date">Anno</string>
|
||||
<string name="lbl_sort_asc">Ascendente</string>
|
||||
<string name="lbl_playback">Ora in riproduzione</string>
|
||||
<string name="lbl_play">Riproduci</string>
|
||||
|
@ -175,10 +175,10 @@
|
|||
<string name="fmt_db_neg">-%.1f dB</string>
|
||||
<string name="lbl_indexer">Caricamento musica</string>
|
||||
<string name="lng_indexing">Caricamento libreria musicale…</string>
|
||||
<string name="lbl_sort_duration">Durata</string>
|
||||
<string name="lbl_sort_count">Numero canzoni</string>
|
||||
<string name="lbl_sort_disc">Disco</string>
|
||||
<string name="lbl_sort_track">Traccia</string>
|
||||
<string name="lbl_duration">Durata</string>
|
||||
<string name="lbl_song_count">Numero canzoni</string>
|
||||
<string name="lbl_disc">Disco</string>
|
||||
<string name="lbl_track">Traccia</string>
|
||||
<string name="lbl_ok">OK</string>
|
||||
<string name="lbl_sample_rate">Frequenza di campionamento</string>
|
||||
<string name="lbl_song_detail">Vedi proprietà</string>
|
||||
|
@ -196,7 +196,7 @@
|
|||
<string name="lbl_indexing">Caricamento musica</string>
|
||||
<string name="lbl_observing">Monitoraggio libreria musicale</string>
|
||||
<string name="lbl_state_restored">Stato ripristinato</string>
|
||||
<string name="lbl_sort_date_added">Data aggiunta</string>
|
||||
<string name="lbl_date_added">Data aggiunta</string>
|
||||
<string name="set_observing">Ricaricamento automatico</string>
|
||||
<string name="set_restore_state">Ripristina stato riproduzione</string>
|
||||
<string name="set_restore_desc">Ripristina lo stato di riproduzione precedentemente salvato (se disponibile)</string>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<string name="lbl_grant">許可する</string>
|
||||
<string name="lbl_artists">アーティスト</string>
|
||||
<string name="lbl_genres">ジャンル</string>
|
||||
<string name="lbl_sort_duration">曲の長さ</string>
|
||||
<string name="lbl_duration">曲の長さ</string>
|
||||
<string name="set_save_desc">現在の再生状態を保存</string>
|
||||
<string name="desc_tab_handle">このタブを移動</string>
|
||||
<string name="desc_queue_handle">この再生待ちの曲を移動</string>
|
||||
|
@ -13,8 +13,8 @@
|
|||
<string name="lbl_songs">曲</string>
|
||||
<string name="lbl_all_songs">すべての曲</string>
|
||||
<string name="lbl_sort">並べ替え</string>
|
||||
<string name="lbl_sort_name">曲名</string>
|
||||
<string name="lbl_sort_count">再生回数</string>
|
||||
<string name="lbl_name">曲名</string>
|
||||
<string name="lbl_song_count">再生回数</string>
|
||||
<string name="lbl_cancel">キャンセル</string>
|
||||
<string name="lbl_shuffle_shortcut_short">シャフル</string>
|
||||
<string name="set_theme_auto">自動</string>
|
||||
|
@ -24,7 +24,7 @@
|
|||
<string name="set_keep_shuffle">シャフルを記憶</string>
|
||||
<string name="set_repeat_pause_desc">曲の繰り返し時にポーズ</string>
|
||||
<string name="desc_clear_search">検索クエリを解除</string>
|
||||
<string name="lbl_sort_date">日付け</string>
|
||||
<string name="lbl_date">日付け</string>
|
||||
<string name="set_cover_mode_quality">高クオリティ</string>
|
||||
<string name="set_round_mode">ラウンドモード</string>
|
||||
<string name="err_no_music">音楽が見つかりません</string>
|
||||
|
@ -46,9 +46,9 @@
|
|||
<string name="lbl_compilation_remix">リミックスオムニバス</string>
|
||||
<string name="lbl_mixes">DJミックス</string>
|
||||
<string name="lbl_mix">DJミックス</string>
|
||||
<string name="lbl_sort_disc">ディスク</string>
|
||||
<string name="lbl_disc">ディスク</string>
|
||||
<string name="lbl_equalizer">イコライザ</string>
|
||||
<string name="lbl_sort_track">トラック</string>
|
||||
<string name="lbl_track">トラック</string>
|
||||
<string name="lbl_sort_asc">昇順</string>
|
||||
<string name="lbl_playback">再生中</string>
|
||||
<string name="set_accent">カラースキーム</string>
|
||||
|
@ -58,7 +58,7 @@
|
|||
<string name="desc_exit">再生停止</string>
|
||||
<string name="clr_red">赤</string>
|
||||
<string name="lbl_file_name">ファイル名</string>
|
||||
<string name="lbl_sort_date_added">追加した日付け</string>
|
||||
<string name="lbl_date_added">追加した日付け</string>
|
||||
<string name="lbl_sample_rate">サンプルレート</string>
|
||||
<string name="lbl_sort_dec">降順</string>
|
||||
<string name="lbl_play">再生</string>
|
||||
|
|
|
@ -15,14 +15,14 @@
|
|||
<string name="lbl_filter">필터</string>
|
||||
<string name="lbl_filter_all">전체</string>
|
||||
<string name="lbl_sort">정렬</string>
|
||||
<string name="lbl_sort_name">제목</string>
|
||||
<string name="lbl_name">제목</string>
|
||||
<string name="lbl_artist">아티스트</string>
|
||||
<string name="lbl_album">앨범</string>
|
||||
<string name="lbl_sort_date">연도</string>
|
||||
<string name="lbl_sort_duration">길이</string>
|
||||
<string name="lbl_sort_count">곡 수</string>
|
||||
<string name="lbl_sort_disc">디스크</string>
|
||||
<string name="lbl_sort_track">트랙</string>
|
||||
<string name="lbl_date">연도</string>
|
||||
<string name="lbl_duration">길이</string>
|
||||
<string name="lbl_song_count">곡 수</string>
|
||||
<string name="lbl_disc">디스크</string>
|
||||
<string name="lbl_track">트랙</string>
|
||||
<string name="lbl_sort_asc">오름차순</string>
|
||||
<string name="lbl_playback">지금 재생 중</string>
|
||||
<string name="lbl_play">재생</string>
|
||||
|
@ -196,7 +196,7 @@
|
|||
<string name="def_bitrate">전송속도 없음</string>
|
||||
<string name="def_sample_rate">샘플 속도 없음</string>
|
||||
<string name="cdc_mp3">MPEG-1 오디오</string>
|
||||
<string name="lbl_sort_date_added">추가된 날짜</string>
|
||||
<string name="lbl_date_added">추가된 날짜</string>
|
||||
<string name="lbl_relative_path">상위 경로</string>
|
||||
<string name="set_bar_action">맞춤형 재생 동작 버튼</string>
|
||||
<string name="set_action_mode_repeat">반복 방식</string>
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
<string name="lbl_filter">Filtruoti</string>
|
||||
<string name="lbl_filter_all">Visos</string>
|
||||
<string name="lbl_sort">Rūšiuoti</string>
|
||||
<string name="lbl_sort_name">Pavadinimas</string>
|
||||
<string name="lbl_sort_date">Metai</string>
|
||||
<string name="lbl_sort_duration">Trukmė</string>
|
||||
<string name="lbl_sort_count">Dainų skaičius</string>
|
||||
<string name="lbl_sort_disc">Diskas</string>
|
||||
<string name="lbl_sort_date_added">Pridėta data</string>
|
||||
<string name="lbl_name">Pavadinimas</string>
|
||||
<string name="lbl_date">Metai</string>
|
||||
<string name="lbl_duration">Trukmė</string>
|
||||
<string name="lbl_song_count">Dainų skaičius</string>
|
||||
<string name="lbl_disc">Diskas</string>
|
||||
<string name="lbl_date_added">Pridėta data</string>
|
||||
<string name="lbl_sort_asc">Kylantis</string>
|
||||
<string name="lbl_play_next">Groti kitą</string>
|
||||
<string name="lbl_queue_add">Pridėti į eilę</string>
|
||||
|
@ -29,7 +29,7 @@
|
|||
<string name="set_black_mode">Juodoji tema</string>
|
||||
<string name="lbl_artists">Atlikėjai</string>
|
||||
<string name="lbl_albums">Albumai</string>
|
||||
<string name="lbl_sort_track">Takelis</string>
|
||||
<string name="lbl_track">Takelis</string>
|
||||
<string name="lbl_playback">Dabar groja</string>
|
||||
<string name="lbl_play">Groti</string>
|
||||
<string name="lbl_licenses">Licencijos</string>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<string name="def_artist">അജ്ഞാത കലാകാരൻ</string>
|
||||
<string name="clr_grey">ചാരനിറം</string>
|
||||
<string name="lbl_single">ഒറ്റയായ</string>
|
||||
<string name="lbl_sort_date">തീയതി</string>
|
||||
<string name="lbl_date">തീയതി</string>
|
||||
<string name="lbl_all_songs">എല്ലാ പാട്ടുകളും</string>
|
||||
<string name="lbl_artist">കലാകാരൻ</string>
|
||||
<string name="lbl_artists">കലാകാരന്മാർ</string>
|
||||
|
@ -17,8 +17,8 @@
|
|||
<string name="lbl_genre">വിഭാഗം</string>
|
||||
<string name="lbl_search">തിരയുക</string>
|
||||
<string name="lbl_sort">അടുക്കുക</string>
|
||||
<string name="lbl_sort_name">പേര്</string>
|
||||
<string name="lbl_sort_duration">ദൈർഘ്യം</string>
|
||||
<string name="lbl_name">പേര്</string>
|
||||
<string name="lbl_duration">ദൈർഘ്യം</string>
|
||||
<string name="lbl_props">പാട്ടിന്റെ സവിശേഷതകൾ</string>
|
||||
<string name="lbl_filter_all">എല്ലാം</string>
|
||||
<string name="lbl_play_next">അടുത്തത് കളിക്കുക</string>
|
||||
|
@ -78,8 +78,8 @@
|
|||
<string name="lbl_retry">വീണ്ടും ശ്രമിക്കുക</string>
|
||||
<string name="lbl_grant">അനുവദിക്കുക</string>
|
||||
<string name="lbl_songs">ഗാനങ്ങൾ</string>
|
||||
<string name="lbl_sort_count">പാട്ടുകളുടെ എണ്ണം</string>
|
||||
<string name="lbl_sort_date_added">തീയതി ചേർത്തു</string>
|
||||
<string name="lbl_song_count">പാട്ടുകളുടെ എണ്ണം</string>
|
||||
<string name="lbl_date_added">തീയതി ചേർത്തു</string>
|
||||
<string name="lbl_sort_asc">ആരോഹണം</string>
|
||||
<string name="lbl_playback">ഇപ്പോൾ കളിക്കുന്നു</string>
|
||||
<string name="lbl_play">കളിക്കുക</string>
|
||||
|
|
|
@ -116,11 +116,11 @@
|
|||
<string name="lng_widget">Muziekweergave bekijken en regelen</string>
|
||||
<string name="fmt_sample_rate">%d Hz</string>
|
||||
<string name="lbl_song_detail">Bekijk eigenschappen</string>
|
||||
<string name="lbl_sort_name">Naam</string>
|
||||
<string name="lbl_name">Naam</string>
|
||||
<string name="lbl_artist">Artiest</string>
|
||||
<string name="lbl_cancel">@android:string/cancel</string>
|
||||
<string name="set_lib_tabs">Bibliotheek tabbladen</string>
|
||||
<string name="lbl_sort_date">Jaar</string>
|
||||
<string name="lbl_date">Jaar</string>
|
||||
<string name="lbl_relative_path">Ouderpad</string>
|
||||
<string name="lbl_props">Lied eigenschappen</string>
|
||||
<string name="lbl_file_name">Bestandsnaam</string>
|
||||
|
@ -181,10 +181,10 @@
|
|||
<string name="fmt_lib_genre_count">Genres geladen: %d</string>
|
||||
<string name="lbl_indexer">Muziek aan het laden</string>
|
||||
<string name="lbl_album">Album</string>
|
||||
<string name="lbl_sort_duration">Looptijd</string>
|
||||
<string name="lbl_sort_count">Aantal Liedjes</string>
|
||||
<string name="lbl_sort_disc">Disc</string>
|
||||
<string name="lbl_sort_track">Titel</string>
|
||||
<string name="lbl_duration">Looptijd</string>
|
||||
<string name="lbl_song_count">Aantal Liedjes</string>
|
||||
<string name="lbl_disc">Disc</string>
|
||||
<string name="lbl_track">Titel</string>
|
||||
<string name="lbl_format">Formaat</string>
|
||||
<string name="lbl_size">Grootte</string>
|
||||
<string name="lbl_bitrate">Bitsnelheid</string>
|
||||
|
|
|
@ -38,12 +38,12 @@
|
|||
<string name="lbl_filter">ਫਿਲਟਰ</string>
|
||||
<string name="lbl_filter_all">ਸਾਰੇ</string>
|
||||
<string name="lbl_sort">ਲੜੀਬੱਧ</string>
|
||||
<string name="lbl_sort_name">ਨਾਮ</string>
|
||||
<string name="lbl_sort_date">ਮਿਤੀ</string>
|
||||
<string name="lbl_sort_duration">ਮਿਆਦ</string>
|
||||
<string name="lbl_sort_disc">ਡਿਸਕ</string>
|
||||
<string name="lbl_sort_track">ਟਰੈਕ</string>
|
||||
<string name="lbl_sort_date_added">ਮਿਤੀ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ</string>
|
||||
<string name="lbl_name">ਨਾਮ</string>
|
||||
<string name="lbl_date">ਮਿਤੀ</string>
|
||||
<string name="lbl_duration">ਮਿਆਦ</string>
|
||||
<string name="lbl_disc">ਡਿਸਕ</string>
|
||||
<string name="lbl_track">ਟਰੈਕ</string>
|
||||
<string name="lbl_date_added">ਮਿਤੀ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ</string>
|
||||
<string name="lbl_sort_asc">ਵੱਧਦੇ ਹੋਏ</string>
|
||||
<string name="lbl_playback">ਹੁਣ ਚੱਲ ਰਿਹਾ ਹੈ</string>
|
||||
<string name="lbl_equalizer">ਇਕੋਲਾਈਜ਼ਰ</string>
|
||||
|
@ -74,7 +74,7 @@
|
|||
<string name="lbl_library_counts">ਲਾਇਬ੍ਰੇਰੀ ਦੇ ਅੰਕੜੇ</string>
|
||||
<string name="info_app_desc">ਐਂਡਰੌਇਡ ਲਈ ਇੱਕ ਸਰਲ, ਤਰਕਸੰਗਤ ਸੰਗੀਤ ਪਲੇਅਰ।</string>
|
||||
<string name="lbl_search">ਖੋਜੋ</string>
|
||||
<string name="lbl_sort_count">ਗੀਤ ਦੀ ਗਿਣਤੀ</string>
|
||||
<string name="lbl_song_count">ਗੀਤ ਦੀ ਗਿਣਤੀ</string>
|
||||
<string name="lbl_sort_dec">ਘਟਦੇ ਹੋਏ</string>
|
||||
<string name="lbl_play_selected">ਚੁਣਿਆ ਹੋਇਆ ਚਲਾਓ</string>
|
||||
<string name="lbl_go_artist">ਕਲਾਕਾਰ \'ਤੇ ਜਾਓ</string>
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
<string name="def_date">Nieznana data</string>
|
||||
<string name="def_sample_rate">Nieznana częstotliwość próbkowania</string>
|
||||
<string name="cdc_mp3">MPEG-1 audio</string>
|
||||
<string name="lbl_sort_track">Utwór</string>
|
||||
<string name="lbl_track">Utwór</string>
|
||||
<string name="lbl_song_detail">Wyświetl szczegóły</string>
|
||||
<string name="lbl_props">Szczegóły utworu</string>
|
||||
<string name="lbl_sample_rate">Częstotliwość próbkowania</string>
|
||||
|
@ -98,7 +98,7 @@
|
|||
<string name="lbl_format">Format</string>
|
||||
<string name="clr_cyan">Niebieskozielony</string>
|
||||
<string name="fmt_disc_no">Płyta %d</string>
|
||||
<string name="lbl_sort_date_added">Data dodania</string>
|
||||
<string name="lbl_date_added">Data dodania</string>
|
||||
<string name="desc_album_cover">Okładka albumu %s</string>
|
||||
<string name="desc_auxio_icon">Ikona Auxio</string>
|
||||
<string name="desc_shuffle">Włącz lub wyłącz odtwarzanie losowe</string>
|
||||
|
@ -117,14 +117,14 @@
|
|||
<string name="set_black_mode">Czarny motyw</string>
|
||||
<string name="clr_deep_purple">Ciemny fiolet</string>
|
||||
<string name="fmt_db_neg">-%.1f dB</string>
|
||||
<string name="lbl_sort_name">Nazwa</string>
|
||||
<string name="lbl_sort_date">Rok</string>
|
||||
<string name="lbl_name">Nazwa</string>
|
||||
<string name="lbl_date">Rok</string>
|
||||
<string name="lbl_single">Singiel</string>
|
||||
<string name="lbl_singles">Single</string>
|
||||
<string name="lbl_sort_duration">Czas trwania</string>
|
||||
<string name="lbl_duration">Czas trwania</string>
|
||||
<string name="lbl_mixtape">Składanka</string>
|
||||
<string name="lbl_sort_count">Liczba utworów</string>
|
||||
<string name="lbl_sort_disc">Płyta</string>
|
||||
<string name="lbl_song_count">Liczba utworów</string>
|
||||
<string name="lbl_disc">Płyta</string>
|
||||
<string name="lbl_artist">Wykonawca</string>
|
||||
<string name="lbl_save">Zapisz</string>
|
||||
<string name="lbl_mixtapes">Składanki</string>
|
||||
|
|
|
@ -98,11 +98,11 @@
|
|||
<string name="err_no_perms">O Auxio precisa de permissão para ler sua biblioteca de músicas</string>
|
||||
<string name="info_app_desc">Um reprodutor de música simples e racional para android.</string>
|
||||
<string name="lng_indexing">Carregando sua biblioteca de músicas…</string>
|
||||
<string name="lbl_sort_date">Ano</string>
|
||||
<string name="lbl_sort_duration">Duração</string>
|
||||
<string name="lbl_sort_count">Contagem de músicas</string>
|
||||
<string name="lbl_sort_disc">Disco</string>
|
||||
<string name="lbl_sort_name">Nome</string>
|
||||
<string name="lbl_date">Ano</string>
|
||||
<string name="lbl_duration">Duração</string>
|
||||
<string name="lbl_song_count">Contagem de músicas</string>
|
||||
<string name="lbl_disc">Disco</string>
|
||||
<string name="lbl_name">Nome</string>
|
||||
<string name="lbl_artist">Artista</string>
|
||||
<string name="lbl_album">Álbum</string>
|
||||
<string name="lbl_props">Propriedades da música</string>
|
||||
|
@ -172,7 +172,7 @@
|
|||
<string name="set_replay_gain_mode_dynamic">Prefira o álbum se estiver tocando</string>
|
||||
<string name="set_observing">Recarregamento automático</string>
|
||||
<string name="set_observing_desc">Recarrega a biblioteca de músicas sempre que ela mudar (requer notificação fixa)</string>
|
||||
<string name="lbl_sort_date_added">Data adicionada</string>
|
||||
<string name="lbl_date_added">Data adicionada</string>
|
||||
<string name="lbl_cancel">Cancelar</string>
|
||||
<string name="set_replay_gain_mode_track">Preferir faixa</string>
|
||||
<string name="desc_queue_bar">Abrir fila</string>
|
||||
|
@ -213,7 +213,7 @@
|
|||
<string name="lbl_compilation">Compilação</string>
|
||||
<string name="lbl_single_remix">Single remix</string>
|
||||
<string name="set_content">Conteúdo</string>
|
||||
<string name="lbl_sort_track">Faixa</string>
|
||||
<string name="lbl_track">Faixa</string>
|
||||
<string name="set_library_song_playback_mode">Ao tocar da biblioteca</string>
|
||||
<string name="set_detail_song_playback_mode">Ao tocar a partir dos detalhes do item</string>
|
||||
<string name="lbl_mixtapes">Mixtapes</string>
|
||||
|
|
|
@ -78,15 +78,15 @@
|
|||
<string name="fmt_lib_artist_count">Artistas carregados: %d</string>
|
||||
<string name="fmt_lib_total_duration">Duração total: %s</string>
|
||||
<string name="err_index_failed">Falha no carregamento da música</string>
|
||||
<string name="lbl_sort_name">Nome</string>
|
||||
<string name="lbl_name">Nome</string>
|
||||
<string name="set_replay_gain_mode_dynamic">Prefira o álbum se estiver tocando</string>
|
||||
<string name="err_no_app">Nenhuma aplicação encontrada que possa lidar com esta tarefa</string>
|
||||
<string name="clr_cyan">Ciano</string>
|
||||
<string name="lbl_sort_count">Contagem de músicas</string>
|
||||
<string name="lbl_song_count">Contagem de músicas</string>
|
||||
<string name="lbl_format">Formato</string>
|
||||
<string name="lbl_library_counts">Estatísticas da biblioteca</string>
|
||||
<string name="desc_no_cover">Capa do álbum</string>
|
||||
<string name="lbl_sort_date">Ano</string>
|
||||
<string name="lbl_date">Ano</string>
|
||||
<string name="set_cover_mode_media_store">Rápido</string>
|
||||
<string name="set_cover_mode_quality">Qualidade alta</string>
|
||||
<string name="set_bar_action">Ação da barra de reprodução personalizada</string>
|
||||
|
@ -100,8 +100,8 @@
|
|||
<string name="desc_music_dir_delete">Remover pasta</string>
|
||||
<string name="lbl_compilation_remix">Compilações de remix</string>
|
||||
<string name="lbl_compilation_live">Compilação ao vivo</string>
|
||||
<string name="lbl_sort_disc">Disco</string>
|
||||
<string name="lbl_sort_track">Faixa</string>
|
||||
<string name="lbl_disc">Disco</string>
|
||||
<string name="lbl_track">Faixa</string>
|
||||
<string name="lbl_bitrate">Taxa de bits</string>
|
||||
<string name="set_action_mode_next">Pular para o próximo</string>
|
||||
<string name="set_pre_amp_warning">Aviso: Alterar o pré-amplificador para um valor positivo alto pode resultar em picos em algumas faixas de áudio.</string>
|
||||
|
@ -109,7 +109,7 @@
|
|||
<string name="set_separators_slash">Barra (/)</string>
|
||||
<string name="set_separators_plus">Mais (+)</string>
|
||||
<string name="cdc_ogg">Áudio Ogg</string>
|
||||
<string name="lbl_sort_date_added">Data adicionada</string>
|
||||
<string name="lbl_date_added">Data adicionada</string>
|
||||
<string name="lbl_sample_rate">Taxa de amostragem</string>
|
||||
<string name="lbl_save">Gravar</string>
|
||||
<string name="set_separators">Separadores multi-valor</string>
|
||||
|
@ -136,7 +136,7 @@
|
|||
<string name="lbl_compilations">Compilações</string>
|
||||
<string name="lbl_compilation">Compilação</string>
|
||||
<string name="lbl_live_group">Ao vivo</string>
|
||||
<string name="lbl_sort_duration">Duração</string>
|
||||
<string name="lbl_duration">Duração</string>
|
||||
<string name="lbl_cancel">Cancelar</string>
|
||||
<string name="lng_indexing">A carregar a sua biblioteca de músicas…</string>
|
||||
<string name="set_dirs_desc">Gira de onde a música deve ser carregada</string>
|
||||
|
|
|
@ -92,17 +92,17 @@
|
|||
<string name="lbl_shuffle_shortcut_long">Amestecă-le pe toate</string>
|
||||
<string name="lbl_ok">Bine</string>
|
||||
<string name="lbl_cancel">Anulează</string>
|
||||
<string name="lbl_sort_disc">Disc</string>
|
||||
<string name="lbl_disc">Disc</string>
|
||||
<string name="lbl_song_detail">Vezi proprietăți</string>
|
||||
<string name="lbl_sort_date">Data</string>
|
||||
<string name="lbl_date">Data</string>
|
||||
<string name="lbl_mix">Mix</string>
|
||||
<string name="lbl_mixes">Mixuri</string>
|
||||
<string name="lbl_sort_track">Piesă</string>
|
||||
<string name="lbl_sort_duration">Durată</string>
|
||||
<string name="lbl_sort_count">Număr de melodii</string>
|
||||
<string name="lbl_track">Piesă</string>
|
||||
<string name="lbl_duration">Durată</string>
|
||||
<string name="lbl_song_count">Număr de melodii</string>
|
||||
<string name="lbl_equalizer">Egalizator</string>
|
||||
<string name="lbl_bitrate">Bit rate</string>
|
||||
<string name="lbl_sort_date_added">Data adăugării</string>
|
||||
<string name="lbl_date_added">Data adăugării</string>
|
||||
<string name="lbl_relative_path">Calea principală</string>
|
||||
<string name="lbl_format">Format</string>
|
||||
<string name="lbl_props">Proprietățile cântecului</string>
|
||||
|
@ -124,7 +124,7 @@
|
|||
<string name="lbl_artist">Artist</string>
|
||||
<string name="lbl_soundtracks">Coloane sonore</string>
|
||||
<string name="lbl_soundtrack">Coloană sonoră</string>
|
||||
<string name="lbl_sort_name">Nume</string>
|
||||
<string name="lbl_name">Nume</string>
|
||||
<string name="set_personalize_desc">Personalizați controalele și comportamentul UI</string>
|
||||
<string name="set_black_mode">Tema neagră</string>
|
||||
<string name="set_ui_desc">Schimbați tema și culorile aplicației</string>
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
<string name="lbl_filter">Фильтр</string>
|
||||
<string name="lbl_filter_all">Все</string>
|
||||
<string name="lbl_sort">Сортировать</string>
|
||||
<string name="lbl_sort_name">Название</string>
|
||||
<string name="lbl_name">Название</string>
|
||||
<string name="lbl_artist">Исполнитель</string>
|
||||
<string name="lbl_album">Альбом</string>
|
||||
<string name="lbl_sort_date">Год</string>
|
||||
<string name="lbl_date">Год</string>
|
||||
<string name="lbl_sort_asc">По возрастанию</string>
|
||||
<string name="lbl_playback">Сейчас играет</string>
|
||||
<string name="lbl_play">Играть</string>
|
||||
|
@ -148,10 +148,10 @@
|
|||
<string name="lbl_ok">ОК</string>
|
||||
<string name="set_detail_song_playback_mode">При воспроизведении из сведений</string>
|
||||
<string name="set_playback_mode_none">Воспроизведение с показанного элемента</string>
|
||||
<string name="lbl_sort_count">Номер песни</string>
|
||||
<string name="lbl_song_count">Номер песни</string>
|
||||
<string name="lbl_bitrate">Битрейт</string>
|
||||
<string name="lbl_sort_disc">Диск</string>
|
||||
<string name="lbl_sort_track">Трек</string>
|
||||
<string name="lbl_disc">Диск</string>
|
||||
<string name="lbl_track">Трек</string>
|
||||
<string name="lbl_state_restored">Состояние восстановлено</string>
|
||||
<string name="lbl_cancel">Отмена</string>
|
||||
<string name="set_pre_amp_warning">Внимание: Изменение предусилителя на большое положительное значение может привести к появлению искажений на некоторых звуковых дорожках.</string>
|
||||
|
@ -164,12 +164,12 @@
|
|||
<string name="set_pre_amp_desc">Предусилитель применяется к существующей настройке во время воспроизведения</string>
|
||||
<string name="lbl_library_counts">Статистика библиотеки</string>
|
||||
<string name="set_restore_state">Восстановить состояние воспроизведения</string>
|
||||
<string name="lbl_sort_duration">Продолжительность</string>
|
||||
<string name="lbl_duration">Продолжительность</string>
|
||||
<string name="lbl_file_name">Имя файла</string>
|
||||
<string name="lbl_ep">Мини-альбом</string>
|
||||
<string name="lbl_eps">Мини-альбомы</string>
|
||||
<string name="lbl_single">Сингл</string>
|
||||
<string name="lbl_sort_date_added">Дата добавления</string>
|
||||
<string name="lbl_date_added">Дата добавления</string>
|
||||
<string name="lbl_singles">Синглы</string>
|
||||
<string name="set_pre_amp">Предусилитель ReplayGain</string>
|
||||
<string name="set_dirs_mode_exclude">Исключить</string>
|
||||
|
|
|
@ -64,9 +64,9 @@
|
|||
<string name="lbl_add">Ekle</string>
|
||||
<string name="lbl_save">Kaydet</string>
|
||||
<string name="fmt_lib_total_duration">Toplam süre: %s</string>
|
||||
<string name="lbl_sort_count">Şarkı sayısı</string>
|
||||
<string name="lbl_sort_disc">Disk</string>
|
||||
<string name="lbl_sort_track">Parça</string>
|
||||
<string name="lbl_song_count">Şarkı sayısı</string>
|
||||
<string name="lbl_disc">Disk</string>
|
||||
<string name="lbl_track">Parça</string>
|
||||
<string name="lbl_size">Boyut</string>
|
||||
<string name="lbl_bitrate">Bit hızı</string>
|
||||
<string name="lbl_sample_rate">Örnek hızı</string>
|
||||
|
@ -74,11 +74,11 @@
|
|||
<string name="info_app_desc">Android için basit, rasyonel bir müzik çalar.</string>
|
||||
<string name="lbl_indexer">Müzik yükleniyor</string>
|
||||
<string name="lng_indexing">Müzik kitaplığınız yükleniyor…</string>
|
||||
<string name="lbl_sort_name">Ad</string>
|
||||
<string name="lbl_name">Ad</string>
|
||||
<string name="lbl_artist">Sanatçı</string>
|
||||
<string name="lbl_album">Albüm</string>
|
||||
<string name="lbl_sort_date">Yıl</string>
|
||||
<string name="lbl_sort_duration">Süre</string>
|
||||
<string name="lbl_date">Yıl</string>
|
||||
<string name="lbl_duration">Süre</string>
|
||||
<string name="lbl_state_saved">Durum kaydedildi</string>
|
||||
<string name="lng_author">Alexander Capehart tarafından geliştirildi</string>
|
||||
<string name="set_black_mode">Siyah tema</string>
|
||||
|
@ -192,7 +192,7 @@
|
|||
<string name="lng_observing">Müzik kitaplığı değişiklikler için denetleniyor…</string>
|
||||
<string name="set_observing">Otomatik yeniden yükleme</string>
|
||||
<string name="set_observing_desc">Müzik kitaplığı her değiştiğinde yeniden yükleyin (kalıcı bildirim gerektirir)</string>
|
||||
<string name="lbl_sort_date_added">Eklendiği tarih</string>
|
||||
<string name="lbl_date_added">Eklendiği tarih</string>
|
||||
<string name="lbl_album_remix">Remix albüm</string>
|
||||
<string name="lbl_album_live">Canlı albüm</string>
|
||||
<string name="desc_clear_queue_item">Bu şarkıyı kuyruktan kaldır</string>
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
<string name="lbl_album_live">Концертний альбом</string>
|
||||
<string name="lbl_relative_path">Шлях до каталогу</string>
|
||||
<string name="set_display">Екран</string>
|
||||
<string name="lbl_sort_date">Дата</string>
|
||||
<string name="lbl_date">Дата</string>
|
||||
<string name="lbl_play_selected">Відтворити вибране</string>
|
||||
<string name="set_cover_mode">Обкладинки альбомів</string>
|
||||
<string name="set_hide_collaborators">Приховати співавторів</string>
|
||||
|
@ -94,7 +94,7 @@
|
|||
<string name="fmt_lib_total_duration">Загальна тривалість: %s</string>
|
||||
<string name="lbl_mixtapes">Мікстейпи</string>
|
||||
<string name="lbl_artist">Виконавець</string>
|
||||
<string name="lbl_sort_duration">Тривалість</string>
|
||||
<string name="lbl_duration">Тривалість</string>
|
||||
<string name="lbl_mixes">Мікси</string>
|
||||
<string name="lbl_mix">Мікс</string>
|
||||
<string name="set_round_mode">Заокруглені обкладинки</string>
|
||||
|
@ -102,7 +102,7 @@
|
|||
<string name="lbl_props">Властивості пісні</string>
|
||||
<string name="lbl_add">Додати</string>
|
||||
<string name="set_repeat_pause_desc">Ставити на паузу при повторенні пісні</string>
|
||||
<string name="lbl_sort_date_added">Дата додавання</string>
|
||||
<string name="lbl_date_added">Дата додавання</string>
|
||||
<string name="lbl_sample_rate">Частота дискретизації</string>
|
||||
<string name="set_cover_mode_quality">Висока якість</string>
|
||||
<string name="set_reindex">Оновити музику</string>
|
||||
|
@ -115,9 +115,9 @@
|
|||
<string name="set_keep_shuffle">Запам\'ятати перемішування</string>
|
||||
<string name="set_repeat_pause">Пауза при повторенні</string>
|
||||
<string name="lbl_genre">Жанр</string>
|
||||
<string name="lbl_sort_disc">Диск</string>
|
||||
<string name="lbl_disc">Диск</string>
|
||||
<string name="lbl_sort_asc">За зростанням</string>
|
||||
<string name="lbl_sort_name">Назва</string>
|
||||
<string name="lbl_name">Назва</string>
|
||||
<string name="lbl_song_detail">Переглянути властивості</string>
|
||||
<string name="set_exclude_non_music_desc">Ігнорувати аудіо файли які не являються музикою, наприклад, подкасти</string>
|
||||
<string name="set_exclude_non_music">Виключити інші звукові файли</string>
|
||||
|
@ -126,7 +126,7 @@
|
|||
<string name="lbl_compilation_live">Концертна збірка</string>
|
||||
<string name="lbl_ep">Мініальбом</string>
|
||||
<string name="lbl_eps">Мініальбоми</string>
|
||||
<string name="lbl_sort_count">Номер пісні</string>
|
||||
<string name="lbl_song_count">Номер пісні</string>
|
||||
<string name="set_headset_autoplay_desc">Завжди починати відтворення при підключенні гарнітури (може працювати не на всіх пристроях)</string>
|
||||
<string name="lbl_ep_remix">Мініальбом реміксів</string>
|
||||
<string name="lbl_single_live">Концертний сингл</string>
|
||||
|
@ -181,7 +181,7 @@
|
|||
<string name="set_save_state">Зберегти стан відтворення</string>
|
||||
<string name="set_wipe_state">Очистити стан відтворення</string>
|
||||
<string name="set_restore_state">Відновити стан відтворення</string>
|
||||
<string name="lbl_sort_track">Пісня</string>
|
||||
<string name="lbl_track">Пісня</string>
|
||||
<string name="lbl_state_restored">Стан відтворення відновлено</string>
|
||||
<string name="lng_widget">Перегляд і керування відтворенням музики</string>
|
||||
<string name="set_rewind_prev_desc">Перемотайте на початок пісні перед відтворенням попередньої</string>
|
||||
|
|
|
@ -15,10 +15,10 @@
|
|||
<string name="lbl_filter">过滤器</string>
|
||||
<string name="lbl_filter_all">全部</string>
|
||||
<string name="lbl_sort">排序方式</string>
|
||||
<string name="lbl_sort_name">名称</string>
|
||||
<string name="lbl_name">名称</string>
|
||||
<string name="lbl_artist">艺术家</string>
|
||||
<string name="lbl_album">专辑</string>
|
||||
<string name="lbl_sort_date">年份</string>
|
||||
<string name="lbl_date">年份</string>
|
||||
<string name="lbl_sort_asc">首字符(正序)</string>
|
||||
<string name="lbl_playback">正在播放</string>
|
||||
<string name="lbl_play">播放</string>
|
||||
|
@ -173,10 +173,10 @@
|
|||
<string name="def_sample_rate">没有采样率信息</string>
|
||||
<string name="lbl_indexer">音乐加载中</string>
|
||||
<string name="lng_indexing">正在加载您的音乐库……</string>
|
||||
<string name="lbl_sort_disc">碟片</string>
|
||||
<string name="lbl_sort_duration">时长</string>
|
||||
<string name="lbl_sort_count">歌曲计数</string>
|
||||
<string name="lbl_sort_track">音轨</string>
|
||||
<string name="lbl_disc">碟片</string>
|
||||
<string name="lbl_duration">时长</string>
|
||||
<string name="lbl_song_count">歌曲计数</string>
|
||||
<string name="lbl_track">音轨</string>
|
||||
<string name="lbl_song_detail">查看属性</string>
|
||||
<string name="lbl_props">曲目属性</string>
|
||||
<string name="lbl_file_name">文件名</string>
|
||||
|
@ -210,7 +210,7 @@
|
|||
<string name="lbl_mixtapes">混音带</string>
|
||||
<string name="lbl_mixtape">混音带</string>
|
||||
<string name="lbl_remix_group">混音</string>
|
||||
<string name="lbl_sort_date_added">添加日期</string>
|
||||
<string name="lbl_date_added">添加日期</string>
|
||||
<string name="lbl_album_remix">混音专辑</string>
|
||||
<string name="lbl_ep_live">现场 EP</string>
|
||||
<string name="lbl_album_live">现场专辑</string>
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
<string name="lbl_observing">檢測音樂庫</string>
|
||||
<string name="lbl_format">格式</string>
|
||||
<string name="set_black_mode">黑色主題</string>
|
||||
<string name="lbl_sort_duration">時長</string>
|
||||
<string name="lbl_duration">時長</string>
|
||||
<string name="lbl_size">大小</string>
|
||||
<string name="lbl_bitrate">位元率</string>
|
||||
<string name="lbl_sample_rate">取樣頻率</string>
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<string name="fmt_two" translatable="false">%1$s • %2$s</string>
|
||||
<string name="fmt_three" translatable="false">%1$s • %2$s • %3$s</string>
|
||||
<string name="fmt_number" translatable="false">%d</string>
|
||||
<string name="fmt_zipped_names" translatable="false">%1$s (%2$s)</string>
|
||||
<string name="fmt_date_range" translatable="false">%s - %s</string>
|
||||
<string name="fmt_path">%1$s/%2$s</string>
|
||||
|
||||
|
|
|
@ -83,14 +83,15 @@
|
|||
<!-- As in to not filter -->
|
||||
<string name="lbl_filter_all">All</string>
|
||||
|
||||
<string name="lbl_name">Name</string>
|
||||
<string name="lbl_date">Date</string>
|
||||
<string name="lbl_duration">Duration</string>
|
||||
<string name="lbl_song_count">Song count</string>
|
||||
<string name="lbl_disc">Disc</string>
|
||||
<string name="lbl_track">Track</string>
|
||||
<string name="lbl_date_added">Date added</string>
|
||||
|
||||
<string name="lbl_sort">Sort</string>
|
||||
<string name="lbl_sort_name">Name</string>
|
||||
<string name="lbl_sort_date">Date</string>
|
||||
<string name="lbl_sort_duration">Duration</string>
|
||||
<string name="lbl_sort_count">Song count</string>
|
||||
<string name="lbl_sort_disc">Disc</string>
|
||||
<string name="lbl_sort_track">Track</string>
|
||||
<string name="lbl_sort_date_added">Date added</string>
|
||||
<string name="lbl_sort_asc">Ascending</string>
|
||||
<string name="lbl_sort_dec">Descending</string>
|
||||
|
||||
|
@ -311,11 +312,8 @@
|
|||
<string name="def_artist">Unknown artist</string>
|
||||
<string name="def_genre">Unknown genre</string>
|
||||
<string name="def_date">No date</string>
|
||||
<string name="def_track">No track number</string>
|
||||
<string name="def_track">No track</string>
|
||||
<string name="def_playback">No music playing</string>
|
||||
<string name="def_codec">Unknown format</string>
|
||||
<string name="def_bitrate">No bitrate</string>
|
||||
<string name="def_sample_rate">No sample rate</string>
|
||||
|
||||
<!-- Codec Namespace | Format names -->
|
||||
<eat-comment />
|
||||
|
|
Loading…
Reference in a new issue