62 Commits

Author SHA1 Message Date
eddyizm
02eef97171 chore: bumping version for release 2025-08-23 13:48:00 -07:00
eddyizm
26a5fb029a fix: moved hardcoded italian save text to string template, updated with english and italian language xmls 2025-08-23 13:04:17 -07:00
eddyizm
c38c7c3deb Merge pull request #50 from mucahit-kaya/development
feat: Add Turkish localization (values-tr)
2025-08-22 22:16:06 -07:00
eddyizm
8ed0a4642b chore: adding a note/not fully baked label to the sync user play queue setting #47 2025-08-22 22:12:22 -07:00
mucahit-kaya
6cfa04d368 Add Turkish language 2025-08-22 17:08:08 +02:00
eddyizm
af98f8d1a9 Merge pull request #44 from jaime-grj/rating-position
style: Change position and size of rating container
2025-08-18 15:17:53 -07:00
Jaime García
469204daac style: Change position and size of rating container 2025-08-16 02:43:02 +02:00
eddyizm
8943faf44c chore: updated change log 2025-08-15 10:42:03 -07:00
eddyizm
fea6366d84 Merge pull request #42 from eddyizm/development
Development - v3.12.0 release set up
2025-08-15 10:08:31 -07:00
eddyizm
92ac2e5684 chore: updated readme and bumped version for release. 2025-08-15 09:29:45 -07:00
eddyizm
06a52afa18 Merge pull request #40 from eddyizm/18-show-rating-on-song-view
feat: show rating on song view
2025-08-14 22:08:35 -07:00
eddyizm
87f6db9e79 chore: cleaned up dev log imports, commented code 2025-08-14 21:54:25 -07:00
eddyizm
5fa46cc49b feat:show rating on song view and allow setting/updating. #17 fixed a fr string error 2025-08-14 21:46:33 -07:00
eddyizm
4da967910a Merge pull request #39 from benoit-smith/development
Update French localization
2025-08-14 12:46:11 -07:00
Benoît Smith
3b18f39948 Update French localization 2025-08-14 10:56:28 +02:00
eddyizm
c9e0581815 Merge branch 'development' into 18-show-rating-on-song-view 2025-08-12 21:25:51 -07:00
eddyizm
b0fcc31f7b Merge pull request #38 from jaime-grj/fix-playercodecbitrateinfo
feat: added transcoding codec and bitrate info to PlayerControllerFragment, replace hardcoded strings
2025-08-12 21:24:26 -07:00
eddyizm
e98c9483c8 Merge pull request #37 from jaime-grj/fix-trackinfodialog
fix: Show placeholder string in TrackInfoDialog fields when there is no data
2025-08-12 21:23:45 -07:00
Jaime García
98a45b6059 fix: added transcoding codec and bitrate info to PlayerControllerFragment, replace hardcoded strings with dynamic values 2025-08-11 22:26:30 +02:00
Jaime García
6e070dfef0 fix: Avoid showing radio stream URL in Artist field of TrackInfoDialog 2025-08-11 20:58:06 +02:00
eddyizm
910cce90f5 Merge pull request #36 from benoit-smith/development
Update French localization
2025-08-11 07:11:15 -07:00
Jaime García
1a70ccd8f4 fix: Show placeholder string in TrackInfoDialog fields when there is no size and duration 2025-08-11 14:29:19 +02:00
Benoît Smith
7830657fe1 Update strings.xml French localization (more) 2025-08-11 10:56:06 +02:00
Benoît Smith
0351ccfc95 Update strings.xml French localization 2025-08-11 10:46:19 +02:00
Benoît Smith
10af6fb4ce Update arrays.xml French localization 2025-08-11 09:41:50 +02:00
Jaime García
61ec15e696 fix: Show placeholder string in TrackInfoDialog fields when there is no year, track number, bitrate and/or disc number 2025-08-11 03:02:01 +02:00
eddyizm
d21bd475a1 wip: initial new rating on song layout 2025-08-10 12:54:05 -07:00
eddyizm
7e34f6ee64 Merge branch 'development' of github.com:eddyizm/tempo into development 2025-08-10 07:50:05 -07:00
eddyizm
7cfefe76cc fix: removed duplicated screenshots from readme. 2025-08-10 07:49:28 -07:00
eddyizm
4585533740 Merge pull request #30 from skajmer/tempofork
Translations for sections
2025-08-10 07:40:43 -07:00
skajmer
07c1760c39 Additional strings
from: eddyizm/tempo/issues/29
2025-08-10 10:26:22 +02:00
eddyizm
24d4e67872 Merge pull request #33 from jaime-grj/fix-offlinemodetext
style: increased "Offline mode" text size, changed its color in dark theme
2025-08-09 22:48:21 -07:00
eddyizm
bec840620c Merge pull request #31 from BreadWare92/feat/i18n-german-track-info-home-section
feat(i18n): add German translations for track info and home section strings (#29)
2025-08-09 22:44:08 -07:00
Jaime García
2fa4ddf874 style: increased "Offline mode" text size, changed its color in dark theme 2025-08-10 02:10:20 +02:00
Matthias Reihs
e16f88cb73 feat(i18n): add German translations for track info and home section strings (#29) 2025-08-09 23:43:11 +02:00
skajmer
f79b05cb67 Translations for sections 2025-08-09 23:13:23 +02:00
eddyizm
ed7c572578 chore: updated ignore for release files 2025-08-09 11:14:56 -07:00
eddyizm
e891214831 Merge pull request #28 from eddyizm/development
v3.11.2 - merging to main
2025-08-09 11:03:15 -07:00
eddyizm
3d5ef1d900 chore: more version syncing 2025-08-09 10:56:18 -07:00
eddyizm
ba09f1f9ac chore: updated readme and change log 2025-08-09 10:51:09 -07:00
eddyizm
7ccc0a0cf8 chore: adding the new json schme and bumping the versions for release 2025-08-09 10:39:46 -07:00
eddyizm
4dfd346da5 chore: added changelog to track updates since fork 2025-08-09 10:27:11 -07:00
eddyizm
f9cc5b39cd Merge pull request #27 from jaime-grj/fix-strings-home
fix: make hardcoded strings in home fragment dynamic
2025-08-09 07:18:34 -07:00
eddyizm
04580e380b Merge pull request #26 from jaime-grj/fix-languageselection
fix: show "System default" language option, sort languages alphabetically, include country when showing language in settings
2025-08-09 07:12:28 -07:00
Jaime García
77ac195f32 fix: make hardcoded strings in home fragment dynamic 2025-08-09 13:22:25 +02:00
Jaime García
f53461382c fix: include country when showing language in settings 2025-08-09 02:53:20 +02:00
Jaime García
8a57f8f389 fix: show "System default" language option, sort languages alphabetically 2025-08-09 02:52:07 +02:00
eddyizm
0e76504cda Merge pull request #25 from jaime-grj/fix-localnetwork
fix: check for IP connectivity instead of Internet access
2025-08-08 14:09:04 -07:00
Jaime García
7fdffa7f6f fix: check for IP connectivity instead of Internet access 2025-08-08 22:15:52 +02:00
eddyizm
76293af038 Merge pull request #24 from jaime-grj/fix-albumpage
fix: hide unnecessary TextViews in AlbumPageFragment when there is no data, fixed incorrect album release date
2025-08-06 19:53:18 -07:00
Jaime García
e1aeccdd85 fix: hide genre in AlbumPageFragment properly 2025-08-07 04:18:25 +02:00
eddyizm
ab0e58b506 Merge pull request #22 from jaime-grj/samplerate-bitdepth
feat: show sampling rate and bit depth if available
2025-08-06 18:50:33 -07:00
Jaime García
98db83f11a fix: set album year in AlbumPageFragment 2025-08-07 03:26:04 +02:00
Jaime García
d49d37d1fd chore: remove comment 2025-08-07 03:06:01 +02:00
Jaime García
cc4d4701e1 fix: don't show empty year TextView if album has no year 2025-08-07 03:00:20 +02:00
Jaime García
1f347209b5 fix: don't show empty genre TextView if album has no genre 2025-08-07 03:00:17 +02:00
Jaime García
44f8160e21 fix: fixed incorrect album release date, hid release date TextView when there is no data 2025-08-07 03:00:10 +02:00
eddyizm
d7d25fb542 Merge pull request #20 from le-firehawk/feature-lyrics-window-fix
feat: Fix lyric scrolling during playback, keep screen on while viewing
2025-08-05 21:57:35 -07:00
Jaime García
181af686c2 feat: show sampling rate and bit depth if available 2025-08-06 01:49:30 +02:00
le-firehawk
177fc5670c feat: Fix lyric scrolling during playback, keep screen on while viewing 2025-08-05 22:44:41 +09:30
eddyizm
bfd6f28d7a chore: readme fat finger fix 2025-08-04 20:41:30 -07:00
eddyizm
549220f8f3 chore: linked new release in readme 2025-08-04 20:20:13 -07:00
39 changed files with 2296 additions and 107 deletions

5
.gitignore vendored
View File

@@ -14,4 +14,7 @@
.cxx
/.idea/
.env
.vscode/settings.json
.vscode/settings.json
# release / debug files
tempus-release-key.jks
app/tempo/

59
CHANGELOG.md Normal file
View File

@@ -0,0 +1,59 @@
# Changelog
***This log is for this fork to detail updates since 3.9.0 from the main repo.***
## [3.12.0](https://github.com/eddyizm/tempo/releases/tag/v3.12.0) (2025-08-15)
### What's Changed
* [chore]: add German translations for track info and home section strings (#29) by @BreadWare92 in https://github.com/eddyizm/tempo/pull/31
* [chore]: increased "Offline mode" text size, changed its color in dark theme by @jaime-grj in https://github.com/eddyizm/tempo/pull/33
* [chore]: Translations for sections by @skajmer in https://github.com/eddyizm/tempo/pull/30
* [chore]: Update French localization by @benoit-smith in https://github.com/eddyizm/tempo/pull/36
* [fix]: Show placeholder string in TrackInfoDialog fields when there is no data by @jaime-grj in https://github.com/eddyizm/tempo/pull/37
* [feat]: added transcoding codec and bitrate info to PlayerControllerFragment, replace hardcoded strings by @jaime-grj in https://github.com/eddyizm/tempo/pull/38
* [chore]: Update French localization by @benoit-smith in https://github.com/eddyizm/tempo/pull/39
* [feat]: show rating on song view by @eddyizm in https://github.com/eddyizm/tempo/pull/40
### New Contributors
* @BreadWare92 made their first contribution in https://github.com/eddyizm/tempo/pull/31
* @skajmer made their first contribution in https://github.com/eddyizm/tempo/pull/30
* @benoit-smith made their first contribution in https://github.com/eddyizm/tempo/pull/36
**Full Changelog**: https://github.com/eddyizm/tempo/compare/v3.11.2...v3.12.0
## [3.11.2](https://github.com/eddyizm/tempo/releases/tag/v3.11.2) (2025-08-09)
([Full Changelog](https://github.com/eddyizm/tempo/compare/v3.10.0...eddyizm:tempo:v3.11.2?expand=1))
**Housekeeping:**
- [Chore] Added change log.
**Merged pull requests:**
- [Fix] make hardcoded strings in home fragment dynamic [\#27](https://github.com/eddyizm/tempo/pull/22) ([jaime-grj](https://github.com/jaime-grj))
- [Fix] show "System default" language option, sort languages alphabetically, include country when showing language in settings [\#26](https://github.com/eddyizm/tempo/pull/26) ([jaime-grj ](https://github.com/jaime-grj))
- [Fix] check for IP connectivity instead of Internet access [\#25](https://github.com/eddyizm/tempo/pull/25) ([jaime-grj](https://github.com/jaime-grj))
- [Fix] hide unnecessary TextViews in AlbumPageFragment when there is no data, fixed incorrect album release date [\#24](https://github.com/eddyizm/tempo/pull/24) ([jaime-grj](https://github.com/jaime-grj))
- [Feat] show sampling rate and bit depth if available [\#22](https://github.com/eddyizm/tempo/pull/22) ([jaime-grj](https://github.com/jaime-grj))
- [Feat] Fix lyric scrolling during playback, keep screen on while viewing [\#20](https://github.com/eddyizm/tempo/pull/20) ([le-firehawk](https://github.com/le-firehawk))
## [3.10.0](https://github.com/eddyizm/tempo/releases/tag/v3.10.0) (2025-08-04)
**Merged pull requests:**
- [Fix] redirection to artist fragment on artist label click [\#379](https://github.com/CappielloAntonio/tempo/pull/379)
- [Fix] Player queue lag, limits [\#385](https://github.com/CappielloAntonio/tempo/pull/385)
- [Fix] crash when sorting albums with a null artist [\#389](https://github.com/CappielloAntonio/tempo/pull/389)
- [Feat] Display toast message after adding a song to a playlist [\#371](https://github.com/CappielloAntonio/tempo/pull/371)
- [Feat] Album add to playlist context menu item [\#367](https://github.com/CappielloAntonio/tempo/pull/367)
- [Feat] Store and retrieve replay and shuffle states in preferences [\#397](https://github.com/CappielloAntonio/tempo/pull/397)
- [Feat] Enhance Android media player notification window #400
[\#400](https://github.com/CappielloAntonio/tempo/pull/400)
- [Chore] Spanish translation [\#374](https://github.com/CappielloAntonio/tempo/pull/374)
- [Chore] Polish translation [\#378](https://github.com/CappielloAntonio/tempo/pull/378)

View File

@@ -26,16 +26,9 @@ Tempo does not rely on magic algorithms to decide what you should listen to. Ins
This fork is my attempt to keep development moving forward and merge in PR's that have been sitting for a while in the main repo. Thankful to @CappielloAntonio for the amazing app and hopefully we can continue to build on top of it. I will only be releasing on github and if I am not able to merge back to the main repo, I plan to rename the app to be able to publish it to fdroid and possibly google play? We will see.
v3.10.0 applies the following PR's (fix/feat/chore):
fix: [379](https://github.com/CappielloAntonio/tempo/pull/379) -Fix: redirection to artist fragment on artist label click
fix: [385](https://github.com/CappielloAntonio/tempo/pull/385) -Player queue lag, limits
fix: [389](https://github.com/CappielloAntonio/tempo/pull/389) -Fix crash when sorting albums with a null artist
feat: [371](https://github.com/CappielloAntonio/tempo/pull/371) -Display toast message after adding a song to a playlist
feat: [367](https://github.com/CappielloAntonio/tempo/pull/367) -Album add to playlist context menu item
chore: [374](https://github.com/CappielloAntonio/tempo/pull/374) -Spanish translation
feat: [397](https://github.com/CappielloAntonio/tempo/pull/397) -Store and retrieve replay and shuffle states in preferences
feat:[400](https://github.com/CappielloAntonio/tempo/pull/400) - enhance Android media player notification window
chore: [378](https://github.com/CappielloAntonio/tempo/pull/378) Polish translation
Moved details to [CHANGELOG.md](https://github.com/eddyizm/tempo/blob/main/CHANGELOG.md)
Fork [**sponsorship here**](https://ko-fi.com/eddyizm).
## Features
- **Subsonic Integration**: Tempo seamlessly integrates with your Subsonic server, providing you with easy access to your entire music collection on the go.
@@ -50,21 +43,11 @@ chore: [378](https://github.com/CappielloAntonio/tempo/pull/378) Polish translat
- **Transcoding Support**: Activate transcoding of tracks on your Subsonic server, allowing you to set a transcoding profile for optimized streaming directly from the app. This feature requires support from your Subsonic server.
- **Android Auto Support**: Enjoy your favorite music on the go with full Android Auto integration, allowing you to seamlessly control and listen to your tracks directly from your mobile device while driving.
<p align="center">
<img src="mockup/feat/1_screenshot.png" width=200>
<img src="mockup/feat/2_screenshot.png" width=200>
<img src="mockup/feat/3_screenshot.png" width=200>
<img src="mockup/feat/4_screenshot.png" width=200>
<img src="mockup/feat/5_screenshot.png" width=200>
<img src="mockup/feat/6_screenshot.png" width=200>
<img src="mockup/feat/7_scregetRecentSearchSuggestionenshot.png" width=200>
<img src="mockup/feat/8_screenshot.png" width=200>
</p>
## Sponsors
Thanks to the original repo/creator [CappielloAntonio](https://github.com/CappielloAntonio) (3.9.0)
Tempo is an open-source project developed and maintained solely by me. I would like to express my heartfelt thanks to all the users who have shown their love and support for Tempo. Your contributions and encouragement mean a lot to me, and they help drive the development and improvement of the app.
If you would like to sponsor the project and show your support, you can make a donation or contribution by visiting the [**sponsorship page**](https://www.buymeacoffee.com/a.cappiello). Your generosity will help cover the costs of development and further enhancements.
## Screenshot

View File

@@ -10,8 +10,8 @@ android {
minSdkVersion 24
targetSdk 35
versionCode 26
versionName '3.10.0'
versionCode 29
versionName '3.13.0'
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'

File diff suppressed because it is too large Load Diff

View File

@@ -28,9 +28,9 @@ import com.cappielloantonio.tempo.subsonic.models.Playlist;
@UnstableApi
@Database(
version = 10,
version = 11,
entities = {Queue.class, Server.class, RecentSearch.class, Download.class, Chronology.class, Favorite.class, SessionMediaItem.class, Playlist.class},
autoMigrations = {@AutoMigration(from = 9, to = 10)}
autoMigrations = {@AutoMigration(from = 10, to = 11)}
)
@TypeConverters({DateConverters.class})
public abstract class AppDatabase extends RoomDatabase {

View File

@@ -37,6 +37,8 @@ class Chronology(@PrimaryKey override val id: String) : Child(id) {
transcodedSuffix = mediaItem.mediaMetadata.extras!!.getString("transcodedSuffix")
duration = mediaItem.mediaMetadata.extras!!.getInt("duration")
bitrate = mediaItem.mediaMetadata.extras!!.getInt("bitrate")
samplingRate = mediaItem.mediaMetadata.extras!!.getInt("samplingRate")
bitDepth = mediaItem.mediaMetadata.extras!!.getInt("bitDepth")
path = mediaItem.mediaMetadata.extras!!.getString("path")
isVideo = mediaItem.mediaMetadata.extras!!.getBoolean("isVideo")
userRating = mediaItem.mediaMetadata.extras!!.getInt("userRating")

View File

@@ -41,6 +41,8 @@ class Queue(override val id: String) : Child(id) {
transcodedSuffix = child.transcodedSuffix
duration = child.duration
bitrate = child.bitrate
samplingRate = child.samplingRate
bitDepth = child.bitDepth
path = child.path
isVideo = child.isVideo
userRating = child.userRating

View File

@@ -50,6 +50,12 @@ open class Child(
@ColumnInfo("bitrate")
@SerializedName("bitRate")
var bitrate: Int? = null,
@ColumnInfo("sampling_rate")
@SerializedName("samplingRate")
var samplingRate: Int? = null,
@ColumnInfo("bit_depth")
@SerializedName("bitDepth")
var bitDepth: Int? = null,
@ColumnInfo
var path: String? = null,
@ColumnInfo(name = "is_video")

View File

@@ -14,11 +14,20 @@ open class ItemDate : Parcelable {
var month: Int? = null
var day: Int? = null
fun getFormattedDate(): String {
val calendar = Calendar.getInstance()
val dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale.getDefault())
fun getFormattedDate(): String? {
if (year == null && month == null && day == null) return null
calendar.set(year ?: 0, month ?: 0, day ?: 0)
val calendar = Calendar.getInstance()
val dateFormat = if (month == null && day == null) {
SimpleDateFormat("yyyy", Locale.getDefault())
} else if (day == null) {
SimpleDateFormat("MMMM yyyy", Locale.getDefault())
}
else{
SimpleDateFormat("MMMM dd, yyyy", Locale.getDefault())
}
calendar.set(year ?: 0, month ?: 1, day ?: 1)
return dateFormat.format(calendar.time)
}

View File

@@ -48,7 +48,7 @@ public class CacheUtil {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
if (capabilities != null) {
return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
}
}
}

View File

@@ -15,6 +15,8 @@ import com.cappielloantonio.tempo.util.MusicUtil;
import com.cappielloantonio.tempo.util.Preferences;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.Objects;
public class TrackInfoDialog extends DialogFragment {
private DialogTrackInfoBinding bind;
@@ -51,7 +53,12 @@ public class TrackInfoDialog extends DialogFragment {
private void setTrackInfo() {
bind.trakTitleInfoTextView.setText(mediaMetadata.title);
bind.trakArtistInfoTextView.setText(mediaMetadata.artist);
bind.trakArtistInfoTextView.setText(
mediaMetadata.artist != null
? mediaMetadata.artist
: mediaMetadata.extras != null && Objects.equals(mediaMetadata.extras.getString("type"), Constants.MEDIA_TYPE_RADIO)
? mediaMetadata.extras.getString("uri", getString(R.string.label_placeholder))
: "");
if (mediaMetadata.extras != null) {
CustomGlideRequest.Builder
@@ -62,18 +69,20 @@ public class TrackInfoDialog extends DialogFragment {
bind.titleValueSector.setText(mediaMetadata.extras.getString("title", getString(R.string.label_placeholder)));
bind.albumValueSector.setText(mediaMetadata.extras.getString("album", getString(R.string.label_placeholder)));
bind.artistValueSector.setText(mediaMetadata.extras.getString("artist", getString(R.string.label_placeholder)));
bind.trackNumberValueSector.setText(String.valueOf(mediaMetadata.extras.getInt("track", 0)));
bind.yearValueSector.setText(String.valueOf(mediaMetadata.extras.getInt("year", 0)));
bind.trackNumberValueSector.setText(mediaMetadata.extras.getInt("track", 0) != 0 ? String.valueOf(mediaMetadata.extras.getInt("track", 0)) : getString(R.string.label_placeholder));
bind.yearValueSector.setText(mediaMetadata.extras.getInt("year", 0) != 0 ? String.valueOf(mediaMetadata.extras.getInt("year", 0)) : getString(R.string.label_placeholder));
bind.genreValueSector.setText(mediaMetadata.extras.getString("genre", getString(R.string.label_placeholder)));
bind.sizeValueSector.setText(MusicUtil.getReadableByteCount(mediaMetadata.extras.getLong("size", 0)));
bind.sizeValueSector.setText(mediaMetadata.extras.getLong("size", 0) != 0 ? MusicUtil.getReadableByteCount(mediaMetadata.extras.getLong("size", 0)) : getString(R.string.label_placeholder));
bind.contentTypeValueSector.setText(mediaMetadata.extras.getString("contentType", getString(R.string.label_placeholder)));
bind.suffixValueSector.setText(mediaMetadata.extras.getString("suffix", getString(R.string.label_placeholder)));
bind.transcodedContentTypeValueSector.setText(mediaMetadata.extras.getString("transcodedContentType", getString(R.string.label_placeholder)));
bind.transcodedSuffixValueSector.setText(mediaMetadata.extras.getString("transcodedSuffix", getString(R.string.label_placeholder)));
bind.durationValueSector.setText(MusicUtil.getReadableDurationString(mediaMetadata.extras.getInt("duration", 0), false));
bind.bitrateValueSector.setText(mediaMetadata.extras.getInt("bitrate", 0) + " kbps");
bind.durationValueSector.setText(mediaMetadata.extras.getInt("duration", 0) != 0 ? MusicUtil.getReadableDurationString(mediaMetadata.extras.getInt("duration", 0), false) : getString(R.string.label_placeholder));
bind.bitrateValueSector.setText(mediaMetadata.extras.getInt("bitrate", 0) != 0 ? mediaMetadata.extras.getInt("bitrate", 0) + " kbps" : getString(R.string.label_placeholder));
bind.samplingRateValueSector.setText(mediaMetadata.extras.getInt("samplingRate", 0) != 0 ? mediaMetadata.extras.getInt("samplingRate", 0) + " Hz" : getString(R.string.label_placeholder));
bind.bitDepthValueSector.setText(mediaMetadata.extras.getInt("bitDepth", 0) != 0 ? mediaMetadata.extras.getInt("bitDepth", 0) + " bits" : getString(R.string.label_placeholder));
bind.pathValueSector.setText(mediaMetadata.extras.getString("path", getString(R.string.label_placeholder)));
bind.discNumberValueSector.setText(String.valueOf(mediaMetadata.extras.getInt("discNumber", 0)));
bind.discNumberValueSector.setText(mediaMetadata.extras.getInt("discNumber", 0) != 0 ? String.valueOf(mediaMetadata.extras.getInt("discNumber", 0)) : getString(R.string.label_placeholder));
}
}

View File

@@ -145,17 +145,27 @@ public class AlbumPageFragment extends Fragment implements ClickCallback {
bind.albumNameLabel.setText(album.getName());
bind.albumArtistLabel.setText(album.getArtist());
bind.albumReleaseYearLabel.setText(album.getYear() != 0 ? String.valueOf(album.getYear()) : "");
bind.albumReleaseYearLabel.setVisibility(album.getYear() != 0 ? View.VISIBLE : View.GONE);
bind.albumSongCountDurationTextview.setText(getString(R.string.album_page_tracks_count_and_duration, album.getSongCount(), album.getDuration() != null ? album.getDuration() / 60 : 0));
bind.albumGenresTextview.setText(album.getGenre());
if (album.getGenre() != null && !album.getGenre().isEmpty()) {
bind.albumGenresTextview.setText(album.getGenre());
bind.albumGenresTextview.setVisibility(View.VISIBLE);
}
else{
bind.albumGenresTextview.setVisibility(View.GONE);
}
if (album.getReleaseDate() != null && album.getOriginalReleaseDate() != null) {
bind.albumReleaseYearsTextview.setVisibility(View.VISIBLE);
if (album.getReleaseDate().getFormattedDate() != null || album.getOriginalReleaseDate().getFormattedDate() != null)
bind.albumReleaseYearsTextview.setVisibility(View.VISIBLE);
else
bind.albumReleaseYearsTextview.setVisibility(View.GONE);
if (album.getReleaseDate() == null || album.getOriginalReleaseDate() == null) {
if (album.getReleaseDate().getFormattedDate() == null || album.getOriginalReleaseDate().getFormattedDate() == null) {
bind.albumReleaseYearsTextview.setText(getString(R.string.album_page_release_date_label, album.getReleaseDate() != null ? album.getReleaseDate().getFormattedDate() : album.getOriginalReleaseDate().getFormattedDate()));
}
if (album.getReleaseDate() != null && album.getOriginalReleaseDate() != null) {
if (album.getReleaseDate().getFormattedDate() != null && album.getOriginalReleaseDate().getFormattedDate() != null) {
if (Objects.equals(album.getReleaseDate().getYear(), album.getOriginalReleaseDate().getYear()) && Objects.equals(album.getReleaseDate().getMonth(), album.getOriginalReleaseDate().getMonth()) && Objects.equals(album.getReleaseDate().getDay(), album.getOriginalReleaseDate().getDay())) {
bind.albumReleaseYearsTextview.setText(getString(R.string.album_page_release_date_label, album.getReleaseDate().getFormattedDate()));
} else {

View File

@@ -80,13 +80,13 @@ public class HomeFragment extends Fragment {
private void initHomePager() {
HomePager pager = new HomePager(this);
pager.addFragment(new HomeTabMusicFragment(), "Music", R.drawable.ic_home);
pager.addFragment(new HomeTabMusicFragment(), getString(R.string.home_section_music), R.drawable.ic_home);
if (Preferences.isPodcastSectionVisible())
pager.addFragment(new HomeTabPodcastFragment(), "Podcast", R.drawable.ic_graphic_eq);
pager.addFragment(new HomeTabPodcastFragment(), getString(R.string.home_section_podcast), R.drawable.ic_graphic_eq);
if (Preferences.isRadioSectionVisible())
pager.addFragment(new HomeTabRadioFragment(), "Radio", R.drawable.ic_play_for_work);
pager.addFragment(new HomeTabRadioFragment(), getString(R.string.home_section_radio), R.drawable.ic_play_for_work);
bind.homeViewPager.setAdapter(pager);
bind.homeViewPager.setOffscreenPageLimit(3);

View File

@@ -174,7 +174,12 @@ public class PlayerBottomSheetFragment extends Fragment {
playerBottomSheetViewModel.setLiveDescription(mediaMetadata.extras.getString("description", null));
bind.playerHeaderLayout.playerHeaderMediaTitleLabel.setText(mediaMetadata.extras.getString("title"));
bind.playerHeaderLayout.playerHeaderMediaArtistLabel.setText(mediaMetadata.extras.getString("artist"));
bind.playerHeaderLayout.playerHeaderMediaArtistLabel.setText(
mediaMetadata.artist != null
? mediaMetadata.artist
: Objects.equals(mediaMetadata.extras.getString("type"), Constants.MEDIA_TYPE_RADIO)
? mediaMetadata.extras.getString("uri", getString(R.string.label_placeholder))
: "");
CustomGlideRequest.Builder
.from(requireContext(), mediaMetadata.extras.getString("coverArtId"), CustomGlideRequest.ResourceType.Song)
@@ -182,7 +187,11 @@ public class PlayerBottomSheetFragment extends Fragment {
.into(bind.playerHeaderLayout.playerHeaderMediaCoverImage);
bind.playerHeaderLayout.playerHeaderMediaTitleLabel.setVisibility(mediaMetadata.extras.getString("title") != null && !Objects.equals(mediaMetadata.extras.getString("title"), "") ? View.VISIBLE : View.GONE);
bind.playerHeaderLayout.playerHeaderMediaArtistLabel.setVisibility(mediaMetadata.extras.getString("artist") != null && !Objects.equals(mediaMetadata.extras.getString("artist"), "") ? View.VISIBLE : View.GONE);
bind.playerHeaderLayout.playerHeaderMediaArtistLabel.setVisibility(
(mediaMetadata.extras.getString("artist") != null && !Objects.equals(mediaMetadata.extras.getString("artist"), ""))
|| (Objects.equals(mediaMetadata.extras.getString("type"), Constants.MEDIA_TYPE_RADIO) && mediaMetadata.extras.getString("uri") != null)
? View.VISIBLE
: View.GONE);
}
}

View File

@@ -2,6 +2,7 @@ package com.cappielloantonio.tempo.ui.fragment;
import android.content.ComponentName;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -9,6 +10,7 @@ import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.RatingBar;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
@@ -35,11 +37,15 @@ import com.cappielloantonio.tempo.util.Constants;
import com.cappielloantonio.tempo.util.MusicUtil;
import com.cappielloantonio.tempo.util.Preferences;
import com.cappielloantonio.tempo.viewmodel.PlayerBottomSheetViewModel;
import com.cappielloantonio.tempo.viewmodel.RatingViewModel;
import com.google.android.material.chip.Chip;
import com.google.android.material.elevation.SurfaceColors;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@UnstableApi
@@ -49,6 +55,8 @@ public class PlayerControllerFragment extends Fragment {
private InnerFragmentPlayerControllerBinding bind;
private ViewPager2 playerMediaCoverViewPager;
private ToggleButton buttonFavorite;
private RatingViewModel ratingViewModel;
private RatingBar songRatingBar;
private TextView playerMediaTitleLabel;
private TextView playerArtistNameLabel;
private Button playbackSpeedButton;
@@ -71,6 +79,7 @@ public class PlayerControllerFragment extends Fragment {
View view = bind.getRoot();
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
ratingViewModel = new ViewModelProvider(requireActivity()).get(RatingViewModel.class);
init();
initQuickActionView();
@@ -113,6 +122,7 @@ public class PlayerControllerFragment extends Fragment {
playerQuickActionView = bind.getRoot().findViewById(R.id.player_quick_action_view);
playerOpenQueueButton = bind.getRoot().findViewById(R.id.player_open_queue_button);
playerTrackInfo = bind.getRoot().findViewById(R.id.player_info_track);
songRatingBar = bind.getRoot().findViewById(R.id.song_rating_bar);
}
private void initQuickActionView() {
@@ -142,7 +152,6 @@ public class PlayerControllerFragment extends Fragment {
bind.nowPlayingMediaControllerView.setPlayer(mediaBrowser);
mediaBrowser.setShuffleModeEnabled(Preferences.isShuffleModeEnabled());
mediaBrowser.setRepeatMode(Preferences.getRepeatMode());
setMediaControllerListener(mediaBrowser);
} catch (Exception e) {
e.printStackTrace();
@@ -177,27 +186,45 @@ public class PlayerControllerFragment extends Fragment {
private void setMetadata(MediaMetadata mediaMetadata) {
playerMediaTitleLabel.setText(String.valueOf(mediaMetadata.title));
playerArtistNameLabel.setText(String.valueOf(mediaMetadata.artist));
playerArtistNameLabel.setText(
mediaMetadata.artist != null
? String.valueOf(mediaMetadata.artist)
: mediaMetadata.extras != null && Objects.equals(mediaMetadata.extras.getString("type"), Constants.MEDIA_TYPE_RADIO)
? mediaMetadata.extras.getString("uri", getString(R.string.label_placeholder))
: "");
playerMediaTitleLabel.setSelected(true);
playerArtistNameLabel.setSelected(true);
playerMediaTitleLabel.setVisibility(mediaMetadata.title != null && !Objects.equals(mediaMetadata.title, "") ? View.VISIBLE : View.GONE);
playerArtistNameLabel.setVisibility(mediaMetadata.artist != null && !Objects.equals(mediaMetadata.artist, "") ? View.VISIBLE : View.GONE);
playerArtistNameLabel.setVisibility(
(mediaMetadata.artist != null && !Objects.equals(mediaMetadata.artist, ""))
|| mediaMetadata.extras != null && Objects.equals(mediaMetadata.extras.getString("type"), Constants.MEDIA_TYPE_RADIO) && mediaMetadata.extras.getString("uri") != null
? View.VISIBLE
: View.GONE);
}
private void setMediaInfo(MediaMetadata mediaMetadata) {
if (mediaMetadata.extras != null) {
String extension = mediaMetadata.extras.getString("suffix", "Unknown format");
String extension = mediaMetadata.extras.getString("suffix", getString(R.string.player_unknown_format));
String bitrate = mediaMetadata.extras.getInt("bitrate", 0) != 0 ? mediaMetadata.extras.getInt("bitrate", 0) + "kbps" : "Original";
String samplingRate = mediaMetadata.extras.getInt("samplingRate", 0) != 0 ? new DecimalFormat("0.#").format(mediaMetadata.extras.getInt("samplingRate", 0) / 1000.0) + "kHz" : "";
String bitDepth = mediaMetadata.extras.getInt("bitDepth", 0) != 0 ? mediaMetadata.extras.getInt("bitDepth", 0) + "b" : "";
playerMediaExtension.setText(extension);
if (bitrate.equals("Original")) {
playerMediaBitrate.setVisibility(View.GONE);
} else {
List<String> mediaQualityItems = new ArrayList<>();
if (!bitrate.trim().isEmpty()) mediaQualityItems.add(bitrate);
if (!bitDepth.trim().isEmpty()) mediaQualityItems.add(bitDepth);
if (!samplingRate.trim().isEmpty()) mediaQualityItems.add(samplingRate);
String mediaQuality = TextUtils.join("", mediaQualityItems);
playerMediaBitrate.setVisibility(View.VISIBLE);
playerMediaBitrate.setText(bitrate);
playerMediaBitrate.setText(mediaQuality);
}
}
@@ -205,8 +232,8 @@ public class PlayerControllerFragment extends Fragment {
boolean isTranscodingBitrate = !MusicUtil.getBitratePreference().equals("0");
if (isTranscodingExtension || isTranscodingBitrate) {
playerMediaExtension.setText("Transcoding");
playerMediaBitrate.setText("requested");
playerMediaExtension.setText(MusicUtil.getTranscodingFormatPreference() + " (" + getString(R.string.player_transcoding) + ")");
playerMediaBitrate.setText(!MusicUtil.getBitratePreference().equals("0") ? MusicUtil.getBitratePreference() + "kbps" : getString(R.string.player_transcoding_requested));
}
playerTrackInfo.setOnClickListener(view -> {
@@ -292,6 +319,7 @@ public class PlayerControllerFragment extends Fragment {
private void initMediaListenable() {
playerBottomSheetViewModel.getLiveMedia().observe(getViewLifecycleOwner(), media -> {
if (media != null) {
ratingViewModel.setSong(media);
buttonFavorite.setChecked(media.getStarred() != null);
buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext(), media));
buttonFavorite.setOnLongClickListener(v -> {
@@ -302,9 +330,29 @@ public class PlayerControllerFragment extends Fragment {
dialog.setArguments(bundle);
dialog.show(requireActivity().getSupportFragmentManager(), null);
return true;
});
Integer currentRating = media.getUserRating();
if (currentRating != null) {
songRatingBar.setRating(currentRating);
} else {
songRatingBar.setRating(0);
}
songRatingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
if (fromUser) {
ratingViewModel.rate((int) rating);
media.setUserRating((int) rating);
}
}
});
if (getActivity() != null) {
playerBottomSheetViewModel.refreshMediaInfo(requireActivity(), media);
}

View File

@@ -19,6 +19,7 @@ import androidx.media3.common.util.UnstableApi;
import androidx.media3.session.MediaBrowser;
import androidx.media3.session.SessionToken;
import com.cappielloantonio.tempo.R;
import com.cappielloantonio.tempo.databinding.InnerFragmentPlayerCoverBinding;
import com.cappielloantonio.tempo.glide.CustomGlideRequest;
import com.cappielloantonio.tempo.model.Download;
@@ -136,7 +137,7 @@ public class PlayerCoverFragment extends Fragment {
bind.innerButtonBottomRight.setOnClickListener(view -> {
if (playerBottomSheetViewModel.savePlayQueue()) {
Snackbar.make(requireView(), "Salvato", Snackbar.LENGTH_LONG).show();
Snackbar.make(requireView(), R.string.player_queue_save_queue_success, Snackbar.LENGTH_LONG).show();
}
});

View File

@@ -6,11 +6,13 @@ import android.os.Bundle;
import android.os.Handler;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Layout;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -28,6 +30,7 @@ import com.cappielloantonio.tempo.subsonic.models.Line;
import com.cappielloantonio.tempo.subsonic.models.LyricsList;
import com.cappielloantonio.tempo.util.MusicUtil;
import com.cappielloantonio.tempo.util.OpenSubsonicExtensionsUtil;
import com.cappielloantonio.tempo.util.Preferences;
import com.cappielloantonio.tempo.viewmodel.PlayerBottomSheetViewModel;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
@@ -76,12 +79,16 @@ public class PlayerLyricsFragment extends Fragment {
public void onResume() {
super.onResume();
bindMediaController();
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
@Override
public void onPause() {
super.onPause();
releaseHandler();
if (!Preferences.isDisplayAlwaysOn()) {
requireActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
@Override
@@ -281,10 +288,18 @@ public class PlayerLyricsFragment extends Fragment {
}
private int getScroll(List<Line> lines, Line toHighlight) {
int lineHeight = bind.nowPlayingSongLyricsTextView.getLineHeight();
int lineCount = getLineCount(lines, toHighlight);
int scrollViewHeight = bind.nowPlayingSongLyricsSrollView.getHeight();
int startIndex = getStartPosition(lines, toHighlight);
Layout layout = bind.nowPlayingSongLyricsTextView.getLayout();
if (layout == null) return 0;
return lineHeight * lineCount < scrollViewHeight / 2 ? 0 : lineHeight * lineCount - scrollViewHeight / 2 + lineHeight;
int line = layout.getLineForOffset(startIndex);
int lineTop = layout.getLineTop(line);
int lineBottom = layout.getLineBottom(line);
int lineCenter = (lineTop + lineBottom) / 2;
int scrollViewHeight = bind.nowPlayingSongLyricsSrollView.getHeight();
int scroll = lineCenter - scrollViewHeight / 2;
return Math.max(scroll, 0);
}
}

View File

@@ -201,12 +201,22 @@ public class SettingsFragment extends PreferenceFragmentCompat {
localePref.setEntries(entries);
localePref.setEntryValues(entryValues);
localePref.setDefaultValue(entryValues[0]);
localePref.setSummary(Locale.forLanguageTag(localePref.getValue()).getDisplayLanguage());
String value = localePref.getValue();
if ("default".equals(value)) {
localePref.setSummary(requireContext().getString(R.string.settings_system_language));
} else {
localePref.setSummary(Locale.forLanguageTag(value).getDisplayName());
}
localePref.setOnPreferenceChangeListener((preference, newValue) -> {
LocaleListCompat appLocale = LocaleListCompat.forLanguageTags((String) newValue);
AppCompatDelegate.setApplicationLocales(appLocale);
if ("default".equals(newValue)) {
AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList());
preference.setSummary(requireContext().getString(R.string.settings_system_language));
} else {
LocaleListCompat appLocale = LocaleListCompat.forLanguageTags((String) newValue);
AppCompatDelegate.setApplicationLocales(appLocale);
preference.setSummary(Locale.forLanguageTag((String) newValue).getDisplayName());
}
return true;
});
}

View File

@@ -54,6 +54,8 @@ public class MappingUtil {
bundle.putString("transcodedSuffix", media.getTranscodedSuffix());
bundle.putInt("duration", media.getDuration() != null ? media.getDuration() : 0);
bundle.putInt("bitrate", media.getBitrate() != null ? media.getBitrate() : 0);
bundle.putInt("samplingRate", media.getSamplingRate() != null ? media.getSamplingRate() : 0);
bundle.putInt("bitDepth", media.getBitDepth() != null ? media.getBitDepth() : 0);
bundle.putString("path", media.getPath());
bundle.putBoolean("isVideo", media.isVideo());
bundle.putInt("userRating", media.getUserRating() != null ? media.getUserRating() : 0);
@@ -138,7 +140,6 @@ public class MappingUtil {
Bundle bundle = new Bundle();
bundle.putString("id", internetRadioStation.getId());
bundle.putString("title", internetRadioStation.getName());
bundle.putString("artist", uri.toString());
bundle.putString("uri", uri.toString());
bundle.putString("type", Constants.MEDIA_TYPE_RADIO);
@@ -147,7 +148,6 @@ public class MappingUtil {
.setMediaMetadata(
new MediaMetadata.Builder()
.setTitle(internetRadioStation.getName())
.setArtist(internetRadioStation.getStreamUrl())
.setExtras(bundle)
.setIsBrowsable(false)
.setIsPlayable(true)

View File

@@ -15,6 +15,7 @@ import com.cappielloantonio.tempo.repository.DownloadRepository;
import com.cappielloantonio.tempo.subsonic.models.Child;
import java.text.CharacterIterator;
import java.text.DecimalFormat;
import java.text.StringCharacterIterator;
import java.util.ArrayList;
import java.util.List;
@@ -163,6 +164,12 @@ public class MusicUtil {
" " +
child.getBitrate() +
"kbps" +
"" +
(child.getBitDepth() != null && child.getBitDepth() != 0
? child.getBitDepth() + "/" + (child.getSamplingRate() != null ? child.getSamplingRate() / 1000 : "")
: (child.getSamplingRate() != null
? new DecimalFormat("0.#").format(child.getSamplingRate() / 1000.0) + "kHz"
: "")) +
" " +
child.getSuffix();
}

View File

@@ -8,6 +8,7 @@ import android.graphics.drawable.InsetDrawable;
import androidx.core.os.LocaleListCompat;
import androidx.recyclerview.widget.DividerItemDecoration;
import com.cappielloantonio.tempo.App;
import com.cappielloantonio.tempo.R;
import org.xmlpull.v1.XmlPullParser;
@@ -15,9 +16,10 @@ import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -74,17 +76,32 @@ public class UIUtil {
public static Map<String, String> getLangPreferenceDropdownEntries(Context context) {
LocaleListCompat localeList = getLocalesFromResources(context);
Map<String, String> map = new HashMap<>();
List<Map.Entry<String, String>> localeArrayList = new ArrayList<>();
String systemDefaultLabel = App.getContext().getString(R.string.settings_system_language);
String systemDefaultValue = "default";
for (int i = 0; i < localeList.size(); i++) {
Locale locale = localeList.get(i);
if (locale != null) {
map.put(Util.toPascalCase(locale.getDisplayName()), locale.toLanguageTag());
localeArrayList.add(
new AbstractMap.SimpleEntry<>(
Util.toPascalCase(locale.getDisplayName()),
locale.toLanguageTag()
)
);
}
}
return map;
localeArrayList.sort(Map.Entry.comparingByKey(String.CASE_INSENSITIVE_ORDER));
LinkedHashMap<String, String> orderedMap = new LinkedHashMap<>();
orderedMap.put(systemDefaultLabel, systemDefaultValue);
for (Map.Entry<String, String> entry : localeArrayList) {
orderedMap.put(entry.getKey(), entry.getValue());
}
return orderedMap;
}
public static String getReadableDate(Date date) {

View File

@@ -103,7 +103,6 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel {
favoriteRepository.starLater(media.getId(), null, null, false);
}
});
media.setStarred(null);
}
@@ -131,7 +130,7 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel {
}
}
public LiveData<String> getLiveLyrics() {
public LiveData<String> getLiveLyrics() {
return lyricsLiveData;
}

View File

@@ -47,6 +47,8 @@
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/activity_info_offline_mode"
android:textSize="6sp"
android:textSize="12sp"
android:textStyle="bold"
android:visibility="gone" />
</LinearLayout>

View File

@@ -391,6 +391,58 @@
android:text="@string/label_placeholder" />
</LinearLayout>
<View
style="@style/Divider"
android:layout_gravity="center_vertical"
android:layout_marginVertical="8dp" />
<LinearLayout
android:id="@+id/sampling_rate_info_sector"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/sampling_rate_key_sector"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:paddingEnd="8dp"
android:text="@string/track_info_sampling_rate" />
<TextView
android:id="@+id/sampling_rate_value_sector"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="7"
android:text="@string/label_placeholder" />
</LinearLayout>
<View
style="@style/Divider"
android:layout_gravity="center_vertical"
android:layout_marginVertical="8dp" />
<LinearLayout
android:id="@+id/bit_depth_info_sector"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/bit_depth_key_sector"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:paddingEnd="8dp"
android:text="@string/track_info_bit_depth" />
<TextView
android:id="@+id/bit_depth_value_sector"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="7"
android:text="@string/label_placeholder" />
</LinearLayout>
<View
style="@style/Divider"
android:layout_gravity="center_vertical"

View File

@@ -126,9 +126,11 @@
android:layout_marginEnd="18dp"
android:text="@string/label_placeholder"
android:textAlignment="center"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<TextView
android:id="@+id/album_song_count_duration_textview"

View File

@@ -81,14 +81,14 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:ellipsize="marquee"
android:singleLine="true"
android:text="@string/label_placeholder"
app:layout_constraintEnd_toStartOf="@+id/button_favorite"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/guideline" />
app:layout_constraintTop_toBottomOf="@+id/rating_container" />
<TextView
android:id="@+id/player_artist_name_label"
@@ -104,6 +104,39 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/player_media_title_label" />
<LinearLayout
android:id="@+id/rating_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:orientation="horizontal"
android:gravity="center"
android:scaleX="0.8"
android:scaleY="0.8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/guideline">
<RatingBar
android:id="@+id/song_rating_bar"
style="?android:attr/ratingBarStyleIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="1"
android:rating="0"
android:isIndicator="false" />
<TextView
android:id="@+id/rating_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:textSize="12sp"
android:textColor="?attr/colorOnSurfaceVariant"
android:text=""/>
</LinearLayout>
<ToggleButton
android:id="@+id/button_favorite"
android:layout_width="26dp"
@@ -136,7 +169,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="20dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
app:bar_height="2dp"
app:buffered_color="?attr/colorOnSecondaryContainer"

View File

@@ -103,6 +103,9 @@
<string name="home_rearrangement_dialog_positive_button">Sichern</string>
<string name="home_rearrangement_dialog_title">Startseite anpassen</string>
<string name="home_rearrangement_dialog_subtitle">Die Anwendung muss neu gestartet werden, um die Änderungen auszuführen.</string>
<string name="home_section_music">Musik</string>
<string name="home_section_podcast">Podcast</string>
<string name="home_section_radio">Radio</string>
<string name="home_subtitle_best_of">Top Tracks Deiner Lieblingskünstler</string>
<string name="home_subtitle_made_for_you">Ein Mix von einem deiner Lieblingslieder erstellen</string>
<string name="home_subtitle_new_internet_radio_station">Radio hinzufügen</string>
@@ -286,6 +289,7 @@
<string name="settings_github_title">Github</string>
<string name="settings_image_size">Bilder Auflösung anpassen</string>
<string name="settings_language">Sprache</string>
<string name="settings_system_language">Systemsprache</string>
<string name="settings_logout_title">Abmelden</string>
<string name="settings_max_bitrate_download">Bitrate für Downloads</string>
<string name="settings_max_bitrate_mobile">Bitrate bei mobiler Nutzung</string>
@@ -392,6 +396,7 @@
<string name="track_info_title">Titel</string>
<string name="track_info_album">Album</string>
<string name="track_info_artist">Künstler</string>
<string name="track_info_bit_depth">Bit-Tiefe</string>
<string name="track_info_track_number">Track Nummer</string>
<string name="track_info_year">Jahr</string>
<string name="track_info_genre">Genre</string>
@@ -402,6 +407,7 @@
<string name="track_info_transcoded_suffix">Transkodiertes Suffix</string>
<string name="track_info_duration">Länge</string>
<string name="track_info_bitrate">Bitrate</string>
<string name="track_info_sampling_rate">Abtastrate</string>
<string name="track_info_path">Pfad</string>
<string name="track_info_disc_number">Disk Nummer</string>
<string name="track_info_summary_downloaded_file">Diese Datei wurde mit den Subsonic APIs heruntergeladen. Der Codec und die Bitrate sind unverändert zur original Datei.</string>

View File

@@ -104,6 +104,9 @@
<string name="home_rearrangement_dialog_positive_button">Guardar</string>
<string name="home_rearrangement_dialog_title">Reorganizar la página de inicio</string>
<string name="home_rearrangement_dialog_subtitle">Tenga en cuenta que para que los cambios surtan efecto, hay que reiniciar la aplicación.</string>
<string name="home_section_music">Música</string>
<string name="home_section_podcast">Pódcasts</string>
<string name="home_section_radio">Radio</string>
<string name="home_subtitle_best_of">Mejores pistas de tus artistas favoritos</string>
<string name="home_subtitle_made_for_you">Iniciar mix desde una cación que te gustó</string>
<string name="home_subtitle_new_internet_radio_station">Añadir una nueva emisora de radio</string>
@@ -164,6 +167,7 @@
<string name="menu_group_by_artist">Artista</string>
<string name="settings_image_size">Resolución de la imagen</string>
<string name="settings_language">Idioma</string>
<string name="settings_system_language">Idioma del sistema</string>
<string name="settings_logout_title">Cerrar sesión</string>
<string name="settings_github_link">https://github.com/eddyizm/tempo</string>
<string name="settings_github_summary">Siga el desarrollo</string>
@@ -192,6 +196,9 @@
<string name="player_playback_speed">%1$.2fx</string>
<string name="player_queue_clean_all_button">Limpiar la cola de reproducción</string>
<string name="player_server_priority">Prioridad del servidor</string>
<string name="player_unknown_format">Formato desconocido</string>
<string name="player_transcoding">Transcodificando</string>
<string name="player_transcoding_requested">solicitado</string>
<string name="playlist_catalogue_title">Catálogo de listas de reproducción</string>
<string name="playlist_catalogue_title_expanded">Explorar listas de reproducción</string>
<string name="playlist_chooser_dialog_empty">No hay listas de reproducción</string>
@@ -312,7 +319,9 @@
<string name="streaming_cache_storage_internal_dialog_negative_button">Interno</string>
<string name="track_info_album">Álbum</string>
<string name="track_info_artist">Artista</string>
<string name="track_info_bit_depth">Profundidad de bits</string>
<string name="track_info_bitrate">Tasa de bits</string>
<string name="track_info_sampling_rate">Tasa de muestreo</string>
<string name="track_info_content_type">Tipo de contenido</string>
<string name="track_info_dialog_positive_button">Aceptar</string>
<string name="track_info_transcoded_content_type">Tipo de contenido en la transcodificación</string>

View File

@@ -32,6 +32,21 @@
<item>300</item>
</string-array>
<string-array name="streaming_cache_size_titles">
<item>Désactivé</item>
<item>128 MiB</item>
<item>256 MiB</item>
<item>512 MiB</item>
<item>1024 MiB</item>
</string-array>
<string-array name="streaming_cache_size_values">
<item>0</item>
<item>128</item>
<item>256</item>
<item>512</item>
<item>1024</item>
</string-array>
<string-array name="max_bitrate_wifi_list_titles">
<item>Original</item>
<item>32 kbps</item>

View File

@@ -24,7 +24,10 @@
<string name="album_list_page_title">Albums</string>
<string name="album_page_extra_info_button">Similaire</string>
<string name="album_page_play_button">Lire</string>
<string name="album_page_release_date_label">Sorti le %1$s</string>
<string name="album_page_release_dates_label">Sorti le %1$s, initialement %2$s</string>
<string name="album_page_shuffle_button">Mélanger</string>
<string name="album_page_tracks_count_and_duration">%1$d titres • %2$d minutes</string>
<string name="app_name">Tempo</string>
<string name="artist_adapter_radio_station_starting">Recherche…</string>
<string name="artist_bottom_sheet_instant_mix">Mix instantané</string>
@@ -51,13 +54,16 @@
<string name="connection_alert_dialog_negative_button">Annuler</string>
<string name="connection_alert_dialog_neutral_button">Activer l\'économie de données</string>
<string name="connection_alert_dialog_positive_button">OK</string>
<string name="connection_alert_dialog_summary">L\'accès au serveur Subsonic sur des connexions autres que le Wi-Fi ont été bloquées. Pour empêcher cette alerte de réapparaître, désactiver la vérification de la connexion dans les paramètres de l\'app.</string>
<string name="connection_alert_dialog_summary">L\'accès au serveur Subsonic sur des connexions autres que le Wi-Fi a été bloqué. Pour empêcher cette alerte de réapparaître, désactiver la vérification de la connexion dans les paramètres de l\'app.</string>
<string name="connection_alert_dialog_title">Wi-Fi déconnecté</string>
<string name="content_description_shuffle_button">Mélanger</string>
<string name="delete_download_storage_dialog_negative_button">Annuler</string>
<string name="delete_download_storage_dialog_positive_button">Continuer</string>
<string name="delete_download_storage_dialog_summary">Sachez que la poursuite de cette action entraînera la suppression permanente de tous les éléments sauvegardés et téléchargés à partir de tous les serveurs</string>
<string name="delete_download_storage_dialog_summary">Attention, la poursuite de cette action entraînera la suppression définitive de tous les éléments sauvegardés et téléchargés à partir de tous les serveurs</string>
<string name="delete_download_storage_dialog_title">Supprimer les éléments téléchargés</string>
<string name="description_empty_title">Aucune description disponible</string>
<string name="disc_titlefull">Disque %1$s - %2$s</string>
<string name="disc_titleless">Disque %1$s</string>
<string name="download_directory_dialog_negative_button">Annuler</string>
<string name="download_directory_dialog_positive_button">Télécharger</string>
<string name="download_directory_dialog_summary">Toutes les pistes dans ce dossier seront téléchargées. Les pistes dans les sous-dossiers ne seront pas téléchargées.</string>
@@ -66,8 +72,9 @@
<string name="download_info_empty_title">Aucun téléchargement pour l\'instant</string>
<string name="download_item_multiple_subtitle_formatter">%1$s • %2$s éléments</string>
<string name="download_item_single_subtitle_formatter">%1$s éléments</string>
<string name="download_shuffle_all_subtitle">Tout mélanger</string>
<string name="download_storage_dialog_sub_summary">Redémarrez l\'application pour appliquer les changements.</string>
<string name="download_storage_dialog_summary">Changer la destination des téléchargements d\'un espace de stockage à un autre résultera en la suppression immédiate de tous les fichiers précédemment téléchargés dans l\'autre espace de stockage.</string>
<string name="download_storage_dialog_summary">Modifier le chemin de stockage des téléchargements entraînera la suppression immédiate de tous les fichiers précédemment téléchargés dans le nouvel espace de stockage.</string>
<string name="download_storage_dialog_title">Sélectionnez l\'option de stockage</string>
<string name="download_storage_external_dialog_positive_button">Externe</string>
<string name="download_storage_internal_dialog_negative_button">Interne</string>
@@ -84,8 +91,23 @@
<string name="filter_info_selection">Sélectionnez deux filtres ou plus</string>
<string name="filter_title">Filtrer</string>
<string name="filter_title_expanded">Filtrer par genre</string>
<string name="generic_list_page_count">(%1$d)</string>
<string name="generic_list_page_count_unknown">(+%1$d)</string>
<string name="genre_catalogue_title">Catalogue des Genres</string>
<string name="genre_catalogue_title_expanded">Parcourir les Genres</string>
<string name="github_update_dialog_negative_button">Me rappeler plus tard</string>
<string name="github_update_dialog_neutral_button">Me soutenir</string>
<string name="github_update_dialog_positive_button">Télécharger maintenant</string>
<string name="github_update_dialog_summary">Une version plus récente de l\'app est disponible sur Github.</string>
<string name="github_update_dialog_title">Mise à jour disponible</string>
<string name="home_rearrangement_dialog_negative_button">Annuler</string>
<string name="home_rearrangement_dialog_neutral_button">Réinitialiser</string>
<string name="home_rearrangement_dialog_positive_button">Sauvegarder</string>
<string name="home_rearrangement_dialog_title">Réorganiser l\'écran d\'accueil</string>
<string name="home_rearrangement_dialog_subtitle">Veuillez noter que ces changements ne s\'appliqueront qu\'après redémarrage de l\'application.</string>
<string name="home_section_music">Musique</string>
<string name="home_section_podcast">Podcast</string>
<string name="home_section_radio">Radio</string>
<string name="home_subtitle_best_of">Meilleurs morceaux de vos artistes préférés</string>
<string name="home_subtitle_made_for_you">Commencez le mix à partir d\'une chanson que vous aimez</string>
<string name="home_subtitle_new_internet_radio_station">Ajouter une radio</string>
@@ -102,11 +124,14 @@
<string name="home_title_last_played">Écouté dernièrement</string>
<string name="home_title_last_played_see_all_button">Voir tout</string>
<string name="home_title_last_week">Sur la dernière semaine</string>
<string name="home_title_last_month">Sur le dernier mois</string>
<string name="home_title_last_year">Sur la dernière année</string>
<string name="home_title_made_for_you">Faits pour vous</string>
<string name="home_title_most_played">Les plus écoutés</string>
<string name="home_title_most_played_see_all_button">Voir tout</string>
<string name="home_title_new_releases">Nouvelles sorties</string>
<string name="home_title_newest_podcasts">Nouveau podcasts</string>
<string name="home_title_pinned_playlists">Playlists</string>
<string name="home_title_podcast_channels">Chaînes</string>
<string name="home_title_podcast_channels_see_all_button">Voir tout</string>
<string name="home_title_radio_station">Stations radio</string>
@@ -120,6 +145,7 @@
<string name="home_title_starred_tracks">★ Titres favoris</string>
<string name="home_title_starred_tracks_see_all_button">Voir tout</string>
<string name="home_title_top_songs">Vos morceaux préférés</string>
<string name="home_option_reorganize">Réorganiser</string>
<string name="library_title_album">Albums</string>
<string name="library_title_album_see_all_button">Voir tout</string>
<string name="library_title_artist">Artistes</string>
@@ -144,13 +170,23 @@
<string name="menu_group_by_genre">Genre</string>
<string name="menu_group_by_track">Piste</string>
<string name="menu_group_by_year">Année</string>
<string name="menu_home_label">Home</string>
<string name="menu_library_label">Librairie</string>
<string name="menu_home_label">Accueil</string>
<string name="menu_last_week_name">Sur la dernière semaine</string>
<string name="menu_last_month_name">Sur le dernier mois</string>
<string name="menu_last_year_name">Sur la dernière année</string>
<string name="menu_library_label">Bibliothèque</string>
<string name="menu_search_button">Rechercher</string>
<string name="menu_settings_button">Paramètres</string>
<string name="menu_sort_artist">Artiste</string>
<string name="menu_sort_name">Nom</string>
<string name="menu_sort_random">Aléatoire</string>
<string name="menu_sort_recently_added">Récemment ajoutés</string>
<string name="menu_sort_recently_played">Récemment lus</string>
<string name="menu_sort_most_played">Plus lus</string>
<string name="menu_sort_most_recently_starred">Favoris les plus récents</string>
<string name="menu_sort_least_recently_starred">Favoris les plus anciens</string>
<string name="menu_pin_button">Ajouter à l\'écran d\'accueil</string>
<string name="menu_unpin_button">Retirer de l\'écran d\'accueil</string>
<string name="menu_sort_year">Année</string>
<string name="player_playback_speed">%1$.2fx</string>
<string name="player_queue_clean_all_button">Vider la file d\'attente</string>
@@ -161,8 +197,11 @@
<string name="playlist_chooser_dialog_negative_button">Annuler</string>
<string name="playlist_chooser_dialog_neutral_button">Créer</string>
<string name="playlist_chooser_dialog_title">Ajouter à une playlist</string>
<string name="playlist_chooser_dialog_toast_add_success">Titre ajouté à la playlist</string>
<string name="playlist_chooser_dialog_toast_add_failure">Échec d\'ajout du titre à la playlist</string>
<string name="playlist_counted_tracks">%1$d titres • %2$s</string>
<string name="playlist_duration">Durée • %1$s</string>
<string name="playlist_editor_dialog_action_delete_toast">Appui long pour supprimer</string>
<string name="playlist_editor_dialog_hint_name">Nom de la playlist</string>
<string name="playlist_editor_dialog_negative_button">Annuler</string>
<string name="playlist_editor_dialog_neutral_button">Supprimer</string>
@@ -208,6 +247,8 @@
<string name="search_title_artist">Artistes</string>
<string name="search_title_song">Pistes</string>
<string name="server_signup_dialog_action_low_security">Sécurité basse</string>
<string name="server_signup_dialog_action_delete_toast">Appui long pour supprimer</string>
<string name="server_signup_dialog_hint_local_address">URL local</string>
<string name="server_signup_dialog_hint_name">Nom du serveur</string>
<string name="server_signup_dialog_hint_password">Mot de passe</string>
<string name="server_signup_dialog_hint_url">URL du serveur</string>
@@ -221,8 +262,9 @@
<string name="server_unreachable_dialog_positive_button">Continuer quand même</string>
<string name="server_unreachable_dialog_summary">Le serveur est injoignable. Si vous décidez de continuer, cette fenêtre n\'apparaîtra plus pendant une heure.</string>
<string name="server_unreachable_dialog_title">Serveur injoignable</string>
<string name="settings_about_summary">Tempo est un client open source et léger pour Subsonic, développé et build nativement pour Android.</string>
<string name="settings_about_summary">Tempo est un client open source et léger pour Subsonic, développé et compilé nativement pour Android.</string>
<string name="settings_about_title">À propos</string>
<string name="settings_always_on_display">Toujours visible</string>
<string name="settings_audio_transcode_download_format">Format de transcodage</string>
<string name="settings_audio_transcode_download_priority_summary">Si activé, Tempo ne forcera pas le téléchargement de la piste avec les paramètres de transcodage ci-dessous.</string>
<string name="settings_audio_transcode_download_priority_title">Prioriser les paramètres du serveurs, utilisés pour le streaming, dans les téléchargements</string>
@@ -238,6 +280,8 @@
<string name="settings_audio_transcode_priority_toast">La priorité au transcodage de la piste est donnée au serveur</string>
<string name="settings_buffering_strategy">Stratégie de mise en mémoire tampon</string>
<string name="settings_buffering_strategy_summary">Redémarrez l\'application pour appliquer les changements.</string>
<string name="settings_continuous_play_summary">Permet de prolonger la lecture après la fin d\'une playlist avec des titres similaires</string>
<string name="settings_continuous_play_title">Lecture continue</string>
<string name="settings_covers_cache">Taille du cache des illustrations</string>
<string name="settings_data_saving_mode_summary">Pour réduire la consommation de données, éviter de télécharger les illustrations.</string>
<string name="settings_data_saving_mode_title">Limiter l\'utilisation des données mobiles</string>
@@ -252,14 +296,18 @@
<string name="settings_image_size">Définir la résolution des images</string>
<string name="settings_language">Langue</string>
<string name="settings_logout_title">Se déconnecter</string>
<string name="settings_max_bitrate_download">Bitrate pour les téléchargements</string>
<string name="settings_max_bitrate_mobile">Bitrate en données mobile</string>
<string name="settings_max_bitrate_wifi">Bitrate en Wi-Fi</string>
<string name="settings_max_bitrate_download">Débit binaire pour les téléchargements</string>
<string name="settings_max_bitrate_mobile">Débit binaire en données mobile</string>
<string name="settings_max_bitrate_wifi">Débit binaire en Wi-Fi</string>
<string name="settings_media_cache">Taille du cache des fichiers audios</string>
<string name="settings_music_directory">Afficher les dossiers</string>
<string name="settings_music_directory_summary">Si activé, rend possible la navigation dans les répertoires. À noter que pour que la navigation dans les dossiers fonctionne correctement, le serveur doit supporter cette fonctionnalité.</string>
<string name="settings_podcast">Voir les podcasts</string>
<string name="settings_podcast_summary">Si activé, rend visible la section Podcast</string>
<string name="settings_audio_quality">Afficher la qualité audio</string>
<string name="settings_audio_quality_summary">Le débit binaire et le format audio seront affichés pour chaque piste.</string>
<string name="settings_item_rating">Afficher la note</string>
<string name="settings_item_rating_summary">Si activé, la note et le statut de mise en favori de l\'élément seront affichés.</string>
<string name="settings_queue_syncing_countdown">Minuteur de synchronisation</string>
<string name="settings_queue_syncing_summary">Si activé, l\'utilisateur pourra sauvegarder sa file d\'attente et la recharger au démarrage de l\'application.</string>
<string name="settings_queue_syncing_title">Synchroniser la file d\'attente pour cet utilisateur</string>
@@ -272,15 +320,19 @@
<string name="settings_rounded_corner_summary">Si activé, arrondi les angles des illustrations. Les modifications prendront effet au redémarrage.</string>
<string name="settings_scan_title">Scanner la bibliothèque</string>
<string name="settings_scrobble_title">Activer le scrobbling</string>
<string name="settings_system_language">Langue du système</string>
<string name="settings_share_title">Activer le partage de musique</string>
<string name="settings_streaming_cache_size">Taille du cache de streaming</string>
<string name="settings_streaming_cache_storage_title">Emplacement du cache de streaming</string>
<string name="settings_sub_summary_scrobble">À noter que le scrobbling doit être activé sur le serveur pour qu\'il puisse recevoir ces données</string>
<string name="settings_summary_skip_min_star_rating">Lors de l\'écoute de la radio d\'un artiste, d\'un mix instantané ou de tout la bibliothèque en aléatoire, les pistes en dessous d\'une certaine note seront ignorées.</string>
<string name="settings_summary_replay_gain">Le Replay Gain est une fonctionnalité qui vous permet d\'ajuster le volume des pistes audio pour une expérience d\'écoute cohérente. Fonctionne uniquement si la piste contient les métadonnées nécessaires.</string>
<string name="settings_summary_scrobble">Le scrobbling permet à votre appareil d\'envoyer des informations sur les musiques que vous écoutez au serveur afin de créer des recommendations personnalisées basées sur vos préférences musicales.</string>
<string name="settings_summary_share">Permet à l\'utilisateur de partager de la musique via un lien. Cette fonctionnalité doit être supportée et activée sur le serveur et est limitée aux pistes, albums et playlists individuellement.</string>
<string name="settings_summary_syncing">Renvoie l\'état de la file d\'attente de cet utilisateur. Cela inclut les pistes dans la file, la piste actuellement écoutée et la position dans la piste. Cette fonctionnalité doit être supportée par le serveur.</string>
<string name="settings_summary_transcoding">Le mode de transcodage à prioriser. Si reglé sur \"Lecture directe\", le bitrate du fichier ne sera pas modifié.</string>
<string name="settings_summary_transcoding_download">Télécharge les médias transcodés. Si activé, les paramètres de transcodage suivants seront utilisés pour les téléchargements.\n\n Si le format de transcodage est reglé à \"Téléchargement direct\", le bitrate du fichier ne sera pas modifé.</string>
<string name="settings_summary_streaming_cache_size">%1$s \nUtilisé actuellement : %2$s MiB</string>
<string name="settings_summary_transcoding">Le mode de transcodage à prioriser. Si réglé sur \"Lecture directe\", le bit binaire du fichier ne sera pas modifié.</string>
<string name="settings_summary_transcoding_download">Télécharge les médias transcodés. Si activé, les paramètres de transcodage suivants seront utilisés pour les téléchargements.\n\n Si le format de transcodage est reglé à \"Téléchargement direct\", le débit binaire du fichier ne sera pas modifé.</string>
<string name="settings_summary_transcoding_estimate_content_length">Quand le fichier est transcodé à la volé, en général, le client n\'affiche pas la durée de la piste. Il est possible de demander aux serveurs qui le supportent d\'estimer la durée de la piste écoutée, mais les temps de réponses peuvent être plus longs.</string>
<string name="settings_sync_starred_tracks_for_offline_use_summary">Si activé, les pistes favorites seront téléchargées pour l\'écoute hors-ligne</string>
<string name="settings_sync_starred_tracks_for_offline_use_title">Synchronisation des pistes favorites pour écoute hors-ligne</string>
@@ -291,7 +343,7 @@
<string name="settings_title_replay_gain">Replay Gain</string>
<string name="settings_title_scrobble">Scrobble</string>
<string name="settings_title_skip_min_star_rating">Ignorer des musiques selon leur note</string>
<string name="settings_title_skip_min_star_rating_dialog">Musiques avec une note de:</string>
<string name="settings_title_skip_min_star_rating_dialog">Musiques avec une note de :</string>
<string name="settings_title_share">Partage</string>
<string name="settings_title_syncing">Synchronisation</string>
<string name="settings_title_transcoding">Transcodage</string>
@@ -336,9 +388,16 @@
<string name="starred_sync_dialog_positive_button">Continuer et télécharger</string>
<string name="starred_sync_dialog_summary">Le téléchargement des titres favoris pourrer utiliser beaucoup de données.</string>
<string name="starred_sync_dialog_title">Synchroniser les titres favoris</string>
<string name="streaming_cache_storage_dialog_sub_summary">Veuillez redémarrer l\'app pour appliquer les changements.</string>
<string name="streaming_cache_storage_dialog_summary">Modifier le chemin de stockage des fichiers mis en cache risque de provoquer la suppression de tous les fichiers précédemment mis en cache dans le nouvel espace de stockage.</string>
<string name="streaming_cache_storage_dialog_title">Sélectionner une option de stockage</string>
<string name="streaming_cache_storage_external_dialog_positive_button">Externe</string>
<string name="streaming_cache_storage_internal_dialog_negative_button">Interne</string>
<string name="support_url">https://buymeacoffee.com/a.cappiello</string>
<string name="track_info_album">Album</string>
<string name="track_info_artist">Artiste</string>
<string name="track_info_bitrate">Bitrate</string>
<string name="track_info_bit_depth">Résolution audio</string>
<string name="track_info_bitrate">Débit binaire</string>
<string name="track_info_content_type">Type de contenu</string>
<string name="track_info_dialog_positive_button">OK</string>
<string name="track_info_dialog_title">Infos piste</string>
@@ -346,14 +405,15 @@
<string name="track_info_duration">Durée</string>
<string name="track_info_genre">Genre</string>
<string name="track_info_path">Chemin</string>
<string name="track_info_sampling_rate">Fréquence d\'échantillonnage</string>
<string name="track_info_size">Taille</string>
<string name="track_info_suffix">Suffixe</string>
<string name="track_info_summary_downloaded_file">Le fichier a été téléchargé depuis les APIs Subsonic. Le codec et le bitrate du fichier demeure inchangé du fichier d\'origine.</string>
<string name="track_info_summary_full_transcode">L\'application demandera au serveur de transcoder le fichier et de modifier son bitrate. Le codec demandé par l\'utilisateur est %1$s, avec un bitrate de %2$s. Toute modification éventuelle du codec et du bitrate du fichier dans le format choisi sera gérée par le serveur, qui peut ou non prendre en charge l\'opération.</string>
<string name="track_info_summary_original_file">L\'application ne lira que le fichier original tel que fourni par le serveur. L\'application demandera explicitement au serveur le fichier non transcodé avec le bitrate de la source originale.</string>
<string name="track_info_summary_server_prioritized">La qualité du fichier à lire est laissée à l\'appréciation du serveur. L\'application n\'impose pas le choix du codec et du bitrate pour un éventuel transcodage.</string>
<string name="track_info_summary_transcoding_bitrate">L\'application demandera au serveur de modifier le bitrate du fichier. L\'utilisateur a choisi un bitrate de %1$s, tandis que le codec du fichier restera le même. Toute modification du bitrate du fichier dans le format choisi sera effectuée par le serveur, qui peut ou non prendre en charge l\'opération. </string>
<string name="track_info_summary_transcoding_codec">L\'application demandera au serveur de transcoder le fichier. Le codec choisi par l\'utilisateur est le %1$s, tandis que le bitrate sera le même que celui du fichier source. Le transcodage éventuel du fichier dans le codec choisi dépend du serveur, qui peut ou non prendre en charge l\'opération.</string>
<string name="track_info_summary_downloaded_file">Le fichier a été téléchargé depuis les APIs Subsonic. Le codec et le bit binaire du fichier demeurent identiques à ceux du fichier d\'origine.</string>
<string name="track_info_summary_full_transcode">L\'application demandera au serveur de transcoder le fichier et de modifier son bit binaire. Le codec demandé par l\'utilisateur est %1$s, avec un bit binaire de %2$s. Toute modification éventuelle du codec et du bit binaire du fichier dans le format choisi sera gérée par le serveur, qui peut ou non prendre en charge l\'opération.</string>
<string name="track_info_summary_original_file">L\'application ne lira que le fichier original tel que fourni par le serveur. L\'application demandera explicitement au serveur le fichier non transcodé avec le bit binaire de la source originale.</string>
<string name="track_info_summary_server_prioritized">La qualité du fichier à lire est laissée à l\'appréciation du serveur. L\'application n\'impose pas le choix du codec et du bit binaire pour un éventuel transcodage.</string>
<string name="track_info_summary_transcoding_bitrate">L\'application demandera au serveur de modifier le bit binaire du fichier. L\'utilisateur a choisi un bit binaire de %1$s, tandis que le codec du fichier restera le même. Toute modification du bit binaire du fichier dans le format choisi sera effectuée par le serveur, qui peut ou non prendre en charge l\'opération. </string>
<string name="track_info_summary_transcoding_codec">L\'application demandera au serveur de transcoder le fichier. Le codec choisi par l\'utilisateur est le %1$s, tandis que le bit binaire sera le même que celui du fichier source. Le transcodage éventuel du fichier dans le codec choisi dépend du serveur, qui peut ou non prendre en charge l\'opération.</string>
<string name="track_info_title">Titre</string>
<string name="track_info_track_number">Numéro de piste</string>
<string name="track_info_transcoded_content_type">Transcodé type de contenu</string>

View File

@@ -183,6 +183,7 @@
<string name="menu_sort_year">Anno</string>
<string name="player_playback_speed">%1$.2fx</string>
<string name="player_queue_clean_all_button">Svuota coda di riproduzione</string>
<string name="player_queue_save_queue_success">Salvato</string>
<string name="player_server_priority">Priorità server</string>
<string name="playlist_catalogue_title">Catalogo playlist</string>
<string name="playlist_catalogue_title_expanded">Sfoglia le playlist</string>

View File

@@ -41,7 +41,7 @@
</style>
<style name="NoConnectionTextView">
<item name="background">?attr/colorError</item>
<item name="android:textColor">?attr/colorOnError</item>
<item name="background">?attr/colorErrorContainer</item>
<item name="android:textColor">?attr/colorOnErrorContainer</item>
</style>
</resources>

View File

@@ -103,7 +103,13 @@
<string name="home_rearrangement_dialog_neutral_button">Reset</string>
<string name="home_rearrangement_dialog_positive_button">Zapisz</string>
<string name="home_rearrangement_dialog_title">Zmień układ strony głównej</string>
<string name="home_rearrangement_dialog_subtitle">Weź pod uwagę to że, żeby zmiany nastąpiły, musisz zrestartować aplikację.</string>
<string name="home_rearrangement_dialog_subtitle">Weź pod uwagę to że, żeby zmiany nastąpiły, musisz zrestartować aplikację.</string>
<string name="home_section_music">Muzyka</string>
<string name="home_section_podcast">Podcasty</string>
<string name="home_section_radio">Radio</string>
<string name="track_info_bit_depth">Głębia bitowa</string>
<string name="track_info_sampling_rate">Częstotliwość próbkowania</string>
<string name="settings_system_language">Język systemu</string>
<string name="home_subtitle_best_of">Top piosenki od twoich ulubionych wykonawców</string>
<string name="home_subtitle_made_for_you">Stwórz miks z piosenki którą lubisz</string>
<string name="home_subtitle_new_internet_radio_station">Dodaj nowe radio</string>
@@ -415,4 +421,4 @@
<string name="undraw_page">unDraw</string>
<string name="undraw_thanks">Specjalne podziękowania dla unDraw bez którego ilustracji nie mogliśmy uczynić tej aplikacji jeszcze piękniejszą.</string>
<string name="undraw_url">https://undraw.co/</string>
</resources>
</resources>

View File

@@ -0,0 +1,257 @@
<resources>
<string-array name="theme_list_titles">
<item>ık</item>
<item>Koyu</item>
<item>Sistem varsayılanı</item>
</string-array>
<string-array name="theme_list_values">
<item>light</item>
<item>dark</item>
<item>default</item>
</string-array>
<string-array name="pref_cache_size_titles">
<item>Yüksek</item>
<item>Orta</item>
<item>Düşük</item>
</string-array>
<string-array name="pref_cache_size_values">
<item>500</item>
<item>250</item>
<item>125</item>
</string-array>
<string-array name="pref_image_size_titles">
<item>Yüksek</item>
<item>Orta</item>
<item>Düşük</item>
</string-array>
<string-array name="pref_image_size_values">
<item>-1</item>
<item>500</item>
<item>300</item>
</string-array>
<string-array name="streaming_cache_size_titles">
<item>Kapalı</item>
<item>128 MiB</item>
<item>256 MiB</item>
<item>512 MiB</item>
<item>1024 MiB</item>
</string-array>
<string-array name="streaming_cache_size_values">
<item>0</item>
<item>128</item>
<item>256</item>
<item>512</item>
<item>1024</item>
</string-array>
<string-array name="max_bitrate_wifi_list_titles">
<item>Orjinal</item>
<item>32 kbps</item>
<item>48 kbps</item>
<item>64 kbps</item>
<item>80 kbps</item>
<item>96 kbps</item>
<item>112 kbps</item>
<item>128 kbps</item>
<item>160 kbps</item>
<item>192 kbps</item>
<item>256 kbps</item>
<item>320 kbps</item>
</string-array>
<string-array name="max_bitrate_wifi_list_values">
<item>0</item>
<item>32</item>
<item>48</item>
<item>64</item>
<item>80</item>
<item>96</item>
<item>112</item>
<item>128</item>
<item>160</item>
<item>192</item>
<item>256</item>
<item>320</item>
</string-array>
<string-array name="max_bitrate_mobile_list_titles">
<item>Orjinal</item>
<item>32 kbps</item>
<item>48 kbps</item>
<item>64 kbps</item>
<item>80 kbps</item>
<item>96 kbps</item>
<item>112 kbps</item>
<item>128 kbps</item>
<item>160 kbps</item>
<item>192 kbps</item>
<item>256 kbps</item>
<item>320 kbps</item>
</string-array>
<string-array name="max_bitrate_mobile_list_values">
<item>0</item>
<item>32</item>
<item>48</item>
<item>64</item>
<item>80</item>
<item>96</item>
<item>112</item>
<item>128</item>
<item>160</item>
<item>192</item>
<item>256</item>
<item>320</item>
</string-array>
<string-array name="max_bitrate_download_list_titles">
<item>Orjinal</item>
<item>32 kbps</item>
<item>48 kbps</item>
<item>64 kbps</item>
<item>80 kbps</item>
<item>96 kbps</item>
<item>112 kbps</item>
<item>128 kbps</item>
<item>160 kbps</item>
<item>192 kbps</item>
<item>256 kbps</item>
<item>320 kbps</item>
</string-array>
<string-array name="max_bitrate_download_list_values">
<item>0</item>
<item>32</item>
<item>48</item>
<item>64</item>
<item>80</item>
<item>96</item>
<item>112</item>
<item>128</item>
<item>160</item>
<item>192</item>
<item>256</item>
<item>320</item>
</string-array>
<string-array name="audio_transcode_format_wifi_list_titles">
<item>Doğrudan çal</item>
<item>Opus</item>
<item>AAC</item>
<item>Mp3</item>
<item>Flac</item>
</string-array>
<string-array name="audio_transcode_format_wifi_list_values">
<item>raw</item>
<item>opus</item>
<item>aac</item>
<item>mp3</item>
<item>flac</item>
</string-array>
<string-array name="audio_transcode_format_mobile_list_titles">
<item>Doğrudan çal</item>
<item>Opus</item>
<item>AAC</item>
<item>Mp3</item>
<item>Flac</item>
</string-array>
<string-array name="audio_transcode_format_mobile_list_values">
<item>raw</item>
<item>opus</item>
<item>aac</item>
<item>mp3</item>
<item>flac</item>
</string-array>
<string-array name="audio_transcode_format_download_list_titles">
<item>Doğrudan indir</item>
<item>Opus</item>
<item>AAC</item>
<item>Mp3</item>
<item>Flac</item>
</string-array>
<string-array name="audio_transcode_format_download_list_values">
<item>raw</item>
<item>opus</item>
<item>aac</item>
<item>mp3</item>
<item>flac</item>
</string-array>
<string-array name="queue_syncing_countdown_titles">
<item>On saniye</item>
<item>Beş saniye</item>
<item>İki saniye</item>
</string-array>
<string-array name="queue_syncing_countdown_values">
<item>10</item>
<item>5</item>
<item>2</item>
</string-array>
<string-array name="rounded_corner_size_titles">
<item>Yüksek</item>
<item>Orta</item>
<item>Düşük</item>
</string-array>
<string-array name="rounded_corner_size_values">
<item>18</item>
<item>12</item>
<item>6</item>
</string-array>
<string-array name="replay_gain_titles">
<item>Kapalı</item>
<item>Parça</item>
<item>Albüm</item>
<item>Otomatik</item>
</string-array>
<string-array name="replay_gain_values">
<item>kapalı</item>
<item>parça</item>
<item>albüm</item>
<item>otomatik</item>
</string-array>
<string-array name="transcoded_download_option_list_titles">
<item>Format dönüştürme yapma</item>
<item>Sunucu ayarları</item>
<item>Wi-fi dönüştürme ayarları</item>
<item>Mobil dönüştürme formatı</item>
</string-array>
<string-array name="transcoded_download_option_list_values">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="buffering_strategy_titles">
<item>Minimum</item>
<item>Moderate</item>
<item>Agrasif</item>
<item>ırı</item>
</string-array>
<string-array name="buffering_strategy_values">
<item>.1</item>
<item>1</item>
<item>4</item>
<item>8</item>
</string-array>
<string-array name="skip_min_star_rating_titles">
<item>En az 0 yıldız</item>
<item>En az 1 yıldız</item>
<item>En az 2 yıldız</item>
<item>En az 3 yıldız</item>
<item>En az 4 yıldız</item>
</string-array>
<string-array name="skip_min_star_rating_values">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
</string-array>
</resources>

View File

@@ -0,0 +1,436 @@
<resources>
<string name="activity_battery_optimizations_conclusion">Sorun yaşarsanız https://dontkillmyapp.com adresini ziyaret edin. Uygulamanın performansını etkileyebilecek güç tasarrufu özelliklerinin nasıl devre dışı bırakılacağına dair ayrıntılı talimatlar sağlar.</string>
<string name="activity_battery_optimizations_summary">Ekran kapalıyken medya oynatma için lütfen pil optimizasyonlarını devre dışı bırakın.</string>
<string name="activity_battery_optimizations_title">Pil optimizasyonu</string>
<string name="activity_info_offline_mode">Çevrimdışı mod</string>
<string name="album_bottom_sheet_add_to_playlist">Çalma listesine ekle</string>
<string name="album_bottom_sheet_add_to_queue">Sıraya ekle</string>
<string name="album_bottom_sheet_download_all">Tümünü indir</string>
<string name="album_bottom_sheet_go_to_artist">Sanatçıya git</string>
<string name="album_bottom_sheet_instant_mix">Anında karışım</string>
<string name="album_bottom_sheet_play_next">Sıradakini çal</string>
<string name="album_bottom_sheet_remove_all">Tümünü kaldır</string>
<string name="album_bottom_sheet_share">Paylaş</string>
<string name="album_bottom_sheet_shuffle">Karıştır</string>
<string name="album_catalogue_title">Albümler</string>
<string name="album_catalogue_title_expanded">Albümleri görüntüle</string>
<string name="album_error_retrieving_artist">Sanatçı getirilirken hata oluştu</string>
<string name="album_list_page_downloaded">İndirilen albümler</string>
<string name="album_list_page_most_played">En çok çalınan albümler</string>
<string name="album_list_page_new_releases">Yeni çıkanlar</string>
<string name="album_list_page_recently_added">Yakın zamanda eklenen albümler</string>
<string name="album_list_page_recently_played">Yakın zamanda çalınan albümler</string>
<string name="album_list_page_starred">Yıldızlı albümler</string>
<string name="album_list_page_title">Albümler</string>
<string name="album_page_extra_info_button">Buna benzer daha fazla</string>
<string name="album_page_play_button">Çal</string>
<string name="album_page_release_date_label">%1$s tarihinde yayınlandı</string>
<string name="album_page_release_dates_label">%1$s tarihinde yayınlandı, orijinali %2$s</string>
<string name="album_page_shuffle_button">Karıştır</string>
<string name="album_page_tracks_count_and_duration">%1$d parça • %2$d dakika</string>
<string name="app_name">Tempo</string>
<string name="artist_adapter_radio_station_starting">Aranıyor…</string>
<string name="artist_bottom_sheet_instant_mix">Anında karışım</string>
<string name="artist_bottom_sheet_shuffle">Karıştır</string>
<string name="artist_catalogue_title">Sanatçılar</string>
<string name="artist_catalogue_title_expanded">Sanatçılara göz at</string>
<string name="artist_error_retrieving_radio">Sanatçının radyosu alınırken hata oluştu</string>
<string name="artist_error_retrieving_tracks">Sanatçının parçaları alınırken hata oluştu</string>
<string name="artist_list_page_downloaded">İndirilen sanatçılar</string>
<string name="artist_list_page_starred">Yıldızlı sanatçılar</string>
<string name="artist_list_page_title">Sanatçılar</string>
<string name="artist_page_radio_button">Radyo</string>
<string name="artist_page_shuffle_button">Karıştır</string>
<string name="artist_page_switch_layout_button">Düzeni değiştir</string>
<string name="artist_page_title_album_more_like_this_button">Buna benzer daha fazla</string>
<string name="artist_page_title_album_section">Albümler</string>
<string name="artist_page_title_biography_more_button">Daha fazla</string>
<string name="artist_page_title_biography_section">Biyografi</string>
<string name="artist_page_title_most_streamed_song_section">En Çok Dinlenen Şarkılar</string>
<string name="artist_page_title_most_streamed_song_see_all_button">Tümünü gör</string>
<string name="battery_optimization_negative_button">Yok say</string>
<string name="battery_optimization_neutral_button">Bir daha sorma</string>
<string name="battery_optimization_positive_button">Devre dışı bırak</string>
<string name="connection_alert_dialog_negative_button">İptal</string>
<string name="connection_alert_dialog_neutral_button">Veri tasarrufunu etkinleştir</string>
<string name="connection_alert_dialog_positive_button">Tamam</string>
<string name="connection_alert_dialog_summary">Wi-Fi dışındaki bağlantılarda Subsonic sunucusuna erişim kısıtlandı. Bu uyarı penceresinin tekrar görünmemesi için, uygulama ayarlarından bağlantı denetimini devre dışı bırakın.</string>
<string name="connection_alert_dialog_title">Wi-Fi bağlı değil</string>
<string name="content_description_shuffle_button">Karıştır</string>
<string name="delete_download_storage_dialog_negative_button">İptal</string>
<string name="delete_download_storage_dialog_positive_button">Devam ettir</string>
<string name="delete_download_storage_dialog_summary">Lütfen dikkat edin, bu işleme devam etmek tüm sunuculardan indirilen kayıtlı öğelerin kalıcı olarak silinmesine yol açacaktır.</string>
<string name="delete_download_storage_dialog_title">Kayıtlı öğeleri sil</string>
<string name="description_empty_title">ıklama yok</string>
<string name="disc_titlefull">Disk %1$s - %2$s</string>
<string name="disc_titleless">Disk %1$s</string>
<string name="download_directory_dialog_negative_button">İptal</string>
<string name="download_directory_dialog_positive_button">İndir</string>
<string name="download_directory_dialog_summary">Bu klasördeki tüm parçalar indirilecektir. Alt klasörlerde bulunan parçalar indirilmeyecektir.</string>
<string name="download_directory_dialog_title">Parçaları indir</string>
<string name="download_info_empty_subtitle">Bir şarkı indirdiğinde burada görünecek</string>
<string name="download_info_empty_title">Henüz indirme yok!</string>
<string name="download_item_multiple_subtitle_formatter">%1$s • %2$s öğe</string>
<string name="download_item_single_subtitle_formatter">%1$s öğe</string>
<string name="download_shuffle_all_subtitle">Tümünü karıştır</string>
<string name="download_storage_dialog_sub_summary">Değişikliklerin geçerli olması için uygulamayı yeniden başlatın.</string>
<string name="download_storage_dialog_summary">İndirilen dosyaların hedefi bir depolamadan diğerine değiştirildiğinde, önceki depolamada bulunan tüm indirilmiş dosyalar anında silinecektir.</string>
<string name="download_storage_dialog_title">Depolama seçeneğini seç</string>
<string name="download_storage_external_dialog_positive_button">Harici</string>
<string name="download_storage_internal_dialog_negative_button">Dahili</string>
<string name="download_title_section">İndirilenler</string>
<string name="downloaded_bottom_sheet_add_to_queue">Sıraya ekle</string>
<string name="downloaded_bottom_sheet_play_next">Sonra çal</string>
<string name="downloaded_bottom_sheet_remove">Kaldır</string>
<string name="downloaded_bottom_sheet_remove_all">Tümünü kaldır</string>
<string name="downloaded_bottom_sheet_shuffle">Karıştır</string>
<string name="empty_string" />
<string name="error_required">Zorunlu</string>
<string name="error_server_prefix">http veya https öneki gerekli</string>
<string name="exo_download_notification_channel_name">İndirilenler</string>
<string name="filter_info_selection">İki veya daha fazla filtre seçin</string>
<string name="filter_title">Filtre</string>
<string name="filter_title_expanded">Türleri filtrele</string>
<string name="generic_list_page_count">(%1$d)</string>
<string name="generic_list_page_count_unknown">(+%1$d)</string>
<string name="genre_catalogue_title">Tür Kataloğu</string>
<string name="genre_catalogue_title_expanded">Türlere göz at</string>
<string name="github_update_dialog_negative_button">Bana sonra hatırlat</string>
<string name="github_update_dialog_neutral_button">Destek ol</string>
<string name="github_update_dialog_positive_button">Hemen indir</string>
<string name="github_update_dialog_summary">Uygulamanın yeni bir sürümü Githubda mevcut.</string>
<string name="github_update_dialog_title">Güncelleme mevcut</string>
<string name="home_rearrangement_dialog_negative_button">İptal</string>
<string name="home_rearrangement_dialog_neutral_button">Sıfırla</string>
<string name="home_rearrangement_dialog_positive_button">Kaydet</string>
<string name="home_rearrangement_dialog_title">Ana sayfayı düzenle</string>
<string name="home_rearrangement_dialog_subtitle">Yapılan değişikliklerin etkili olması için uygulamayı yeniden başlatmanız gerekir.</string>
<string name="home_section_music">Müzik</string>
<string name="home_section_podcast">Podcast</string>
<string name="home_section_radio">Radyo</string>
<string name="home_subtitle_best_of">Favori sanatçılarının en iyi şarkıları</string>
<string name="home_subtitle_made_for_you">Beğendiğin bir şarkıdan karışım başlat</string>
<string name="home_subtitle_new_internet_radio_station">Yeni radyo ekle</string>
<string name="home_subtitle_new_podcast_channel">Yeni podcast kanalı ekle</string>
<string name="home_sync_starred_cancel">İptal</string>
<string name="home_sync_starred_download">İndir</string>
<string name="home_sync_starred_subtitle">Bu parçaların indirilmesi önemli miktarda veri kullanabilir</string>
<string name="home_sync_starred_title">Eşitlenecek bazı yıldızlı parçalar var gibi görünüyor</string>
<string name="home_title_best_of">En iyiler</string>
<string name="home_title_discovery">Keşfet</string>
<string name="home_title_discovery_shuffle_all_button">Tümünü karıştır</string>
<string name="home_title_flashback">Geçmişe dönüş</string>
<string name="home_title_internet_radio_station">İnternet radyo istasyonları</string>
<string name="home_title_last_played">Son çalınanlar</string>
<string name="home_title_last_played_see_all_button">Tümünü gör</string>
<string name="home_title_last_week">Geçen hafta</string>
<string name="home_title_last_month">Geçen ay</string>
<string name="home_title_last_year">Geçen yıl</string>
<string name="home_title_made_for_you">Senin için</string>
<string name="home_title_most_played">En çok çalınanlar</string>
<string name="home_title_most_played_see_all_button">Tümünü gör</string>
<string name="home_title_new_releases">Yeni çıkışlar</string>
<string name="home_title_newest_podcasts">En yeni podcastler</string>
<string name="home_title_pinned_playlists">Çalma listeleri</string>
<string name="home_title_podcast_channels">Kanallar</string>
<string name="home_title_podcast_channels_see_all_button">Tümünü gör</string>
<string name="home_title_radio_station">Radyo istasyonları</string>
<string name="home_title_recently_added">Son eklenenler</string>
<string name="home_title_recently_added_see_all_button">Tümünü gör</string>
<string name="home_title_shares">Paylaşımlar</string>
<string name="home_title_starred_albums">★ Yıldızlı albümler</string>
<string name="home_title_starred_albums_see_all_button">Tümünü gör</string>
<string name="home_title_starred_artists">★ Yıldızlı sanatçılar</string>
<string name="home_title_starred_artists_see_all_button">Tümünü gör</string>
<string name="home_title_starred_tracks">★ Yıldızlı parçalar</string>
<string name="home_title_starred_tracks_see_all_button">Tümünü gör</string>
<string name="home_title_top_songs">En iyi şarkıların</string>
<string name="home_option_reorganize">Yeniden düzenle</string>
<string name="label_dot_separator" translatable="false"></string>
<string name="label_placeholder" translatable="false">--</string>
<string name="library_title_album">Albümler</string>
<string name="library_title_album_see_all_button">Tümünü gör</string>
<string name="library_title_artist">Sanatçılar</string>
<string name="library_title_artist_see_all_button">Tümünü gör</string>
<string name="library_title_genre">Türler</string>
<string name="library_title_genre_see_all_button">Tümünü gör</string>
<string name="library_title_music_folder">Müzik klasörleri</string>
<string name="library_title_playlist">Çalma listeleri</string>
<string name="library_title_playlist_see_all_button">Tümünü gör</string>
<string name="login_empty">Sunucu eklenmedi</string>
<string name="login_title">Subsonic sunucuları</string>
<string name="login_title_expanded">Subsonic sunucuları</string>
<string name="media_route_menu_title">Yayınla</string>
<string name="menu_add_button">Ekle</string>
<string name="menu_add_to_playlist_button">Çalma listesine ekle</string>
<string name="menu_download_all_button">Tümünü indir</string>
<string name="menu_download_label">İndir</string>
<string name="menu_filter_all">Tümü</string>
<string name="menu_filter_download">İndirilenler</string>
<string name="menu_group_by_album">Albüm</string>
<string name="menu_group_by_artist">Sanatçı</string>
<string name="menu_group_by_genre">Tür</string>
<string name="menu_group_by_track">Parça</string>
<string name="menu_group_by_year">Yıl</string>
<string name="menu_home_label">Ana sayfa</string>
<string name="menu_last_week_name">Geçen hafta</string>
<string name="menu_last_month_name">Geçen ay</string>
<string name="menu_last_year_name">Geçen yıl</string>
<string name="menu_library_label">Kütüphane</string>
<string name="menu_search_button">Ara</string>
<string name="menu_settings_button">Ayarlar</string>
<string name="menu_sort_artist">Sanatçı</string>
<string name="menu_sort_name">Ad</string>
<string name="menu_sort_random">Rastgele</string>
<string name="menu_sort_recently_added">Son eklenenler</string>
<string name="menu_sort_recently_played">Son çalınanlar</string>
<string name="menu_sort_most_played">En çok çalınanlar</string>
<string name="menu_sort_most_recently_starred">En son yıldızlananlar</string>
<string name="menu_sort_least_recently_starred">En eski yıldızlananlar</string>
<string name="menu_pin_button">Ana ekrana ekle</string>
<string name="menu_unpin_button">Ana ekrandan kaldır</string>
<string name="menu_sort_year">Yıl</string>
<string name="player_playback_speed">%1$.2fx</string>
<string name="player_queue_clean_all_button">Çalma sırasını temizle</string>
<string name="player_server_priority">Sunucu önceliği</string>
<string name="player_unknown_format">Bilinmeyen format</string>
<string name="player_transcoding">Dönüştürme</string>
<string name="player_transcoding_requested">talep edildi</string>
<string name="playlist_catalogue_title">Çalma Listesi Kataloğu</string>
<string name="playlist_catalogue_title_expanded">Çalma listelerine göz at</string>
<string name="playlist_chooser_dialog_empty">Henüz çalma listesi oluşturulmadı</string>
<string name="playlist_chooser_dialog_negative_button">İptal</string>
<string name="playlist_chooser_dialog_neutral_button">Oluştur</string>
<string name="playlist_chooser_dialog_title">Çalma listesine ekle</string>
<string name="playlist_chooser_dialog_toast_add_success">Şarkı çalma listesine eklendi</string>
<string name="playlist_chooser_dialog_toast_add_failure">Şarkı çalma listesine eklenemedi</string>
<string name="playlist_counted_tracks">%1$d parça • %2$s</string>
<string name="playlist_duration">Süre • %1$s</string>
<string name="playlist_editor_dialog_action_delete_toast">Silmek için uzun basın</string>
<string name="playlist_editor_dialog_hint_name">Çalma listesi adı</string>
<string name="playlist_editor_dialog_negative_button">İptal</string>
<string name="playlist_editor_dialog_neutral_button">Sil</string>
<string name="playlist_editor_dialog_positive_button">Kaydet</string>
<string name="playlist_editor_dialog_title">Çalma listesini düzenle</string>
<string name="playlist_page_play_button">Çal</string>
<string name="playlist_page_shuffle_button">Karıştır</string>
<string name="playlist_song_count">Çalma listesi • %1$d şarkı</string>
<string name="podcast_bottom_sheet_add_to_queue">Sıraya ekle</string>
<string name="podcast_bottom_sheet_delete">Sil</string>
<string name="podcast_bottom_sheet_download">İndir</string>
<string name="podcast_bottom_sheet_go_to_channel">Kanala git</string>
<string name="podcast_bottom_sheet_play_next">Sonra çal</string>
<string name="podcast_bottom_sheet_remove">Kaldır</string>
<string name="podcast_channel_catalogue_title">Kanallar</string>
<string name="podcast_channel_catalogue_title_expanded">Kanallara göz at</string>
<string name="podcast_channel_editor_dialog_hint_rss_url">RSS URL</string>
<string name="podcast_channel_editor_dialog_title">Podcast Kanalı</string>
<string name="podcast_channel_page_title_description_section">ıklama</string>
<string name="podcast_channel_page_title_episode_section">Bölümler</string>
<string name="podcast_channel_page_title_no_episode_available">Bölüm mevcut değil</string>
<string name="podcast_episode_download_request_snackbar">İsteğiniz sunucuya gönderildi</string>
<string name="podcast_info_empty_button">Bölümü gizlemek için tıklayın\nDeğişiklikler yeniden başlatıldığında görülecek</string>
<string name="podcast_info_empty_subtitle">Bir kanal eklediğinizde burada göreceksiniz</string>
<string name="podcast_info_empty_title">Podcast bulunamadı!</string>
<string name="podcast_release_date_duration_formatter">%1$s • %2$s</string>
<string name="radio_editor_dialog_hint_homepage_url">Radyo Anasayfa URLsi</string>
<string name="radio_editor_dialog_hint_name">Radyo Adı</string>
<string name="radio_editor_dialog_hint_stream_url">Radyo Yayın URLsi</string>
<string name="radio_editor_dialog_negative_button">İptal</string>
<string name="radio_editor_dialog_neutral_button">Sil</string>
<string name="radio_editor_dialog_positive_button">Kaydet</string>
<string name="radio_editor_dialog_title">İnternet Radyo İstasyonu</string>
<string name="radio_station_info_empty_button">Bölümü gizlemek için tıklayın\nDeğişiklikler yeniden başlatıldığında görülecek</string>
<string name="radio_station_info_empty_subtitle">Bir radyo istasyonu eklediğinizde burada göreceksiniz</string>
<string name="radio_station_info_empty_title">İstasyon bulunamadı!</string>
<string name="rating_dialog_negative_button">İptal</string>
<string name="rating_dialog_positive_button">Kaydet</string>
<string name="rating_dialog_title">Değerlendir</string>
<string name="search_hint">Başlık, sanatçı veya albüm ara</string>
<string name="search_info_minimum_characters">En az üç karakter girin</string>
<string name="search_title_album">Albümler</string>
<string name="search_title_artist">Sanatçılar</string>
<string name="search_title_song">Şarkılar</string>
<string name="server_signup_dialog_action_low_security">Düşük güvenlik</string>
<string name="server_signup_dialog_action_delete_toast">Silmek için uzun basın</string>
<string name="server_signup_dialog_hint_local_address">Yerel URL</string>
<string name="server_signup_dialog_hint_name">Sunucu Adı</string>
<string name="server_signup_dialog_hint_password">Parola</string>
<string name="server_signup_dialog_hint_url">Sunucu URLsi</string>
<string name="server_signup_dialog_hint_username">Kullanıcı adı</string>
<string name="server_signup_dialog_negative_button">İptal</string>
<string name="server_signup_dialog_neutral_button">Sil</string>
<string name="server_signup_dialog_positive_button">Kaydet</string>
<string name="server_signup_dialog_title">Sunucu ekle</string>
<string name="server_unreachable_dialog_negative_button">İptal</string>
<string name="server_unreachable_dialog_neutral_button">Girişe git</string>
<string name="server_unreachable_dialog_positive_button">Yine de devam et</string>
<string name="server_unreachable_dialog_summary">İstenen sunucuya ulaşılamıyor. Devam etmeyi seçerseniz bu iletişim penceresi bir saat boyunca tekrar görünmez.</string>
<string name="server_unreachable_dialog_title">Sunucuya ulaşılamıyor</string>
<string name="settings_about_summary">Tempo, Subsonic için açık kaynaklı ve hafif bir müzik istemcisidir, Android için yerel olarak tasarlanıp geliştirilmiştir.</string>
<string name="settings_about_title">Hakkında</string>
<string name="settings_always_on_display">Her zaman açık ekran</string>
<string name="settings_audio_transcode_download_format">Dönüştürme formatı</string>
<string name="settings_audio_transcode_download_priority_summary">Etkinleştirildiğinde, Tempo parçayı aşağıdaki dönüştürme ayarlarıyla indirmeye zorlamaz.</string>
<string name="settings_audio_transcode_download_priority_title">İndirmelerde yayın için kullanılan sunucu ayarlarına öncelik ver</string>
<string name="settings_audio_transcode_download_summary">Etkinleştirildiğinde, Tempo dönüştürülmüş parçaları indirir.</string>
<string name="settings_audio_transcode_download_title">Dönüştürülmüş parçaları indir</string>
<string name="settings_audio_transcode_estimate_content_length_summary">Etkinleştirildiğinde, parçanın tahmini süresi sunucudan istenir.</string>
<string name="settings_audio_transcode_estimate_content_length_title">İçerik uzunluğunu tahmin et</string>
<string name="settings_audio_transcode_format_download">İndirmeler için dönüştürme formatı</string>
<string name="settings_audio_transcode_format_mobile">Mobilde dönüştürme formatı</string>
<string name="settings_audio_transcode_format_wifi">Wi-Fida dönüştürme formatı</string>
<string name="settings_audio_transcode_priority_summary">Etkinleştirildiğinde, Tempo parçayı aşağıdaki dönüştürme ayarlarıyla yayınlamayacaktır.</string>
<string name="settings_audio_transcode_priority_title">Sunucu dönüştürme ayarlarına öncelik ver</string>
<string name="settings_audio_transcode_priority_toast">Parçanın dönüştürülmesinde öncelik sunucuya verildi</string>
<string name="settings_buffering_strategy">Önbellekleme stratejisi</string>
<string name="settings_buffering_strategy_summary">Değişikliğin geçerli olması için uygulamayı elle yeniden başlatmalısınız.</string>
<string name="settings_continuous_play_summary">Bir çalma listesi bittiğinde benzer şarkılar çalarak müziğin devam etmesine izin verir</string>
<string name="settings_continuous_play_title">Sürekli çalma</string>
<string name="settings_covers_cache">Albüm kapağı önbelleği boyutu</string>
<string name="settings_data_saving_mode_summary">Veri tüketimini azaltmak için kapak görsellerinin indirilmesinden kaçının.</string>
<string name="settings_data_saving_mode_title">Mobil veri kullanımını sınırla</string>
<string name="settings_delete_download_storage_summary">Devam ederseniz tüm kayıtlı öğeler geri alınamaz şekilde silinecektir.</string>
<string name="settings_delete_download_storage_title">Kayıtlı öğeleri sil</string>
<string name="settings_download_storage_title">İndirme depolaması</string>
<string name="settings_equalizer_summary">Ses ayarlarını düzenle</string>
<string name="settings_equalizer_title">Ekolayzır</string>
<string name="settings_github_link">https://github.com/eddyizm/tempo</string>
<string name="settings_github_summary">Gelişmeleri takip et</string>
<string name="settings_github_title">Github</string>
<string name="settings_image_size">Görsel çözünürlüğünü ayarla</string>
<string name="settings_language">Dil</string>
<string name="settings_logout_title">Çıkış yap</string>
<string name="settings_max_bitrate_download">İndirmeler için bit hızı</string>
<string name="settings_max_bitrate_mobile">Mobilde bit hızı</string>
<string name="settings_max_bitrate_wifi">Wi-Fida bit hızı</string>
<string name="settings_media_cache">Ortam dosyası önbelleği boyutu</string>
<string name="settings_music_directory">Müzik dizinlerini göster</string>
<string name="settings_music_directory_summary">Etkinleştirildiğinde müzik dizini bölümü görüntülenir. Klasörlerde gezinmenin doğru çalışması için sunucunun bu özelliği desteklemesi gerekir.</string>
<string name="settings_podcast">Podcasti göster</string>
<string name="settings_podcast_summary">Etkinleştirildiğinde podcast bölümü görüntülenir. Tam etkili olması için uygulamayı yeniden başlatın.</string>
<string name="settings_audio_quality">Ses kalitesini göster</string>
<string name="settings_audio_quality_summary">Her ses parçası için bit hızı ve ses formatı gösterilecektir.</string>
<string name="settings_item_rating">Öğe değerlemesini göster</string>
<string name="settings_item_rating_summary">Etkinleştirildiğinde, öğenin puanı ve favori olarak işaretlenip işaretlenmediği görüntülenir.</string>
<string name="settings_queue_syncing_countdown">Eşitleme zamanlayıcısı</string>
<string name="settings_queue_syncing_summary">Etkinleştirildiğinde, kullanıcı çalma sırasını kaydedebilir ve uygulamayı açtığında bu durumu yükleyebilir.</string>
<string name="settings_queue_syncing_title">Bu kullanıcı için çalma sırasını eşitle</string>
<string name="settings_radio">Radyoyu göster</string>
<string name="settings_radio_summary">Etkinleştirildiğinde radyo bölümü görüntülenir. Tam etkili olması için uygulamayı yeniden başlatın.</string>
<string name="settings_replay_gain">Yeniden çalma kazanç modunu ayarla</string>
<string name="settings_rounded_corner">Yuvarlatılmış köşeler</string>
<string name="settings_rounded_corner_size">Köşe boyutu</string>
<string name="settings_rounded_corner_size_summary">Eğrilik açısının büyüklüğünü ayarlar.</string>
<string name="settings_rounded_corner_summary">Etkinleştirildiğinde, tüm kapak görselleri için bir eğme açısı uygulanır. Değişiklikler yeniden başlatıldığında geçerli olur.</string>
<string name="settings_scan_title">Kütüphaneyi tara</string>
<string name="settings_scrobble_title">Müzik scrobbling özelliğini etkinleştir</string>
<string name="settings_system_language">Sistem dili</string>
<string name="settings_share_title">Müzik paylaşımını etkinleştir</string>
<string name="settings_streaming_cache_size">Yayın önbelleği boyutu</string>
<string name="settings_streaming_cache_storage_title">Yayın önbellek depolaması</string>
<string name="settings_sub_summary_scrobble">Scrobbling özelliğinin çalışabilmesi için sunucunun bu verileri alacak şekilde etkinleştirilmiş olması gerekir.</string>
<string name="settings_summary_skip_min_star_rating">Bir sanatçı radyosu dinlerken, anında karışımda veya tümünü karıştırırken belirli bir kullanıcı puanının altındaki parçalar yok sayılacaktır.</string>
<string name="settings_summary_replay_gain">Replay gain, ses parçalarının ses seviyesini ayarlayarak tutarlı bir dinleme deneyimi sağlayan bir özelliktir. Bu ayar yalnızca parçada gerekli meta veriler varsa etkilidir.</string>
<string name="settings_summary_scrobble">Scrobbling, cihazınızın dinlediğiniz şarkılar hakkında bilgileri müzik sunucusuna göndermesini sağlayan bir özelliktir. Bu bilgiler müzik tercihlerinize göre kişisel öneriler oluşturulmasına yardımcı olur.</string>
<string name="settings_summary_share">Kullanıcının müziği bir bağlantı üzerinden paylaşmasına olanak tanır. Bu işlevin sunucu tarafından desteklenmesi ve etkinleştirilmesi gerekir ve yalnızca tekil parçalar, albümler ve çalma listeleriyle sınırlıdır.</string>
<string name="settings_summary_syncing">Bu kullanıcının çalma sırasının durumunu geri yükler. Buna çalma sırasındaki parçalar, o anda çalan parça ve bu parçadaki konum dahildir. Sunucunun bu özelliği desteklemesi gerekir.</string>
<string name="settings_summary_streaming_cache_size">%1$s \nŞu anda kullanımda: %2$s MiB</string>
<string name="settings_summary_transcoding">Dönüştürme moduna öncelik verilir. “Doğrudan çal” olarak ayarlanırsa dosyanın bit hızı değiştirilmez.</string>
<string name="settings_summary_transcoding_download">Dönüştürülmüş medyayı indir. Etkinleştirilirse indirme uç noktası kullanılmaz, bunun yerine aşağıdaki ayarlar geçerli olur. \n\n “İndirmeler için dönüştürme formatı” “Doğrudan indir” olarak ayarlanırsa dosyanın bit hızı değiştirilmez.</string>
<string name="settings_summary_transcoding_estimate_content_length">Dosya anlık olarak dönüştürüldüğünde, istemci genellikle parçanın süresini göstermez. Bu işlevi destekleyen sunuculardan çalınan parçanın süresini tahmin etmeleri istenebilir,
ancak yanıt süreleri daha uzun olabilir.</string>
<string name="settings_sync_starred_tracks_for_offline_use_summary">Etkinleştirildiğinde, yıldızlı parçalar çevrimdışı kullanım için indirilecektir.</string>
<string name="settings_sync_starred_tracks_for_offline_use_title">Çevrimdışı kullanım için yıldızlı parçaları eşitle</string>
<string name="settings_theme">Tema</string>
<string name="settings_title_data">Veri</string>
<string name="settings_title_general">Genel</string>
<string name="settings_title_rating">Değerlendirme</string>
<string name="settings_title_replay_gain">Replay Gain</string>
<string name="settings_title_scrobble">Scrobble</string>
<string name="settings_title_skip_min_star_rating">Değerlendirmeye göre parçaları yok say</string>
<string name="settings_title_skip_min_star_rating_dialog">Şu puana sahip şarkılar:</string>
<string name="settings_title_share">Paylaş</string>
<string name="settings_title_syncing">Eşitleme</string>
<string name="settings_title_transcoding">Dönüştürme</string>
<string name="settings_title_transcoding_download">Dönüştürme İndir</string>
<string name="settings_title_ui">Arayüz</string>
<string name="settings_transcoded_download">Dönüştürülmüş indirme</string>
<string name="settings_version_summary" translatable="false">3.1.0</string>
<string name="settings_version_title">Sürüm</string>
<string name="settings_wifi_only_summary">Mobil ağ üzerinden yayın yapmadan önce kullanıcı onayı iste.</string>
<string name="settings_wifi_only_title">Yalnızca Wi-Fi ile yayın uyarısı</string>
<string name="share_bottom_sheet_copy_link">Bağlantıyı kopyala</string>
<string name="share_bottom_sheet_delete">Paylaşımı sil</string>
<string name="share_bottom_sheet_update">Paylaşımı güncelle</string>
<string name="share_subtitle_item">Bitiş tarihi: %1$s</string>
<string name="share_unsupported_error">Paylaşım desteklenmiyor veya etkin değil</string>
<string name="share_update_dialog_hint_description">ıklama</string>
<string name="share_update_dialog_hint_expiration_date">Bitiş tarihi</string>
<string name="share_update_dialog_negative_button">İptal</string>
<string name="share_update_dialog_positive_button">Kaydet</string>
<string name="share_update_dialog_title">Paylaş</string>
<string name="song_bottom_sheet_add_to_playlist">Çalma listesine ekle</string>
<string name="song_bottom_sheet_add_to_queue">Sıraya ekle</string>
<string name="song_bottom_sheet_download">İndir</string>
<string name="song_bottom_sheet_error_retrieving_album">Albüm alınırken hata oluştu</string>
<string name="song_bottom_sheet_error_retrieving_artist">Sanatçı alınırken hata oluştu</string>
<string name="song_bottom_sheet_go_to_album">Albüme git</string>
<string name="song_bottom_sheet_go_to_artist">Sanatçıya git</string>
<string name="song_bottom_sheet_instant_mix">Anında karışım</string>
<string name="song_bottom_sheet_play_next">Sonra çal</string>
<string name="song_bottom_sheet_rate">Değerlendir</string>
<string name="song_bottom_sheet_remove">Kaldır</string>
<string name="song_bottom_sheet_share">Paylaş</string>
<string name="song_list_page_downloaded">İndirilenler</string>
<string name="song_list_page_most_played">En çok çalınan parçalar</string>
<string name="song_list_page_recently_added">Son eklenen parçalar</string>
<string name="song_list_page_recently_played">Son çalınan parçalar</string>
<string name="song_list_page_starred">Yıldızlı parçalar</string>
<string name="song_list_page_top">%1$sin en iyi parçaları</string>
<string name="song_list_page_year">%1$d yılı</string>
<string name="song_subtitle_formatter">%1$s • %2$s %3$s</string>
<string name="starred_sync_dialog_negative_button">İptal</string>
<string name="starred_sync_dialog_neutral_button">Devam et</string>
<string name="starred_sync_dialog_positive_button">Devam et ve indir</string>
<string name="starred_sync_dialog_summary">Yıldızlı parçaların indirilmesi yüksek miktarda veri gerektirebilir.</string>
<string name="starred_sync_dialog_title">Yıldızlı parçaları eşitle</string>
<string name="streaming_cache_storage_dialog_sub_summary">Değişikliklerin geçerli olması için uygulamayı yeniden başlatın.</string>
<string name="streaming_cache_storage_dialog_summary">Önbelleğe alınmış dosyaların hedefini bir depolamadan diğerine değiştirmek, önceki depolamadaki önbellek dosyalarının silinmesine yol açabilir.</string>
<string name="streaming_cache_storage_dialog_title">Depolama seçeneğini seç</string>
<string name="streaming_cache_storage_external_dialog_positive_button">Harici</string>
<string name="streaming_cache_storage_internal_dialog_negative_button">Dahili</string>
<string name="support_url">https://buymeacoffee.com/a.cappiello</string>
<string name="track_info_album">Albüm</string>
<string name="track_info_artist">Sanatçı</string>
<string name="track_info_bit_depth">Bit derinliği</string>
<string name="track_info_bitrate">Bit hızı</string>
<string name="track_info_content_type">İçerik türü</string>
<string name="track_info_dialog_positive_button">Tamam</string>
<string name="track_info_dialog_title">Parça bilgisi</string>
<string name="track_info_disc_number">Disk numarası</string>
<string name="track_info_duration">Süre</string>
<string name="track_info_genre">Tür</string>
<string name="track_info_path">Yol</string>
<string name="track_info_sampling_rate">Örnekleme oranı</string>
<string name="track_info_size">Boyut</string>
<string name="track_info_suffix">Uzantı</string>
<string name="track_info_summary_downloaded_file">Dosya Subsonic APIleri kullanılarak indirildi. Dosyanın dönüştürme ve bit hızı, kaynak dosyadan değişmeden kaldı.</string>
<string name="track_info_summary_full_transcode">Uygulama, sunucudan dosyayı dönüştürmesini ve bit hızını değiştirmesini talep edecektir. Kullanıcının istediği kodek %1$s ve bit hızı %2$s. Seçilen formatta kodek ve bit hızındaki olası değişiklikler
sunucu tarafından yapılır ve bu işlem sunucu tarafından desteklenebilir veya desteklenmeyebilir.</string>
<string name="track_info_summary_original_file"> Uygulama yalnızca sunucunun sağladığı orijinal dosyayı okuyacaktır.
Uygulama, dönüştürülmemiş dosyayı orijinal kaynağın bit hızıyla sunucudan açıkça talep eder.</string>
<string name="track_info_summary_server_prioritized">Çalınacak dosyanın kalitesi sunucunun kararına bırakılır. Uygulama, olası dönüştürmeler için kodek ve bit hızı seçimini zorlamaz.</string>
<string name="track_info_summary_transcoding_bitrate">Uygulama, sunucudan dosyanın bit hızını değiştirmesini talep edecektir.
Kullanıcının istediği bit hızı %1$s, kaynak dosyanın kodeği aynı kalacaktır. Seçilen formatta dosyanın bit hızındaki olası değişiklikler sunucu tarafından yapılır ve bu işlem sunucu tarafından desteklenebilir veya desteklenmeyebilir.</string>
<string name="track_info_summary_transcoding_codec">Uygulama, sunucudan dosyayı dönüştürmesini talep edecektir.
Kullanıcının istediği kodek %1$s, bit hızı ise kaynak dosyayla aynı kalacaktır. Dosyanın seçilen formata olası dönüştürülmesi sunucuya bağlıdır, destekleyebilir ya da desteklemeyebilir.</string>
<string name="track_info_title">Başlık</string>
<string name="track_info_track_number">Parça numarası</string>
<string name="track_info_transcoded_content_type">Dönüştürülmüş içerik türü</string>
<string name="track_info_transcoded_suffix">Dönüştürülmüş uzantı</string>
<string name="track_info_year">Yıl</string>
<string name="undraw_page">unDraw</string>
<string name="undraw_thanks">İllüstrasyonlarıyla bu uygulamayı daha güzel hale getirmemize yardımcı olan unDrawa özel teşekkürler.</string>
<string name="undraw_url">https://undraw.co/</string>
</resources>

View File

@@ -105,6 +105,9 @@
<string name="home_rearrangement_dialog_positive_button">Save</string>
<string name="home_rearrangement_dialog_title">Rearrange home</string>
<string name="home_rearrangement_dialog_subtitle">Please note that in order for the changes made to take effect, it is necessary to restart the application.</string>
<string name="home_section_music">Music</string>
<string name="home_section_podcast">Podcast</string>
<string name="home_section_radio">Radio</string>
<string name="home_subtitle_best_of">Top songs of your favorite artists</string>
<string name="home_subtitle_made_for_you">Start mix from a song you liked</string>
<string name="home_subtitle_new_internet_radio_station">Add a new radio</string>
@@ -189,7 +192,11 @@
<string name="menu_sort_year">Year</string>
<string name="player_playback_speed">%1$.2fx</string>
<string name="player_queue_clean_all_button">Clean play queue</string>
<string name="player_queue_save_queue_success">Saved play queue</string>
<string name="player_server_priority">Server Priority</string>
<string name="player_unknown_format">Unknown format</string>
<string name="player_transcoding">Transcoding</string>
<string name="player_transcoding_requested">requested</string>
<string name="playlist_catalogue_title">Playlist Catalogue</string>
<string name="playlist_catalogue_title_expanded">Browse Playlists</string>
<string name="playlist_chooser_dialog_empty">No playlists created</string>
@@ -309,7 +316,7 @@
<string name="settings_item_rating_summary">If enabled, the item\'s rating and whether it is marked as a favorite will be displayed.</string>
<string name="settings_queue_syncing_countdown">Sync timer</string>
<string name="settings_queue_syncing_summary">If enabled, the user will have the ability to save their play queue and will have the ability to load state when opening the application.</string>
<string name="settings_queue_syncing_title">Sync play queue for this user</string>
<string name="settings_queue_syncing_title">Sync play queue for this user [Not Fully Baked]</string>
<string name="settings_radio">Show radio</string>
<string name="settings_radio_summary">If enabled, show the radio section. Restart the app for it to take full effect.</string>
<string name="settings_replay_gain">Set replay gain mode</string>
@@ -319,6 +326,7 @@
<string name="settings_rounded_corner_summary">If enabled, sets a curvature angle for all rendered covers. The changes will take effect on restart.</string>
<string name="settings_scan_title">Scan library</string>
<string name="settings_scrobble_title">Enable music scrobbling</string>
<string name="settings_system_language">System language</string>
<string name="settings_share_title">Enable music sharing</string>
<string name="settings_streaming_cache_size">Size of streaming cache</string>
<string name="settings_streaming_cache_storage_title">Streaming cache storage</string>
@@ -327,7 +335,7 @@
<string name="settings_summary_replay_gain">Replay gain is a feature that allows you to adjust the volume level of audio tracks for a consistent listening experience. This setting is only effective if the track contains the necessary metadata.</string>
<string name="settings_summary_scrobble">Scrobbling is a feature that allows your device to send information about the songs you listen to the music server. This information helps create personalized recommendations based on your music preferences.</string>
<string name="settings_summary_share">Allows the user to share music via a link. The functionality must be supported and enabled server-side and is limited to individual tracks, albums and playlists.</string>
<string name="settings_summary_syncing">Returns the state of the play queue for this user. This includes the tracks in the play queue, the currently playing track, and the position within this track. The server must support this feature.</string>
<string name="settings_summary_syncing">Returns the state of the play queue for this user. This includes the tracks in the play queue, the currently playing track, and the position within this track. The server must support this feature.\n*This setting is not 100% working on all servers/devices.</string>
<string name="settings_summary_streaming_cache_size">%1$s \nCurrently in use: %2$s MiB</string>
<string name="settings_summary_transcoding">Priority given to the transcoding mode. If set to \"Direct play\" the bitrate of the file will not be changed.</string>
<string name="settings_summary_transcoding_download">Download transcoded media. If enabled, the download endpoint will not be used, but the following settings. \n\n If \"Transcode format for donwloads\" is set to \"Direct download\" the bitrate of the file will not be changed.</string>
@@ -395,6 +403,7 @@
<string name="support_url">https://buymeacoffee.com/a.cappiello</string>
<string name="track_info_album">Album</string>
<string name="track_info_artist">Artist</string>
<string name="track_info_bit_depth">Bit depth</string>
<string name="track_info_bitrate">Bitrate</string>
<string name="track_info_content_type">Content Type</string>
<string name="track_info_dialog_positive_button">OK</string>
@@ -403,6 +412,7 @@
<string name="track_info_duration">Duration</string>
<string name="track_info_genre">Genre</string>
<string name="track_info_path">Path</string>
<string name="track_info_sampling_rate">Sampling rate</string>
<string name="track_info_size">Size</string>
<string name="track_info_suffix">Suffix</string>
<string name="track_info_summary_downloaded_file">The file has been downloaded using the Subsonic APIs. The codec and bitrate of the file remain unchanged from the source file.</string>

View File

@@ -10,4 +10,5 @@
<locale android:name="ru-RU"/> <!-- Russian -->
<locale android:name="es-ES"/> <!-- Spanish (Spain) -->
<locale android:name="pl-PL"/> <!-- Polish -->
<locale android:name="tr-TR"/> <!-- Turkish -->
</locale-config>

View File

@@ -138,10 +138,19 @@ class MediaService : MediaLibraryService() {
controller: ControllerInfo,
mediaItems: List<MediaItem>
): ListenableFuture<List<MediaItem>> {
val updatedMediaItems = mediaItems.map {
it.buildUpon()
.setUri(it.requestMetadata.mediaUri)
.setMediaMetadata(it.mediaMetadata)
val updatedMediaItems = mediaItems.map { mediaItem ->
val mediaMetadata = mediaItem.mediaMetadata
val newMetadata = mediaMetadata.buildUpon()
.setArtist(
if (mediaMetadata.artist != null) mediaMetadata.artist
else mediaMetadata.extras?.getString("uri") ?: ""
)
.build()
mediaItem.buildUpon()
.setUri(mediaItem.requestMetadata.mediaUri)
.setMediaMetadata(newMetadata)
.setMimeType(MimeTypes.BASE_TYPE_AUDIO)
.build()
}