Merge branch 'dev' into website

This commit is contained in:
Kingkor Roy Tirtho 2025-08-02 20:05:00 +06:00
commit fd3ddfece9
361 changed files with 24458 additions and 17310 deletions

View File

@ -1,7 +1,3 @@
# The format:
# SPOTIFY_SECRETS=clintId1:clientSecret1,clientId2:clientSecret2
SPOTIFY_SECRETS=$SPOTIFY_SECRETS
# 0 or 1
# 0 = disable
# 1 = enable
@ -13,5 +9,4 @@ LASTFM_API_SECRET=$LASTFM_API_SECRET
# Release channel. Can be: nightly, stable
RELEASE_CHANNEL=$RELEASE_CHANNEL
HIDE_DONATIONS=$HIDE_DONATIONS
DISABLE_SPOTIFY_IMAGES=$DISABLE_SPOTIFY_IMAGES
HIDE_DONATIONS=$HIDE_DONATIONS

View File

@ -1,3 +1,3 @@
{
"flutterSdkVersion": "3.29.2"
"flutterSdkVersion": "3.32.7"
}

2
.fvmrc
View File

@ -1,4 +1,4 @@
{
"flutter": "3.29.2",
"flutter": "3.32.7",
"flavors": {}
}

View File

@ -4,7 +4,7 @@ on:
pull_request:
env:
FLUTTER_VERSION: 3.29.2
FLUTTER_VERSION: 3.32.7
jobs:
lint:
@ -21,7 +21,6 @@ jobs:
run: |
envsubst < .env.example > .env
env:
SPOTIFY_SECRETS: xxx:xxx
ENABLE_UPDATE_CHECK: true
LASTFM_API_KEY: xxx
LASTFM_API_SECRET: xxx

View File

@ -20,7 +20,7 @@ on:
description: Dry run without uploading to release
env:
FLUTTER_VERSION: 3.29.2
FLUTTER_VERSION: 3.32.7
FLUTTER_CHANNEL: master
permissions:

11
.vscode/launch.json vendored
View File

@ -17,6 +17,17 @@
"dev"
]
},
{
"name": "spotube (mobile-skia)",
"type": "dart",
"request": "launch",
"program": "lib/main.dart",
"args": [
"--flavor",
"dev",
"--no-enable-impeller"
]
},
{
"name": "spotube (profile)",
"type": "dart",

View File

@ -5,6 +5,7 @@
"ambiguate",
"Amoled",
"Buildless",
"configurators",
"danceability",
"fuzzywuzzy",
"gapless",
@ -29,5 +30,5 @@
"README.md": "LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,CONTRIBUTION.md,CHANGELOG.md,PRIVACY_POLICY.md",
"*.dart": "${capture}.g.dart,${capture}.freezed.dart"
},
"dart.flutterSdkPath": ".fvm/versions/3.29.2"
"dart.flutterSdkPath": ".fvm/versions/3.32.7"
}

View File

@ -1,3 +1,12 @@
#Flutter Wrapper
# -keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
# -keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-keep class de.prosiebensat1digital.** { *; }
-keep class androidx.lifecycle.DefaultLifecycleObserver
-keepnames class kotlinx.serialization.** { *; }

View File

@ -57,10 +57,6 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="open.spotify.com"
android:scheme="https" />
</intent-filter>
<intent-filter>
@ -74,8 +70,6 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "spotify:// -->
<data android:scheme="spotify" />
<data android:scheme="spotube" />
</intent-filter>

File diff suppressed because one or more lines are too long

View File

@ -10,9 +10,6 @@ enum ReleaseChannel {
@Envied(obfuscate: true, requireEnvFile: true, path: ".env")
abstract class Env {
@EnviedField(varName: 'SPOTIFY_SECRETS')
static final String rawSpotifySecrets = _Env.rawSpotifySecrets;
@EnviedField(varName: 'LASTFM_API_KEY')
static final String lastFmApiKey = _Env.lastFmApiKey;
@ -24,25 +21,12 @@ abstract class Env {
static bool get hideDonations => _hideDonations == 1;
static final spotifySecrets = rawSpotifySecrets.split(',').map((e) {
final secrets = e.trim().split(":").map((e) => e.trim());
return {
"clientId": secrets.first,
"clientSecret": secrets.last,
};
}).toList();
@EnviedField(varName: 'ENABLE_UPDATE_CHECK', defaultValue: "1")
static final String _enableUpdateChecker = _Env._enableUpdateChecker;
@EnviedField(varName: "RELEASE_CHANNEL", defaultValue: "nightly")
static final String _releaseChannel = _Env._releaseChannel;
@EnviedField(varName: "DISABLE_SPOTIFY_IMAGES", defaultValue: "0")
static final String _disableSpotifyImages = _Env._disableSpotifyImages;
static bool get disableSpotifyImages => _disableSpotifyImages == "1";
static ReleaseChannel get releaseChannel => _releaseChannel == "stable"
? ReleaseChannel.stable
: ReleaseChannel.nightly;

View File

@ -1,231 +1,112 @@
import 'package:spotify/spotify.dart';
import 'package:spotube/models/database/database.dart';
import 'package:spotube/models/spotify/home_feed.dart';
import 'package:spotube/models/spotify_friends.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/history/summary.dart';
abstract class FakeData {
static final Image image = Image()
..height = 1
..width = 1
..url = "https://dummyimage.com/100x100/cfcfcf/cfcfcf.jpg";
static final SpotubeImageObject image = SpotubeImageObject(
height: 100,
width: 100,
url: "https://dummyimage.com/100x100/cfcfcf/cfcfcf.jpg",
);
static final Followers followers = Followers()
..href = "text"
..total = 1;
static final Artist artist = Artist()
..id = "1"
..name = "Wow artist Good!"
..images = [image]
..popularity = 1
..type = "type"
..uri = "uri"
..externalUrls = externalUrls
..genres = ["genre"]
..href = "text"
..followers = followers;
static final externalIds = ExternalIds()
..isrc = "text"
..ean = "text"
..upc = "text";
static final externalUrls = ExternalUrls()..spotify = "text";
static final Album album = Album()
..id = "1"
..genres = ["genre"]
..label = "label"
..popularity = 1
..albumType = AlbumType.album
..artists = [artist]
..availableMarkets = [Market.BD]
..externalUrls = externalUrls
..href = "text"
..images = [image]
..name = "Another good album"
..releaseDate = "2021-01-01"
..releaseDatePrecision = DatePrecision.day
..tracks = [track]
..type = "type"
..uri = "uri"
..externalIds = externalIds
..copyrights = [
Copyright()
..type = CopyrightType.C
..text = "text",
];
static final ArtistSimple artistSimple = ArtistSimple()
..id = "1"
..name = "What an artist"
..type = "type"
..uri = "uri"
..externalUrls = externalUrls;
static final AlbumSimple albumSimple = AlbumSimple()
..id = "1"
..albumType = AlbumType.album
..artists = [artistSimple]
..availableMarkets = [Market.BD]
..externalUrls = externalUrls
..href = "text"
..images = [image]
..name = "A good album"
..releaseDate = "2021-01-01"
..releaseDatePrecision = DatePrecision.day
..type = "type"
..uri = "uri";
static final Track track = Track()
..id = "1"
..artists = [artist, artist, artist]
..album = albumSimple
..availableMarkets = [Market.BD]
..discNumber = 1
..durationMs = 50000
..explicit = false
..externalUrls = externalUrls
..href = "text"
..name = "A Track Name"
..popularity = 1
..previewUrl = "url"
..trackNumber = 1
..type = "type"
..uri = "uri"
..externalIds = externalIds
..isPlayable = true
..explicit = false
..linkedFrom = trackLink;
static final TrackLink trackLink = TrackLink()
..id = "1"
..type = "type"
..uri = "uri"
..externalUrls = {"spotify": "text"}
..href = "text";
static final Paging<Track> paging = Paging()
..href = "text"
..itemsNative = [track.toJson()]
..limit = 1
..next = "text"
..offset = 1
..previous = "text"
..total = 1;
static final User user = User()
..id = "1"
..displayName = "Your Name"
..birthdate = "2021-01-01"
..country = Market.BD
..email = "test@email.com"
..followers = followers
..href = "text"
..images = [image]
..type = "type"
..uri = "uri";
static final TracksLink tracksLink = TracksLink()
..href = "text"
..total = 1;
static final Playlist playlist = Playlist()
..id = "1"
..collaborative = false
..description = "A very good playlist description"
..externalUrls = externalUrls
..followers = followers
..href = "text"
..images = [image]
..name = "A good playlist"
..owner = user
..public = true
..snapshotId = "text"
..tracks = paging
..tracksLink = tracksLink
..type = "type"
..uri = "uri";
static final PlaylistSimple playlistSimple = PlaylistSimple()
..id = "1"
..collaborative = false
..externalUrls = externalUrls
..href = "text"
..images = [image]
..name = "A good playlist"
..owner = user
..public = true
..snapshotId = "text"
..tracksLink = tracksLink
..type = "type"
..description = "A very good playlist description"
..uri = "uri";
static final Category category = Category()
..href = "text"
..icons = [image]
..id = "1"
..name = "category";
static final friends = SpotifyFriends(
friends: [
for (var i = 0; i < 3; i++)
SpotifyFriendActivity(
user: const SpotifyFriend(
name: "name",
imageUrl: "imageUrl",
uri: "uri",
),
track: SpotifyActivityTrack(
name: "name",
artist: const SpotifyActivityArtist(
name: "name",
uri: "uri",
),
album: const SpotifyActivityAlbum(
name: "name",
uri: "uri",
),
context: SpotifyActivityContext(
name: "name",
index: i,
uri: "uri",
),
imageUrl: "imageUrl",
uri: "uri",
),
),
static final SpotubeFullArtistObject artist = SpotubeFullArtistObject(
id: "1",
name: "What an artist",
externalUri: "https://example.com",
followers: 10000,
genres: ["genre"],
images: [
SpotubeImageObject(
height: 100,
width: 100,
url: "https://dummyimage.com/100x100/cfcfcf/cfcfcf.jpg",
),
],
);
static final feedSection = SpotifyHomeFeedSection(
typename: "HomeGenericSectionData",
uri: "spotify:section:lol",
title: "Dummy",
items: [
for (int i = 0; i < 10; i++)
SpotifyHomeFeedSectionItem(
typename: "PlaylistResponseWrapper",
playlist: SpotifySectionPlaylist(
name: "Playlist $i",
description: "Really super important description $i",
format: "daily-mix",
images: [
const SpotifySectionItemImage(
height: 1,
width: 1,
url: "https://dummyimage.com/100x100/cfcfcf/cfcfcf.jpg",
),
],
owner: "Spotify",
uri: "spotify:playlist:id",
),
)
static final SpotubeFullAlbumObject album = SpotubeFullAlbumObject(
id: "1",
name: "A good album",
externalUri: "https://example.com",
artists: [artistSimple],
releaseDate: "2021-01-01",
albumType: SpotubeAlbumType.album,
images: [image],
totalTracks: 10,
genres: ["genre"],
recordLabel: "Record Label",
);
static final SpotubeSimpleArtistObject artistSimple =
SpotubeSimpleArtistObject(
id: "1",
name: "What an artist",
externalUri: "https://example.com",
images: null,
);
static final SpotubeSimpleAlbumObject albumSimple = SpotubeSimpleAlbumObject(
albumType: SpotubeAlbumType.album,
artists: [],
externalUri: "https://example.com",
id: "1",
name: "A good album",
releaseDate: "2021-01-01",
images: [
SpotubeImageObject(
height: 1,
width: 1,
url: "https://dummyimage.com/100x100/cfcfcf/cfcfcf.jpg",
)
],
);
static final SpotubeFullTrackObject track = SpotubeTrackObject.full(
id: "1",
name: "A good track",
externalUri: "https://example.com",
album: albumSimple,
durationMs: 3 * 60 * 1000, // 3 minutes
isrc: "USUM72112345",
explicit: false,
) as SpotubeFullTrackObject;
static final SpotubeUserObject user = SpotubeUserObject(
id: "1",
name: "User Name",
externalUri: "https://example.com",
images: [image],
);
static final SpotubeFullPlaylistObject playlist = SpotubeFullPlaylistObject(
id: "1",
name: "A good playlist",
description: "A very good playlist description",
externalUri: "https://example.com",
collaborative: false,
public: true,
owner: user,
images: [image],
collaborators: [user]);
static final SpotubeSimplePlaylistObject playlistSimple =
SpotubeSimplePlaylistObject(
id: "1",
name: "A good playlist",
description: "A very good playlist description",
externalUri: "https://example.com",
owner: user,
images: [image],
);
static final SpotubeBrowseSectionObject browseSection =
SpotubeBrowseSectionObject(
id: "section-id",
title: "Browse Section",
browseMore: true,
externalUri: "https://example.com/browse/section",
items: [playlistSimple, playlistSimple, playlistSimple]);
static const historySummary = PlaybackHistorySummary(
albums: 1,
artists: 1,

View File

@ -13,6 +13,9 @@ class FontFamily {
/// Font family: BootstrapIcons
static const String bootstrapIcons = 'BootstrapIcons';
/// Font family: Cookie
static const String cookie = 'Cookie';
/// Font family: RadixIcons
static const String radixIcons = 'RadixIcons';
}

View File

@ -0,0 +1,17 @@
import 'dart:io';
const allowList = [
"spotify.com",
];
class BadCertificateAllowlistOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback = (X509Certificate cert, String host, int port) {
return allowList.any((allowedHost) {
return host.endsWith(allowedHost);
});
};
}
}

View File

@ -1,8 +1,8 @@
// Country Codes contributed by momobobe <https://github.com/momobobe>
import 'package:spotify/spotify.dart';
import 'package:spotube/models/metadata/market.dart';
final spotifyMarkets = [
final marketsMap = [
(Market.AL, "Albania (AL)"),
(Market.DZ, "Algeria (DZ)"),
(Market.AD, "Andorra (AD)"),

View File

@ -3,7 +3,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/provider/authentication/authentication.dart';
import 'package:spotube/provider/metadata_plugin/core/auth.dart';
import 'package:spotube/services/kv_store/kv_store.dart';
final rootNavigatorKey = GlobalKey<NavigatorState>();
@ -28,9 +28,10 @@ class AppRouter extends RootStackRouter {
guards: [
AutoRouteGuardCallback(
(resolver, router) async {
final auth = await ref.read(authenticationProvider.future);
final authenticated = await ref
.read(metadataPluginAuthenticatedProvider.future);
if (auth == null && !KVStoreService.doneGettingStarted) {
if (!authenticated && !KVStoreService.doneGettingStarted) {
resolver.redirect(const GettingStartedRoute());
} else {
resolver.next(true);
@ -40,16 +41,8 @@ class AppRouter extends RootStackRouter {
],
),
AutoRoute(
path: "home/genres",
page: GenreRoute.page,
),
AutoRoute(
path: "home/genre/:categoryId",
page: GenrePlaylistsRoute.page,
),
AutoRoute(
path: "home/feeds/:feedId",
page: HomeFeedSectionRoute.page,
path: "home/sections/:sectionId",
page: HomeBrowseSectionItemsRoute.page,
),
AutoRoute(
path: "search",
@ -86,14 +79,6 @@ class AppRouter extends RootStackRouter {
page: LocalLibraryRoute.page,
// parentNavigatorKey: shellRouteNavigatorKey,
),
AutoRoute(
path: "library/generate",
page: PlaylistGeneratorRoute.page,
),
AutoRoute(
path: "library/generate/result",
page: PlaylistGenerateResultRoute.page,
),
AutoRoute(
path: "lyrics",
page: LyricsRoute.page,
@ -102,6 +87,14 @@ class AppRouter extends RootStackRouter {
path: "settings",
page: SettingsRoute.page,
),
AutoRoute(
path: "settings/metadata-provider",
page: SettingsMetadataProviderRoute.page,
),
AutoRoute(
path: "settings/metadata-provider/metadata-form",
page: SettingsMetadataProviderFormRoute.page,
),
AutoRoute(
path: "settings/blacklist",
page: BlackListRoute.page,
@ -221,11 +214,6 @@ class AppRouter extends RootStackRouter {
page: GettingStartedRoute.page,
// parentNavigatorKey: rootNavigatorKey,
),
AutoRoute(
path: "/login",
page: WebViewLoginRoute.page,
// parentNavigatorKey: rootNavigatorKey,
),
AutoRoute(
path: "/lastfm-login",
page: LastFMLoginRoute.page,

File diff suppressed because it is too large Load Diff

View File

@ -105,7 +105,6 @@ abstract class SpotubeIcons {
static const file = FeatherIcons.file;
static const stream = Icons.stream_rounded;
static const lastFm = SimpleIcons.lastdotfm;
static const spotify = SimpleIcons.spotify;
static const eye = FeatherIcons.eye;
static const noEye = FeatherIcons.eyeOff;
static const normalize = FeatherIcons.barChart2;
@ -135,4 +134,9 @@ abstract class SpotubeIcons {
static const list = FeatherIcons.list;
static const device = FeatherIcons.smartphone;
static const engine = FeatherIcons.server;
static const extensions = FeatherIcons.package;
static const message = FeatherIcons.send;
static const upload = FeatherIcons.uploadCloud;
static const plugin = Icons.extension_outlined;
static const warning = FeatherIcons.alertTriangle;
}

View File

@ -1,18 +1,18 @@
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/modules/playlist/playlist_create_dialog.dart';
import 'package:spotube/components/image/universal_image.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/image.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/provider/metadata_plugin/library/playlists.dart';
import 'package:spotube/provider/metadata_plugin/core/user.dart';
class PlaylistAddTrackDialog extends HookConsumerWidget {
/// The id of the playlist this dialog was opened from
final String? openFromPlaylist;
final List<Track> tracks;
final List<SpotubeTrackObject> tracks;
const PlaylistAddTrackDialog({
required this.tracks,
required this.openFromPlaylist,
@ -22,24 +22,23 @@ class PlaylistAddTrackDialog extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final typography = Theme.of(context).typography;
final userPlaylists = ref.watch(favoritePlaylistsProvider);
final userPlaylists = ref.watch(metadataPluginSavedPlaylistsProvider);
final favoritePlaylistsNotifier =
ref.watch(favoritePlaylistsProvider.notifier);
ref.watch(metadataPluginSavedPlaylistsProvider.notifier);
final me = ref.watch(meProvider);
final me = ref.watch(metadataPluginUserProvider);
final filteredPlaylists = useMemoized(
() =>
userPlaylists.asData?.value.items
.where(
(playlist) =>
playlist.owner?.id != null &&
playlist.owner!.id == me.asData?.value.id &&
playlist.owner.id == me.asData?.value?.id &&
playlist.id != openFromPlaylist,
)
.toList() ??
[],
[userPlaylists.asData?.value, me.asData?.value.id, openFromPlaylist],
[userPlaylists.asData?.value, me.asData?.value?.id, openFromPlaylist],
);
final playlistsCheck = useState(<String, bool>{});
@ -60,7 +59,7 @@ class PlaylistAddTrackDialog extends HookConsumerWidget {
selectedPlaylists.map(
(playlistId) => favoritePlaylistsNotifier.addTracks(
playlistId,
tracks.map((e) => e.id!).toList(),
tracks.map((e) => e.id).toList(),
),
),
).then((_) => context.mounted ? Navigator.pop(context, true) : null);
@ -109,8 +108,7 @@ class PlaylistAddTrackDialog extends HookConsumerWidget {
},
),
leading: Avatar(
initials:
Avatar.getInitials(playlist.name ?? "Playlist"),
initials: Avatar.getInitials(playlist.name),
provider: UniversalImage.imageProvider(
playlist.images.asUrlString(
placeholder: ImagePlaceholder.collection,
@ -124,20 +122,20 @@ class PlaylistAddTrackDialog extends HookConsumerWidget {
onChanged: (val) {
playlistsCheck.value = {
...playlistsCheck.value,
playlist.id!: val == CheckboxState.checked,
playlist.id: val == CheckboxState.checked,
};
},
),
onPressed: () {
playlistsCheck.value = {
...playlistsCheck.value,
playlist.id!:
playlist.id:
!(playlistsCheck.value[playlist.id] ?? false),
};
},
child: Padding(
padding: const EdgeInsets.only(left: 8.0),
child: Text(playlist.name!),
child: Text(playlist.name),
),
);
},

View File

@ -1,13 +1,13 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/metadata/metadata.dart';
final replaceDownloadedFileState = StateProvider<bool?>((ref) => null);
class ReplaceDownloadedDialog extends ConsumerWidget {
final Track track;
final SpotubeTrackObject track;
const ReplaceDownloadedDialog({required this.track, super.key});
@override
@ -16,7 +16,7 @@ class ReplaceDownloadedDialog extends ConsumerWidget {
final replaceAll = ref.watch(replaceDownloadedFileState);
return AlertDialog(
title: Text(context.l10n.track_exists(track.name ?? "")),
title: Text(context.l10n.track_exists(track.name)),
content: RadioGroup(
value: groupValue,
onChanged: (value) {

View File

@ -1,53 +1,52 @@
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/links/artist_link.dart';
import 'package:spotube/components/links/hyper_link.dart';
import 'package:spotube/components/links/link_text.dart';
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/services/sourced_track/sourced_track.dart';
import 'package:spotube/extensions/duration.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/models/playback/track_sources.dart';
import 'package:spotube/provider/server/track_sources.dart';
class TrackDetailsDialog extends HookWidget {
final Track track;
class TrackDetailsDialog extends HookConsumerWidget {
final SpotubeFullTrackObject track;
const TrackDetailsDialog({
super.key,
required this.track,
});
@override
Widget build(BuildContext context) {
Widget build(BuildContext context, ref) {
final theme = Theme.of(context);
final mediaQuery = MediaQuery.of(context);
final sourcedTrack =
ref.read(trackSourcesProvider(TrackSourceQuery.fromTrack(track)));
final detailsMap = {
context.l10n.title: track.name!,
context.l10n.title: track.name,
context.l10n.artist: ArtistLink(
artists: track.artists ?? <Artist>[],
artists: track.artists,
mainAxisAlignment: WrapAlignment.start,
textStyle: const TextStyle(color: Colors.blue),
hideOverflowArtist: false,
),
context.l10n.album: LinkText(
track.album!.name!,
AlbumRoute(album: track.album!, id: track.album!.id!),
overflow: TextOverflow.ellipsis,
style: const TextStyle(color: Colors.blue),
),
context.l10n.duration: (track is SourcedTrack
? (track as SourcedTrack).sourceInfo.duration
: track.duration!)
.toHumanReadableString(),
if (track.album!.releaseDate != null)
context.l10n.released: track.album!.releaseDate,
context.l10n.popularity: track.popularity?.toString() ?? "0",
// context.l10n.album: LinkText(
// track.album!.name!,
// AlbumRoute(album: track.album!, id: track.album!.id!),
// overflow: TextOverflow.ellipsis,
// style: const TextStyle(color: Colors.blue),
// ),
context.l10n.duration: sourcedTrack.asData != null
? Duration(milliseconds: sourcedTrack.asData!.value.info.durationMs)
.toHumanReadableString()
: Duration(milliseconds: track.durationMs).toHumanReadableString(),
if (track.album.releaseDate != null)
context.l10n.released: track.album.releaseDate,
};
final sourceInfo =
track is SourcedTrack ? (track as SourcedTrack).sourceInfo : null;
final sourceInfo = sourcedTrack.asData?.value.info;
final ytTracksDetailsMap = sourceInfo == null
? {}
@ -58,18 +57,14 @@ class TrackDetailsDialog extends HookWidget {
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
context.l10n.channel: Hyperlink(
sourceInfo.artist,
sourceInfo.artistUrl,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
context.l10n.streamUrl: Hyperlink(
(track as SourcedTrack).url,
(track as SourcedTrack).url,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
context.l10n.channel: Text(sourceInfo.artists),
if (sourcedTrack.asData?.value.url != null)
context.l10n.streamUrl: Hyperlink(
sourcedTrack.asData!.value.url,
sourcedTrack.asData!.value.url,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
};
return AlertDialog(

View File

@ -5,8 +5,8 @@ import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/provider/metadata_plugin/core/auth.dart';
import 'package:spotube/provider/authentication/authentication.dart';
import 'package:spotube/utils/platform.dart';
class AnonymousFallback extends ConsumerWidget {
@ -18,13 +18,13 @@ class AnonymousFallback extends ConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final isLoggedIn = ref.watch(authenticationProvider);
final isLoggedIn = ref.watch(metadataPluginAuthenticatedProvider);
if (isLoggedIn.isLoading) {
return const Center(child: CircularProgressIndicator());
}
if (isLoggedIn.asData?.value != null && child != null) return child!;
if (isLoggedIn.asData?.value == true && child != null) return child!;
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
@ -39,7 +39,7 @@ class AnonymousFallback extends ConsumerWidget {
),
Text(context.l10n.not_logged_in),
Button.primary(
child: Text(context.l10n.login_with_spotify),
child: Text(context.l10n.login),
onPressed: () => context.navigateTo(const SettingsRoute()),
)
],

View File

@ -1,11 +1,12 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/components/heart_button/use_track_toggle_like.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/provider/authentication/authentication.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/metadata_plugin/core/auth.dart';
import 'package:spotube/provider/metadata_plugin/library/tracks.dart';
import 'package:spotube/provider/metadata_plugin/core/user.dart';
class HeartButton extends HookConsumerWidget {
final bool isLiked;
@ -28,9 +29,9 @@ class HeartButton extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final auth = ref.watch(authenticationProvider);
final authenticated = ref.watch(metadataPluginAuthenticatedProvider);
if (auth.asData?.value == null) return const SizedBox.shrink();
if (authenticated.asData?.value != true) return const SizedBox.shrink();
return Tooltip(
tooltip: TooltipContainer(child: Text(tooltip ?? "")).call,
@ -63,7 +64,7 @@ class HeartButton extends HookConsumerWidget {
}
class TrackHeartButton extends HookConsumerWidget {
final Track track;
final SpotubeTrackObject track;
const TrackHeartButton({
super.key,
required this.track,
@ -71,8 +72,8 @@ class TrackHeartButton extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final savedTracks = ref.watch(likedTracksProvider);
final me = ref.watch(meProvider);
final savedTracks = ref.watch(metadataPluginSavedTracksProvider);
final me = ref.watch(metadataPluginUserProvider);
final (:isLiked, :toggleTrackLike) = useTrackToggleLike(track, ref);
if (me.isLoading) {

View File

@ -1,36 +1,31 @@
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/provider/scrobbler/scrobbler.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/metadata_plugin/library/tracks.dart';
typedef UseTrackToggleLike = ({
bool isLiked,
Future<void> Function(Track track) toggleTrackLike,
Future<void> Function(SpotubeTrackObject track) toggleTrackLike,
});
UseTrackToggleLike useTrackToggleLike(Track track, WidgetRef ref) {
final savedTracks = ref.watch(likedTracksProvider);
final savedTracksNotifier = ref.watch(likedTracksProvider.notifier);
UseTrackToggleLike useTrackToggleLike(SpotubeTrackObject track, WidgetRef ref) {
final savedTracksNotifier =
ref.watch(metadataPluginSavedTracksProvider.notifier);
final isLiked = useMemoized(
() =>
savedTracks.asData?.value.any((element) => element.id == track.id) ??
false,
[savedTracks.asData?.value, track.id],
final isSavedTrack = ref.watch(
metadataPluginIsSavedTrackProvider(track.id),
);
final scrobblerNotifier = ref.read(scrobblerProvider.notifier);
return (
isLiked: isLiked,
isLiked: isSavedTrack.asData?.value ?? false,
toggleTrackLike: (track) async {
await savedTracksNotifier.toggleFavorite(track);
final isLikedTrack = await ref.read(
metadataPluginIsSavedTrackProvider(track.id).future,
);
if (!isLiked) {
await scrobblerNotifier.love(track);
if (isLikedTrack) {
await savedTracksNotifier.removeFavorite([track]);
} else {
await scrobblerNotifier.unlove(track);
await savedTracksNotifier.addFavorite([track]);
}
},
);

View File

@ -4,8 +4,8 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:skeletonizer/skeletonizer.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/fake.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/modules/album/album_card.dart';
import 'package:spotube/modules/artist/artist_card.dart';
import 'package:spotube/modules/playlist/playlist_card.dart';
@ -30,14 +30,16 @@ class HorizontalPlaybuttonCardView<T> extends HookWidget {
}) : assert(
items.every(
(item) =>
item is PlaylistSimple || item is Artist || item is AlbumSimple,
item is SpotubeSimpleAlbumObject ||
item is SpotubeSimplePlaylistObject ||
item is SpotubeFullArtistObject,
),
);
@override
Widget build(BuildContext context) {
final scrollController = useScrollController();
final isArtist = items.every((s) => s is Artist);
final isArtist = items.every((s) => s is SpotubeFullArtistObject);
final scale = context.theme.scaling;
return Padding(
@ -98,10 +100,12 @@ class HorizontalPlaybuttonCardView<T> extends HookWidget {
final item = items[index];
return switch (item) {
PlaylistSimple() =>
PlaylistCard(item as PlaylistSimple),
AlbumSimple() => AlbumCard(item as AlbumSimple),
Artist() => ArtistCard(item as Artist),
SpotubeSimplePlaylistObject() =>
PlaylistCard(item as SpotubeSimplePlaylistObject),
SpotubeSimpleAlbumObject() =>
AlbumCard(item as SpotubeSimpleAlbumObject),
SpotubeFullArtistObject() =>
ArtistCard(item as SpotubeFullArtistObject),
_ => const SizedBox.shrink(),
};
}),

View File

@ -1,12 +1,12 @@
import 'package:auto_route/auto_route.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/components/links/anchor_button.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/metadata/metadata.dart';
class ArtistLink extends StatelessWidget {
final List<ArtistSimple> artists;
final List<SpotubeSimpleArtistObject> artists;
final WrapCrossAlignment crossAxisAlignment;
final WrapAlignment mainAxisAlignment;
final TextStyle textStyle;
@ -38,19 +38,16 @@ class ArtistLink extends StatelessWidget {
.entries
.map(
(artist) => Builder(builder: (context) {
if (artist.value.name == null) {
return Text("Spotify", style: textStyle);
}
return AnchorButton(
(artist.key != artists.length - 1)
? "${artist.value.name}, "
: artist.value.name!,
: artist.value.name,
onTap: () {
if (onRouteChange != null) {
onRouteChange?.call("/artist/${artist.value.id}");
} else {
context
.navigateTo(ArtistRoute(artistId: artist.value.id!));
.navigateTo(ArtistRoute(artistId: artist.value.id));
}
},
overflow: TextOverflow.ellipsis,

View File

@ -0,0 +1,100 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/services.dart';
import 'package:flutter_markdown_plus/flutter_markdown_plus.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:url_launcher/url_launcher_string.dart';
class AppMarkdown extends StatelessWidget {
final String data;
const AppMarkdown({
super.key,
required this.data,
});
@override
Widget build(BuildContext context) {
return MarkdownBody(
data: data,
imageBuilder: (uri, title, alt) {
final url = uri.toString();
return CachedNetworkImage(
imageUrl: url,
fit: BoxFit.cover,
);
},
onTapLink: (text, href, title) async {
final allowOpeningLink = await showDialog<bool>(
context: context,
builder: (context) {
return ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 450),
child: AlertDialog(
title: const Row(
spacing: 8,
children: [
Icon(SpotubeIcons.warning),
Text("Open Link in Browser?"),
],
),
content: Text.rich(
TextSpan(
children: [
const TextSpan(
text: "Do you want to open the following link:\n",
),
if (href != null)
TextSpan(
text: "$href\n\n",
style: const TextStyle(color: Colors.blue),
),
const TextSpan(
text:
"It can be unsafe to open links from untrusted sources. Be cautious!\n"
"You can also copy the link to your clipboard.",
),
],
),
),
actions: [
Button.ghost(
onPressed: () => Navigator.of(context).pop(false),
child: const Text("Cancel"),
),
Button.ghost(
onPressed: () {
if (href != null) {
Clipboard.setData(ClipboardData(text: href));
}
Navigator.of(context).pop(false);
},
child: const Text("Copy Link"),
),
Button.destructive(
onPressed: () {
if (href != null) {
launchUrlString(
href,
mode: LaunchMode.externalApplication,
);
}
Navigator.of(context).pop(true);
},
child: const Text("Open"),
),
],
),
);
},
);
if (href != null && allowOpeningLink == true) {
launchUrlString(
href,
mode: LaunchMode.externalApplication,
);
}
},
);
}
}

View File

@ -1,7 +1,6 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/adaptive/adaptive_pop_sheet_list.dart';
import 'package:spotube/components/dialogs/confirm_download_dialog.dart';
@ -10,54 +9,59 @@ import 'package:spotube/components/track_presentation/presentation_props.dart';
import 'package:spotube/components/track_presentation/presentation_state.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/database/database.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/download_manager_provider.dart';
import 'package:spotube/provider/history/history.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
ToastOverlay showToastForAction(
BuildContext context,
String action,
int count,
) {
final message = switch (action) {
"download" => (context.l10n.download_count(count), SpotubeIcons.download),
"add-to-playlist" => (
context.l10n.add_count_to_playlist(count),
SpotubeIcons.playlistAdd
),
"add-to-queue" => (
context.l10n.add_count_to_queue(count),
SpotubeIcons.queueAdd
),
"play-next" => (
context.l10n.play_count_next(count),
SpotubeIcons.lightning
),
_ => ("", SpotubeIcons.error),
};
return showToast(
context: context,
location: ToastLocation.topRight,
builder: (context, overlay) {
return SurfaceCard(
child: Basic(
leading: Icon(message.$2),
title: Text(message.$1),
leadingAlignment: Alignment.center,
trailing: IconButton.ghost(
size: ButtonSize.small,
icon: const Icon(SpotubeIcons.close),
onPressed: () {
overlay.close();
},
),
),
);
},
);
}
class TrackPresentationActionsSection extends HookConsumerWidget {
const TrackPresentationActionsSection({super.key});
showToastForAction(BuildContext context, String action, int count) {
final message = switch (action) {
"download" => (context.l10n.download_count(count), SpotubeIcons.download),
"add-to-playlist" => (
context.l10n.add_count_to_playlist(count),
SpotubeIcons.playlistAdd
),
"add-to-queue" => (
context.l10n.add_count_to_queue(count),
SpotubeIcons.queueAdd
),
"play-next" => (
context.l10n.play_count_next(count),
SpotubeIcons.lightning
),
_ => ("", SpotubeIcons.error),
};
showToast(
context: context,
location: ToastLocation.topRight,
builder: (context, overlay) {
return SurfaceCard(
child: Basic(
leading: Icon(message.$2),
title: Text(message.$1),
leadingAlignment: Alignment.center,
trailing: IconButton.ghost(
size: ButtonSize.small,
icon: const Icon(SpotubeIcons.close),
onPressed: () {
overlay.close();
},
),
),
);
},
);
}
@override
Widget build(BuildContext context, ref) {
final options = TrackPresentationOptions.of(context);
@ -76,9 +80,11 @@ class TrackPresentationActionsSection extends HookConsumerWidget {
Future<void> actionDownloadTracks({
required BuildContext context,
required List<Track> tracks,
required List<SpotubeTrackObject> tracks,
required String action,
}) async {
final fullTrackObjects =
tracks.whereType<SpotubeFullTrackObject>().toList();
final confirmed = audioSource == AudioSource.piped ||
(await showDialog<bool>(
context: context,
@ -88,10 +94,10 @@ class TrackPresentationActionsSection extends HookConsumerWidget {
) ??
false);
if (confirmed != true) return;
downloader.batchAddToQueue(tracks);
downloader.batchAddToQueue(fullTrackObjects);
notifier.deselectAllTracks();
if (!context.mounted) return;
showToastForAction(context, action, tracks.length);
showToastForAction(context, action, fullTrackObjects.length);
}
return AdaptivePopSheetList(
@ -143,11 +149,12 @@ class TrackPresentationActionsSection extends HookConsumerWidget {
{
playlistNotifier.addTracksAtFirst(tracks);
playlistNotifier.addCollection(options.collectionId);
if (options.collection is AlbumSimple) {
historyNotifier.addAlbums([options.collection as AlbumSimple]);
if (options.collection is SpotubeSimpleAlbumObject) {
historyNotifier.addAlbums(
[options.collection as SpotubeSimpleAlbumObject]);
} else {
historyNotifier
.addPlaylists([options.collection as PlaylistSimple]);
historyNotifier.addPlaylists(
[options.collection as SpotubeSimplePlaylistObject]);
}
notifier.deselectAllTracks();
if (!context.mounted) return;
@ -158,11 +165,12 @@ class TrackPresentationActionsSection extends HookConsumerWidget {
{
playlistNotifier.addTracks(tracks);
playlistNotifier.addCollection(options.collectionId);
if (options.collection is AlbumSimple) {
historyNotifier.addAlbums([options.collection as AlbumSimple]);
if (options.collection is SpotubeSimpleAlbumObject) {
historyNotifier.addAlbums(
[options.collection as SpotubeSimpleAlbumObject]);
} else {
historyNotifier
.addPlaylists([options.collection as PlaylistSimple]);
historyNotifier.addPlaylists(
[options.collection as SpotubeSimplePlaylistObject]);
}
notifier.deselectAllTracks();
if (!context.mounted) return;

View File

@ -1,4 +1,5 @@
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_undraw/flutter_undraw.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
@ -80,9 +81,12 @@ class PresentationListSection extends HookConsumerWidget {
),
),
),
itemBuilder: (context, index) {
itemBuilder: (context, index) => HookBuilder(builder: (context) {
final track = state.presentationTracks[index];
final isSelected = state.selectedTracks.any((e) => e.id == track.id);
final isSelected = useMemoized(
() => state.selectedTracks.any((e) => e.id == track.id),
[track.id, state.selectedTracks],
);
return TrackTile(
userPlaylist: isUserPlaylist,
playlistId: options.collectionId,
@ -105,7 +109,7 @@ class PresentationListSection extends HookConsumerWidget {
HapticFeedback.selectionClick();
},
);
},
}),
);
}
}

View File

@ -1,14 +1,14 @@
import 'dart:async';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/models/metadata/metadata.dart';
class PaginationProps {
final bool hasNextPage;
final bool isLoading;
final VoidCallback onFetchMore;
final Future<void> Function() onRefresh;
final Future<List<Track>> Function() onFetchAll;
final Future<List<SpotubeFullTrackObject>> Function() onFetchAll;
const PaginationProps({
required this.hasNextPage,
@ -46,7 +46,7 @@ class TrackPresentationOptions {
final String? ownerImage;
final String image;
final String routePath;
final List<Track> tracks;
final List<SpotubeFullTrackObject> tracks;
final PaginationProps pagination;
final bool isLiked;
final String? shareUrl;
@ -67,11 +67,12 @@ class TrackPresentationOptions {
this.shareUrl,
this.isLiked = false,
this.onHeart,
}) : assert(collection is AlbumSimple || collection is PlaylistSimple);
}) : assert(collection is SpotubeSimpleAlbumObject ||
collection is SpotubeSimplePlaylistObject);
String get collectionId => collection is AlbumSimple
? (collection as AlbumSimple).id!
: (collection as PlaylistSimple).id!;
String get collectionId => collection is SpotubeSimpleAlbumObject
? (collection as SpotubeSimpleAlbumObject).id
: (collection as SpotubeSimplePlaylistObject).id;
static TrackPresentationOptions of(BuildContext context) {
return Data.of<TrackPresentationOptions>(context);

View File

@ -1,14 +1,16 @@
import 'package:collection/collection.dart';
import 'package:fuzzywuzzy/fuzzywuzzy.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/pages/library/user_local_tracks/user_local_tracks.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/provider/metadata_plugin/library/tracks.dart';
import 'package:spotube/provider/metadata_plugin/tracks/album.dart';
import 'package:spotube/provider/metadata_plugin/tracks/playlist.dart';
import 'package:spotube/utils/service_utils.dart';
class PresentationState {
final List<Track> selectedTracks;
final List<Track> presentationTracks;
final List<SpotubeTrackObject> selectedTracks;
final List<SpotubeTrackObject> presentationTracks;
final SortBy sortBy;
const PresentationState({
@ -18,8 +20,8 @@ class PresentationState {
});
PresentationState copyWith({
List<Track>? selectedTracks,
List<Track>? presentationTracks,
List<SpotubeTrackObject>? selectedTracks,
List<SpotubeTrackObject>? presentationTracks,
SortBy? sortBy,
}) {
return PresentationState(
@ -34,15 +36,15 @@ class PresentationStateNotifier
extends AutoDisposeFamilyNotifier<PresentationState, Object> {
@override
PresentationState build(collection) {
if (arg case PlaylistSimple() || AlbumSimple()) {
if (arg case SpotubeSimplePlaylistObject() || SpotubeSimpleAlbumObject()) {
if (isSavedTrackPlaylist) {
ref.listen(
likedTracksProvider,
metadataPluginSavedTracksProvider,
(previous, next) {
next.whenData((value) {
state = state.copyWith(
presentationTracks: ServiceUtils.sortTracks(
value,
value.items,
state.sortBy,
),
);
@ -51,9 +53,11 @@ class PresentationStateNotifier
);
} else {
ref.listen(
arg is PlaylistSimple
? playlistTracksProvider((arg as PlaylistSimple).id!)
: albumTracksProvider((arg as AlbumSimple)),
arg is SpotubeSimplePlaylistObject
? metadataPluginPlaylistTracksProvider(
(arg as SpotubeSimplePlaylistObject).id)
: metadataPluginAlbumTracksProvider(
(arg as SpotubeSimpleAlbumObject).id),
(previous, next) {
next.whenData((value) {
state = state.copyWith(
@ -76,36 +80,39 @@ class PresentationStateNotifier
}
bool get isSavedTrackPlaylist =>
arg is PlaylistSimple &&
(arg as PlaylistSimple).id == "user-liked-tracks";
arg is SpotubeSimplePlaylistObject &&
(arg as SpotubeSimplePlaylistObject).id == "user-liked-tracks";
List<Track> get tracks {
List<SpotubeTrackObject> get tracks {
assert(
arg is PlaylistSimple || arg is AlbumSimple,
"arg must be PlaylistSimple or AlbumSimple",
arg is SpotubeSimplePlaylistObject || arg is SpotubeSimpleAlbumObject,
"arg must be SpotubeSimplePlaylistObject or SpotubeSimpleAlbumObject",
);
final isPlaylist = arg is PlaylistSimple;
final isPlaylist = arg is SpotubeSimplePlaylistObject;
final tracks = switch ((isPlaylist, isSavedTrackPlaylist)) {
(true, true) => ref.read(likedTracksProvider).asData?.value,
(true, true) =>
ref.read(metadataPluginSavedTracksProvider).asData?.value.items,
(true, false) => ref
.read(playlistTracksProvider((arg as PlaylistSimple).id!))
.read(metadataPluginPlaylistTracksProvider(
(arg as SpotubeSimplePlaylistObject).id))
.asData
?.value
.items,
_ => ref
.read(albumTracksProvider((arg as AlbumSimple)))
.read(metadataPluginAlbumTracksProvider(
(arg as SpotubeSimpleAlbumObject).id))
.asData
?.value
.items,
} ??
[];
<SpotubeFullTrackObject>[];
return tracks;
}
void selectTrack(Track track) {
void selectTrack(SpotubeTrackObject track) {
if (state.selectedTracks.any((e) => e.id == track.id)) {
return;
}
@ -121,7 +128,7 @@ class PresentationStateNotifier
);
}
void deselectTrack(Track track) {
void deselectTrack(SpotubeTrackObject track) {
state = state.copyWith(
selectedTracks: state.selectedTracks.where((e) => e != track).toList(),
);
@ -141,7 +148,7 @@ class PresentationStateNotifier
state = state.copyWith(
presentationTracks: ServiceUtils.sortTracks(
tracks
.map((e) => (weightedRatio(e.name!, query), e))
.map((e) => (weightedRatio(e.name, query), e))
.sorted((a, b) => b.$1.compareTo(a.$1))
.where((e) => e.$1 > 50)
.map((e) => e.$2)

View File

@ -3,8 +3,6 @@ import 'package:flutter/services.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/env.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/heart_button/heart_button.dart';
import 'package:spotube/components/image/universal_image.dart';
@ -14,7 +12,6 @@ import 'package:spotube/components/track_presentation/use_is_user_playlist.dart'
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/modules/playlist/playlist_create_dialog.dart';
import 'package:spotube/provider/spotify/spotify.dart';
class TrackPresentationTopSection extends HookConsumerWidget {
const TrackPresentationTopSection({super.key});
@ -26,29 +23,14 @@ class TrackPresentationTopSection extends HookConsumerWidget {
final scale = context.theme.scaling;
final isUserPlaylist = useIsUserPlaylist(ref, options.collectionId);
final playlistImage = (options.collection is PlaylistSimple &&
(options.collection as PlaylistSimple).owner?.displayName ==
"Spotify" &&
Env.disableSpotifyImages)
? ref.watch(playlistImageProvider(options.collectionId))
: null;
final decorationImage = playlistImage != null
? DecorationImage(
image: AssetImage(playlistImage.src),
fit: BoxFit.cover,
colorFilter: ColorFilter.mode(
playlistImage.color,
playlistImage.colorBlendMode,
),
)
: DecorationImage(
image: UniversalImage.imageProvider(options.image),
fit: BoxFit.cover,
);
final decorationImage = DecorationImage(
image: UniversalImage.imageProvider(options.image),
fit: BoxFit.cover,
);
final imageDimension = mediaQuery.mdAndUp ? 200 : 120;
final (:isLoading, :isActive, :onPlay, :onShuffle) =
final (:isLoading, :isActive, :onPlay, :onShuffle, :onAddToQueue) =
useActionCallbacks(ref);
final playbackActions = Row(
@ -77,15 +59,15 @@ class TrackPresentationTopSection extends HookConsumerWidget {
child: IconButton.secondary(
icon: const Icon(SpotubeIcons.queueAdd),
enabled: !isLoading && !isActive,
onPressed: () {},
onPressed: onAddToQueue,
),
)
else
Button.secondary(
leading: const Icon(SpotubeIcons.add),
enabled: !isLoading && !isActive,
onPressed: onAddToQueue,
child: Text(context.l10n.queue),
onPressed: () {},
),
Button.primary(
alignment: Alignment.center,
@ -116,7 +98,7 @@ class TrackPresentationTopSection extends HookConsumerWidget {
builder: (context) {
return PlaylistCreateDialog(
playlistId: options.collectionId,
trackIds: options.tracks.map((e) => e.id!).toList(),
trackIds: options.tracks.map((e) => e.id).toList(),
);
},
);
@ -244,6 +226,7 @@ class TrackPresentationTopSection extends HookConsumerWidget {
.imageProvider(
options.ownerImage!,
),
size: 20 * scale,
)
: null,
child: Text(

View File

@ -55,37 +55,35 @@ class TrackPresentation extends HookConsumerWidget {
slivers: [
const TrackPresentationTopSection(),
const SliverGap(16),
SliverLayoutBuilder(
builder: (context, constrains) {
return SliverList.list(
children: [
TrackPresentationModifiersSection(
focusNode: focusNode,
SliverList.list(
children: [
TrackPresentationModifiersSection(
focusNode: focusNode,
),
LayoutBuilder(builder: (context, constrains) {
return Basic(
padding: const EdgeInsets.symmetric(
vertical: 8,
horizontal: 16,
),
Basic(
padding: const EdgeInsets.symmetric(
vertical: 8,
horizontal: 16,
),
leading: constrains.mdAndUp ? const Text(" #") : null,
title: Row(
children: [
leading: constrains.mdAndUp ? const Text(" #") : null,
title: Row(
children: [
Expanded(
flex: constrains.lgAndUp ? 5 : 6,
child: Text(context.l10n.title),
),
if (constrains.mdAndUp)
Expanded(
flex: constrains.lgAndUp ? 5 : 6,
child: Text(context.l10n.title),
flex: 3,
child: Text(context.l10n.album),
),
if (constrains.mdAndUp)
Expanded(
flex: 3,
child: Text(context.l10n.album),
),
Text(context.l10n.duration),
],
),
).small().muted(),
],
);
},
Text(context.l10n.duration),
],
),
).small().muted();
}),
],
),
const PresentationListSection(),
const SliverSafeArea(sliver: SliverGap(10)),

View File

@ -1,12 +1,14 @@
import 'dart:math';
import 'package:flutter/widgets.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/components/dialogs/select_device_dialog.dart';
import 'package:spotube/components/track_presentation/presentation_actions.dart';
import 'package:spotube/components/track_presentation/presentation_props.dart';
import 'package:spotube/models/connect/connect.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/connect/connect.dart';
import 'package:spotube/provider/history/history.dart';
@ -17,6 +19,7 @@ typedef UseActionCallbacks = ({
bool isLoading,
Future<void> Function() onShuffle,
Future<void> Function() onPlay,
VoidCallback onAddToQueue,
});
UseActionCallbacks useActionCallbacks(WidgetRef ref) {
@ -45,14 +48,14 @@ UseActionCallbacks useActionCallbacks(WidgetRef ref) {
final allTracks = await options.pagination.onFetchAll();
final remotePlayback = ref.read(connectProvider.notifier);
await remotePlayback.load(
options.collection is AlbumSimple
options.collection is SpotubeSimpleAlbumObject
? WebSocketLoadEventData.album(
tracks: allTracks,
collection: options.collection as AlbumSimple,
collection: options.collection as SpotubeSimpleAlbumObject,
initialIndex: Random().nextInt(allTracks.length))
: WebSocketLoadEventData.playlist(
tracks: allTracks,
collection: options.collection as PlaylistSimple,
collection: options.collection as SpotubeSimplePlaylistObject,
initialIndex: Random().nextInt(allTracks.length),
),
);
@ -65,10 +68,12 @@ UseActionCallbacks useActionCallbacks(WidgetRef ref) {
);
await audioPlayer.setShuffle(true);
playlistNotifier.addCollection(options.collectionId);
if (options.collection is AlbumSimple) {
historyNotifier.addAlbums([options.collection as AlbumSimple]);
if (options.collection is SpotubeSimpleAlbumObject) {
historyNotifier
.addAlbums([options.collection as SpotubeSimpleAlbumObject]);
} else {
historyNotifier.addPlaylists([options.collection as PlaylistSimple]);
historyNotifier.addPlaylists(
[options.collection as SpotubeSimplePlaylistObject]);
}
final allTracks = await options.pagination.onFetchAll();
@ -94,25 +99,33 @@ UseActionCallbacks useActionCallbacks(WidgetRef ref) {
if (isRemoteDevice == null) return;
if (isRemoteDevice) {
final allTracks = await options.pagination.onFetchAll();
final remotePlayback = ref.read(connectProvider.notifier);
await remotePlayback.load(
options.collection is AlbumSimple
options.collection is SpotubeSimpleAlbumObject
? WebSocketLoadEventData.album(
tracks: allTracks,
collection: options.collection as AlbumSimple,
collection: options.collection as SpotubeSimpleAlbumObject,
)
: WebSocketLoadEventData.playlist(
tracks: allTracks,
collection: options.collection as PlaylistSimple,
collection: options.collection as SpotubeSimplePlaylistObject,
),
);
} else {
if (initialTracks.isEmpty) return;
await playlistNotifier.load(initialTracks, autoPlay: true);
playlistNotifier.addCollection(options.collectionId);
if (options.collection is AlbumSimple) {
historyNotifier.addAlbums([options.collection as AlbumSimple]);
if (options.collection is SpotubeSimpleAlbumObject) {
historyNotifier.addAlbums(
[options.collection as SpotubeSimpleAlbumObject],
);
} else {
historyNotifier.addPlaylists([options.collection as PlaylistSimple]);
historyNotifier.addPlaylists(
[options.collection as SpotubeSimplePlaylistObject],
);
}
final allTracks = await options.pagination.onFetchAll();
@ -128,10 +141,26 @@ UseActionCallbacks useActionCallbacks(WidgetRef ref) {
}
}, [options, playlistNotifier, historyNotifier]);
final onAddToQueue = useCallback(() {
final tracks = options.tracks;
playlistNotifier.addTracks(tracks);
playlistNotifier.addCollection(options.collectionId);
if (options.collection is SpotubeSimpleAlbumObject) {
historyNotifier
.addAlbums([options.collection as SpotubeSimpleAlbumObject]);
} else {
historyNotifier
.addPlaylists([options.collection as SpotubeSimplePlaylistObject]);
}
if (!context.mounted) return;
showToastForAction(context, "add-to-queue", tracks.length);
}, [options, playlistNotifier, historyNotifier]);
return (
isActive: isActive,
isLoading: isLoading.value,
onShuffle: onShuffle,
onPlay: onPlay,
onAddToQueue: onAddToQueue,
);
}

View File

@ -1,17 +1,18 @@
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/provider/metadata_plugin/library/playlists.dart';
import 'package:spotube/provider/metadata_plugin/core/user.dart';
bool useIsUserPlaylist(WidgetRef ref, String playlistId) {
final userPlaylistsQuery = ref.watch(favoritePlaylistsProvider);
final me = ref.watch(meProvider);
final userPlaylistsQuery = ref.watch(metadataPluginSavedPlaylistsProvider);
final me = ref.watch(metadataPluginUserProvider);
return useMemoized(
() =>
userPlaylistsQuery.asData?.value.items.any((e) =>
e.id == playlistId &&
me.asData?.value != null &&
e.owner?.id == me.asData?.value.id) ??
e.owner.id == me.asData?.value?.id) ??
false,
[userPlaylistsQuery.asData?.value, playlistId, me.asData?.value],
);

View File

@ -1,18 +1,19 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/components/dialogs/select_device_dialog.dart';
import 'package:spotube/components/track_presentation/presentation_props.dart';
import 'package:spotube/components/track_presentation/presentation_state.dart';
import 'package:spotube/extensions/list.dart';
import 'package:spotube/models/connect/connect.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/connect/connect.dart';
import 'package:spotube/provider/history/history.dart';
Future<void> Function(Track track, int index) useTrackTilePlayCallback(
Future<void> Function(SpotubeTrackObject track, int index)
useTrackTilePlayCallback(
WidgetRef ref,
) {
final context = useContext();
@ -26,7 +27,8 @@ Future<void> Function(Track track, int index) useTrackTilePlayCallback(
[playlist.collections, options.collectionId],
);
final onTapTrackTile = useCallback((Track track, int index) async {
final onTapTrackTile =
useCallback((SpotubeTrackObject track, int index) async {
final state = ref.read(presentationStateProvider(options.collection));
final notifier =
ref.read(presentationStateProvider(options.collection).notifier);
@ -52,15 +54,15 @@ Future<void> Function(Track track, int index) useTrackTilePlayCallback(
} else {
final tracks = await options.pagination.onFetchAll();
await remotePlayback.load(
options.collection is AlbumSimple
options.collection is SpotubeSimpleAlbumObject
? WebSocketLoadEventData.album(
tracks: tracks,
collection: options.collection as AlbumSimple,
collection: options.collection as SpotubeSimpleAlbumObject,
initialIndex: index,
)
: WebSocketLoadEventData.playlist(
tracks: tracks,
collection: options.collection as PlaylistSimple,
collection: options.collection as SpotubeSimplePlaylistObject,
initialIndex: index,
),
);
@ -76,10 +78,12 @@ Future<void> Function(Track track, int index) useTrackTilePlayCallback(
autoPlay: true,
);
playlistNotifier.addCollection(options.collectionId);
if (options.collection is AlbumSimple) {
historyNotifier.addAlbums([options.collection as AlbumSimple]);
if (options.collection is SpotubeSimpleAlbumObject) {
historyNotifier
.addAlbums([options.collection as SpotubeSimpleAlbumObject]);
} else {
historyNotifier.addPlaylists([options.collection as PlaylistSimple]);
historyNotifier.addPlaylists(
[options.collection as SpotubeSimplePlaylistObject]);
}
}
}

View File

@ -1,501 +1,280 @@
import 'dart:io';
import 'package:auto_route/auto_route.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotify/spotify.dart' hide Offset;
import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/adaptive/adaptive_pop_sheet_list.dart';
import 'package:spotube/components/dialogs/playlist_add_track_dialog.dart';
import 'package:spotube/components/dialogs/prompt_dialog.dart';
import 'package:spotube/components/dialogs/track_details_dialog.dart';
import 'package:spotube/components/heart_button/use_track_toggle_like.dart';
import 'package:spotube/components/image/universal_image.dart';
import 'package:spotube/components/links/artist_link.dart';
import 'package:spotube/components/ui/button_tile.dart';
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/image.dart';
import 'package:spotube/models/database/database.dart';
import 'package:spotube/models/local_track.dart';
import 'package:spotube/provider/authentication/authentication.dart';
import 'package:spotube/provider/blacklist_provider.dart';
import 'package:spotube/provider/download_manager_provider.dart';
import 'package:spotube/provider/local_tracks/local_tracks_provider.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:url_launcher/url_launcher_string.dart';
enum TrackOptionValue {
album,
share,
songlink,
addToPlaylist,
addToQueue,
removeFromPlaylist,
removeFromQueue,
blacklist,
delete,
playNext,
favorite,
details,
download,
startRadio,
}
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/track_options/track_options_provider.dart';
/// [track] must be a [SpotubeFullTrackObject] or [SpotubeLocalTrackObject]
class TrackOptions extends HookConsumerWidget {
final Track track;
final SpotubeTrackObject track;
final bool userPlaylist;
final String? playlistId;
final ObjectRef<ValueChanged<RelativeRect>?>? showMenuCbRef;
final Widget? icon;
const TrackOptions({
super.key,
required this.track,
this.showMenuCbRef,
this.userPlaylist = false,
this.playlistId,
this.icon,
});
void actionShare(BuildContext context, Track track) {
final data = "https://open.spotify.com/track/${track.id}";
Clipboard.setData(ClipboardData(text: data)).then((_) {
if (context.mounted) {
showToast(
context: context,
location: ToastLocation.topRight,
builder: (context, overlay) {
return SurfaceCard(
child: Text(
context.l10n.copied_to_clipboard(data),
textAlign: TextAlign.center,
),
);
},
}) : assert(
track is SpotubeFullTrackObject || track is SpotubeLocalTrackObject,
"Track must be a SpotubeFullTrackObject, SpotubeLocalTrackObject",
);
}
});
}
void actionAddToPlaylist(
BuildContext context,
Track track,
) {
/// showDialog doesn't work for some reason. So we have to
/// manually push a Dialog Route in the Navigator to get it working
showDialog(
context: context,
builder: (context) {
return PlaylistAddTrackDialog(
tracks: [track],
openFromPlaylist: playlistId,
);
},
);
}
void actionStartRadio(
BuildContext context,
WidgetRef ref,
Track track,
) async {
final playback = ref.read(audioPlayerProvider.notifier);
final playlist = ref.read(audioPlayerProvider);
final spotify = ref.read(spotifyProvider);
final query = "${track.name} Radio";
final pages = await spotify.invoke(
(api) => api.search.get(query, types: [SearchType.playlist]).first(),
);
final radios = pages
.expand((e) => e.items?.cast<PlaylistSimple>().toList() ?? [])
.toList();
final artists = track.artists!.map((e) => e.name);
final radio = radios.firstWhere(
(e) {
final validPlaylists =
artists.where((a) => e.description!.contains(a!));
return e.name == "${track.name} Radio" &&
(validPlaylists.length >= 2 ||
validPlaylists.length == artists.length) &&
e.owner?.displayName == "Spotify";
},
orElse: () => radios.first,
);
bool replaceQueue = false;
if (context.mounted && playlist.tracks.isNotEmpty) {
replaceQueue = await showPromptDialog(
context: context,
title: context.l10n.how_to_start_radio,
message: context.l10n.replace_queue_question,
okText: context.l10n.replace,
cancelText: context.l10n.add_to_queue,
);
}
if (replaceQueue || playlist.tracks.isEmpty) {
await playback.stop();
await playback.load([track], autoPlay: true);
// we don't have to add those tracks as useEndlessPlayback will do it for us
return;
} else {
await playback.addTrack(track);
}
final tracks = await spotify.invoke(
(api) => api.playlists.getTracksByPlaylistId(radio.id!).all(),
);
await playback.addTracks(
tracks.toList()
..removeWhere((e) {
final isDuplicate = playlist.tracks.any((t) => t.id == e.id);
return e.id == track.id || isDuplicate;
}),
);
}
@override
Widget build(BuildContext context, ref) {
final mediaQuery = MediaQuery.of(context);
final ThemeData(:colorScheme) = Theme.of(context);
final playlist = ref.watch(audioPlayerProvider);
final playback = ref.watch(audioPlayerProvider.notifier);
final auth = ref.watch(authenticationProvider);
ref.watch(downloadManagerProvider);
final downloadManager = ref.watch(downloadManagerProvider.notifier);
final blacklist = ref.watch(blacklistProvider);
final me = ref.watch(meProvider);
final trackOptionActions = ref.watch(trackOptionActionsProvider(track));
final (
:isBlacklisted,
:isInDownloadQueue,
:isInQueue,
:isActiveTrack,
:isAuthenticated,
:isLiked,
:progressNotifier
) = ref.watch(trackOptionsStateProvider(track));
final isLocalTrack = track is SpotubeLocalTrackObject;
final favorites = useTrackToggleLike(track, ref);
final isBlackListed = useMemoized(
() => blacklist.asData?.value.any(
(element) => element.elementId == track.id,
),
[blacklist, track],
);
final removingTrack = useState<String?>(null);
final favoritePlaylistsNotifier =
ref.watch(favoritePlaylistsProvider.notifier);
final isInQueue = useMemoized(() {
if (playlist.activeTrack == null) return false;
return downloadManager.isActive(playlist.activeTrack!);
}, [
playlist.activeTrack,
downloadManager,
]);
final progressNotifier = useMemoized(() {
final spotubeTrack = downloadManager.mapToSourcedTrack(track);
if (spotubeTrack == null) return null;
return downloadManager.getProgressNotifier(spotubeTrack);
});
final isLocalTrack = track is LocalTrack;
final adaptivePopSheetList = AdaptivePopSheetList<TrackOptionValue>(
tooltip: context.l10n.more_actions,
onSelected: (value) async {
switch (value) {
case TrackOptionValue.album:
await context.navigateTo(
AlbumRoute(id: track.album!.id!, album: track.album!),
);
break;
case TrackOptionValue.delete:
await File((track as LocalTrack).path).delete();
ref.invalidate(localTracksProvider);
break;
case TrackOptionValue.addToQueue:
await playback.addTrack(track);
if (context.mounted) {
showToast(
context: context,
location: ToastLocation.topRight,
builder: (context, overlay) {
return SurfaceCard(
child: Text(
context.l10n.added_track_to_queue(track.name!),
textAlign: TextAlign.center,
),
);
},
);
}
break;
case TrackOptionValue.playNext:
playback.addTracksAtFirst([track]);
if (context.mounted) {
showToast(
context: context,
location: ToastLocation.topRight,
builder: (context, overlay) {
return SurfaceCard(
child: Text(
context.l10n.track_will_play_next(track.name!),
textAlign: TextAlign.center,
),
);
},
);
}
break;
case TrackOptionValue.removeFromQueue:
playback.removeTrack(track.id!);
if (context.mounted) {
showToast(
context: context,
location: ToastLocation.topRight,
builder: (context, overlay) {
return SurfaceCard(
child: Text(
context.l10n.removed_track_from_queue(
track.name!,
),
textAlign: TextAlign.center,
),
);
},
);
}
break;
case TrackOptionValue.favorite:
favorites.toggleTrackLike(track);
break;
case TrackOptionValue.addToPlaylist:
actionAddToPlaylist(context, track);
break;
case TrackOptionValue.removeFromPlaylist:
removingTrack.value = track.uri;
favoritePlaylistsNotifier
.removeTracks(playlistId ?? "", [track.id!]);
break;
case TrackOptionValue.blacklist:
if (isBlackListed == null) break;
if (isBlackListed == true) {
await ref.read(blacklistProvider.notifier).remove(track.id!);
} else {
await ref.read(blacklistProvider.notifier).add(
BlacklistTableCompanion.insert(
name: track.name!,
elementId: track.id!,
elementType: BlacklistedType.track,
),
);
}
break;
case TrackOptionValue.share:
actionShare(context, track);
break;
case TrackOptionValue.songlink:
final url = "https://song.link/s/${track.id}";
await launchUrlString(url);
break;
case TrackOptionValue.details:
showDialog(
context: context,
builder: (context) => ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 400),
child: TrackDetailsDialog(track: track),
),
);
break;
case TrackOptionValue.download:
await downloadManager.addToQueue(track);
break;
case TrackOptionValue.startRadio:
actionStartRadio(context, ref, track);
break;
}
},
icon: icon ?? const Icon(SpotubeIcons.moreHorizontal),
variance: ButtonVariance.outline,
headings: [
Basic(
leading: AspectRatio(
aspectRatio: 1,
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: UniversalImage(
path: track.album!.images
.asUrlString(placeholder: ImagePlaceholder.albumArt),
fit: BoxFit.cover,
),
),
),
title: Text(
track.name!,
maxLines: 1,
overflow: TextOverflow.ellipsis,
).semiBold(),
subtitle: Align(
alignment: Alignment.centerLeft,
child: ArtistLink(
artists: track.artists!,
onOverflowArtistClick: () => context.navigateTo(
TrackRoute(trackId: track.id!),
),
),
),
),
],
items: (context) => [
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 8,
children: [
if (isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.delete,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.delete,
playlistId,
);
},
leading: const Icon(SpotubeIcons.trash),
child: Text(context.l10n.delete),
title: Text(context.l10n.delete),
),
if (mediaQuery.smAndDown && !isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.album,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.album,
playlistId,
);
},
leading: const Icon(SpotubeIcons.album),
child: Column(
title: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(context.l10n.go_to_album),
Text(
track.album!.name!,
track.album.name,
style: context.theme.typography.xSmall,
),
],
),
),
if (!playlist.containsTrack(track)) ...[
AdaptiveMenuButton(
value: TrackOptionValue.addToQueue,
if (!isInQueue) ...[
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.addToQueue,
playlistId,
);
},
leading: const Icon(SpotubeIcons.queueAdd),
child: Text(context.l10n.add_to_queue),
title: Text(context.l10n.add_to_queue),
),
AdaptiveMenuButton(
value: TrackOptionValue.playNext,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.playNext,
playlistId,
);
},
leading: const Icon(SpotubeIcons.lightning),
child: Text(context.l10n.play_next),
title: Text(context.l10n.play_next),
),
] else
AdaptiveMenuButton(
value: TrackOptionValue.removeFromQueue,
enabled: playlist.activeTrack?.id != track.id,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.removeFromQueue,
playlistId,
);
},
enabled: !isActiveTrack,
leading: const Icon(SpotubeIcons.queueRemove),
child: Text(context.l10n.remove_from_queue),
title: Text(context.l10n.remove_from_queue),
),
if (me.asData?.value != null && !isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.favorite,
leading: favorites.isLiked
if (isAuthenticated && !isLocalTrack)
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.favorite,
playlistId,
);
},
leading: isLiked
? const Icon(
SpotubeIcons.heartFilled,
color: Colors.pink,
)
: const Icon(SpotubeIcons.heart),
child: Text(
favorites.isLiked
title: Text(
isLiked
? context.l10n.remove_from_favorites
: context.l10n.save_as_favorite,
),
),
if (auth.asData?.value != null && !isLocalTrack) ...[
AdaptiveMenuButton(
value: TrackOptionValue.startRadio,
if (isAuthenticated && !isLocalTrack) ...[
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.startRadio,
playlistId,
);
},
leading: const Icon(SpotubeIcons.radio),
child: Text(context.l10n.start_a_radio),
title: Text(context.l10n.start_a_radio),
),
AdaptiveMenuButton(
value: TrackOptionValue.addToPlaylist,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.addToPlaylist,
playlistId,
);
},
leading: const Icon(SpotubeIcons.playlistAdd),
child: Text(context.l10n.add_to_playlist),
title: Text(context.l10n.add_to_playlist),
),
],
if (userPlaylist && auth.asData?.value != null && !isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.removeFromPlaylist,
if (userPlaylist && isAuthenticated && !isLocalTrack)
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.removeFromPlaylist,
playlistId,
);
},
leading: const Icon(SpotubeIcons.removeFilled),
child: Text(context.l10n.remove_from_playlist),
title: Text(context.l10n.remove_from_playlist),
),
if (!isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.download,
enabled: !isInQueue,
leading: isInQueue
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.download,
playlistId,
);
},
enabled: !isInDownloadQueue,
leading: isInDownloadQueue
? HookBuilder(builder: (context) {
final progress = useListenable(progressNotifier!);
final progress = useListenable(progressNotifier);
return CircularProgressIndicator(
value: progress.value,
value: progress?.value,
);
})
: const Icon(SpotubeIcons.download),
child: Text(context.l10n.download_track),
title: Text(context.l10n.download_track),
),
if (!isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.blacklist,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.blacklist,
playlistId,
);
},
leading: Icon(
SpotubeIcons.playlistRemove,
color: isBlackListed != true ? Colors.red[400] : null,
color: isBlacklisted != true ? Colors.red[400] : null,
),
child: Text(
isBlackListed == true
title: Text(
isBlacklisted == true
? context.l10n.remove_from_blacklist
: context.l10n.add_to_blacklist,
style: TextStyle(
color: isBlackListed != true ? Colors.red[400] : null,
color: isBlacklisted != true ? Colors.red[400] : null,
),
),
),
if (!isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.share,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.share,
playlistId,
);
},
leading: const Icon(SpotubeIcons.share),
child: Text(context.l10n.share),
title: Text(context.l10n.share),
),
if (!isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.songlink,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.songlink,
playlistId,
);
},
leading: Assets.logos.songlinkTransparent.image(
width: 22,
height: 22,
color: colorScheme.foreground.withValues(alpha: 0.5),
),
child: Text(context.l10n.song_link),
title: Text(context.l10n.song_link),
),
if (!isLocalTrack)
AdaptiveMenuButton(
value: TrackOptionValue.details,
ButtonTile(
style: ButtonVariance.menu,
onPressed: () async {
await trackOptionActions.action(
context,
TrackOptionValue.details,
playlistId,
);
},
leading: const Icon(SpotubeIcons.info),
child: Text(context.l10n.details),
title: Text(context.l10n.details),
),
],
);
//! This is the most ANTI pattern I've ever done, but it works
showMenuCbRef?.value = (relativeRect) {
final offsetFromRect = Offset(
relativeRect.left,
relativeRect.top,
);
adaptivePopSheetList.showDropdownMenu(context, offsetFromRect);
};
return adaptivePopSheetList;
}
}

View File

@ -0,0 +1,146 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/image/universal_image.dart';
import 'package:spotube/components/links/artist_link.dart';
import 'package:spotube/components/track_tile/track_options.dart';
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/models/metadata/metadata.dart';
class TrackOptionsButton extends HookConsumerWidget {
final SpotubeTrackObject track;
final bool userPlaylist;
final String? playlistId;
const TrackOptionsButton({
super.key,
required this.track,
required this.userPlaylist,
this.playlistId,
});
static OverlayCompleter<dynamic> showOptions(
BuildContext context,
Offset offset,
SpotubeTrackObject track, {
bool userPlaylist = false,
String? playlistId,
}) {
return showPopover(
context: context,
position: offset,
alignment: Alignment.bottomRight,
builder: (context) {
return SizedBox(
width: 220 * context.theme.scaling,
child: Card(
padding: const EdgeInsets.all(8),
child: TrackOptions(
track: track,
playlistId: playlistId,
userPlaylist: userPlaylist,
),
),
);
},
);
}
@override
Widget build(BuildContext context, ref) {
final imageProvider = useMemoized(
() => UniversalImage.imageProvider(
(track.album.images).smallest(ImagePlaceholder.albumArt),
),
[track.album.images],
);
return IconButton.ghost(
icon: const Icon(SpotubeIcons.moreHorizontal),
onPressed: () {
final mediaQuery = MediaQuery.sizeOf(context);
if (mediaQuery.lgAndUp) {
final renderBox = context.findRenderObject() as RenderBox;
final position = RelativeRect.fromRect(
Rect.fromPoints(
renderBox.localToGlobal(Offset.zero,
ancestor: context.findRenderObject()),
renderBox.localToGlobal(renderBox.size.bottomRight(Offset.zero),
ancestor: context.findRenderObject()),
),
Offset.zero & mediaQuery,
);
final offset = Offset(position.left, position.top);
showOptions(
context,
offset,
track,
userPlaylist: userPlaylist,
playlistId: playlistId,
);
} else {
openDrawer(
context: context,
position: OverlayPosition.bottom,
draggable: true,
showDragHandle: true,
borderRadius: context.theme.borderRadiusMd,
transformBackdrop: false,
builder: (context) {
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 8.0,
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 8,
children: [
Basic(
leading: Container(
width: 40,
height: 40,
decoration: BoxDecoration(
borderRadius: context.theme.borderRadiusMd,
image: DecorationImage(
fit: BoxFit.cover,
image: imageProvider,
),
),
),
title: Text(
track.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
).semiBold(),
subtitle: Align(
alignment: Alignment.centerLeft,
child: ArtistLink(
artists: track.artists,
onOverflowArtistClick: () => context.navigateTo(
TrackRoute(trackId: track.id),
),
),
),
),
const Divider(),
TrackOptions(
track: track,
userPlaylist: userPlaylist,
playlistId: playlistId,
),
],
),
);
},
);
}
},
);
}
}

View File

@ -5,31 +5,39 @@ import 'package:flutter/gestures.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart' hide Consumer;
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:skeletonizer/skeletonizer.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/hover_builder.dart';
import 'package:spotube/components/image/universal_image.dart';
import 'package:spotube/components/links/artist_link.dart';
import 'package:spotube/components/links/link_text.dart';
import 'package:spotube/components/track_tile/track_options.dart';
import 'package:spotube/components/track_tile/track_options_button.dart';
import 'package:spotube/components/ui/button_tile.dart';
import 'package:spotube/extensions/artist_simple.dart';
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/duration.dart';
import 'package:spotube/extensions/image.dart';
import 'package:spotube/models/local_track.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/audio_player/querying_track_info.dart';
import 'package:spotube/provider/audio_player/state.dart';
import 'package:spotube/provider/blacklist_provider.dart';
import 'package:spotube/utils/platform.dart';
final isBlacklistedProvider =
Provider.autoDispose.family<bool, SpotubeTrackObject>(
(ref, track) {
ref.watch(blacklistProvider);
final blacklist = ref.read(blacklistProvider.notifier);
return blacklist.contains(track);
},
);
final _overlay = ValueNotifier<OverlayCompleter<dynamic>?>(null);
class TrackTile extends HookConsumerWidget {
/// [index] will not be shown if null
final int? index;
final Track track;
final SpotubeTrackObject track;
final bool selected;
final ValueChanged<bool?>? onChanged;
final Future<void> Function()? onTap;
@ -58,15 +66,7 @@ class TrackTile extends HookConsumerWidget {
Widget build(BuildContext context, ref) {
final theme = Theme.of(context);
final blacklist = ref.watch(blacklistProvider);
final blacklistNotifier = ref.watch(blacklistProvider.notifier);
final isBlackListed = useMemoized(
() => blacklistNotifier.contains(track),
[blacklist, track],
);
final showOptionCbRef = useRef<ValueChanged<RelativeRect>?>(null);
final isBlackListed = ref.watch(isBlacklistedProvider(track));
final isLoading = useState(false);
@ -74,17 +74,27 @@ class TrackTile extends HookConsumerWidget {
final isSelected = isPlaying || isLoading.value;
final imageProvider = useMemoized(
() => UniversalImage.imageProvider(
(track.album.images).smallest(ImagePlaceholder.albumArt),
),
[track.album.images],
);
return LayoutBuilder(builder: (context, constrains) {
return Listener(
onPointerDown: (event) {
if (event.buttons != kSecondaryMouseButton) return;
showOptionCbRef.value?.call(
RelativeRect.fromLTRB(
event.position.dx,
event.position.dy,
constrains.maxWidth - event.position.dx,
constrains.maxHeight - event.position.dy,
),
if (_overlay.value != null) {
_overlay.value?.remove();
_overlay.value = null;
}
_overlay.value = TrackOptionsButton.showOptions(
context,
Offset.zero,
track,
userPlaylist: userPlaylist,
playlistId: playlistId,
);
},
child: HoverBuilder(
@ -150,11 +160,7 @@ class TrackTile extends HookConsumerWidget {
borderRadius: theme.borderRadiusMd,
image: DecorationImage(
fit: BoxFit.cover,
image: UniversalImage.imageProvider(
(track.album?.images).asUrlString(
placeholder: ImagePlaceholder.albumArt,
),
),
image: imageProvider,
),
),
),
@ -217,8 +223,8 @@ class TrackTile extends HookConsumerWidget {
Expanded(
flex: 6,
child: switch (track) {
LocalTrack() => Text(
track.name!,
SpotubeLocalTrackObject() => Text(
track.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
@ -233,10 +239,10 @@ class TrackTile extends HookConsumerWidget {
),
onPressed: () {
context
.navigateTo(TrackRoute(trackId: track.id!));
.navigateTo(TrackRoute(trackId: track.id));
},
child: Text(
track.name!,
track.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
@ -251,17 +257,19 @@ class TrackTile extends HookConsumerWidget {
Expanded(
flex: 4,
child: switch (track) {
LocalTrack() => Text(
track.album!.name!,
SpotubeLocalTrackObject() => Text(
track.album.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
_ => Align(
alignment: Alignment.centerLeft,
child: LinkText(
track.album!.name!,
track.album.name,
AlbumRoute(
album: track.album!, id: track.album!.id!),
album: track.album,
id: track.album.id,
),
push: true,
overflow: TextOverflow.ellipsis,
),
@ -273,18 +281,18 @@ class TrackTile extends HookConsumerWidget {
),
subtitle: Align(
alignment: Alignment.centerLeft,
child: track is LocalTrack
child: track is SpotubeLocalTrackObject
? Text(
track.artists?.asString() ?? '',
track.artists.asString(),
)
: ClipRect(
child: ConstrainedBox(
constraints: const BoxConstraints(maxHeight: 40),
child: ArtistLink(
artists: track.artists ?? [],
artists: track.artists,
onOverflowArtistClick: () {
context.navigateTo(
TrackRoute(trackId: track.id!),
TrackRoute(trackId: track.id),
);
},
),
@ -296,16 +304,19 @@ class TrackTile extends HookConsumerWidget {
children: [
const SizedBox(width: 8),
Text(
Duration(milliseconds: track.durationMs ?? 0)
Duration(milliseconds: track.durationMs)
.toHumanReadableString(padZero: false),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
TrackOptions(
track: track,
playlistId: playlistId,
userPlaylist: userPlaylist,
showMenuCbRef: showOptionCbRef,
Builder(
builder: (context) {
return TrackOptionsButton(
track: track,
userPlaylist: userPlaylist,
playlistId: playlistId,
);
},
),
if (kIsDesktop) const Gap(10),
],

View File

@ -1,21 +0,0 @@
import 'package:spotify/spotify.dart';
extension AlbumExtensions on AlbumSimple {
Album toAlbum() {
Album album = Album();
album.albumType = albumType;
album.artists = artists;
album.availableMarkets = availableMarkets;
album.externalUrls = externalUrls;
album.href = href;
album.id = id;
album.images = images;
album.name = name;
album.releaseDate = releaseDate;
album.releaseDatePrecision = releaseDatePrecision;
album.tracks = tracks;
album.type = type;
album.uri = uri;
return album;
}
}

View File

@ -1,7 +0,0 @@
import 'package:spotify/spotify.dart';
extension ArtistExtension on List<ArtistSimple> {
String asString() {
return map((e) => e.name?.replaceAll(",", " ")).join(", ");
}
}

View File

@ -1,34 +0,0 @@
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/utils/primitive_utils.dart';
import 'package:collection/collection.dart';
enum ImagePlaceholder {
albumArt,
artist,
collection,
online,
}
extension SpotifyImageExtensions on List<Image>? {
String asUrlString({
int index = 1,
required ImagePlaceholder placeholder,
}) {
final String placeholderUrl = {
ImagePlaceholder.albumArt: Assets.albumPlaceholder.path,
ImagePlaceholder.artist: Assets.userPlaceholder.path,
ImagePlaceholder.collection: Assets.placeholder.path,
ImagePlaceholder.online:
"https://avatars.dicebear.com/api/bottts/${PrimitiveUtils.uuid.v4()}.png",
}[placeholder]!;
final sortedImage = this?.sorted((a, b) => a.width!.compareTo(b.width!));
return sortedImage != null && sortedImage.isNotEmpty
? sortedImage[
index > sortedImage.length - 1 ? sortedImage.length - 1 : index]
.url!
: placeholderUrl;
}
}

View File

@ -1,113 +0,0 @@
import 'dart:io';
import 'dart:typed_data';
import 'package:metadata_god/metadata_god.dart';
import 'package:path/path.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/services/logger/logger.dart';
extension TrackExtensions on Track {
Track fromFile(
File file, {
Metadata? metadata,
String? art,
}) {
album = Album()
..name = metadata?.album ?? "Unknown"
..images = [if (art != null) Image()..url = art]
..genres = [if (metadata?.genre != null) metadata!.genre!]
..artists = [
Artist()
..name = metadata?.albumArtist ?? "Unknown"
..id = metadata?.albumArtist ?? "Unknown"
..type = "artist",
]
..id = metadata?.album
..releaseDate = metadata?.year?.toString();
artists = [
Artist()
..name = metadata?.artist ?? "Unknown"
..id = metadata?.artist ?? "Unknown"
];
id = metadata?.title ?? basenameWithoutExtension(file.path);
name = metadata?.title ?? basenameWithoutExtension(file.path);
type = "track";
uri = file.path;
durationMs = (metadata?.durationMs?.toInt() ?? 0);
return this;
}
Metadata toMetadata({
required int fileLength,
Uint8List? imageBytes,
}) {
return Metadata(
title: name,
artist: artists?.map((a) => a.name).join(", "),
album: album?.name,
albumArtist: artists?.map((a) => a.name).join(", "),
year: album?.releaseDate != null
? int.tryParse(album!.releaseDate!.split("-").first) ?? 1969
: 1969,
trackNumber: trackNumber,
discNumber: discNumber,
durationMs: durationMs?.toDouble() ?? 0.0,
fileSize: BigInt.from(fileLength),
trackTotal: album?.tracks?.length ?? 0,
picture: imageBytes != null
? Picture(
data: imageBytes,
// Spotify images are always JPEGs
mimeType: 'image/jpeg',
)
: null,
);
}
}
extension IterableTrackSimpleExtensions on Iterable<TrackSimple> {
Future<List<Track>> asTracks(AlbumSimple album, ref) async {
try {
final spotify = ref.read(spotifyProvider);
final tracks = await spotify.invoke(
(api) => api.tracks.list(map((trackSimple) => trackSimple.id!).toList()));
return tracks.toList();
} catch (e, stack) {
// Ignore errors and create the track locally
AppLogger.reportError(e, stack);
List<Track> tracks = [];
for (final trackSimple in this) {
Track track = Track();
track.album = album;
track.name = trackSimple.name;
track.artists = trackSimple.artists;
track.availableMarkets = trackSimple.availableMarkets;
track.discNumber = trackSimple.discNumber;
track.durationMs = trackSimple.durationMs;
track.explicit = trackSimple.explicit;
track.externalUrls = trackSimple.externalUrls;
track.href = trackSimple.href;
track.id = trackSimple.id;
track.isPlayable = trackSimple.isPlayable;
track.linkedFrom = trackSimple.linkedFrom;
track.previewUrl = trackSimple.previewUrl;
track.trackNumber = trackSimple.trackNumber;
track.type = trackSimple.type;
track.uri = trackSimple.uri;
tracks.add(track);
}
return tracks;
}
}
}
extension TracksToMediaExtension on Iterable<Track> {
List<SpotubeMedia> asMediaList() {
return map((track) => SpotubeMedia(track)).toList();
}
}

View File

@ -5,7 +5,6 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/collections/routes.dart';
import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:flutter_sharing_intent/flutter_sharing_intent.dart';
import 'package:flutter_sharing_intent/model/sharing_file.dart';
import 'package:spotube/services/logger/logger.dart';
@ -14,93 +13,95 @@ import 'package:spotube/utils/platform.dart';
final appLinks = AppLinks();
final linkStream = appLinks.stringLinkStream.asBroadcastStream();
@Deprecated(
"Deeplinking is deprecated. Later a custom API for metadata provider will be created.")
void useDeepLinking(WidgetRef ref, AppRouter router) {
// single instance no worries
final spotify = ref.watch(spotifyProvider);
// // single instance no worries
// final spotify = ref.watch(spotifyProvider);
useEffect(() {
void uriListener(List<SharedFile> files) async {
for (final file in files) {
if (file.type != SharedMediaType.URL) continue;
final url = Uri.parse(file.value!);
if (url.pathSegments.length != 2) continue;
// useEffect(() {
// void uriListener(List<SharedFile> files) async {
// for (final file in files) {
// if (file.type != SharedMediaType.URL) continue;
// final url = Uri.parse(file.value!);
// if (url.pathSegments.length != 2) continue;
switch (url.pathSegments.first) {
case "album":
final album = await spotify.invoke((api) {
return api.albums.get(url.pathSegments.last);
});
router.navigate(
AlbumRoute(id: album.id!, album: album),
);
break;
case "artist":
router.navigate(ArtistRoute(artistId: url.pathSegments.last));
break;
case "playlist":
final playlist = await spotify.invoke((api) {
return api.playlists.get(url.pathSegments.last);
});
router
.navigate(PlaylistRoute(id: playlist.id!, playlist: playlist));
break;
case "track":
router.navigate(TrackRoute(trackId: url.pathSegments.last));
break;
default:
break;
}
}
}
// switch (url.pathSegments.first) {
// case "album":
// final album = await spotify.invoke((api) {
// return api.albums.get(url.pathSegments.last);
// });
// // router.navigate(
// // AlbumRoute(id: album.id!, album: album),
// // );
// break;
// case "artist":
// router.navigate(ArtistRoute(artistId: url.pathSegments.last));
// break;
// case "playlist":
// final playlist = await spotify.invoke((api) {
// return api.playlists.get(url.pathSegments.last);
// });
// // router
// // .navigate(PlaylistRoute(id: playlist.id!, playlist: playlist));
// break;
// case "track":
// router.navigate(TrackRoute(trackId: url.pathSegments.last));
// break;
// default:
// break;
// }
// }
// }
StreamSubscription? mediaStream;
// StreamSubscription? mediaStream;
if (kIsMobile) {
FlutterSharingIntent.instance.getInitialSharing().then(uriListener);
// if (kIsMobile) {
// FlutterSharingIntent.instance.getInitialSharing().then(uriListener);
mediaStream =
FlutterSharingIntent.instance.getMediaStream().listen(uriListener);
}
// mediaStream =
// FlutterSharingIntent.instance.getMediaStream().listen(uriListener);
// }
final subscription = linkStream.listen((uri) async {
try {
final startSegment = uri.split(":").take(2).join(":");
final endSegment = uri.split(":").last;
// final subscription = linkStream.listen((uri) async {
// try {
// final startSegment = uri.split(":").take(2).join(":");
// final endSegment = uri.split(":").last;
switch (startSegment) {
case "spotify:album":
final album = await spotify.invoke((api) {
return api.albums.get(endSegment);
});
await router.navigate(
AlbumRoute(id: album.id!, album: album),
);
break;
case "spotify:artist":
await router.navigate(ArtistRoute(artistId: endSegment));
break;
case "spotify:track":
await router.navigate(TrackRoute(trackId: endSegment));
break;
case "spotify:playlist":
final playlist = await spotify.invoke((api) {
return api.playlists.get(endSegment);
});
await router.navigate(
PlaylistRoute(id: playlist.id!, playlist: playlist),
);
break;
default:
break;
}
} catch (e, stack) {
AppLogger.reportError(e, stack);
}
});
// switch (startSegment) {
// case "spotify:album":
// final album = await spotify.invoke((api) {
// return api.albums.get(endSegment);
// });
// // await router.navigate(
// // AlbumRoute(id: album.id!, album: album),
// // );
// break;
// case "spotify:artist":
// await router.navigate(ArtistRoute(artistId: endSegment));
// break;
// case "spotify:track":
// await router.navigate(TrackRoute(trackId: endSegment));
// break;
// case "spotify:playlist":
// final playlist = await spotify.invoke((api) {
// return api.playlists.get(endSegment);
// });
// // await router.navigate(
// // PlaylistRoute(id: playlist.id!, playlist: playlist),
// // );
// break;
// default:
// break;
// }
// } catch (e, stack) {
// AppLogger.reportError(e, stack);
// }
// });
return () {
mediaStream?.cancel();
subscription.cancel();
};
}, [spotify]);
// return () {
// mediaStream?.cancel();
// subscription.cancel();
// };
// }, [spotify]);
}

View File

@ -1,24 +1,21 @@
import 'package:spotube/provider/metadata_plugin/metadata_plugin_provider.dart';
import 'package:spotube/services/logger/logger.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/provider/authentication/authentication.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/spotify/spotify.dart';
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
void useEndlessPlayback(WidgetRef ref) {
final auth = ref.watch(authenticationProvider);
final playback = ref.watch(audioPlayerProvider.notifier);
final playlist = ref.watch(audioPlayerProvider.select((s) => s.playlist));
final spotify = ref.watch(spotifyProvider);
final audioPlayerState = ref.watch(audioPlayerProvider);
final endlessPlayback =
ref.watch(userPreferencesProvider.select((s) => s.endlessPlayback));
final metadataPlugin = ref.watch(metadataPluginProvider.future);
useEffect(
() {
if (!endlessPlayback || auth.asData?.value == null) return null;
if (!endlessPlayback) return null;
void listener(int index) async {
try {
@ -27,31 +24,9 @@ void useEndlessPlayback(WidgetRef ref) {
final track = playlist.tracks.last;
final query = "${track.name} Radio";
final pages = await spotify.invoke((api) =>
api.search.get(query, types: [SearchType.playlist]).first());
final tracks = await (await metadataPlugin)?.track.radio(track.id);
final radios = pages
.expand((e) => e.items?.toList() ?? <PlaylistSimple>[])
.toList()
.cast<PlaylistSimple>();
final artists = track.artists!.map((e) => e.name);
final radio = radios.firstWhere(
(e) {
final validPlaylists =
artists.where((a) => e.description!.contains(a!));
return e.name == "${track.name} Radio" &&
(validPlaylists.length >= 2 ||
validPlaylists.length == artists.length) &&
e.owner?.displayName != "Spotify";
},
orElse: () => radios.first,
);
final tracks = await spotify.invoke(
(api) => api.playlists.getTracksByPlaylistId(radio.id!).all());
if (tracks == null || tracks.isEmpty) return;
await playback.addTracks(
tracks.toList()
@ -69,9 +44,9 @@ void useEndlessPlayback(WidgetRef ref) {
// Sometimes user can change settings for which the currentIndexChanged
// might not be called. So we need to check if the current track is the
// last track and if it is then we need to call the listener manually.
if (playlist.index == playlist.medias.length - 1 &&
if (audioPlayerState.currentIndex == audioPlayerState.tracks.length - 1 &&
audioPlayer.isPlaying) {
listener(playlist.index);
listener(audioPlayerState.currentIndex);
}
final subscription =
@ -80,11 +55,11 @@ void useEndlessPlayback(WidgetRef ref) {
return subscription.cancel;
},
[
spotify,
metadataPlugin,
playback,
playlist.medias,
audioPlayerState.tracks,
audioPlayerState.currentIndex,
endlessPlayback,
auth,
],
);
}

View File

@ -1,432 +1,419 @@
{
"guest": "Guest",
"browse": "Browse",
"search": "Search",
"library": "Library",
"lyrics": "Lyrics",
"settings": "Settings",
"genre_categories_filter": "Filter categories or genres...",
"genre": "Genre",
"personalized": "Personalized",
"featured": "Featured",
"new_releases": "New Releases",
"songs": "Songs",
"playing_track": "Playing {track}",
"queue_clear_alert": "This will clear the current queue. {track_length} tracks will be removed\nDo you want to continue?",
"load_more": "Load more",
"playlists": "Playlists",
"artists": "Artists",
"albums": "Albums",
"tracks": "Tracks",
"downloads": "Downloads",
"filter_playlists": "Filter your playlists...",
"liked_tracks": "Liked Tracks",
"liked_tracks_description": "All your liked tracks",
"playlist": "Playlist",
"create_a_playlist": "Create a playlist",
"update_playlist": "Update playlist",
"create": "Create",
"cancel": "Cancel",
"update": "Update",
"playlist_name": "Playlist Name",
"name_of_playlist": "Name of the playlist",
"description": "Description",
"public": "Public",
"collaborative": "Collaborative",
"search_local_tracks": "Search local tracks...",
"play": "Play",
"delete": "Delete",
"none": "None",
"sort_a_z": "Sort by A-Z",
"sort_z_a": "Sort by Z-A",
"sort_artist": "Sort by Artist",
"sort_album": "Sort by Album",
"sort_duration": "Sort by Duration",
"sort_tracks": "Sort Tracks",
"currently_downloading": "Currently Downloading ({tracks_length})",
"cancel_all": "Cancel All",
"filter_artist": "Filter artists...",
"followers": "{followers} Followers",
"add_artist_to_blacklist": "Add artist to blacklist",
"top_tracks": "Top Tracks",
"fans_also_like": "Fans also like",
"loading": "Loading...",
"artist": "Artist",
"blacklisted": "Blacklisted",
"following": "Following",
"follow": "Follow",
"artist_url_copied": "Artist URL copied to clipboard",
"added_to_queue": "Added {tracks} tracks to queue",
"filter_albums": "Filter albums...",
"synced": "Synced",
"plain": "Plain",
"shuffle": "Shuffle",
"search_tracks": "Search tracks...",
"released": "Released",
"error": "Error {error}",
"title": "Title",
"time": "Time",
"more_actions": "More actions",
"download_count": "Download ({count})",
"add_count_to_playlist": "Add ({count}) to Playlist",
"add_count_to_queue": "Add ({count}) to Queue",
"play_count_next": "Play ({count}) next",
"album": "Album",
"copied_to_clipboard": "Copied {data} to clipboard",
"add_to_following_playlists": "Add {track} to following Playlists",
"add": "Add",
"added_track_to_queue": "Added {track} to queue",
"add_to_queue": "Add to queue",
"track_will_play_next": "{track} will play next",
"play_next": "Play next",
"removed_track_from_queue": "Removed {track} from queue",
"remove_from_queue": "Remove from queue",
"remove_from_favorites": "Remove from favorites",
"save_as_favorite": "Save as favorite",
"add_to_playlist": "Add to playlist",
"remove_from_playlist": "Remove from playlist",
"add_to_blacklist": "Add to blacklist",
"remove_from_blacklist": "Remove from blacklist",
"share": "Share",
"mini_player": "Mini Player",
"slide_to_seek": "Slide to seek forward or backward",
"shuffle_playlist": "Shuffle playlist",
"unshuffle_playlist": "Unshuffle playlist",
"previous_track": "Previous track",
"next_track": "Next track",
"pause_playback": "Pause Playback",
"resume_playback": "Resume Playback",
"loop_track": "Loop track",
"no_loop": "No loop",
"repeat_playlist": "Repeat playlist",
"queue": "Queue",
"alternative_track_sources": "Alternative track sources",
"download_track": "Download track",
"tracks_in_queue": "{tracks} tracks in queue",
"clear_all": "Clear all",
"show_hide_ui_on_hover": "Show/Hide UI on hover",
"always_on_top": "Always on top",
"exit_mini_player": "Exit Mini player",
"download_location": "Download location",
"local_library": "Local library",
"add_library_location": "Add to library",
"remove_library_location": "Remove from library",
"account": "Account",
"login_with_spotify": "Login with your Spotify account",
"connect_with_spotify": "Connect with Spotify",
"logout": "Logout",
"logout_of_this_account": "Logout of this account",
"language_region": "Language & Region",
"language": "Language",
"system_default": "System Default",
"market_place_region": "Marketplace Region",
"recommendation_country": "Recommendation Country",
"appearance": "Appearance",
"layout_mode": "Layout Mode",
"override_layout_settings": "Override responsive layout mode settings",
"adaptive": "Adaptive",
"compact": "Compact",
"extended": "Extended",
"theme": "Theme",
"dark": "Dark",
"light": "Light",
"system": "System",
"accent_color": "Accent Color",
"sync_album_color": "Sync album color",
"sync_album_color_description": "Uses the dominant color of the album art as the accent color",
"playback": "Playback",
"audio_quality": "Audio Quality",
"high": "High",
"low": "Low",
"pre_download_play": "Pre-download and play",
"pre_download_play_description": "Instead of streaming audio, download bytes and play instead (Recommended for higher bandwidth users)",
"skip_non_music": "Skip non-music segments (SponsorBlock)",
"blacklist_description": "Blacklisted tracks and artists",
"wait_for_download_to_finish": "Please wait for the current download to finish",
"desktop": "Desktop",
"close_behavior": "Close Behavior",
"close": "Close",
"minimize_to_tray": "Minimize to tray",
"show_tray_icon": "Show System tray icon",
"about": "About",
"u_love_spotube": "We know you love Spotube",
"check_for_updates": "Check for updates",
"about_spotube": "About Spotube",
"blacklist": "Blacklist",
"please_sponsor": "Please Sponsor/Donate",
"spotube_description": "Spotube, a lightweight, cross-platform, free-for-all spotify client",
"version": "Version",
"build_number": "Build Number",
"founder": "Founder",
"repository": "Repository",
"bug_issues": "Bug+Issues",
"made_with": "Made with ❤️ in Bangladesh🇧🇩",
"kingkor_roy_tirtho": "Kingkor Roy Tirtho",
"copyright": "© 2021-{current_year} Kingkor Roy Tirtho",
"license": "License",
"add_spotify_credentials": "Add your spotify credentials to get started",
"credentials_will_not_be_shared_disclaimer": "Don't worry, any of your credentials won't be collected or shared with anyone",
"know_how_to_login": "Don't know how to do this?",
"follow_step_by_step_guide": "Follow along the Step by Step guide",
"spotify_cookie": "Spotify {name} Cookie",
"cookie_name_cookie": "{name} Cookie",
"fill_in_all_fields": "Please fill in all the fields",
"submit": "Submit",
"exit": "Exit",
"previous": "Previous",
"next": "Next",
"done": "Done",
"step_1": "Step 1",
"first_go_to": "First, Go to",
"login_if_not_logged_in": "and Login/Signup if you are not logged in",
"step_2": "Step 2",
"step_2_steps": "1. Once you're logged in, press F12 or Mouse Right Click > Inspect to Open the Browser devtools.\n2. Then go the \"Application\" Tab (Chrome, Edge, Brave etc..) or \"Storage\" Tab (Firefox, Palemoon etc..)\n3. Go to the \"Cookies\" section then the \"https://accounts.spotify.com\" subsection",
"step_3": "Step 3",
"step_3_steps": "Copy the value of \"sp_dc\" Cookie",
"success_emoji": "Success🥳",
"success_message": "Now you've successfully Logged in with your Spotify account. Good Job, mate!",
"step_4": "Step 4",
"step_4_steps": "Paste the copied \"sp_dc\" value",
"something_went_wrong": "Something went wrong",
"piped_instance": "Piped Server Instance",
"piped_description": "The Piped server instance to use for track matching",
"piped_warning": "Some of them might not work well. So use at your own risk",
"invidious_instance": "Invidious Server Instance",
"invidious_description": "The Invidious server instance to use for track matching",
"invidious_warning": "Some of them might not work well. So use at your own risk",
"generate": "Generate",
"track_exists": "Track {track} already exists",
"replace_downloaded_tracks": "Replace all downloaded tracks",
"skip_download_tracks": "Skip downloading all downloaded tracks",
"do_you_want_to_replace": "Do you want to replace the existing track??",
"replace": "Replace",
"skip": "Skip",
"select_up_to_count_type": "Select up to {count} {type}",
"select_genres": "Select Genres",
"add_genres": "Add Genres",
"country": "Country",
"number_of_tracks_generate": "Number of tracks to generate",
"acousticness": "Acousticness",
"danceability": "Danceability",
"energy": "Energy",
"instrumentalness": "Instrumentalness",
"liveness": "Liveness",
"loudness": "Loudness",
"speechiness": "Speechiness",
"valence": "Valence",
"popularity": "Popularity",
"key": "Key",
"duration": "Duration (s)",
"tempo": "Tempo (BPM)",
"mode": "Mode",
"time_signature": "Time Signature",
"short": "Short",
"medium": "Medium",
"long": "Long",
"min": "Min",
"max": "Max",
"target": "Target",
"moderate": "Moderate",
"deselect_all": "Deselect All",
"select_all": "Select All",
"are_you_sure": "Are you sure?",
"generating_playlist": "Generating your custom playlist...",
"selected_count_tracks": "Selected {count} tracks",
"download_warning": "If you download all Tracks at bulk you're clearly pirating Music & causing damage to the creative society of Music. I hope you are aware of this. Always, try respecting & supporting Artist's hard work",
"download_ip_ban_warning": "BTW, your IP can get blocked on YouTube due excessive download requests than usual. IP block means you can't use YouTube (even if you're logged in) for at least 2-3 months from that IP device. And Spotube doesn't hold any responsibility if this ever happens",
"by_clicking_accept_terms": "By clicking 'accept' you agree to following terms:",
"download_agreement_1": "I know I'm pirating Music. I'm bad",
"download_agreement_2": "I'll support the Artist wherever I can and I'm only doing this because I don't have money to buy their art",
"download_agreement_3": "I'm completely aware that my IP can get blocked on YouTube & I don't hold Spotube or his owners/contributors responsible for any accidents caused by my current action",
"decline": "Decline",
"accept": "Accept",
"details": "Details",
"youtube": "YouTube",
"channel": "Channel",
"likes": "Likes",
"dislikes": "Dislikes",
"views": "Views",
"streamUrl": "Stream URL",
"stop": "Stop",
"sort_newest": "Sort by newest added",
"sort_oldest": "Sort by oldest added",
"sleep_timer": "Sleep Timer",
"mins": "{minutes} Minutes",
"hours": "{hours} Hours",
"hour": "{hours} Hour",
"custom_hours": "Custom Hours",
"logs": "Logs",
"developers": "Developers",
"not_logged_in": "You're not logged in",
"search_mode": "Search Mode",
"audio_source": "Audio Source",
"ok": "Ok",
"failed_to_encrypt": "Failed to encrypt",
"encryption_failed_warning": "Spotube uses encryption to securely store your data. But failed to do so. So it'll fallback to insecure storage\nIf you're using linux, please make sure you've any secret-service (gnome-keyring, kde-wallet, keepassxc etc) installed",
"querying_info": "Querying info...",
"piped_api_down": "Piped API is down",
"piped_down_error_instructions": "The Piped instance {pipedInstance} is currently down\n\nEither change the instance or change the 'API type' to official YouTube API\n\nMake sure to restart the app after change",
"you_are_offline": "You are currently offline",
"connection_restored": "Your internet connection was restored",
"use_system_title_bar": "Use system title bar",
"crunching_results": "Crunching results...",
"search_to_get_results": "Search to get results",
"use_amoled_mode": "Pitch black dark theme",
"pitch_dark_theme": "AMOLED Mode",
"normalize_audio": "Normalize audio",
"change_cover": "Change cover",
"add_cover": "Add cover",
"restore_defaults": "Restore defaults",
"download_music_codec": "Download music codec",
"streaming_music_codec": "Streaming music codec",
"login_with_lastfm": "Login with Last.fm",
"connect": "Connect",
"disconnect_lastfm": "Disconnect Last.fm",
"disconnect": "Disconnect",
"username": "Username",
"password": "Password",
"login": "Login",
"login_with_your_lastfm": "Login with your Last.fm account",
"scrobble_to_lastfm": "Scrobble to Last.fm",
"go_to_album": "Go to Album",
"discord_rich_presence": "Discord Rich Presence",
"browse_all": "Browse All",
"genres": "Genres",
"explore_genres": "Explore Genres",
"friends": "Friends",
"no_lyrics_available": "Sorry, unable find lyrics for this track",
"start_a_radio": "Start a Radio",
"how_to_start_radio": "How do you want to start the radio?",
"replace_queue_question": "Do you want to replace the current queue or append to it?",
"endless_playback": "Endless Playback",
"delete_playlist": "Delete Playlist",
"delete_playlist_confirmation": "Are you sure you want to delete this playlist?",
"local_tracks": "Local Tracks",
"local_tab": "Local",
"song_link": "Song Link",
"skip_this_nonsense": "Skip this nonsense",
"freedom_of_music": "“Freedom of Music”",
"freedom_of_music_palm": "“Freedom of Music in the palm of your hand”",
"get_started": "Let's get started",
"youtube_source_description": "Recommended and works best.",
"piped_source_description": "Feeling free? Same as YouTube but a lot free.",
"jiosaavn_source_description": "Best for South Asian region.",
"invidious_source_description": "Similar to Piped but with higher availability.",
"highest_quality": "Highest Quality: {quality}",
"select_audio_source": "Select Audio Source",
"endless_playback_description": "Automatically append new songs\nto the end of the queue",
"choose_your_region": "Choose your region",
"choose_your_region_description": "This will help Spotube show you the right content\nfor your location.",
"choose_your_language": "Choose your language",
"help_project_grow": "Help this project grow",
"help_project_grow_description": "Spotube is an open-source project. You can help this project grow by contributing to the project, reporting bugs, or suggesting new features.",
"contribute_on_github": "Contribute on GitHub",
"donate_on_open_collective": "Donate on Open Collective",
"browse_anonymously": "Browse Anonymously",
"enable_connect": "Enable Connect",
"enable_connect_description": "Control Spotube from other devices",
"devices": "Devices",
"select": "Select",
"connect_client_alert": "You're being controlled by {client}",
"this_device": "This Device",
"remote": "Remote",
"stats": "Stats",
"and_n_more": "and {count} more",
"recently_played": "Recently Played",
"browse_more": "Browse More",
"no_title": "No Title",
"not_playing": "Not playing",
"epic_failure": "Epic failure!",
"added_num_tracks_to_queue": "Added {tracks_length} tracks to queue",
"spotube_has_an_update": "Spotube has an update",
"download_now": "Download Now",
"nightly_version": "Spotube Nightly {nightlyBuildNum} has been released",
"release_version": "Spotube v{version} has been released",
"read_the_latest": "Read the latest ",
"release_notes": "release notes",
"pick_color_scheme": "Pick color scheme",
"save": "Save",
"choose_the_device": "Choose the device:",
"multiple_device_connected": "There are multiple device connected.\nChoose the device you want this action to take place",
"nothing_found": "Nothing found",
"the_box_is_empty": "The box is empty",
"top_artists": "Top Artists",
"top_albums": "Top Albums",
"this_week": "This week",
"this_month": "This month",
"last_6_months": "Last 6 months",
"this_year": "This year",
"last_2_years": "Last 2 years",
"all_time": "All time",
"powered_by_provider": "Powered by {providerName}",
"email": "Email",
"profile_followers": "Followers",
"birthday": "Birthday",
"subscription": "Subscription",
"not_born": "Not born",
"hacker": "Hacker",
"profile": "Profile",
"no_name": "No Name",
"edit": "Edit",
"user_profile": "User Profile",
"count_plays": "{count} plays",
"streaming_fees_hypothetical": "Streaming fees (hypothetical)",
"minutes_listened": "Minutes listened",
"streamed_songs": "Streamed songs",
"count_streams": "{count} streams",
"owned_by_you": "Owned by you",
"copied_shareurl_to_clipboard": "Copied {shareUrl} to clipboard",
"spotify_hipotetical_calculation": "*This is calculated based on Spotify's per stream\npayout of $0.003 to $0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in Spotify.",
"count_mins": "{minutes} mins",
"summary_minutes": "minutes",
"summary_listened_to_music": "Listened to music",
"summary_songs": "songs",
"summary_streamed_overall": "Streamed overall",
"summary_owed_to_artists": "Owed to artists\nthis month",
"summary_artists": "artist's",
"summary_music_reached_you": "Music reached you",
"summary_full_albums": "full albums",
"summary_got_your_love": "Got your love",
"summary_playlists": "playlists",
"summary_were_on_repeat": "Were on repeat",
"total_money": "Total {money}",
"webview_not_found": "Webview not found",
"webview_not_found_description": "No webview runtime is installed in your device.\nIf it's installed make sure it's in the Environment PATH\n\nAfter installing, restart the app",
"unsupported_platform": "Unsupported platform",
"cache_music": "Cache music",
"open": "Open",
"cache_folder": "Cache folder",
"export": "Export",
"clear_cache": "Clear cache",
"clear_cache_confirmation": "Do you want to clear the cache?",
"export_cache_files": "Export Cached Files",
"found_n_files": "Found {count} files",
"export_cache_confirmation": "Do you want to export these files to",
"exported_n_out_of_m_files": "Exported {filesExported} out of {files} files",
"undo": "Undo",
"download_all": "Download all",
"add_all_to_playlist": "Add all to playlist",
"add_all_to_queue": "Add all to queue",
"play_all_next": "Play all next",
"pause": "Pause",
"view_all": "View all",
"no_tracks_added_yet": "Looks like you haven't added any tracks yet",
"no_tracks": "Looks like there are no tracks here",
"no_tracks_listened_yet": "Looks like you haven't listened to anything yet",
"not_following_artists": "You're not following any artists",
"no_favorite_albums_yet": "Looks like you haven't added any albums to your favorites yet",
"no_logs_found": "No logs found",
"youtube_engine": "YouTube Engine",
"youtube_engine_not_installed_title": "{engine} is not installed",
"youtube_engine_not_installed_message": "{engine} is not installed in your system.",
"youtube_engine_set_path": "Make sure it's available in the PATH variable or\nset the absolute path to the {engine} executable below",
"youtube_engine_unix_issue_message": "In macOS/Linux/unix like OS's, setting path on .zshrc/.bashrc/.bash_profile etc. won't work.\nYou need to set the path in the shell configuration file",
"download": "Download",
"file_not_found": "File not found",
"custom": "Custom",
"add_custom_url": "Add custom URL",
"edit_port": "Edit port",
"port_helper_msg": "Default is -1 which indicates random number. If you've firewall configured, setting this is recommended.",
"connect_request": "Allow {client} to connect?",
"connection_request_denied": "Connection denied. User denied access."
"guest": "Guest",
"browse": "Browse",
"search": "Search",
"library": "Library",
"lyrics": "Lyrics",
"settings": "Settings",
"genre_categories_filter": "Filter categories or genres...",
"genre": "Genre",
"personalized": "Personalized",
"featured": "Featured",
"new_releases": "New Releases",
"songs": "Songs",
"playing_track": "Playing {track}",
"queue_clear_alert": "This will clear the current queue. {track_length} tracks will be removed\nDo you want to continue?",
"load_more": "Load more",
"playlists": "Playlists",
"artists": "Artists",
"albums": "Albums",
"tracks": "Tracks",
"downloads": "Downloads",
"filter_playlists": "Filter your playlists...",
"liked_tracks": "Liked Tracks",
"liked_tracks_description": "All your liked tracks",
"playlist": "Playlist",
"create_a_playlist": "Create a playlist",
"update_playlist": "Update playlist",
"create": "Create",
"cancel": "Cancel",
"update": "Update",
"playlist_name": "Playlist Name",
"name_of_playlist": "Name of the playlist",
"description": "Description",
"public": "Public",
"collaborative": "Collaborative",
"search_local_tracks": "Search local tracks...",
"play": "Play",
"delete": "Delete",
"none": "None",
"sort_a_z": "Sort by A-Z",
"sort_z_a": "Sort by Z-A",
"sort_artist": "Sort by Artist",
"sort_album": "Sort by Album",
"sort_duration": "Sort by Duration",
"sort_tracks": "Sort Tracks",
"currently_downloading": "Currently Downloading ({tracks_length})",
"cancel_all": "Cancel All",
"filter_artist": "Filter artists...",
"followers": "{followers} Followers",
"add_artist_to_blacklist": "Add artist to blacklist",
"top_tracks": "Top Tracks",
"fans_also_like": "Fans also like",
"loading": "Loading...",
"artist": "Artist",
"blacklisted": "Blacklisted",
"following": "Following",
"follow": "Follow",
"artist_url_copied": "Artist URL copied to clipboard",
"added_to_queue": "Added {tracks} tracks to queue",
"filter_albums": "Filter albums...",
"synced": "Synced",
"plain": "Plain",
"shuffle": "Shuffle",
"search_tracks": "Search tracks...",
"released": "Released",
"error": "Error {error}",
"title": "Title",
"time": "Time",
"more_actions": "More actions",
"download_count": "Download ({count})",
"add_count_to_playlist": "Add ({count}) to Playlist",
"add_count_to_queue": "Add ({count}) to Queue",
"play_count_next": "Play ({count}) next",
"album": "Album",
"copied_to_clipboard": "Copied {data} to clipboard",
"add_to_following_playlists": "Add {track} to following Playlists",
"add": "Add",
"added_track_to_queue": "Added {track} to queue",
"add_to_queue": "Add to queue",
"track_will_play_next": "{track} will play next",
"play_next": "Play next",
"removed_track_from_queue": "Removed {track} from queue",
"remove_from_queue": "Remove from queue",
"remove_from_favorites": "Remove from favorites",
"save_as_favorite": "Save as favorite",
"add_to_playlist": "Add to playlist",
"remove_from_playlist": "Remove from playlist",
"add_to_blacklist": "Add to blacklist",
"remove_from_blacklist": "Remove from blacklist",
"share": "Share",
"mini_player": "Mini Player",
"slide_to_seek": "Slide to seek forward or backward",
"shuffle_playlist": "Shuffle playlist",
"unshuffle_playlist": "Unshuffle playlist",
"previous_track": "Previous track",
"next_track": "Next track",
"pause_playback": "Pause Playback",
"resume_playback": "Resume Playback",
"loop_track": "Loop track",
"no_loop": "No loop",
"repeat_playlist": "Repeat playlist",
"queue": "Queue",
"alternative_track_sources": "Alternative track sources",
"download_track": "Download track",
"tracks_in_queue": "{tracks} tracks in queue",
"clear_all": "Clear all",
"show_hide_ui_on_hover": "Show/Hide UI on hover",
"always_on_top": "Always on top",
"exit_mini_player": "Exit Mini player",
"download_location": "Download location",
"local_library": "Local library",
"add_library_location": "Add to library",
"remove_library_location": "Remove from library",
"account": "Account",
"logout": "Logout",
"logout_of_this_account": "Logout of this account",
"language_region": "Language & Region",
"language": "Language",
"system_default": "System Default",
"market_place_region": "Marketplace Region",
"recommendation_country": "Recommendation Country",
"appearance": "Appearance",
"layout_mode": "Layout Mode",
"override_layout_settings": "Override responsive layout mode settings",
"adaptive": "Adaptive",
"compact": "Compact",
"extended": "Extended",
"theme": "Theme",
"dark": "Dark",
"light": "Light",
"system": "System",
"accent_color": "Accent Color",
"sync_album_color": "Sync album color",
"sync_album_color_description": "Uses the dominant color of the album art as the accent color",
"playback": "Playback",
"audio_quality": "Audio Quality",
"high": "High",
"low": "Low",
"pre_download_play": "Pre-download and play",
"pre_download_play_description": "Instead of streaming audio, download bytes and play instead (Recommended for higher bandwidth users)",
"skip_non_music": "Skip non-music segments (SponsorBlock)",
"blacklist_description": "Blacklisted tracks and artists",
"wait_for_download_to_finish": "Please wait for the current download to finish",
"desktop": "Desktop",
"close_behavior": "Close Behavior",
"close": "Close",
"minimize_to_tray": "Minimize to tray",
"show_tray_icon": "Show System tray icon",
"about": "About",
"u_love_spotube": "We know you love Spotube",
"check_for_updates": "Check for updates",
"about_spotube": "About Spotube",
"blacklist": "Blacklist",
"please_sponsor": "Please Sponsor/Donate",
"spotube_description": "Open source extensible music streaming platform and app, based on BYOMM (Bring your own music metadata) concept",
"version": "Version",
"build_number": "Build Number",
"founder": "Founder",
"repository": "Repository",
"bug_issues": "Bug+Issues",
"made_with": "Made with ❤️ in Bangladesh🇧🇩",
"kingkor_roy_tirtho": "Kingkor Roy Tirtho",
"copyright": "© 2021-{current_year} Kingkor Roy Tirtho",
"license": "License",
"credentials_will_not_be_shared_disclaimer": "Don't worry, any of your credentials won't be collected or shared with anyone",
"know_how_to_login": "Don't know how to do this?",
"follow_step_by_step_guide": "Follow along the Step by Step guide",
"cookie_name_cookie": "{name} Cookie",
"fill_in_all_fields": "Please fill in all the fields",
"submit": "Submit",
"exit": "Exit",
"previous": "Previous",
"next": "Next",
"done": "Done",
"step_1": "Step 1",
"first_go_to": "First, Go to",
"something_went_wrong": "Something went wrong",
"piped_instance": "Piped Server Instance",
"piped_description": "The Piped server instance to use for track matching",
"piped_warning": "Some of them might not work well. So use at your own risk",
"invidious_instance": "Invidious Server Instance",
"invidious_description": "The Invidious server instance to use for track matching",
"invidious_warning": "Some of them might not work well. So use at your own risk",
"generate": "Generate",
"track_exists": "Track {track} already exists",
"replace_downloaded_tracks": "Replace all downloaded tracks",
"skip_download_tracks": "Skip downloading all downloaded tracks",
"do_you_want_to_replace": "Do you want to replace the existing track??",
"replace": "Replace",
"skip": "Skip",
"select_up_to_count_type": "Select up to {count} {type}",
"select_genres": "Select Genres",
"add_genres": "Add Genres",
"country": "Country",
"number_of_tracks_generate": "Number of tracks to generate",
"acousticness": "Acousticness",
"danceability": "Danceability",
"energy": "Energy",
"instrumentalness": "Instrumentalness",
"liveness": "Liveness",
"loudness": "Loudness",
"speechiness": "Speechiness",
"valence": "Valence",
"popularity": "Popularity",
"key": "Key",
"duration": "Duration (s)",
"tempo": "Tempo (BPM)",
"mode": "Mode",
"time_signature": "Time Signature",
"short": "Short",
"medium": "Medium",
"long": "Long",
"min": "Min",
"max": "Max",
"target": "Target",
"moderate": "Moderate",
"deselect_all": "Deselect All",
"select_all": "Select All",
"are_you_sure": "Are you sure?",
"generating_playlist": "Generating your custom playlist...",
"selected_count_tracks": "Selected {count} tracks",
"download_warning": "If you download all Tracks at bulk you're clearly pirating Music & causing damage to the creative society of Music. I hope you are aware of this. Always, try respecting & supporting Artist's hard work",
"download_ip_ban_warning": "BTW, your IP can get blocked on YouTube due excessive download requests than usual. IP block means you can't use YouTube (even if you're logged in) for at least 2-3 months from that IP device. And Spotube doesn't hold any responsibility if this ever happens",
"by_clicking_accept_terms": "By clicking 'accept' you agree to following terms:",
"download_agreement_1": "I know I'm pirating Music. I'm bad",
"download_agreement_2": "I'll support the Artist wherever I can and I'm only doing this because I don't have money to buy their art",
"download_agreement_3": "I'm completely aware that my IP can get blocked on YouTube & I don't hold Spotube or his owners/contributors responsible for any accidents caused by my current action",
"decline": "Decline",
"accept": "Accept",
"details": "Details",
"youtube": "YouTube",
"channel": "Channel",
"likes": "Likes",
"dislikes": "Dislikes",
"views": "Views",
"streamUrl": "Stream URL",
"stop": "Stop",
"sort_newest": "Sort by newest added",
"sort_oldest": "Sort by oldest added",
"sleep_timer": "Sleep Timer",
"mins": "{minutes} Minutes",
"hours": "{hours} Hours",
"hour": "{hours} Hour",
"custom_hours": "Custom Hours",
"logs": "Logs",
"developers": "Developers",
"not_logged_in": "You're not logged in",
"search_mode": "Search Mode",
"audio_source": "Audio Source",
"ok": "Ok",
"failed_to_encrypt": "Failed to encrypt",
"encryption_failed_warning": "Spotube uses encryption to securely store your data. But failed to do so. So it'll fallback to insecure storage\nIf you're using linux, please make sure you've any secret-service (gnome-keyring, kde-wallet, keepassxc etc) installed",
"querying_info": "Querying info...",
"piped_api_down": "Piped API is down",
"piped_down_error_instructions": "The Piped instance {pipedInstance} is currently down\n\nEither change the instance or change the 'API type' to official YouTube API\n\nMake sure to restart the app after change",
"you_are_offline": "You are currently offline",
"connection_restored": "Your internet connection was restored",
"use_system_title_bar": "Use system title bar",
"crunching_results": "Crunching results...",
"search_to_get_results": "Search to get results",
"use_amoled_mode": "Pitch black dark theme",
"pitch_dark_theme": "AMOLED Mode",
"normalize_audio": "Normalize audio",
"change_cover": "Change cover",
"add_cover": "Add cover",
"restore_defaults": "Restore defaults",
"download_music_codec": "Download music codec",
"streaming_music_codec": "Streaming music codec",
"login_with_lastfm": "Login with Last.fm",
"connect": "Connect",
"disconnect_lastfm": "Disconnect Last.fm",
"disconnect": "Disconnect",
"username": "Username",
"password": "Password",
"login": "Login",
"login_with_your_lastfm": "Login with your Last.fm account",
"scrobble_to_lastfm": "Scrobble to Last.fm",
"go_to_album": "Go to Album",
"discord_rich_presence": "Discord Rich Presence",
"browse_all": "Browse All",
"genres": "Genres",
"explore_genres": "Explore Genres",
"friends": "Friends",
"no_lyrics_available": "Sorry, unable find lyrics for this track",
"start_a_radio": "Start a Radio",
"how_to_start_radio": "How do you want to start the radio?",
"replace_queue_question": "Do you want to replace the current queue or append to it?",
"endless_playback": "Endless Playback",
"delete_playlist": "Delete Playlist",
"delete_playlist_confirmation": "Are you sure you want to delete this playlist?",
"local_tracks": "Local Tracks",
"local_tab": "Local",
"song_link": "Song Link",
"skip_this_nonsense": "Skip this nonsense",
"freedom_of_music": "“Freedom of Music”",
"freedom_of_music_palm": "“Freedom of Music in the palm of your hand”",
"get_started": "Let's get started",
"youtube_source_description": "Recommended and works best.",
"piped_source_description": "Feeling free? Same as YouTube but a lot free.",
"jiosaavn_source_description": "Best for South Asian region.",
"invidious_source_description": "Similar to Piped but with higher availability.",
"highest_quality": "Highest Quality: {quality}",
"select_audio_source": "Select Audio Source",
"endless_playback_description": "Automatically append new songs\nto the end of the queue",
"choose_your_region": "Choose your region",
"choose_your_region_description": "This will help Spotube show you the right content\nfor your location.",
"choose_your_language": "Choose your language",
"help_project_grow": "Help this project grow",
"help_project_grow_description": "Spotube is an open-source project. You can help this project grow by contributing to the project, reporting bugs, or suggesting new features.",
"contribute_on_github": "Contribute on GitHub",
"donate_on_open_collective": "Donate on Open Collective",
"browse_anonymously": "Browse Anonymously",
"enable_connect": "Enable Connect",
"enable_connect_description": "Control Spotube from other devices",
"devices": "Devices",
"select": "Select",
"connect_client_alert": "You're being controlled by {client}",
"this_device": "This Device",
"remote": "Remote",
"stats": "Stats",
"and_n_more": "and {count} more",
"recently_played": "Recently Played",
"browse_more": "Browse More",
"no_title": "No Title",
"not_playing": "Not playing",
"epic_failure": "Epic failure!",
"added_num_tracks_to_queue": "Added {tracks_length} tracks to queue",
"spotube_has_an_update": "Spotube has an update",
"download_now": "Download Now",
"nightly_version": "Spotube Nightly {nightlyBuildNum} has been released",
"release_version": "Spotube v{version} has been released",
"read_the_latest": "Read the latest ",
"release_notes": "release notes",
"pick_color_scheme": "Pick color scheme",
"save": "Save",
"choose_the_device": "Choose the device:",
"multiple_device_connected": "There are multiple device connected.\nChoose the device you want this action to take place",
"nothing_found": "Nothing found",
"the_box_is_empty": "The box is empty",
"top_artists": "Top Artists",
"top_albums": "Top Albums",
"this_week": "This week",
"this_month": "This month",
"last_6_months": "Last 6 months",
"this_year": "This year",
"last_2_years": "Last 2 years",
"all_time": "All time",
"powered_by_provider": "Powered by {providerName}",
"email": "Email",
"profile_followers": "Followers",
"birthday": "Birthday",
"subscription": "Subscription",
"not_born": "Not born",
"hacker": "Hacker",
"profile": "Profile",
"no_name": "No Name",
"edit": "Edit",
"user_profile": "User Profile",
"count_plays": "{count} plays",
"streaming_fees_hypothetical": "Streaming fees (hypothetical)",
"minutes_listened": "Minutes listened",
"streamed_songs": "Streamed songs",
"count_streams": "{count} streams",
"owned_by_you": "Owned by you",
"copied_shareurl_to_clipboard": "Copied {shareUrl} to clipboard",
"hipotetical_calculation": "*This is calculated based on average online music streaming platform's per stream\npayout of $0.003 to $0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.",
"count_mins": "{minutes} mins",
"summary_minutes": "minutes",
"summary_listened_to_music": "Listened to music",
"summary_songs": "songs",
"summary_streamed_overall": "Streamed overall",
"summary_owed_to_artists": "Owed to artists\nthis month",
"summary_artists": "artist's",
"summary_music_reached_you": "Music reached you",
"summary_full_albums": "full albums",
"summary_got_your_love": "Got your love",
"summary_playlists": "playlists",
"summary_were_on_repeat": "Were on repeat",
"total_money": "Total {money}",
"webview_not_found": "Webview not found",
"webview_not_found_description": "No webview runtime is installed in your device.\nIf it's installed make sure it's in the Environment PATH\n\nAfter installing, restart the app",
"unsupported_platform": "Unsupported platform",
"cache_music": "Cache music",
"open": "Open",
"cache_folder": "Cache folder",
"export": "Export",
"clear_cache": "Clear cache",
"clear_cache_confirmation": "Do you want to clear the cache?",
"export_cache_files": "Export Cached Files",
"found_n_files": "Found {count} files",
"export_cache_confirmation": "Do you want to export these files to",
"exported_n_out_of_m_files": "Exported {filesExported} out of {files} files",
"undo": "Undo",
"download_all": "Download all",
"add_all_to_playlist": "Add all to playlist",
"add_all_to_queue": "Add all to queue",
"play_all_next": "Play all next",
"pause": "Pause",
"view_all": "View all",
"no_tracks_added_yet": "Looks like you haven't added any tracks yet",
"no_tracks": "Looks like there are no tracks here",
"no_tracks_listened_yet": "Looks like you haven't listened to anything yet",
"not_following_artists": "You're not following any artists",
"no_favorite_albums_yet": "Looks like you haven't added any albums to your favorites yet",
"no_logs_found": "No logs found",
"youtube_engine": "YouTube Engine",
"youtube_engine_not_installed_title": "{engine} is not installed",
"youtube_engine_not_installed_message": "{engine} is not installed in your system.",
"youtube_engine_set_path": "Make sure it's available in the PATH variable or\nset the absolute path to the {engine} executable below",
"youtube_engine_unix_issue_message": "In macOS/Linux/unix like OS's, setting path on .zshrc/.bashrc/.bash_profile etc. won't work.\nYou need to set the path in the shell configuration file",
"download": "Download",
"file_not_found": "File not found",
"custom": "Custom",
"add_custom_url": "Add custom URL",
"edit_port": "Edit port",
"port_helper_msg": "Default is -1 which indicates random number. If you've firewall configured, setting this is recommended.",
"connect_request": "Allow {client} to connect?",
"connection_request_denied": "Connection denied. User denied access."
}

View File

@ -89,7 +89,8 @@ import 'app_localizations_zh.dart';
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
/// property.
abstract class AppLocalizations {
AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString());
AppLocalizations(String locale)
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
final String localeName;
@ -97,7 +98,8 @@ abstract class AppLocalizations {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate();
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();
/// A list of this localizations delegate along with the default localizations
/// delegates.
@ -109,7 +111,8 @@ abstract class AppLocalizations {
/// Additional delegates can be added by appending to this list in
/// MaterialApp. This list does not have to be used at all if a custom list
/// of delegates is preferred or required.
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates = <LocalizationsDelegate<dynamic>>[
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
<LocalizationsDelegate<dynamic>>[
delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
@ -827,18 +830,6 @@ abstract class AppLocalizations {
/// **'Account'**
String get account;
/// No description provided for @login_with_spotify.
///
/// In en, this message translates to:
/// **'Login with your Spotify account'**
String get login_with_spotify;
/// No description provided for @connect_with_spotify.
///
/// In en, this message translates to:
/// **'Connect with Spotify'**
String get connect_with_spotify;
/// No description provided for @logout.
///
/// In en, this message translates to:
@ -1082,7 +1073,7 @@ abstract class AppLocalizations {
/// No description provided for @spotube_description.
///
/// In en, this message translates to:
/// **'Spotube, a lightweight, cross-platform, free-for-all spotify client'**
/// **'Open source extensible music streaming platform and app, based on BYOMM (Bring your own music metadata) concept'**
String get spotube_description;
/// No description provided for @version.
@ -1139,12 +1130,6 @@ abstract class AppLocalizations {
/// **'License'**
String get license;
/// No description provided for @add_spotify_credentials.
///
/// In en, this message translates to:
/// **'Add your spotify credentials to get started'**
String get add_spotify_credentials;
/// No description provided for @credentials_will_not_be_shared_disclaimer.
///
/// In en, this message translates to:
@ -1163,12 +1148,6 @@ abstract class AppLocalizations {
/// **'Follow along the Step by Step guide'**
String get follow_step_by_step_guide;
/// No description provided for @spotify_cookie.
///
/// In en, this message translates to:
/// **'Spotify {name} Cookie'**
String spotify_cookie(Object name);
/// No description provided for @cookie_name_cookie.
///
/// In en, this message translates to:
@ -1223,60 +1202,6 @@ abstract class AppLocalizations {
/// **'First, Go to'**
String get first_go_to;
/// No description provided for @login_if_not_logged_in.
///
/// In en, this message translates to:
/// **'and Login/Signup if you are not logged in'**
String get login_if_not_logged_in;
/// No description provided for @step_2.
///
/// In en, this message translates to:
/// **'Step 2'**
String get step_2;
/// No description provided for @step_2_steps.
///
/// In en, this message translates to:
/// **'1. Once you\'re logged in, press F12 or Mouse Right Click > Inspect to Open the Browser devtools.\n2. Then go the \"Application\" Tab (Chrome, Edge, Brave etc..) or \"Storage\" Tab (Firefox, Palemoon etc..)\n3. Go to the \"Cookies\" section then the \"https://accounts.spotify.com\" subsection'**
String get step_2_steps;
/// No description provided for @step_3.
///
/// In en, this message translates to:
/// **'Step 3'**
String get step_3;
/// No description provided for @step_3_steps.
///
/// In en, this message translates to:
/// **'Copy the value of \"sp_dc\" Cookie'**
String get step_3_steps;
/// No description provided for @success_emoji.
///
/// In en, this message translates to:
/// **'Success🥳'**
String get success_emoji;
/// No description provided for @success_message.
///
/// In en, this message translates to:
/// **'Now you\'ve successfully Logged in with your Spotify account. Good Job, mate!'**
String get success_message;
/// No description provided for @step_4.
///
/// In en, this message translates to:
/// **'Step 4'**
String get step_4;
/// No description provided for @step_4_steps.
///
/// In en, this message translates to:
/// **'Paste the copied \"sp_dc\" value'**
String get step_4_steps;
/// No description provided for @something_went_wrong.
///
/// In en, this message translates to:
@ -2411,11 +2336,11 @@ abstract class AppLocalizations {
/// **'Copied {shareUrl} to clipboard'**
String copied_shareurl_to_clipboard(Object shareUrl);
/// No description provided for @spotify_hipotetical_calculation.
/// No description provided for @hipotetical_calculation.
///
/// In en, this message translates to:
/// **'*This is calculated based on Spotify\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in Spotify.'**
String get spotify_hipotetical_calculation;
/// **'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.'**
String get hipotetical_calculation;
/// No description provided for @count_mins.
///
@ -2730,7 +2655,8 @@ abstract class AppLocalizations {
String get connection_request_denied;
}
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
class _AppLocalizationsDelegate
extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
@ -2739,52 +2665,108 @@ class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations>
}
@override
bool isSupported(Locale locale) => <String>['ar', 'bn', 'ca', 'cs', 'de', 'en', 'es', 'eu', 'fa', 'fi', 'fr', 'hi', 'id', 'it', 'ja', 'ka', 'ko', 'ne', 'nl', 'pl', 'pt', 'ru', 'ta', 'th', 'tl', 'tr', 'uk', 'vi', 'zh'].contains(locale.languageCode);
bool isSupported(Locale locale) => <String>[
'ar',
'bn',
'ca',
'cs',
'de',
'en',
'es',
'eu',
'fa',
'fi',
'fr',
'hi',
'id',
'it',
'ja',
'ka',
'ko',
'ne',
'nl',
'pl',
'pt',
'ru',
'ta',
'th',
'tl',
'tr',
'uk',
'vi',
'zh'
].contains(locale.languageCode);
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}
AppLocalizations lookupAppLocalizations(Locale locale) {
// Lookup logic when only language code is specified.
switch (locale.languageCode) {
case 'ar': return AppLocalizationsAr();
case 'bn': return AppLocalizationsBn();
case 'ca': return AppLocalizationsCa();
case 'cs': return AppLocalizationsCs();
case 'de': return AppLocalizationsDe();
case 'en': return AppLocalizationsEn();
case 'es': return AppLocalizationsEs();
case 'eu': return AppLocalizationsEu();
case 'fa': return AppLocalizationsFa();
case 'fi': return AppLocalizationsFi();
case 'fr': return AppLocalizationsFr();
case 'hi': return AppLocalizationsHi();
case 'id': return AppLocalizationsId();
case 'it': return AppLocalizationsIt();
case 'ja': return AppLocalizationsJa();
case 'ka': return AppLocalizationsKa();
case 'ko': return AppLocalizationsKo();
case 'ne': return AppLocalizationsNe();
case 'nl': return AppLocalizationsNl();
case 'pl': return AppLocalizationsPl();
case 'pt': return AppLocalizationsPt();
case 'ru': return AppLocalizationsRu();
case 'ta': return AppLocalizationsTa();
case 'th': return AppLocalizationsTh();
case 'tl': return AppLocalizationsTl();
case 'tr': return AppLocalizationsTr();
case 'uk': return AppLocalizationsUk();
case 'vi': return AppLocalizationsVi();
case 'zh': return AppLocalizationsZh();
case 'ar':
return AppLocalizationsAr();
case 'bn':
return AppLocalizationsBn();
case 'ca':
return AppLocalizationsCa();
case 'cs':
return AppLocalizationsCs();
case 'de':
return AppLocalizationsDe();
case 'en':
return AppLocalizationsEn();
case 'es':
return AppLocalizationsEs();
case 'eu':
return AppLocalizationsEu();
case 'fa':
return AppLocalizationsFa();
case 'fi':
return AppLocalizationsFi();
case 'fr':
return AppLocalizationsFr();
case 'hi':
return AppLocalizationsHi();
case 'id':
return AppLocalizationsId();
case 'it':
return AppLocalizationsIt();
case 'ja':
return AppLocalizationsJa();
case 'ka':
return AppLocalizationsKa();
case 'ko':
return AppLocalizationsKo();
case 'ne':
return AppLocalizationsNe();
case 'nl':
return AppLocalizationsNl();
case 'pl':
return AppLocalizationsPl();
case 'pt':
return AppLocalizationsPt();
case 'ru':
return AppLocalizationsRu();
case 'ta':
return AppLocalizationsTa();
case 'th':
return AppLocalizationsTh();
case 'tl':
return AppLocalizationsTl();
case 'tr':
return AppLocalizationsTr();
case 'uk':
return AppLocalizationsUk();
case 'vi':
return AppLocalizationsVi();
case 'zh':
return AppLocalizationsZh();
}
throw FlutterError(
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
'an issue with the localizations generation tool. Please file an issue '
'on GitHub with a reproducible sample app and the gen-l10n configuration '
'that was used.'
);
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
'an issue with the localizations generation tool. Please file an issue '
'on GitHub with a reproducible sample app and the gen-l10n configuration '
'that was used.');
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get account => 'حساب';
@override
String get login_with_spotify => 'تسجيل الدخول بواسطة حساب Spotify';
@override
String get connect_with_spotify => 'توصيل بـSpotify';
@override
String get logout => 'تسجيل الخروج';
@ -413,7 +407,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get layout_mode => 'وضع التخطيط';
@override
String get override_layout_settings => 'تجاوز إعدادات وضع التخطيط سريع الاستجابة';
String get override_layout_settings =>
'تجاوز إعدادات وضع التخطيط سريع الاستجابة';
@override
String get adaptive => 'متكيف';
@ -443,7 +438,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get sync_album_color => 'مزامنة لون الألبوم';
@override
String get sync_album_color_description => 'يستخدم اللون السائد لصورة الألبوم باعتباره لون التمييز';
String get sync_album_color_description =>
'يستخدم اللون السائد لصورة الألبوم باعتباره لون التمييز';
@override
String get playback => 'التشغيل';
@ -461,16 +457,19 @@ class AppLocalizationsAr extends AppLocalizations {
String get pre_download_play => 'التحميل المسبق والتشغيل';
@override
String get pre_download_play_description => 'بدلاً من دفق الصوت، قم بتنزيل وحدات البايت وتشغيلها بدلاً من ذلك (موصى به لمستخدمي Bandwidth)';
String get pre_download_play_description =>
'بدلاً من دفق الصوت، قم بتنزيل وحدات البايت وتشغيلها بدلاً من ذلك (موصى به لمستخدمي Bandwidth)';
@override
String get skip_non_music => 'تخطي المقاطع غير الموسيقية (SponsorBlock)';
@override
String get blacklist_description => 'المقطوعات والفنانون المدرجون في القائمة السوداء';
String get blacklist_description =>
'المقطوعات والفنانون المدرجون في القائمة السوداء';
@override
String get wait_for_download_to_finish => 'يرجى الانتظار حتى انتهاء التنزيل الحالي';
String get wait_for_download_to_finish =>
'يرجى الانتظار حتى انتهاء التنزيل الحالي';
@override
String get desktop => 'سطح المكتب';
@ -506,7 +505,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get please_sponsor => 'يرجى دعم/التبرع';
@override
String get spotube_description => 'Spotube، عميل Spotify خفيف الوزن ومتعدد المنصات ومجاني للجميع';
String get spotube_description =>
'Spotube، عميل Spotify خفيف الوزن ومتعدد المنصات ومجاني للجميع';
@override
String get version => 'إصدار';
@ -538,10 +538,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get license => 'الترخيص';
@override
String get add_spotify_credentials => 'أضف بيانات Spotify الخاصة بك للبدء';
@override
String get credentials_will_not_be_shared_disclaimer => 'لا تقلق، لن يتم جمع أي من بيانات الخاصة بك أو مشاركتها مع أي شخص';
String get credentials_will_not_be_shared_disclaimer =>
'لا تقلق، لن يتم جمع أي من بيانات الخاصة بك أو مشاركتها مع أي شخص';
@override
String get know_how_to_login => 'لا تعرف كيف تفعل هذا؟';
@ -549,11 +547,6 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'اتبع الدليل خطوة بخطوة';
@override
String spotify_cookie(Object name) {
return 'Spotify $name كوكيز';
}
@override
String cookie_name_cookie(Object name) {
return '$name كوكيز';
@ -583,33 +576,6 @@ class AppLocalizationsAr extends AppLocalizations {
@override
String get first_go_to => 'أولا، اذهب إلى';
@override
String get login_if_not_logged_in => 'وتسجيل الدخول/الاشتراك إذا لم تقم بتسجيل الدخول';
@override
String get step_2 => 'الخطوة 2';
@override
String get step_2_steps => '1. بمجرد تسجيل الدخول، اضغط على F12 أو انقر بزر الماوس الأيمن > فحص لفتح أدوات تطوير المتصفح.\n2. ثم انتقل إلى علامة التبويب \"التطبيقات\" (Chrome وEdge وBrave وما إلى ذلك.) أو علامة التبويب \"التخزين\" (Firefox وPalemoon وما إلى ذلك..)\n3. انتقل إلى قسم \"ملفات تعريف الارتباط\" ثم القسم الفرعي \"https://accounts.spotify.com\"';
@override
String get step_3 => 'الخطوة 3';
@override
String get step_3_steps => 'انسخ قيمة الكوكي \"sp_dc\"';
@override
String get success_emoji => 'نجاح 🥳';
@override
String get success_message => 'لقد قمت الآن بتسجيل الدخول بنجاح باستخدام حساب Spotify الخاص بك. عمل جيد يا صديقي!';
@override
String get step_4 => 'الخطوة 4';
@override
String get step_4_steps => 'الصق قيمة \"sp_dc\" المنسوخة';
@override
String get something_went_wrong => 'هناك خطأ ما';
@ -617,19 +583,23 @@ class AppLocalizationsAr extends AppLocalizations {
String get piped_instance => 'مثيل خادم Piped';
@override
String get piped_description => 'مثيل خادم Piped الذي سيتم استخدامه لمطابقة المقطوعة';
String get piped_description =>
'مثيل خادم Piped الذي سيتم استخدامه لمطابقة المقطوعة';
@override
String get piped_warning => 'البعض منهم قد لا يعمل بشكل جيد. لذلك استخدمه على مسؤوليتك';
String get piped_warning =>
'البعض منهم قد لا يعمل بشكل جيد. لذلك استخدمه على مسؤوليتك';
@override
String get invidious_instance => 'مثيل خادم Invidious';
@override
String get invidious_description => 'مثيل خادم Invidious المستخدم لمطابقة المسارات';
String get invidious_description =>
'مثيل خادم Invidious المستخدم لمطابقة المسارات';
@override
String get invidious_warning => 'قد لا تعمل بعض الخوادم بشكل جيد. استخدمها على مسؤوليتك الخاصة';
String get invidious_warning =>
'قد لا تعمل بعض الخوادم بشكل جيد. استخدمها على مسؤوليتك الخاصة';
@override
String get generate => 'إنشاء';
@ -640,10 +610,12 @@ class AppLocalizationsAr extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'استبدل جميع المقطوعات التي تم تنزيلها';
String get replace_downloaded_tracks =>
'استبدل جميع المقطوعات التي تم تنزيلها';
@override
String get skip_download_tracks => 'تخطي تنزيل كافة المقطوعات التي تم تنزيلها';
String get skip_download_tracks =>
'تخطي تنزيل كافة المقطوعات التي تم تنزيلها';
@override
String get do_you_want_to_replace => 'هل تريد استبدال المقطوعة الحالية؟';
@ -669,7 +641,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get country => 'دولة';
@override
String get number_of_tracks_generate => 'عدد المسارات المقطوعات المراد توليدها';
String get number_of_tracks_generate =>
'عدد المسارات المقطوعات المراد توليدها';
@override
String get acousticness => 'صوتية';
@ -752,22 +725,27 @@ class AppLocalizationsAr extends AppLocalizations {
}
@override
String get download_warning => 'إذا قمت بتنزيل جميع المقاطع الصوتية بكميات كبيرة، فمن الواضح أنك تقوم بقرصنة الموسيقى وتسبب الضرر للمجتمع الإبداعي للموسيقى. أتمنى أن تكون على علم بهذا. حاول دائمًا احترام ودعم العمل الجاد للفنان';
String get download_warning =>
'إذا قمت بتنزيل جميع المقاطع الصوتية بكميات كبيرة، فمن الواضح أنك تقوم بقرصنة الموسيقى وتسبب الضرر للمجتمع الإبداعي للموسيقى. أتمنى أن تكون على علم بهذا. حاول دائمًا احترام ودعم العمل الجاد للفنان';
@override
String get download_ip_ban_warning => 'بالمناسبة، يمكن أن يتم حظر عنوان IP الخاص بك على YouTube بسبب طلبات التنزيل الزائدة عن المعتاد. يعني حظر IP أنه لا يمكنك استخدام YouTube (حتى إذا قمت بتسجيل الدخول) لمدة تتراوح بين شهرين إلى ثلاثة أشهر على الأقل من جهاز IP هذا. ولا يتحمل Spotube أي مسؤولية إذا حدث هذا على الإطلاق';
String get download_ip_ban_warning =>
'بالمناسبة، يمكن أن يتم حظر عنوان IP الخاص بك على YouTube بسبب طلبات التنزيل الزائدة عن المعتاد. يعني حظر IP أنه لا يمكنك استخدام YouTube (حتى إذا قمت بتسجيل الدخول) لمدة تتراوح بين شهرين إلى ثلاثة أشهر على الأقل من جهاز IP هذا. ولا يتحمل Spotube أي مسؤولية إذا حدث هذا على الإطلاق';
@override
String get by_clicking_accept_terms => 'بالنقر على \"قبول\"، فإنك توافق على الشروط التالية:';
String get by_clicking_accept_terms =>
'بالنقر على \"قبول\"، فإنك توافق على الشروط التالية:';
@override
String get download_agreement_1 => 'أعلم أنني أقوم بقرصنة الموسيقى. انا سيئ';
@override
String get download_agreement_2 => 'سأدعم الفنان أينما أستطيع، وأنا أفعل هذا فقط لأنني لا أملك المال لشراء أعمالهم الفنية';
String get download_agreement_2 =>
'سأدعم الفنان أينما أستطيع، وأنا أفعل هذا فقط لأنني لا أملك المال لشراء أعمالهم الفنية';
@override
String get download_agreement_3 => 'أدرك تمامًا أنه يمكن حظر عنوان IP الخاص بي على YouTube ولا أحمل Spotube أو مالكيه/مساهميه المسؤولية عن أي حوادث ناجمة عن الإجراء الحالي الخاص بي';
String get download_agreement_3 =>
'أدرك تمامًا أنه يمكن حظر عنوان IP الخاص بي على YouTube ولا أحمل Spotube أو مالكيه/مساهميه المسؤولية عن أي حوادث ناجمة عن الإجراء الحالي الخاص بي';
@override
String get decline => 'رفض';
@ -848,7 +826,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get failed_to_encrypt => 'فشل في التشفير';
@override
String get encryption_failed_warning => 'يستخدم Spotube التشفير لتخزين بياناتك بشكل آمن. لكنها فشلت في القيام بذلك. لذلك سيعود الأمر إلى التخزين غير الآمن\nإذا كنت تستخدم Linux، فيرجى التأكد من تثبيت أي خدمة سرية (gnome-keyring، kde-wallet، keepassxc، إلخ)';
String get encryption_failed_warning =>
'يستخدم Spotube التشفير لتخزين بياناتك بشكل آمن. لكنها فشلت في القيام بذلك. لذلك سيعود الأمر إلى التخزين غير الآمن\nإذا كنت تستخدم Linux، فيرجى التأكد من تثبيت أي خدمة سرية (gnome-keyring، kde-wallet، keepassxc، إلخ)';
@override
String get querying_info => 'جارٍ الاستعلام عن معلومات...';
@ -922,7 +901,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get login => 'تسجيل الدخول';
@override
String get login_with_your_lastfm => 'تسجيل الدخول باستخدام حساب Last.fm الخاص بك';
String get login_with_your_lastfm =>
'تسجيل الدخول باستخدام حساب Last.fm الخاص بك';
@override
String get scrobble_to_lastfm => 'تسجيل الاستماع على Last.fm';
@ -946,7 +926,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get friends => 'أصدقاء';
@override
String get no_lyrics_available => 'عذرًا، تعذر العثور على كلمات الأغنية لهذه العنصر';
String get no_lyrics_available =>
'عذرًا، تعذر العثور على كلمات الأغنية لهذه العنصر';
@override
String get start_a_radio => 'بدء راديو';
@ -955,7 +936,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get how_to_start_radio => 'كيف تريد بدء الراديو؟';
@override
String get replace_queue_question => 'هل تريد استبدال قائمة التشغيل الحالية أم إضافة إليها؟';
String get replace_queue_question =>
'هل تريد استبدال قائمة التشغيل الحالية أم إضافة إليها؟';
@override
String get endless_playback => 'تشغيل بلا نهاية';
@ -964,7 +946,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get delete_playlist => 'حذف قائمة التشغيل';
@override
String get delete_playlist_confirmation => 'هل أنت متأكد أنك تريد حذف هذه قائمة التشغيل؟';
String get delete_playlist_confirmation =>
'هل أنت متأكد أنك تريد حذف هذه قائمة التشغيل؟';
@override
String get local_tracks => 'المسارات المحلية';
@ -991,7 +974,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get youtube_source_description => 'موصى به ويعمل بشكل أفضل.';
@override
String get piped_source_description => 'تشعر بالحرية؟ نفس يوتيوب ولكن أكثر حرية.';
String get piped_source_description =>
'تشعر بالحرية؟ نفس يوتيوب ولكن أكثر حرية.';
@override
String get jiosaavn_source_description => 'الأفضل لمنطقة جنوب آسيا.';
@ -1008,13 +992,15 @@ class AppLocalizationsAr extends AppLocalizations {
String get select_audio_source => 'اختر مصدر الصوت';
@override
String get endless_playback_description => 'إلحاق الأغاني الجديدة تلقائيًا\nإلى نهاية قائمة التشغيل';
String get endless_playback_description =>
'إلحاق الأغاني الجديدة تلقائيًا\nإلى نهاية قائمة التشغيل';
@override
String get choose_your_region => 'اختر منطقتك';
@override
String get choose_your_region_description => 'سيساعدك هذا في عرض المحتوى المناسب\nلموقعك.';
String get choose_your_region_description =>
'سيساعدك هذا في عرض المحتوى المناسب\nلموقعك.';
@override
String get choose_your_language => 'اختر لغتك';
@ -1023,7 +1009,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get help_project_grow => 'ساعد في نمو هذا المشروع';
@override
String get help_project_grow_description => 'Spotube هو مشروع مفتوح المصدر. يمكنك مساعدة هذا المشروع في النمو عن طريق المساهمة في المشروع، أو الإبلاغ عن الأخطاء، أو اقتراح ميزات جديدة.';
String get help_project_grow_description =>
'Spotube هو مشروع مفتوح المصدر. يمكنك مساعدة هذا المشروع في النمو عن طريق المساهمة في المشروع، أو الإبلاغ عن الأخطاء، أو اقتراح ميزات جديدة.';
@override
String get contribute_on_github => 'المساهمة على GitHub';
@ -1038,7 +1025,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get enable_connect => 'تمكين الاتصال';
@override
String get enable_connect_description => 'التحكم في Spotube من الأجهزة الأخرى';
String get enable_connect_description =>
'التحكم في Spotube من الأجهزة الأخرى';
@override
String get devices => 'الأجهزة';
@ -1117,7 +1105,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get choose_the_device => 'اختر الجهاز:';
@override
String get multiple_device_connected => 'تم توصيل أجهزة متعددة.\nاختر الجهاز الذي تريد إجراء هذه العملية عليه';
String get multiple_device_connected =>
'تم توصيل أجهزة متعددة.\nاختر الجهاز الذي تريد إجراء هذه العملية عليه';
@override
String get nothing_found => 'لم يتم العثور على شيء';
@ -1212,7 +1201,8 @@ class AppLocalizationsAr extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*هذا محسوب بناءً على الدفع لكل بث من سبوتيفاي\nبقيمة 0.003 إلى 0.005 دولار. هذا حساب افتراضي\nلإعطاء المستخدم فكرة عن المبلغ الذي\nكان سيدفعه للفنانين إذا كانوا قد استمعوا\nإلى أغنيتهم على سبوتيفاي.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1251,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get webview_not_found => 'لم يتم العثور على Webview';
@override
String get webview_not_found_description => 'لم يتم تثبيت بيئة تشغيل Webview على جهازك.\nإذا كانت مثبتة، تأكد من وجودها في environment PATH\n\nبعد التثبيت، أعد تشغيل التطبيق';
String get webview_not_found_description =>
'لم يتم تثبيت بيئة تشغيل Webview على جهازك.\nإذا كانت مثبتة، تأكد من وجودها في environment PATH\n\nبعد التثبيت، أعد تشغيل التطبيق';
@override
String get unsupported_platform => 'المنصة غير مدعومة';
@ -1334,7 +1325,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get not_following_artists => 'أنت لا تتابع أي فنانين';
@override
String get no_favorite_albums_yet => 'يبدو أنك لم تضف أي ألبومات إلى المفضلة بعد';
String get no_favorite_albums_yet =>
'يبدو أنك لم تضف أي ألبومات إلى المفضلة بعد';
@override
String get no_logs_found => 'لم يتم العثور على سجلات';
@ -1358,7 +1350,8 @@ class AppLocalizationsAr extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'في أنظمة macOS/Linux/Unix مثل الأنظمة، لن يعمل تعيين المسار في .zshrc/.bashrc/.bash_profile وما إلى ذلك.\nيجب تعيين المسار في ملف تكوين الصدفة';
String get youtube_engine_unix_issue_message =>
'في أنظمة macOS/Linux/Unix مثل الأنظمة، لن يعمل تعيين المسار في .zshrc/.bashrc/.bash_profile وما إلى ذلك.\nيجب تعيين المسار في ملف تكوين الصدفة';
@override
String get download => 'تنزيل';
@ -1376,7 +1369,8 @@ class AppLocalizationsAr extends AppLocalizations {
String get edit_port => 'تعديل المنفذ';
@override
String get port_helper_msg => 'القيمة الافتراضية هي -1 والتي تشير إلى رقم عشوائي. إذا كان لديك جدار ناري مُعد، يُوصى بتعيين هذا.';
String get port_helper_msg =>
'القيمة الافتراضية هي -1 والتي تشير إلى رقم عشوائي. إذا كان لديك جدار ناري مُعد، يُوصى بتعيين هذا.';
@override
String connect_request(Object client) {
@ -1384,5 +1378,6 @@ class AppLocalizationsAr extends AppLocalizations {
}
@override
String get connection_request_denied => 'تم رفض الاتصال. المستخدم رفض الوصول.';
String get connection_request_denied =>
'تم رفض الاتصال. المستخدم رفض الوصول.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsBn extends AppLocalizations {
@override
String get account => 'অ্যাকাউন্ট';
@override
String get login_with_spotify => 'আপনার Spotify account দিয়ে লগইন করুন';
@override
String get connect_with_spotify => 'Spotify লগইন';
@override
String get logout => 'লগআউট করুন';
@ -413,7 +407,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get layout_mode => 'UI বিন্যাস রূপ';
@override
String get override_layout_settings => 'প্রতিক্রিয়াশীল UI বিন্যাস রূপের সেটিংস পরিবর্তন করুন';
String get override_layout_settings =>
'প্রতিক্রিয়াশীল UI বিন্যাস রূপের সেটিংস পরিবর্তন করুন';
@override
String get adaptive => 'অভিযোজিত';
@ -443,7 +438,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get sync_album_color => 'অ্যালবাম সুসংগত UI এর রং';
@override
String get sync_album_color_description => 'অ্যালবাম কভারের প্রভাবশালী রঙ UI অ্যাকসেন্ট রঙ হিসাবে ব্যবহার করে';
String get sync_album_color_description =>
'অ্যালবাম কভারের প্রভাবশালী রঙ UI অ্যাকসেন্ট রঙ হিসাবে ব্যবহার করে';
@override
String get playback => 'সংগীতের প্লেব্যাক';
@ -461,16 +457,20 @@ class AppLocalizationsBn extends AppLocalizations {
String get pre_download_play => 'আগে গান ডাউনলোড করে পরে চালান ';
@override
String get pre_download_play_description => 'গান স্ট্রিম করার পরিবর্তে, ডাউনলোড করুন এবং প্লে করুন (উচ্চ ব্যান্ডউইথ ব্যবহারকারীদের জন্য প্রস্তাবিত)';
String get pre_download_play_description =>
'গান স্ট্রিম করার পরিবর্তে, ডাউনলোড করুন এবং প্লে করুন (উচ্চ ব্যান্ডউইথ ব্যবহারকারীদের জন্য প্রস্তাবিত)';
@override
String get skip_non_music => 'গানের নন-মিউজিক সেগমেন্ট এড়িয়ে যান (SponsorBlock)';
String get skip_non_music =>
'গানের নন-মিউজিক সেগমেন্ট এড়িয়ে যান (SponsorBlock)';
@override
String get blacklist_description => 'কালো তালিকাভুক্ত গানের ট্র্যাক এবং শিল্পী';
String get blacklist_description =>
'কালো তালিকাভুক্ত গানের ট্র্যাক এবং শিল্পী';
@override
String get wait_for_download_to_finish => 'ডাউনলোড শেষ হওয়ার জন্য অপেক্ষা করুন';
String get wait_for_download_to_finish =>
'ডাউনলোড শেষ হওয়ার জন্য অপেক্ষা করুন';
@override
String get desktop => 'ডেস্কটপ';
@ -506,7 +506,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get please_sponsor => 'স্পনসর/সহায়তা করুন';
@override
String get spotube_description => 'Spotube, একটি কর্মদক্ষ, ক্রস-প্ল্যাটফর্ম, বিনামূল্যের জন্য Spotify ক্লায়েন্ট';
String get spotube_description =>
'Spotube, একটি কর্মদক্ষ, ক্রস-প্ল্যাটফর্ম, বিনামূল্যের জন্য Spotify ক্লায়েন্ট';
@override
String get version => 'সংস্করণ';
@ -538,10 +539,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get license => 'লাইসেন্স';
@override
String get add_spotify_credentials => 'আপনার Spotify লগইন তথ্য যোগ করুন';
@override
String get credentials_will_not_be_shared_disclaimer => 'চিন্তা করবেন না, আপনার কোনো লগইন তথ্য সংগ্রহ করা হবে না বা কারো সাথে শেয়ার করা হবে না';
String get credentials_will_not_be_shared_disclaimer =>
'চিন্তা করবেন না, আপনার কোনো লগইন তথ্য সংগ্রহ করা হবে না বা কারো সাথে শেয়ার করা হবে না';
@override
String get know_how_to_login => 'আপনি কিভাবে লগইন করবেন তা জানেন না?';
@ -549,11 +548,6 @@ class AppLocalizationsBn extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'ধাপে ধাপে নির্দেশিকা অনুসরণ করুন';
@override
String spotify_cookie(Object name) {
return 'Spotify $name কুকি';
}
@override
String cookie_name_cookie(Object name) {
return '$name কুকি';
@ -583,33 +577,6 @@ class AppLocalizationsBn extends AppLocalizations {
@override
String get first_go_to => 'প্রথমে যান';
@override
String get login_if_not_logged_in => 'এবং যদি আপনি লগইন/সাইন-আপ না থাকেন তবে লগইন/সাইন-আপ করুন';
@override
String get step_2 => 'ধাপ 2';
@override
String get step_2_steps => '১. একবার আপনি লগ ইন করলে, ব্রাউজার ডেভটুল খুলতে F12 বা মাউসের রাইট ক্লিক > \"Inspect to open Browser DevTools\" টিপুন।\n২. তারপর \"Application\" ট্যাবে যান (Chrome, Edge, Brave etc..) অথবা \"Storage\" Tab (Firefox, Palemoon etc..)\n৩. \"Cookies \" বিভাগে যান তারপর \"https://accounts.spotify.com\" উপবিভাগে যান';
@override
String get step_3 => 'ধাপ 3';
@override
String get step_3_steps => 'কুকি \"sp_dc\" এর মানটি কপি করুন';
@override
String get success_emoji => 'আমরা সফল🥳';
@override
String get success_message => 'এখন আপনি সফলভাবে আপনার Spotify অ্যাকাউন্ট দিয়ে লগ ইন করেছেন। সাধুভাত আপনাকে';
@override
String get step_4 => 'ধাপ 4';
@override
String get step_4_steps => 'কপি করা \"sp_dc\" মানটি পেস্ট করুন';
@override
String get something_went_wrong => 'কিছু ভুল হয়েছে';
@ -620,16 +587,19 @@ class AppLocalizationsBn extends AppLocalizations {
String get piped_description => 'গান ম্যাচ করার জন্য ব্যবহৃত পাইপড সার্ভার';
@override
String get piped_warning => 'এগুলোর মধ্যে কিছু ভাল কাজ নাও করতে পারে৷ তাই নিজ দায়িত্বে ব্যবহার করুন';
String get piped_warning =>
'এগুলোর মধ্যে কিছু ভাল কাজ নাও করতে পারে৷ তাই নিজ দায়িত্বে ব্যবহার করুন';
@override
String get invidious_instance => 'ইনভিডিয়াস সার্ভার ইন্সটেন্স';
@override
String get invidious_description => 'ট্রাক মিলানোর জন্য ব্যবহৃত ইনভিডিয়াস সার্ভার';
String get invidious_description =>
'ট্রাক মিলানোর জন্য ব্যবহৃত ইনভিডিয়াস সার্ভার';
@override
String get invidious_warning => 'কিছু সার্ভার ভাল কাজ নাও করতে পারে। নিজের ঝুঁকিতে ব্যবহার করুন';
String get invidious_warning =>
'কিছু সার্ভার ভাল কাজ নাও করতে পারে। নিজের ঝুঁকিতে ব্যবহার করুন';
@override
String get generate => 'উৎপন্ন করুন';
@ -640,13 +610,15 @@ class AppLocalizationsBn extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'সমস্ত ডাউনলোড করা ট্র্যাক প্রতিস্থাপন করুন';
String get replace_downloaded_tracks =>
'সমস্ত ডাউনলোড করা ট্র্যাক প্রতিস্থাপন করুন';
@override
String get skip_download_tracks => 'সমস্ত ডাউনলোড করা ট্র্যাক এ স্কিপ করুন';
@override
String get do_you_want_to_replace => 'আপনি কি বিদ্যমান ট্র্যাকটি প্রতিস্থাপন করতে চান?';
String get do_you_want_to_replace =>
'আপনি কি বিদ্যমান ট্র্যাকটি প্রতিস্থাপন করতে চান?';
@override
String get replace => 'প্রতিস্থাপন করুন';
@ -752,22 +724,27 @@ class AppLocalizationsBn extends AppLocalizations {
}
@override
String get download_warning => 'যদি আপনি সমস্ত ট্র্যাকগুলি একসঙ্গে ডাউনলোড করেন, তবে আপনি নিশ্চিতভাবে সঙ্গীত চুরি করছেন এবং সৃষ্টিশীল সমাজে ক্ষতি দিচ্ছেন। আমি আশা করি আপনি এটা সম্পর্কে জানেন। সর্বদা, শিল্পীদের কঠিন পরিশ্রমকে সম্মান করতে চেষ্টা করুন এবং সমর্থন করুন';
String get download_warning =>
'যদি আপনি সমস্ত ট্র্যাকগুলি একসঙ্গে ডাউনলোড করেন, তবে আপনি নিশ্চিতভাবে সঙ্গীত চুরি করছেন এবং সৃষ্টিশীল সমাজে ক্ষতি দিচ্ছেন। আমি আশা করি আপনি এটা সম্পর্কে জানেন। সর্বদা, শিল্পীদের কঠিন পরিশ্রমকে সম্মান করতে চেষ্টা করুন এবং সমর্থন করুন';
@override
String get download_ip_ban_warning => 'তথ্যবিশ্বস্ত করে নেওয়া যায় যে, আপনার IP ঠিকানাটি YouTube দ্বারা স্থানান্তরিত করা হতে পারে যখন সাধারন থেকে বেশি ডাউনলোড অনুরোধ হয়। IP ব্লকের মাধ্যমে আপনি কমপক্ষে ২-৩ মাস ধরে (ঐ IP ডিভাইস থেকে) YouTube ব্যবহার করতে পারবেন না। এবং Spotube কোনও দায়িত্ব সম্পর্কে দায়িত্ব বহন করে না যদি এটি ঘটে।';
String get download_ip_ban_warning =>
'তথ্যবিশ্বস্ত করে নেওয়া যায় যে, আপনার IP ঠিকানাটি YouTube দ্বারা স্থানান্তরিত করা হতে পারে যখন সাধারন থেকে বেশি ডাউনলোড অনুরোধ হয়। IP ব্লকের মাধ্যমে আপনি কমপক্ষে ২-৩ মাস ধরে (ঐ IP ডিভাইস থেকে) YouTube ব্যবহার করতে পারবেন না। এবং Spotube কোনও দায়িত্ব সম্পর্কে দায়িত্ব বহন করে না যদি এটি ঘটে।';
@override
String get by_clicking_accept_terms => '\'গ্রহণ\' ক্লিক করে আপনি নিম্নলিখিত শর্তাদি স্বীকার করছেন:';
String get by_clicking_accept_terms =>
'\'গ্রহণ\' ক্লিক করে আপনি নিম্নলিখিত শর্তাদি স্বীকার করছেন:';
@override
String get download_agreement_1 => 'আমি জানি আমি সঙ্গীত চুরি করছি। আমি খারাপ';
@override
String get download_agreement_2 => 'আমি কেবলমাত্র তাদের কাজ কেনার জন্য অর্থ নেই কিন্তু যেখানে প্রয়োজন সেখানে আমি শিল্পীদের সমর্থন করব।';
String get download_agreement_2 =>
'আমি কেবলমাত্র তাদের কাজ কেনার জন্য অর্থ নেই কিন্তু যেখানে প্রয়োজন সেখানে আমি শিল্পীদের সমর্থন করব।';
@override
String get download_agreement_3 => 'আমি সম্পূর্ণরূপে জানি যে আমার IP YouTube-তে ব্লক হতে পারে এবং আমি Spotube বা তার মালিকানাধীন কোনও দায়িত্ব পেতে পারিনি আমার বর্তমান ক্রিয়াটি দ্বারা সৃষ্ট দুর্ঘটনা করার জন্য';
String get download_agreement_3 =>
'আমি সম্পূর্ণরূপে জানি যে আমার IP YouTube-তে ব্লক হতে পারে এবং আমি Spotube বা তার মালিকানাধীন কোনও দায়িত্ব পেতে পারিনি আমার বর্তমান ক্রিয়াটি দ্বারা সৃষ্ট দুর্ঘটনা করার জন্য';
@override
String get decline => 'অগ্রায়ন করুন';
@ -848,7 +825,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get failed_to_encrypt => 'এনক্রিপ্ট করা ব্যর্থ হয়েছে';
@override
String get encryption_failed_warning => 'Spotube আপনার তথ্যগুলি নিরাপদভাবে স্টোর করতে এনক্রিপশন ব্যবহার করে। কিন্তু এটি ব্যর্থ হয়েছে। তাই এটি অনিরাপদ স্টোরে ফলফল হবে\nযদি আপনি Linux ব্যবহার করেন, তবে দয়া করে নিশ্চিত হউন যে আপনার কোনও সিক্রেট-সার্ভিস gnome-keyring, kde-wallet, keepassxc ইত্যাদি ইনস্টল করা আছে';
String get encryption_failed_warning =>
'Spotube আপনার তথ্যগুলি নিরাপদভাবে স্টোর করতে এনক্রিপশন ব্যবহার করে। কিন্তু এটি ব্যর্থ হয়েছে। তাই এটি অনিরাপদ স্টোরে ফলফল হবে\nযদি আপনি Linux ব্যবহার করেন, তবে দয়া করে নিশ্চিত হউন যে আপনার কোনও সিক্রেট-সার্ভিস gnome-keyring, kde-wallet, keepassxc ইত্যাদি ইনস্টল করা আছে';
@override
String get querying_info => 'তথ্য অনুসন্ধান করা হচ্ছে';
@ -922,7 +900,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get login => 'লগইন';
@override
String get login_with_your_lastfm => 'আপনার Last.fm অ্যাকাউন্ট দিয়ে লগইন করুন';
String get login_with_your_lastfm =>
'আপনার Last.fm অ্যাকাউন্ট দিয়ে লগইন করুন';
@override
String get scrobble_to_lastfm => 'Last.fm এ স্ক্রবল করুন';
@ -946,7 +925,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get friends => 'বন্ধু';
@override
String get no_lyrics_available => 'দুঃখিত, এই ট্র্যাকের জন্য কথা খুঁজে পাওয়া গেলনা';
String get no_lyrics_available =>
'দুঃখিত, এই ট্র্যাকের জন্য কথা খুঁজে পাওয়া গেলনা';
@override
String get start_a_radio => 'রেডিও শুরু করুন';
@ -955,7 +935,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get how_to_start_radio => 'রেডিও কিভাবে শুরু করতে চান?';
@override
String get replace_queue_question => 'আপনি বর্তমান কিউটি প্রতিস্থাপন করতে চান কিনা বা এর সাথে যুক্ত করতে চান?';
String get replace_queue_question =>
'আপনি বর্তমান কিউটি প্রতিস্থাপন করতে চান কিনা বা এর সাথে যুক্ত করতে চান?';
@override
String get endless_playback => 'অবিরাম প্রচার';
@ -964,7 +945,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get delete_playlist => 'প্লেলিস্ট মুছুন';
@override
String get delete_playlist_confirmation => 'আপনি কি নিশ্চিত যে আপনি এই প্লেলিস্টটি মুছতে চান?';
String get delete_playlist_confirmation =>
'আপনি কি নিশ্চিত যে আপনি এই প্লেলিস্টটি মুছতে চান?';
@override
String get local_tracks => 'স্থানীয় ট্র্যাক';
@ -997,7 +979,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get jiosaavn_source_description => 'দক্ষিণ এশিয়ান অঞ্চলের জন্য সেরা।';
@override
String get invidious_source_description => 'পাইপের মতো কিন্তু আরও বেশি উপলব্ধতা সহ';
String get invidious_source_description =>
'পাইপের মতো কিন্তু আরও বেশি উপলব্ধতা সহ';
@override
String highest_quality(Object quality) {
@ -1008,13 +991,15 @@ class AppLocalizationsBn extends AppLocalizations {
String get select_audio_source => 'অডিও উৎস নির্বাচন করুন';
@override
String get endless_playback_description => 'নতুন গান নিজে নিজে প্লেলিস্টের শেষে\nসংযুক্ত করুন';
String get endless_playback_description =>
'নতুন গান নিজে নিজে প্লেলিস্টের শেষে\nসংযুক্ত করুন';
@override
String get choose_your_region => 'আপনার অঞ্চল নির্বাচন করুন';
@override
String get choose_your_region_description => 'এটি স্পটুবে আপনাকে আপনার অবস্থানের জন্য ঠিক কন্টেন্ট দেখানোর সাহায্য করবে।';
String get choose_your_region_description =>
'এটি স্পটুবে আপনাকে আপনার অবস্থানের জন্য ঠিক কন্টেন্ট দেখানোর সাহায্য করবে।';
@override
String get choose_your_language => 'আপনার ভাষা নির্বাচন করুন';
@ -1023,7 +1008,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get help_project_grow => 'এই প্রকল্পের বৃদ্ধি করুন';
@override
String get help_project_grow_description => 'স্পটুব একটি ওপেন সোর্স প্রকল্প। আপনি প্রকল্পে অবদান রাখেন, বাগ রিপোর্ট করেন, বা নতুন বৈশিষ্ট্যগুলি সুপারিশ করেন।';
String get help_project_grow_description =>
'স্পটুব একটি ওপেন সোর্স প্রকল্প। আপনি প্রকল্পে অবদান রাখেন, বাগ রিপোর্ট করেন, বা নতুন বৈশিষ্ট্যগুলি সুপারিশ করেন।';
@override
String get contribute_on_github => 'গিটহাবে অবদান রাখুন';
@ -1038,7 +1024,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get enable_connect => 'সংযোগ সক্রিয় করুন';
@override
String get enable_connect_description => 'অন্যান্য ডিভাইস থেকে Spotube নিয়ন্ত্রণ করুন';
String get enable_connect_description =>
'অন্যান্য ডিভাইস থেকে Spotube নিয়ন্ত্রণ করুন';
@override
String get devices => 'ডিভাইস';
@ -1117,7 +1104,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get choose_the_device => 'ডিভাইস নির্বাচন করুন:';
@override
String get multiple_device_connected => 'একাধিক ডিভাইস সংযুক্ত রয়েছে।\nযে ডিভাইসে আপনি এই ক্রিয়াটি চালাতে চান সেটি নির্বাচন করুন';
String get multiple_device_connected =>
'একাধিক ডিভাইস সংযুক্ত রয়েছে।\nযে ডিভাইসে আপনি এই ক্রিয়াটি চালাতে চান সেটি নির্বাচন করুন';
@override
String get nothing_found => 'কিছুই পাওয়া যায়নি';
@ -1212,7 +1200,8 @@ class AppLocalizationsBn extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*এটি স্পোটিফাইয়ের প্রতি স্ট্রিম\n\$0.003 থেকে \$0.005 পেআউটের ভিত্তিতে গণনা করা হয়েছে। এটি একটি ধারণাগত\nগণনা ব্যবহারকারীদেরকে জানাতে দেয় যে কত টাকা\nতারা শিল্পীদের দিতো যদি তারা স্পোটিফাইতে\nতাদের গান শুনতেন।';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1250,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get webview_not_found => 'ওয়েবভিউ পাওয়া যায়নি';
@override
String get webview_not_found_description => 'আপনার ডিভাইসে কোনো ওয়েবভিউ রানটাইম ইনস্টল করা নেই।\nযদি ইনস্টল থাকে, তা নিশ্চিত করুন যে এটি environment PATH এ রয়েছে\n\nইনস্টল করার পর, অ্যাপটি পুনরায় চালু করুন';
String get webview_not_found_description =>
'আপনার ডিভাইসে কোনো ওয়েবভিউ রানটাইম ইনস্টল করা নেই।\nযদি ইনস্টল থাকে, তা নিশ্চিত করুন যে এটি environment PATH এ রয়েছে\n\nইনস্টল করার পর, অ্যাপটি পুনরায় চালু করুন';
@override
String get unsupported_platform => 'সমর্থিত প্ল্যাটফর্ম নয়';
@ -1293,7 +1283,8 @@ class AppLocalizationsBn extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'আপনি কি এই ফাইলগুলি রপ্তানি করতে চান';
String get export_cache_confirmation =>
'আপনি কি এই ফাইলগুলি রপ্তানি করতে চান';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1334,7 +1325,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get not_following_artists => 'আপনি কোনো শিল্পীকে অনুসরণ করছেন না';
@override
String get no_favorite_albums_yet => 'এখনও কোনো অ্যালবাম প্রিয় তালিকায় যোগ করা হয়নি মনে হচ্ছে';
String get no_favorite_albums_yet =>
'এখনও কোনো অ্যালবাম প্রিয় তালিকায় যোগ করা হয়নি মনে হচ্ছে';
@override
String get no_logs_found => 'কোনো লগ পাওয়া যায়নি';
@ -1358,7 +1350,8 @@ class AppLocalizationsBn extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/Unix-এর মতো অপারেটিং সিস্টেমে, .zshrc/.bashrc/.bash_profile ইত্যাদিতে পাথ সেট করা কাজ করবে না।\nআপনাকে শেল কনফিগারেশন ফাইলে পাথ সেট করতে হবে';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/Unix-এর মতো অপারেটিং সিস্টেমে, .zshrc/.bashrc/.bash_profile ইত্যাদিতে পাথ সেট করা কাজ করবে না।\nআপনাকে শেল কনফিগারেশন ফাইলে পাথ সেট করতে হবে';
@override
String get download => 'ডাউনলোড';
@ -1376,7 +1369,8 @@ class AppLocalizationsBn extends AppLocalizations {
String get edit_port => 'পোর্ট সম্পাদনা করুন';
@override
String get port_helper_msg => 'ডিফল্ট হল -1 যা এলোমেলো সংখ্যা নির্দেশ করে। যদি আপনার ফায়ারওয়াল কনফিগার করা থাকে, তবে এটি সেট করা সুপারিশ করা হয়।';
String get port_helper_msg =>
'ডিফল্ট হল -1 যা এলোমেলো সংখ্যা নির্দেশ করে। যদি আপনার ফায়ারওয়াল কনফিগার করা থাকে, তবে এটি সেট করা সুপারিশ করা হয়।';
@override
String connect_request(Object client) {
@ -1384,5 +1378,6 @@ class AppLocalizationsBn extends AppLocalizations {
}
@override
String get connection_request_denied => 'সংযোগ অস্বীকৃত। ব্যবহারকারী প্রবেশাধিকার অস্বীকার করেছে।';
String get connection_request_denied =>
'সংযোগ অস্বীকৃত। ব্যবহারকারী প্রবেশাধিকার অস্বীকার করেছে।';
}

View File

@ -356,7 +356,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get clear_all => 'Netejar tot';
@override
String get show_hide_ui_on_hover => 'Mostrar/Ocultar interfície al passar el cursor';
String get show_hide_ui_on_hover =>
'Mostrar/Ocultar interfície al passar el cursor';
@override
String get always_on_top => 'Sempre visible';
@ -379,12 +380,6 @@ class AppLocalizationsCa extends AppLocalizations {
@override
String get account => 'Compte';
@override
String get login_with_spotify => 'Iniciar sesión amb el seu compte de Spotify';
@override
String get connect_with_spotify => 'Connectar amb Spotify';
@override
String get logout => 'Tancar sessió';
@ -413,7 +408,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get layout_mode => 'Mode de disseny';
@override
String get override_layout_settings => 'Anul·leu la configuració del mode de disseny responsiu';
String get override_layout_settings =>
'Anul·leu la configuració del mode de disseny responsiu';
@override
String get adaptive => 'Adaptable';
@ -443,7 +439,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get sync_album_color => 'Sincronitzar color de l\'àlbum';
@override
String get sync_album_color_description => 'Utilitza el color dominant de l\'álbum com a color d\'accent';
String get sync_album_color_description =>
'Utilitza el color dominant de l\'álbum com a color d\'accent';
@override
String get playback => 'Reproducció';
@ -461,16 +458,19 @@ class AppLocalizationsCa extends AppLocalizations {
String get pre_download_play => 'Descàrrega prèvia i reproduir';
@override
String get pre_download_play_description => 'En lloc de transmetre l\'àudio, descarrega bytes i ho reprodueix (recomendat per usuaris amb un bon ample de banda)';
String get pre_download_play_description =>
'En lloc de transmetre l\'àudio, descarrega bytes i ho reprodueix (recomendat per usuaris amb un bon ample de banda)';
@override
String get skip_non_music => 'Ometre segments que no son música (SponsorBlock)';
String get skip_non_music =>
'Ometre segments que no son música (SponsorBlock)';
@override
String get blacklist_description => 'Cançons i artistes de la llista negra';
@override
String get wait_for_download_to_finish => 'Si us plau, esperi que acabi la descàrrega actual';
String get wait_for_download_to_finish =>
'Si us plau, esperi que acabi la descàrrega actual';
@override
String get desktop => 'Escriptori';
@ -506,7 +506,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get please_sponsor => 'Si us plau, patrocina/dona';
@override
String get spotube_description => 'Spotube, un client lleuger, multiplataforma i gratuït de Spotify';
String get spotube_description =>
'Spotube, un client lleuger, multiplataforma i gratuït de Spotify';
@override
String get version => 'Versió';
@ -538,10 +539,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get license => 'Llicència';
@override
String get add_spotify_credentials => 'Afegir les seves credencials de Spotify per començar';
@override
String get credentials_will_not_be_shared_disclaimer => 'No es preocupi, les seves credencials no seran recollides ni compartides amb ningú';
String get credentials_will_not_be_shared_disclaimer =>
'No es preocupi, les seves credencials no seran recollides ni compartides amb ningú';
@override
String get know_how_to_login => 'No sap com fer-ho?';
@ -549,11 +548,6 @@ class AppLocalizationsCa extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Segueixi la guia pas a pas';
@override
String spotify_cookie(Object name) {
return 'Cookie de Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Cookie $name';
@ -583,33 +577,6 @@ class AppLocalizationsCa extends AppLocalizations {
@override
String get first_go_to => 'Primer, vagi a';
@override
String get login_if_not_logged_in => 'i iniciï sessió/registri el seu compte si no ho ha fet encara';
@override
String get step_2 => 'Pas 2';
@override
String get step_2_steps => '1. Una vegada que hagi iniciat sessió, premi F12 o faci clic dret amb el ratolí > Inspeccionar per obrir les eines de desenvolulpador del navegador.\n2. Després vagi a la pestanya \"Application\" (Chrome, Edge, Brave, etc.) o \"Storage\" (Firefox, Palemoon, etc.)\n3. Vagi a la secció \"Cookies\" i després a la subsecció \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Pas 3';
@override
String get step_3_steps => 'Copia el valor de la cookie \"sp_dc\"';
@override
String get success_emoji => 'Èxit! 🥳';
@override
String get success_message => 'Ara has iniciat sessió amb èxit al teu compte de Spotify. Bona feina!';
@override
String get step_4 => 'Pas 4';
@override
String get step_4_steps => 'Pega el valor copiado de \"sp_dc\"';
@override
String get something_went_wrong => 'Quelcom ha sortit malament';
@ -617,19 +584,23 @@ class AppLocalizationsCa extends AppLocalizations {
String get piped_instance => 'Instància del servidor Piped';
@override
String get piped_description => 'La instància del servidor Piped a utilitzar per la coincidència de cançons';
String get piped_description =>
'La instància del servidor Piped a utilitzar per la coincidència de cançons';
@override
String get piped_warning => 'Algunes poden no funcionar bé, utilitzi-les sota el seu propi risc';
String get piped_warning =>
'Algunes poden no funcionar bé, utilitzi-les sota el seu propi risc';
@override
String get invidious_instance => 'Instància del servidor Invidious';
@override
String get invidious_description => 'La instància del servidor Invidious per fer coincidir pistes';
String get invidious_description =>
'La instància del servidor Invidious per fer coincidir pistes';
@override
String get invidious_warning => 'Algunes instàncies podrien no funcionar bé. Feu-les servir sota la vostra responsabilitat';
String get invidious_warning =>
'Algunes instàncies podrien no funcionar bé. Feu-les servir sota la vostra responsabilitat';
@override
String get generate => 'Generar';
@ -640,10 +611,12 @@ class AppLocalizationsCa extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'Substituir totes les cançons descarregades';
String get replace_downloaded_tracks =>
'Substituir totes les cançons descarregades';
@override
String get skip_download_tracks => 'Ometre la descàrrega de totes les cançons descarregades';
String get skip_download_tracks =>
'Ometre la descàrrega de totes les cançons descarregades';
@override
String get do_you_want_to_replace => 'Vol substituir la cançó existent?';
@ -744,7 +717,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get are_you_sure => 'Està segur?';
@override
String get generating_playlist => 'Generant la seva llista de reproducció personalitzada...';
String get generating_playlist =>
'Generant la seva llista de reproducció personalitzada...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +726,28 @@ class AppLocalizationsCa extends AppLocalizations {
}
@override
String get download_warning => 'Si descarrega totes les cançons de cop, està piratejant música clarament i causant dany a la societat creativa de la música. Espero que sigui conscient d\'això i sempre intenti respectar i recolzar la forta feina dels artístes';
String get download_warning =>
'Si descarrega totes les cançons de cop, està piratejant música clarament i causant dany a la societat creativa de la música. Espero que sigui conscient d\'això i sempre intenti respectar i recolzar la forta feina dels artístes';
@override
String get download_ip_ban_warning => 'Per cert, la seva IP pot ser bloquejada a YouTube degut a solicituds de descàrrega excessives. El bloqueig d\'IP vol dir que no podrà utilitzar YouTube (fins i tot si ha iniciat sessió) durant un mínim de 2-3 meses desde esa dirección IP. I Spotube no es fa responsable si això succeeix en alguna ocasió';
String get download_ip_ban_warning =>
'Per cert, la seva IP pot ser bloquejada a YouTube degut a solicituds de descàrrega excessives. El bloqueig d\'IP vol dir que no podrà utilitzar YouTube (fins i tot si ha iniciat sessió) durant un mínim de 2-3 meses desde esa dirección IP. I Spotube no es fa responsable si això succeeix en alguna ocasió';
@override
String get by_clicking_accept_terms => 'Al fer clic a \'Acceptar\', acepta els següents termes:';
String get by_clicking_accept_terms =>
'Al fer clic a \'Acceptar\', acepta els següents termes:';
@override
String get download_agreement_1 => 'Se que estic piratejant música. Sóc dolent';
String get download_agreement_1 =>
'Se que estic piratejant música. Sóc dolent';
@override
String get download_agreement_2 => 'Recolzaré l\'artista quan pugui i només ho faig perquè no tinc diners per comprar el seu art';
String get download_agreement_2 =>
'Recolzaré l\'artista quan pugui i només ho faig perquè no tinc diners per comprar el seu art';
@override
String get download_agreement_3 => 'Sóc completament conscient que la meva IP pot ser bloqueada per YouTube i no responsabilizo a Spotube ni als seus propietaris/contribuents per qualsevol incident causat per la meva acció actual';
String get download_agreement_3 =>
'Sóc completament conscient que la meva IP pot ser bloqueada per YouTube i no responsabilizo a Spotube ni als seus propietaris/contribuents per qualsevol incident causat per la meva acció actual';
@override
String get decline => 'Rebutjar';
@ -848,7 +828,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get failed_to_encrypt => 'Error al xifrar';
@override
String get encryption_failed_warning => 'Spotube utilitza el xifrado per emmagatzemar les seves dades de forma segura. Però ha fallat. Per tant, tornarà a un emmagatzament no segur\nSi estè utilizant Linux, asseguri\'s de tenir instal·lats els serveis secrets com gnome-keyring, kde-wallet i keepassxc';
String get encryption_failed_warning =>
'Spotube utilitza el xifrado per emmagatzemar les seves dades de forma segura. Però ha fallat. Per tant, tornarà a un emmagatzament no segur\nSi estè utilizant Linux, asseguri\'s de tenir instal·lats els serveis secrets com gnome-keyring, kde-wallet i keepassxc';
@override
String get querying_info => 'Consultant informació...';
@ -922,7 +903,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get login => 'Inicia la sessió';
@override
String get login_with_your_lastfm => 'Inicia la sessió amb el teu compte de Last.fm';
String get login_with_your_lastfm =>
'Inicia la sessió amb el teu compte de Last.fm';
@override
String get scrobble_to_lastfm => 'Scrobble a Last.fm';
@ -946,7 +928,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get friends => 'Amics';
@override
String get no_lyrics_available => 'Ho sentim, no es poden trobar les lletres d\'aquesta pista';
String get no_lyrics_available =>
'Ho sentim, no es poden trobar les lletres d\'aquesta pista';
@override
String get start_a_radio => 'Inicia una ràdio';
@ -955,7 +938,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get how_to_start_radio => 'Com vols començar la ràdio?';
@override
String get replace_queue_question => 'Voleu substituir la cua actual o afegir-hi?';
String get replace_queue_question =>
'Voleu substituir la cua actual o afegir-hi?';
@override
String get endless_playback => 'Reproducció infinita';
@ -964,7 +948,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get delete_playlist => 'Suprimeix la llista de reproducció';
@override
String get delete_playlist_confirmation => 'Esteu segur que voleu suprimir aquesta llista de reproducció?';
String get delete_playlist_confirmation =>
'Esteu segur que voleu suprimir aquesta llista de reproducció?';
@override
String get local_tracks => 'Pistes locals';
@ -982,7 +967,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get freedom_of_music => '“Llibertat de la música”';
@override
String get freedom_of_music_palm => '“Llibertat de la música a la palma de la mà”';
String get freedom_of_music_palm =>
'“Llibertat de la música a la palma de la mà”';
@override
String get get_started => 'Comencem';
@ -991,13 +977,16 @@ class AppLocalizationsCa extends AppLocalizations {
String get youtube_source_description => 'Recomanat i funciona millor.';
@override
String get piped_source_description => 'Et sents lliure? El mateix que YouTube però més lliure.';
String get piped_source_description =>
'Et sents lliure? El mateix que YouTube però més lliure.';
@override
String get jiosaavn_source_description => 'El millor per a la regió del sud d\'Àsia.';
String get jiosaavn_source_description =>
'El millor per a la regió del sud d\'Àsia.';
@override
String get invidious_source_description => 'Similar a Piped però amb més disponibilitat';
String get invidious_source_description =>
'Similar a Piped però amb més disponibilitat';
@override
String highest_quality(Object quality) {
@ -1008,13 +997,15 @@ class AppLocalizationsCa extends AppLocalizations {
String get select_audio_source => 'Seleccioneu la font d\'àudio';
@override
String get endless_playback_description => 'Afegiu automàticament noves cançons\nal final de la cua';
String get endless_playback_description =>
'Afegiu automàticament noves cançons\nal final de la cua';
@override
String get choose_your_region => 'Trieu la vostra regió';
@override
String get choose_your_region_description => 'Això ajudarà a Spotube a mostrar-vos el contingut adequat\nper a la vostra ubicació.';
String get choose_your_region_description =>
'Això ajudarà a Spotube a mostrar-vos el contingut adequat\nper a la vostra ubicació.';
@override
String get choose_your_language => 'Trieu el vostre idioma';
@ -1023,7 +1014,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get help_project_grow => 'Ajuda a fer créixer aquest projecte';
@override
String get help_project_grow_description => 'Spotube és un projecte de codi obert. Podeu ajudar a fer créixer aquest projecte contribuint al projecte, informant d\'errors o suggerint noves funcionalitats.';
String get help_project_grow_description =>
'Spotube és un projecte de codi obert. Podeu ajudar a fer créixer aquest projecte contribuint al projecte, informant d\'errors o suggerint noves funcionalitats.';
@override
String get contribute_on_github => 'Contribueix a GitHub';
@ -1038,7 +1030,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get enable_connect => 'Habilita la connexió';
@override
String get enable_connect_description => 'Controla Spotube des d\'altres dispositius';
String get enable_connect_description =>
'Controla Spotube des d\'altres dispositius';
@override
String get devices => 'Dispositius';
@ -1117,7 +1110,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get choose_the_device => 'Tria el dispositiu:';
@override
String get multiple_device_connected => 'Hi ha diversos dispositius connectats.\nTria el dispositiu on vols realitzar aquesta acció';
String get multiple_device_connected =>
'Hi ha diversos dispositius connectats.\nTria el dispositiu on vols realitzar aquesta acció';
@override
String get nothing_found => 'No s\'ha trobat res';
@ -1190,7 +1184,8 @@ class AppLocalizationsCa extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => 'Comissions de streaming (hipotètic)';
String get streaming_fees_hypothetical =>
'Comissions de streaming (hipotètic)';
@override
String get minutes_listened => 'minuts escoltats';
@ -1212,7 +1207,8 @@ class AppLocalizationsCa extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Això es calcula basant-se en els\npagaments per reproducció de Spotify de \$0.003 a \$0.005.\nAquest és un càlcul hipotètic per\ndonar als usuaris una idea de quant\nhaurien pagat als artistes si haguessin escoltat\nla seva cançó a Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1257,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get webview_not_found => 'No s\'ha trobat el Webview';
@override
String get webview_not_found_description => 'No hi ha cap temps d\'execució de Webview instal·lat al dispositiu.\nSi està instal·lat, assegureu-vos que estigui en el environment PATH\n\nDesprés d\'instal·lar-lo, reinicieu l\'aplicació';
String get webview_not_found_description =>
'No hi ha cap temps d\'execució de Webview instal·lat al dispositiu.\nSi està instal·lat, assegureu-vos que estigui en el environment PATH\n\nDesprés d\'instal·lar-lo, reinicieu l\'aplicació';
@override
String get unsupported_platform => 'Plataforma no compatible';
@ -1334,7 +1331,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get not_following_artists => 'No estàs seguint cap artista';
@override
String get no_favorite_albums_yet => 'Sembla que encara no has afegit cap àlbum als teus favorits';
String get no_favorite_albums_yet =>
'Sembla que encara no has afegit cap àlbum als teus favorits';
@override
String get no_logs_found => 'No s\'han trobat registres';
@ -1358,7 +1356,8 @@ class AppLocalizationsCa extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'En macOS/Linux/Unix com a sistemes operatius, establir el camí a .zshrc/.bashrc/.bash_profile etc. no funcionarà.\nHas de configurar el camí al fitxer de configuració de la shell';
String get youtube_engine_unix_issue_message =>
'En macOS/Linux/Unix com a sistemes operatius, establir el camí a .zshrc/.bashrc/.bash_profile etc. no funcionarà.\nHas de configurar el camí al fitxer de configuració de la shell';
@override
String get download => 'Descarregar';
@ -1376,7 +1375,8 @@ class AppLocalizationsCa extends AppLocalizations {
String get edit_port => 'Editar port';
@override
String get port_helper_msg => 'El valor per defecte és -1, que indica un número aleatori. Si teniu un tallafoc configurat, es recomana establir-ho.';
String get port_helper_msg =>
'El valor per defecte és -1, que indica un número aleatori. Si teniu un tallafoc configurat, es recomana establir-ho.';
@override
String connect_request(Object client) {
@ -1384,5 +1384,6 @@ class AppLocalizationsCa extends AppLocalizations {
}
@override
String get connection_request_denied => 'Connexió denegada. L\'usuari ha denegat l\'accés.';
String get connection_request_denied =>
'Connexió denegada. L\'usuari ha denegat l\'accés.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsCs extends AppLocalizations {
@override
String get account => 'Účet';
@override
String get login_with_spotify => 'Přihlásit se pomocí Spotify účtu';
@override
String get connect_with_spotify => 'Připojit k Spotify';
@override
String get logout => 'Odhlásit se';
@ -443,7 +437,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get sync_album_color => 'Synchronizovat barvu alba';
@override
String get sync_album_color_description => 'Používá dominantní barvu obalu alba jako barvu akcentu';
String get sync_album_color_description =>
'Používá dominantní barvu obalu alba jako barvu akcentu';
@override
String get playback => 'Přehrávání';
@ -461,7 +456,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get pre_download_play => 'Předstáhnout a přehrát';
@override
String get pre_download_play_description => 'Místo streamování audia stáhnout skladbu a přehrát (doporučeno pro uživatele s rychlejším internetem)';
String get pre_download_play_description =>
'Místo streamování audia stáhnout skladbu a přehrát (doporučeno pro uživatele s rychlejším internetem)';
@override
String get skip_non_music => 'Přeskočit nehudební segmenty (SponsorBlock)';
@ -506,7 +502,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get please_sponsor => 'Sponzorovat/darovat';
@override
String get spotube_description => 'Spotube, rychlý, multiplatformní, bezplatný Spotify klient';
String get spotube_description =>
'Spotube, rychlý, multiplatformní, bezplatný Spotify klient';
@override
String get version => 'Verze';
@ -538,10 +535,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get license => 'Licence';
@override
String get add_spotify_credentials => 'Přidejte své přihlašovací údaje Spotify a začněte';
@override
String get credentials_will_not_be_shared_disclaimer => 'Nebojte, žádné z vašich údajů nebudou shromažďovány ani s nikým sdíleny';
String get credentials_will_not_be_shared_disclaimer =>
'Nebojte, žádné z vašich údajů nebudou shromažďovány ani s nikým sdíleny';
@override
String get know_how_to_login => 'Nevíte, jak na to?';
@ -549,11 +544,6 @@ class AppLocalizationsCs extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Postupujte podle návodu';
@override
String spotify_cookie(Object name) {
return 'Cookie Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Cookie $name';
@ -583,33 +573,6 @@ class AppLocalizationsCs extends AppLocalizations {
@override
String get first_go_to => 'Nejprve jděte na';
@override
String get login_if_not_logged_in => 'a přihlašte se nebo se zaregistrujte, pokud nejste přihlášeni';
@override
String get step_2 => 'Krok 2';
@override
String get step_2_steps => '1. Jakmile jste přihlášeni, stiskněte F12 nebo pravé tlačítko myši > Prozkoumat, abyste otevřeli nástroje pro vývojáře prohlížeče.\n2. Poté přejděte na kartu \"Aplikace\" (Chrome, Edge, Brave atd.) nebo kartu \"Úložiště\" (Firefox, Palemoon atd.)\n3. Přejděte do sekce \"Cookies\" a pak do podsekce \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Krok 3';
@override
String get step_3_steps => 'Zkopírujte hodnotu cookie \"sp_dc\"';
@override
String get success_emoji => 'Úspěch🥳';
@override
String get success_message => 'Nyní jste úspěšně přihlášeni pomocí svého Spotify účtu. Dobrá práce, kamaráde!';
@override
String get step_4 => 'Krok 4';
@override
String get step_4_steps => 'Vložte zkopírovanou hodnotu \"sp_dc\"';
@override
String get something_went_wrong => 'Něco se pokazilo';
@ -617,19 +580,23 @@ class AppLocalizationsCs extends AppLocalizations {
String get piped_instance => 'Instance serveru Piped';
@override
String get piped_description => 'Instance serveru Piped, kterou použít pro hledání skladeb';
String get piped_description =>
'Instance serveru Piped, kterou použít pro hledání skladeb';
@override
String get piped_warning => 'Některé z nich nemusí dobře fungovat. Používejte na vlastní riziko';
String get piped_warning =>
'Některé z nich nemusí dobře fungovat. Používejte na vlastní riziko';
@override
String get invidious_instance => 'Instance serveru Invidious';
@override
String get invidious_description => 'Instance serveru Invidious pro párování stop';
String get invidious_description =>
'Instance serveru Invidious pro párování stop';
@override
String get invidious_warning => 'Některé instance nemusí fungovat správně. Používejte na vlastní riziko';
String get invidious_warning =>
'Některé instance nemusí fungovat správně. Používejte na vlastní riziko';
@override
String get generate => 'Generovat';
@ -643,7 +610,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get replace_downloaded_tracks => 'Nahradit všechny stažené skladby';
@override
String get skip_download_tracks => 'Přeskočit stahování všech stažených skladeb';
String get skip_download_tracks =>
'Přeskočit stahování všech stažených skladeb';
@override
String get do_you_want_to_replace => 'Chcete nahradit existující skladbu??';
@ -752,22 +720,27 @@ class AppLocalizationsCs extends AppLocalizations {
}
@override
String get download_warning => 'Pokud stáhnete všechny skladby najednou, pirátíte tím hudbu a škodíte kreativní společnosti hudby. Doufám, že jste si toho vědomi. Vždy se snažte respektovat a podporovat tvrdou práci umělců';
String get download_warning =>
'Pokud stáhnete všechny skladby najednou, pirátíte tím hudbu a škodíte kreativní společnosti hudby. Doufám, že jste si toho vědomi. Vždy se snažte respektovat a podporovat tvrdou práci umělců';
@override
String get download_ip_ban_warning => 'Mimochodem, vaše IP může být na YouTube zablokována kvůli nadměrným požadavkům na stahování. Blokování IP znamená, že nemůžete používat YouTube (i když jste přihlášeni) alespoň 2-3 měsíce ze zařízení s touto IP. A Spotube nenese žádnou odpovědnost, pokud se to někdy stane';
String get download_ip_ban_warning =>
'Mimochodem, vaše IP může být na YouTube zablokována kvůli nadměrným požadavkům na stahování. Blokování IP znamená, že nemůžete používat YouTube (i když jste přihlášeni) alespoň 2-3 měsíce ze zařízení s touto IP. A Spotube nenese žádnou odpovědnost, pokud se to někdy stane';
@override
String get by_clicking_accept_terms => 'Kliknutím na \'přijmout\' souhlasíte s následujícími podmínkami:';
String get by_clicking_accept_terms =>
'Kliknutím na \'přijmout\' souhlasíte s následujícími podmínkami:';
@override
String get download_agreement_1 => 'Vím, že pirátím hudbu. Jsem špatný';
@override
String get download_agreement_2 => 'Budu podporovat umělce, kdekoliv to bude možné, a dělám to jen proto, že nemám peníze na koupi jejich umění';
String get download_agreement_2 =>
'Budu podporovat umělce, kdekoliv to bude možné, a dělám to jen proto, že nemám peníze na koupi jejich umění';
@override
String get download_agreement_3 => 'Jsem si naprosto vědom toho, že moje IP může být na YouTube zablokována a nenesu žádnou odpovědnost za nehody způsobené mým současným jednáním';
String get download_agreement_3 =>
'Jsem si naprosto vědom toho, že moje IP může být na YouTube zablokována a nenesu žádnou odpovědnost za nehody způsobené mým současným jednáním';
@override
String get decline => 'Odmítnout';
@ -848,7 +821,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get failed_to_encrypt => 'Šifrování selhalo';
@override
String get encryption_failed_warning => 'Spotube používá šifrování k bezpečnému ukládání vašich dat. Ale selhalo. Takže se vrátí k nezabezpečenému úložišti\nPokud používáte linux, ujistěte se, že máte nainstalovanou jakoukoli službu k ukládání bezpečnostních pověření (gnome-keyring, kde-wallet, keepassxc atd.)';
String get encryption_failed_warning =>
'Spotube používá šifrování k bezpečnému ukládání vašich dat. Ale selhalo. Takže se vrátí k nezabezpečenému úložišti\nPokud používáte linux, ujistěte se, že máte nainstalovanou jakoukoli službu k ukládání bezpečnostních pověření (gnome-keyring, kde-wallet, keepassxc atd.)';
@override
String get querying_info => 'Získávání informací...';
@ -922,7 +896,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get login => 'Přihlásit se';
@override
String get login_with_your_lastfm => 'Přihlásit se pomocí vašeho Last.fm účtu';
String get login_with_your_lastfm =>
'Přihlásit se pomocí vašeho Last.fm účtu';
@override
String get scrobble_to_lastfm => 'Scrobble na Last.fm';
@ -946,7 +921,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get friends => 'Přátelé';
@override
String get no_lyrics_available => 'Omlouváme se, není možné najít texty pro tuto skladbu';
String get no_lyrics_available =>
'Omlouváme se, není možné najít texty pro tuto skladbu';
@override
String get start_a_radio => 'Vytvořit rádio';
@ -955,7 +931,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get how_to_start_radio => 'Jak chcete vytvořit rádio?';
@override
String get replace_queue_question => 'Chcete nahradit aktuální frontu nebo k ní přidat?';
String get replace_queue_question =>
'Chcete nahradit aktuální frontu nebo k ní přidat?';
@override
String get endless_playback => 'Nekonečné přehrávání';
@ -964,7 +941,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get delete_playlist => 'Smazat playlist';
@override
String get delete_playlist_confirmation => 'Jste si jisti, že chcete smazat tento playlist?';
String get delete_playlist_confirmation =>
'Jste si jisti, že chcete smazat tento playlist?';
@override
String get local_tracks => 'Místní skladby';
@ -991,13 +969,15 @@ class AppLocalizationsCs extends AppLocalizations {
String get youtube_source_description => 'Doporučeno a funguje nejlépe.';
@override
String get piped_source_description => 'Nechcete být sledováni? Stejné jako YouTube, ale respektuje soukromí.';
String get piped_source_description =>
'Nechcete být sledováni? Stejné jako YouTube, ale respektuje soukromí.';
@override
String get jiosaavn_source_description => 'Nejlepší pro jihoasijský region.';
@override
String get invidious_source_description => 'Podobné Piped, ale s vyšší dostupností';
String get invidious_source_description =>
'Podobné Piped, ale s vyšší dostupností';
@override
String highest_quality(Object quality) {
@ -1008,13 +988,15 @@ class AppLocalizationsCs extends AppLocalizations {
String get select_audio_source => 'Vyberte zdroj zvuku';
@override
String get endless_playback_description => 'Automaticky přidávat nové skladby\nna konec fronty';
String get endless_playback_description =>
'Automaticky přidávat nové skladby\nna konec fronty';
@override
String get choose_your_region => 'Vyberte svůj region';
@override
String get choose_your_region_description => 'To pomůže Spotube ukázat vám správný obsah\npro vaši lokalitu.';
String get choose_your_region_description =>
'To pomůže Spotube ukázat vám správný obsah\npro vaši lokalitu.';
@override
String get choose_your_language => 'Vyberte svůj jazyk';
@ -1023,7 +1005,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get help_project_grow => 'Pomozte tomuto projektu růst';
@override
String get help_project_grow_description => 'Spotube je open-source projekt. Můžete pomoci tomuto projektu růst tím, že přispějete do projektu, nahlásíte chyby nebo navrhnete nové funkce.';
String get help_project_grow_description =>
'Spotube je open-source projekt. Můžete pomoci tomuto projektu růst tím, že přispějete do projektu, nahlásíte chyby nebo navrhnete nové funkce.';
@override
String get contribute_on_github => 'Přispějte na GitHub';
@ -1038,7 +1021,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get enable_connect => 'Povolit ovládání';
@override
String get enable_connect_description => 'Ovládejte Spotube z jiného zařízení';
String get enable_connect_description =>
'Ovládejte Spotube z jiného zařízení';
@override
String get devices => 'Zařízení';
@ -1117,7 +1101,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get choose_the_device => 'Vyberte zařízení:';
@override
String get multiple_device_connected => 'Je připojeno více zařízení.\nVyberte zařízení, na kterém chcete provést tuto akci';
String get multiple_device_connected =>
'Je připojeno více zařízení.\nVyberte zařízení, na kterém chcete provést tuto akci';
@override
String get nothing_found => 'Nic nenalezeno';
@ -1190,7 +1175,8 @@ class AppLocalizationsCs extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => 'Poplatky za streamování (hypotetické)';
String get streaming_fees_hypothetical =>
'Poplatky za streamování (hypotetické)';
@override
String get minutes_listened => 'Poslouchané minuty';
@ -1212,7 +1198,8 @@ class AppLocalizationsCs extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Toto je vypočítáno na základě výplaty\nza stream Spotify od \$0.003 do \$0.005.\nToto je hypotetický výpočet,\nabyste měli představu o tom, kolik\nbyste zaplatili umělcům,\npokud byste poslouchali jejich píseň na Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1248,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get webview_not_found => 'Webview nebyl nalezen';
@override
String get webview_not_found_description => 'Na vašem zařízení není nainstalováno žádné runtime prostředí Webview.\nPokud je nainstalováno, ujistěte se, že je v environment PATH\n\nPo instalaci restartujte aplikaci';
String get webview_not_found_description =>
'Na vašem zařízení není nainstalováno žádné runtime prostředí Webview.\nPokud je nainstalováno, ujistěte se, že je v environment PATH\n\nPo instalaci restartujte aplikaci';
@override
String get unsupported_platform => 'Nepodporovaná platforma';
@ -1322,19 +1310,22 @@ class AppLocalizationsCs extends AppLocalizations {
String get view_all => 'Zobrazit vše';
@override
String get no_tracks_added_yet => 'Zdá se, že jste ještě nepřidali žádné skladby';
String get no_tracks_added_yet =>
'Zdá se, že jste ještě nepřidali žádné skladby';
@override
String get no_tracks => 'Zdá se, že zde nejsou žádné skladby';
@override
String get no_tracks_listened_yet => 'Zdá se, že jste ještě nic neposlouchali';
String get no_tracks_listened_yet =>
'Zdá se, že jste ještě nic neposlouchali';
@override
String get not_following_artists => 'Nezajímáte se o žádné umělce';
@override
String get no_favorite_albums_yet => 'Zdá se, že jste ještě nepřidali žádné alba mezi oblíbené';
String get no_favorite_albums_yet =>
'Zdá se, že jste ještě nepřidali žádné alba mezi oblíbené';
@override
String get no_logs_found => 'Žádné záznamy nenalezeny';
@ -1358,7 +1349,8 @@ class AppLocalizationsCs extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'V macOS/Linux/Unixových systémech nebude fungovat nastavení cesty v .zshrc/.bashrc/.bash_profile atd.\nMusíte nastavit cestu v konfiguračním souboru shellu';
String get youtube_engine_unix_issue_message =>
'V macOS/Linux/Unixových systémech nebude fungovat nastavení cesty v .zshrc/.bashrc/.bash_profile atd.\nMusíte nastavit cestu v konfiguračním souboru shellu';
@override
String get download => 'Stáhnout';
@ -1376,7 +1368,8 @@ class AppLocalizationsCs extends AppLocalizations {
String get edit_port => 'Upravit port';
@override
String get port_helper_msg => 'Výchozí hodnota je -1, což znamená náhodné číslo. Pokud máte nakonfigurován firewall, doporučuje se to nastavit.';
String get port_helper_msg =>
'Výchozí hodnota je -1, což znamená náhodné číslo. Pokud máte nakonfigurován firewall, doporučuje se to nastavit.';
@override
String connect_request(Object client) {
@ -1384,5 +1377,6 @@ class AppLocalizationsCs extends AppLocalizations {
}
@override
String get connection_request_denied => 'Připojení bylo zamítnuto. Uživatel odmítl přístup.';
String get connection_request_denied =>
'Připojení bylo zamítnuto. Uživatel odmítl přístup.';
}

View File

@ -161,7 +161,8 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
String get add_artist_to_blacklist => 'Künstler zur Schwarzen Liste hinzufügen';
String get add_artist_to_blacklist =>
'Künstler zur Schwarzen Liste hinzufügen';
@override
String get top_tracks => 'Top-Titel';
@ -379,12 +380,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get account => 'Konto';
@override
String get login_with_spotify => 'Mit deinem Spotify-Konto anmelden';
@override
String get connect_with_spotify => 'Mit Spotify verbinden';
@override
String get logout => 'Abmelden';
@ -413,7 +408,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get layout_mode => 'Layout-Modus';
@override
String get override_layout_settings => 'Responsiven Layout-Modus-Einstellungen überschreiben';
String get override_layout_settings =>
'Responsiven Layout-Modus-Einstellungen überschreiben';
@override
String get adaptive => 'Adaptiv';
@ -443,7 +439,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get sync_album_color => 'Albumfarbe synchronisieren';
@override
String get sync_album_color_description => 'Verwendet die dominante Farbe des Album Covers als Akzentfarbe';
String get sync_album_color_description =>
'Verwendet die dominante Farbe des Album Covers als Akzentfarbe';
@override
String get playback => 'Wiedergabe';
@ -461,16 +458,19 @@ class AppLocalizationsDe extends AppLocalizations {
String get pre_download_play => 'Vorab herunterladen und abspielen';
@override
String get pre_download_play_description => 'Anstatt Audio zu streamen, Bytes herunterladen und abspielen (Empfohlen für Benutzer mit hoher Bandbreite)';
String get pre_download_play_description =>
'Anstatt Audio zu streamen, Bytes herunterladen und abspielen (Empfohlen für Benutzer mit hoher Bandbreite)';
@override
String get skip_non_music => 'Überspringe Nicht-Musik-Segmente (SponsorBlock)';
String get skip_non_music =>
'Überspringe Nicht-Musik-Segmente (SponsorBlock)';
@override
String get blacklist_description => 'Gesperrte Titel und Künstler';
@override
String get wait_for_download_to_finish => 'Bitte warten Sie, bis der aktuelle Download abgeschlossen ist';
String get wait_for_download_to_finish =>
'Bitte warten Sie, bis der aktuelle Download abgeschlossen ist';
@override
String get desktop => 'Desktop';
@ -506,7 +506,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get please_sponsor => 'Bitte unterstützen/Spenden Sie';
@override
String get spotube_description => 'Spotube, ein leichtgewichtiger, plattformübergreifender und kostenloser Spotify-Client';
String get spotube_description =>
'Spotube, ein leichtgewichtiger, plattformübergreifender und kostenloser Spotify-Client';
@override
String get version => 'Version';
@ -538,21 +539,15 @@ class AppLocalizationsDe extends AppLocalizations {
String get license => 'Lizenz';
@override
String get add_spotify_credentials => 'Fügen Sie Ihre Spotify-Anmeldeinformationen hinzu, um zu starten';
@override
String get credentials_will_not_be_shared_disclaimer => 'Keine Sorge, Ihre Anmeldeinformationen werden nicht erfasst oder mit anderen geteilt';
String get credentials_will_not_be_shared_disclaimer =>
'Keine Sorge, Ihre Anmeldeinformationen werden nicht erfasst oder mit anderen geteilt';
@override
String get know_how_to_login => 'Wissen Sie nicht, wie es geht?';
@override
String get follow_step_by_step_guide => 'Befolgen Sie die schrittweise Anleitung';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookie';
}
String get follow_step_by_step_guide =>
'Befolgen Sie die schrittweise Anleitung';
@override
String cookie_name_cookie(Object name) {
@ -583,33 +578,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get first_go_to => 'Gehe zuerst zu';
@override
String get login_if_not_logged_in => 'und melde dich an/registriere dich, falls du nicht angemeldet bist';
@override
String get step_2 => 'Schritt 2';
@override
String get step_2_steps => '1. Wenn du angemeldet bist, drücke F12 oder klicke mit der rechten Maustaste > Inspektion, um die Browser-Entwicklertools zu öffnen.\n2. Gehe dann zum \"Anwendungs\"-Tab (Chrome, Edge, Brave usw.) oder zum \"Storage\"-Tab (Firefox, Palemoon usw.)\n3. Gehe zum Abschnitt \"Cookies\" und dann zum Unterabschnitt \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Schritt 3';
@override
String get step_3_steps => 'Kopiere den Wert des Cookies \"sp_dc\"';
@override
String get success_emoji => 'Erfolg🥳';
@override
String get success_message => 'Jetzt bist du erfolgreich mit deinem Spotify-Konto angemeldet. Gut gemacht, Kumpel!';
@override
String get step_4 => 'Schritt 4';
@override
String get step_4_steps => 'Füge den kopierten Wert von \"sp_dc\" ein';
@override
String get something_went_wrong => 'Etwas ist schiefgelaufen';
@ -617,19 +585,23 @@ class AppLocalizationsDe extends AppLocalizations {
String get piped_instance => 'Piped-Serverinstanz';
@override
String get piped_description => 'Die Piped-Serverinstanz, die zur Titelzuordnung verwendet werden soll';
String get piped_description =>
'Die Piped-Serverinstanz, die zur Titelzuordnung verwendet werden soll';
@override
String get piped_warning => 'Einige von ihnen funktionieren möglicherweise nicht gut. Verwende sie also auf eigenes Risiko';
String get piped_warning =>
'Einige von ihnen funktionieren möglicherweise nicht gut. Verwende sie also auf eigenes Risiko';
@override
String get invidious_instance => 'Invidious-Serverinstanz';
@override
String get invidious_description => 'Die Invidious-Serverinstanz zur Titelerkennung';
String get invidious_description =>
'Die Invidious-Serverinstanz zur Titelerkennung';
@override
String get invidious_warning => 'Einige Instanzen funktionieren möglicherweise nicht gut. Benutzung auf eigene Gefahr';
String get invidious_warning =>
'Einige Instanzen funktionieren möglicherweise nicht gut. Benutzung auf eigene Gefahr';
@override
String get generate => 'Generieren';
@ -640,13 +612,16 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'Alle heruntergeladenen Titel ersetzen';
String get replace_downloaded_tracks =>
'Alle heruntergeladenen Titel ersetzen';
@override
String get skip_download_tracks => 'Das Herunterladen aller heruntergeladenen Titel überspringen';
String get skip_download_tracks =>
'Das Herunterladen aller heruntergeladenen Titel überspringen';
@override
String get do_you_want_to_replace => 'Möchtest du den vorhandenen Track ersetzen?';
String get do_you_want_to_replace =>
'Möchtest du den vorhandenen Track ersetzen?';
@override
String get replace => 'Ersetzen';
@ -744,7 +719,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get are_you_sure => 'Bist du sicher?';
@override
String get generating_playlist => 'Erstelle deine individuelle Wiedergabeliste...';
String get generating_playlist =>
'Erstelle deine individuelle Wiedergabeliste...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +728,28 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
String get download_warning => 'Wenn du alle Titel in großen Mengen herunterlädst, betreibst du eindeutig Raubkopien von Musik und schadest der kreativen Gesellschaft der Musik. Ich hoffe, dir ist dies bewusst. Versuche immer, die harte Arbeit der Künstler zu respektieren und zu unterstützen.';
String get download_warning =>
'Wenn du alle Titel in großen Mengen herunterlädst, betreibst du eindeutig Raubkopien von Musik und schadest der kreativen Gesellschaft der Musik. Ich hoffe, dir ist dies bewusst. Versuche immer, die harte Arbeit der Künstler zu respektieren und zu unterstützen.';
@override
String get download_ip_ban_warning => 'Übrigens, deine IP-Adresse kann aufgrund übermäßiger Downloadanfragen von YouTube gesperrt werden. Eine IP-Sperre bedeutet, dass du YouTube (auch wenn du angemeldet bist) für mindestens 2-3 Monate von diesem IP-Gerät aus nicht nutzen kannst. Spotube übernimmt keine Verantwortung, falls dies jemals geschieht.';
String get download_ip_ban_warning =>
'Übrigens, deine IP-Adresse kann aufgrund übermäßiger Downloadanfragen von YouTube gesperrt werden. Eine IP-Sperre bedeutet, dass du YouTube (auch wenn du angemeldet bist) für mindestens 2-3 Monate von diesem IP-Gerät aus nicht nutzen kannst. Spotube übernimmt keine Verantwortung, falls dies jemals geschieht.';
@override
String get by_clicking_accept_terms => 'Durch Klicken auf \'Akzeptieren\' stimmst du den folgenden Bedingungen zu:';
String get by_clicking_accept_terms =>
'Durch Klicken auf \'Akzeptieren\' stimmst du den folgenden Bedingungen zu:';
@override
String get download_agreement_1 => 'Ich weiß, dass ich Raubkopien von Musik betreibe. Ich bin böse.';
String get download_agreement_1 =>
'Ich weiß, dass ich Raubkopien von Musik betreibe. Ich bin böse.';
@override
String get download_agreement_2 => 'Ich werde die Künstler, wo immer ich kann, unterstützen, und ich tue dies nur, weil ich kein Geld habe, um ihre Kunst zu kaufen.';
String get download_agreement_2 =>
'Ich werde die Künstler, wo immer ich kann, unterstützen, und ich tue dies nur, weil ich kein Geld habe, um ihre Kunst zu kaufen.';
@override
String get download_agreement_3 => 'Mir ist vollkommen bewusst, dass meine IP-Adresse auf YouTube gesperrt werden kann, und ich halte Spotube oder seine Eigentümer/Mitarbeiter nicht für etwaige Unfälle verantwortlich, die durch meine derzeitige Handlung verursacht werden.';
String get download_agreement_3 =>
'Mir ist vollkommen bewusst, dass meine IP-Adresse auf YouTube gesperrt werden kann, und ich halte Spotube oder seine Eigentümer/Mitarbeiter nicht für etwaige Unfälle verantwortlich, die durch meine derzeitige Handlung verursacht werden.';
@override
String get decline => 'Ablehnen';
@ -848,7 +830,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get failed_to_encrypt => 'Verschlüsselung fehlgeschlagen';
@override
String get encryption_failed_warning => 'Spotube verwendet Verschlüsselung, um Ihre Daten sicher zu speichern. Dies ist jedoch fehlgeschlagen. Daher wird es auf unsichere Speicherung zurückgreifen\nWenn Sie Linux verwenden, stellen Sie bitte sicher, dass Sie Secret-Services wie gnome-keyring, kde-wallet und keepassxc installiert haben';
String get encryption_failed_warning =>
'Spotube verwendet Verschlüsselung, um Ihre Daten sicher zu speichern. Dies ist jedoch fehlgeschlagen. Daher wird es auf unsichere Speicherung zurückgreifen\nWenn Sie Linux verwenden, stellen Sie bitte sicher, dass Sie Secret-Services wie gnome-keyring, kde-wallet und keepassxc installiert haben';
@override
String get querying_info => 'Abfrageinformationen...';
@ -865,7 +848,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get you_are_offline => 'Sie sind derzeit offline';
@override
String get connection_restored => 'Ihre Internetverbindung wurde wiederhergestellt';
String get connection_restored =>
'Ihre Internetverbindung wurde wiederhergestellt';
@override
String get use_system_title_bar => 'System-Titelleiste verwenden';
@ -946,7 +930,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get friends => 'Freunde';
@override
String get no_lyrics_available => 'Entschuldigung, Texte für diesen Track konnten nicht gefunden werden';
String get no_lyrics_available =>
'Entschuldigung, Texte für diesen Track konnten nicht gefunden werden';
@override
String get start_a_radio => 'Radio starten';
@ -955,7 +940,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get how_to_start_radio => 'Wie möchten Sie das Radio starten?';
@override
String get replace_queue_question => 'Möchten Sie die aktuelle Wiedergabeliste ersetzen oder hinzufügen?';
String get replace_queue_question =>
'Möchten Sie die aktuelle Wiedergabeliste ersetzen oder hinzufügen?';
@override
String get endless_playback => 'Endlose Wiedergabe';
@ -964,7 +950,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get delete_playlist => 'Wiedergabeliste löschen';
@override
String get delete_playlist_confirmation => 'Sind Sie sicher, dass Sie diese Wiedergabeliste löschen möchten?';
String get delete_playlist_confirmation =>
'Sind Sie sicher, dass Sie diese Wiedergabeliste löschen möchten?';
@override
String get local_tracks => 'Lokale Titel';
@ -982,22 +969,27 @@ class AppLocalizationsDe extends AppLocalizations {
String get freedom_of_music => '“Freiheit der Musik”';
@override
String get freedom_of_music_palm => '“Freiheit der Musik in Ihrer Handfläche”';
String get freedom_of_music_palm =>
'“Freiheit der Musik in Ihrer Handfläche”';
@override
String get get_started => 'Lass uns anfangen';
@override
String get youtube_source_description => 'Empfohlen und funktioniert am besten.';
String get youtube_source_description =>
'Empfohlen und funktioniert am besten.';
@override
String get piped_source_description => 'Fühlen Sie sich frei? Wie YouTube, aber viel freier.';
String get piped_source_description =>
'Fühlen Sie sich frei? Wie YouTube, aber viel freier.';
@override
String get jiosaavn_source_description => 'Am besten für die südasiatische Region.';
String get jiosaavn_source_description =>
'Am besten für die südasiatische Region.';
@override
String get invidious_source_description => 'Ähnlich wie Piped, aber mit höherer Verfügbarkeit';
String get invidious_source_description =>
'Ähnlich wie Piped, aber mit höherer Verfügbarkeit';
@override
String highest_quality(Object quality) {
@ -1008,13 +1000,15 @@ class AppLocalizationsDe extends AppLocalizations {
String get select_audio_source => 'Audioquelle auswählen';
@override
String get endless_playback_description => 'Neue Lieder automatisch\nam Ende der Wiedergabeliste hinzufügen';
String get endless_playback_description =>
'Neue Lieder automatisch\nam Ende der Wiedergabeliste hinzufügen';
@override
String get choose_your_region => 'Wählen Sie Ihre Region';
@override
String get choose_your_region_description => 'Dies wird Spotube helfen, Ihnen den richtigen Inhalt\nfür Ihren Standort anzuzeigen.';
String get choose_your_region_description =>
'Dies wird Spotube helfen, Ihnen den richtigen Inhalt\nfür Ihren Standort anzuzeigen.';
@override
String get choose_your_language => 'Wählen Sie Ihre Sprache';
@ -1023,7 +1017,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get help_project_grow => 'Helfen Sie diesem Projekt zu wachsen';
@override
String get help_project_grow_description => 'Spotube ist ein Open-Source-Projekt. Sie können diesem Projekt helfen, indem Sie zum Projekt beitragen, Fehler melden oder neue Funktionen vorschlagen.';
String get help_project_grow_description =>
'Spotube ist ein Open-Source-Projekt. Sie können diesem Projekt helfen, indem Sie zum Projekt beitragen, Fehler melden oder neue Funktionen vorschlagen.';
@override
String get contribute_on_github => 'Auf GitHub beitragen';
@ -1038,7 +1033,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get enable_connect => 'Verbindung aktivieren';
@override
String get enable_connect_description => 'Spotube von anderen Geräten steuern';
String get enable_connect_description =>
'Spotube von anderen Geräten steuern';
@override
String get devices => 'Geräte';
@ -1117,7 +1113,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get choose_the_device => 'Wähle das Gerät:';
@override
String get multiple_device_connected => 'Es sind mehrere Geräte verbunden.\nWähle das Gerät, auf dem diese Aktion ausgeführt werden soll';
String get multiple_device_connected =>
'Es sind mehrere Geräte verbunden.\nWähle das Gerät, auf dem diese Aktion ausgeführt werden soll';
@override
String get nothing_found => 'Nichts gefunden';
@ -1212,7 +1209,8 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Dies ist basierend auf Spotifys\npro Stream Auszahlung von \$0,003 bis \$0,005\nberechnet. Dies ist eine hypothetische Berechnung,\num dem Benutzer Einblick zu geben,\nwieviel sie den Künstlern gezahlt hätten,\nwenn sie ihren Song auf Spotify gehört hätten.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1232,7 +1230,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get summary_streamed_overall => 'Insgesamt gestreamt';
@override
String get summary_owed_to_artists => 'Den Künstlern geschuldet\nDiesen Monat';
String get summary_owed_to_artists =>
'Den Künstlern geschuldet\nDiesen Monat';
@override
String get summary_artists => 'Künstler';
@ -1261,7 +1260,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get webview_not_found => 'Webview nicht gefunden';
@override
String get webview_not_found_description => 'Es ist keine Webview-Laufzeitumgebung auf Ihrem Gerät installiert.\nFalls installiert, stellen Sie sicher, dass es im environment PATH ist\n\nNach der Installation starten Sie die App neu';
String get webview_not_found_description =>
'Es ist keine Webview-Laufzeitumgebung auf Ihrem Gerät installiert.\nFalls installiert, stellen Sie sicher, dass es im environment PATH ist\n\nNach der Installation starten Sie die App neu';
@override
String get unsupported_platform => 'Nicht unterstützte Plattform';
@ -1293,7 +1293,8 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Möchten Sie diese Dateien exportieren nach';
String get export_cache_confirmation =>
'Möchten Sie diese Dateien exportieren nach';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1328,13 +1329,15 @@ class AppLocalizationsDe extends AppLocalizations {
String get no_tracks => 'Es sieht so aus, als ob hier keine Titel sind.';
@override
String get no_tracks_listened_yet => 'Es scheint, dass Sie noch nichts gehört haben.';
String get no_tracks_listened_yet =>
'Es scheint, dass Sie noch nichts gehört haben.';
@override
String get not_following_artists => 'Sie folgen noch keinem Künstler.';
@override
String get no_favorite_albums_yet => 'Es sieht so aus, als ob Sie noch keine Alben zu Ihren Favoriten hinzugefügt haben.';
String get no_favorite_albums_yet =>
'Es sieht so aus, als ob Sie noch keine Alben zu Ihren Favoriten hinzugefügt haben.';
@override
String get no_logs_found => 'Keine Protokolle gefunden';
@ -1358,7 +1361,8 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'In macOS/Linux/unixähnlichen Betriebssystemen funktioniert das Setzen des Pfads in .zshrc/.bashrc/.bash_profile usw. nicht.\nSie müssen den Pfad in der Shell-Konfigurationsdatei festlegen.';
String get youtube_engine_unix_issue_message =>
'In macOS/Linux/unixähnlichen Betriebssystemen funktioniert das Setzen des Pfads in .zshrc/.bashrc/.bash_profile usw. nicht.\nSie müssen den Pfad in der Shell-Konfigurationsdatei festlegen.';
@override
String get download => 'Herunterladen';
@ -1376,7 +1380,8 @@ class AppLocalizationsDe extends AppLocalizations {
String get edit_port => 'Port bearbeiten';
@override
String get port_helper_msg => 'Der Standardwert ist -1, was eine zufällige Zahl bedeutet. Wenn Sie eine Firewall konfiguriert haben, wird empfohlen, dies einzustellen.';
String get port_helper_msg =>
'Der Standardwert ist -1, was eine zufällige Zahl bedeutet. Wenn Sie eine Firewall konfiguriert haben, wird empfohlen, dies einzustellen.';
@override
String connect_request(Object client) {
@ -1384,5 +1389,6 @@ class AppLocalizationsDe extends AppLocalizations {
}
@override
String get connection_request_denied => 'Verbindung abgelehnt. Benutzer hat den Zugriff verweigert.';
String get connection_request_denied =>
'Verbindung abgelehnt. Benutzer hat den Zugriff verweigert.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get account => 'Account';
@override
String get login_with_spotify => 'Login with your Spotify account';
@override
String get connect_with_spotify => 'Connect with Spotify';
@override
String get logout => 'Logout';
@ -413,7 +407,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get layout_mode => 'Layout Mode';
@override
String get override_layout_settings => 'Override responsive layout mode settings';
String get override_layout_settings =>
'Override responsive layout mode settings';
@override
String get adaptive => 'Adaptive';
@ -443,7 +438,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get sync_album_color => 'Sync album color';
@override
String get sync_album_color_description => 'Uses the dominant color of the album art as the accent color';
String get sync_album_color_description =>
'Uses the dominant color of the album art as the accent color';
@override
String get playback => 'Playback';
@ -461,7 +457,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get pre_download_play => 'Pre-download and play';
@override
String get pre_download_play_description => 'Instead of streaming audio, download bytes and play instead (Recommended for higher bandwidth users)';
String get pre_download_play_description =>
'Instead of streaming audio, download bytes and play instead (Recommended for higher bandwidth users)';
@override
String get skip_non_music => 'Skip non-music segments (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get blacklist_description => 'Blacklisted tracks and artists';
@override
String get wait_for_download_to_finish => 'Please wait for the current download to finish';
String get wait_for_download_to_finish =>
'Please wait for the current download to finish';
@override
String get desktop => 'Desktop';
@ -506,7 +504,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get please_sponsor => 'Please Sponsor/Donate';
@override
String get spotube_description => 'Spotube, a lightweight, cross-platform, free-for-all spotify client';
String get spotube_description =>
'Open source extensible music streaming platform and app, based on BYOMM (Bring your own music metadata) concept';
@override
String get version => 'Version';
@ -538,10 +537,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get license => 'License';
@override
String get add_spotify_credentials => 'Add your spotify credentials to get started';
@override
String get credentials_will_not_be_shared_disclaimer => 'Don\'t worry, any of your credentials won\'t be collected or shared with anyone';
String get credentials_will_not_be_shared_disclaimer =>
'Don\'t worry, any of your credentials won\'t be collected or shared with anyone';
@override
String get know_how_to_login => 'Don\'t know how to do this?';
@ -549,11 +546,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Follow along the Step by Step guide';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookie';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookie';
@ -583,33 +575,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get first_go_to => 'First, Go to';
@override
String get login_if_not_logged_in => 'and Login/Signup if you are not logged in';
@override
String get step_2 => 'Step 2';
@override
String get step_2_steps => '1. Once you\'re logged in, press F12 or Mouse Right Click > Inspect to Open the Browser devtools.\n2. Then go the \"Application\" Tab (Chrome, Edge, Brave etc..) or \"Storage\" Tab (Firefox, Palemoon etc..)\n3. Go to the \"Cookies\" section then the \"https://accounts.spotify.com\" subsection';
@override
String get step_3 => 'Step 3';
@override
String get step_3_steps => 'Copy the value of \"sp_dc\" Cookie';
@override
String get success_emoji => 'Success🥳';
@override
String get success_message => 'Now you\'ve successfully Logged in with your Spotify account. Good Job, mate!';
@override
String get step_4 => 'Step 4';
@override
String get step_4_steps => 'Paste the copied \"sp_dc\" value';
@override
String get something_went_wrong => 'Something went wrong';
@ -617,19 +582,23 @@ class AppLocalizationsEn extends AppLocalizations {
String get piped_instance => 'Piped Server Instance';
@override
String get piped_description => 'The Piped server instance to use for track matching';
String get piped_description =>
'The Piped server instance to use for track matching';
@override
String get piped_warning => 'Some of them might not work well. So use at your own risk';
String get piped_warning =>
'Some of them might not work well. So use at your own risk';
@override
String get invidious_instance => 'Invidious Server Instance';
@override
String get invidious_description => 'The Invidious server instance to use for track matching';
String get invidious_description =>
'The Invidious server instance to use for track matching';
@override
String get invidious_warning => 'Some of them might not work well. So use at your own risk';
String get invidious_warning =>
'Some of them might not work well. So use at your own risk';
@override
String get generate => 'Generate';
@ -646,7 +615,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get skip_download_tracks => 'Skip downloading all downloaded tracks';
@override
String get do_you_want_to_replace => 'Do you want to replace the existing track??';
String get do_you_want_to_replace =>
'Do you want to replace the existing track??';
@override
String get replace => 'Replace';
@ -752,22 +722,27 @@ class AppLocalizationsEn extends AppLocalizations {
}
@override
String get download_warning => 'If you download all Tracks at bulk you\'re clearly pirating Music & causing damage to the creative society of Music. I hope you are aware of this. Always, try respecting & supporting Artist\'s hard work';
String get download_warning =>
'If you download all Tracks at bulk you\'re clearly pirating Music & causing damage to the creative society of Music. I hope you are aware of this. Always, try respecting & supporting Artist\'s hard work';
@override
String get download_ip_ban_warning => 'BTW, your IP can get blocked on YouTube due excessive download requests than usual. IP block means you can\'t use YouTube (even if you\'re logged in) for at least 2-3 months from that IP device. And Spotube doesn\'t hold any responsibility if this ever happens';
String get download_ip_ban_warning =>
'BTW, your IP can get blocked on YouTube due excessive download requests than usual. IP block means you can\'t use YouTube (even if you\'re logged in) for at least 2-3 months from that IP device. And Spotube doesn\'t hold any responsibility if this ever happens';
@override
String get by_clicking_accept_terms => 'By clicking \'accept\' you agree to following terms:';
String get by_clicking_accept_terms =>
'By clicking \'accept\' you agree to following terms:';
@override
String get download_agreement_1 => 'I know I\'m pirating Music. I\'m bad';
@override
String get download_agreement_2 => 'I\'ll support the Artist wherever I can and I\'m only doing this because I don\'t have money to buy their art';
String get download_agreement_2 =>
'I\'ll support the Artist wherever I can and I\'m only doing this because I don\'t have money to buy their art';
@override
String get download_agreement_3 => 'I\'m completely aware that my IP can get blocked on YouTube & I don\'t hold Spotube or his owners/contributors responsible for any accidents caused by my current action';
String get download_agreement_3 =>
'I\'m completely aware that my IP can get blocked on YouTube & I don\'t hold Spotube or his owners/contributors responsible for any accidents caused by my current action';
@override
String get decline => 'Decline';
@ -848,7 +823,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get failed_to_encrypt => 'Failed to encrypt';
@override
String get encryption_failed_warning => 'Spotube uses encryption to securely store your data. But failed to do so. So it\'ll fallback to insecure storage\nIf you\'re using linux, please make sure you\'ve any secret-service (gnome-keyring, kde-wallet, keepassxc etc) installed';
String get encryption_failed_warning =>
'Spotube uses encryption to securely store your data. But failed to do so. So it\'ll fallback to insecure storage\nIf you\'re using linux, please make sure you\'ve any secret-service (gnome-keyring, kde-wallet, keepassxc etc) installed';
@override
String get querying_info => 'Querying info...';
@ -955,7 +931,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get how_to_start_radio => 'How do you want to start the radio?';
@override
String get replace_queue_question => 'Do you want to replace the current queue or append to it?';
String get replace_queue_question =>
'Do you want to replace the current queue or append to it?';
@override
String get endless_playback => 'Endless Playback';
@ -964,7 +941,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get delete_playlist => 'Delete Playlist';
@override
String get delete_playlist_confirmation => 'Are you sure you want to delete this playlist?';
String get delete_playlist_confirmation =>
'Are you sure you want to delete this playlist?';
@override
String get local_tracks => 'Local Tracks';
@ -982,7 +960,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get freedom_of_music => '“Freedom of Music”';
@override
String get freedom_of_music_palm => '“Freedom of Music in the palm of your hand”';
String get freedom_of_music_palm =>
'“Freedom of Music in the palm of your hand”';
@override
String get get_started => 'Let\'s get started';
@ -991,13 +970,15 @@ class AppLocalizationsEn extends AppLocalizations {
String get youtube_source_description => 'Recommended and works best.';
@override
String get piped_source_description => 'Feeling free? Same as YouTube but a lot free.';
String get piped_source_description =>
'Feeling free? Same as YouTube but a lot free.';
@override
String get jiosaavn_source_description => 'Best for South Asian region.';
@override
String get invidious_source_description => 'Similar to Piped but with higher availability.';
String get invidious_source_description =>
'Similar to Piped but with higher availability.';
@override
String highest_quality(Object quality) {
@ -1008,13 +989,15 @@ class AppLocalizationsEn extends AppLocalizations {
String get select_audio_source => 'Select Audio Source';
@override
String get endless_playback_description => 'Automatically append new songs\nto the end of the queue';
String get endless_playback_description =>
'Automatically append new songs\nto the end of the queue';
@override
String get choose_your_region => 'Choose your region';
@override
String get choose_your_region_description => 'This will help Spotube show you the right content\nfor your location.';
String get choose_your_region_description =>
'This will help Spotube show you the right content\nfor your location.';
@override
String get choose_your_language => 'Choose your language';
@ -1023,7 +1006,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get help_project_grow => 'Help this project grow';
@override
String get help_project_grow_description => 'Spotube is an open-source project. You can help this project grow by contributing to the project, reporting bugs, or suggesting new features.';
String get help_project_grow_description =>
'Spotube is an open-source project. You can help this project grow by contributing to the project, reporting bugs, or suggesting new features.';
@override
String get contribute_on_github => 'Contribute on GitHub';
@ -1117,7 +1101,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get choose_the_device => 'Choose the device:';
@override
String get multiple_device_connected => 'There are multiple device connected.\nChoose the device you want this action to take place';
String get multiple_device_connected =>
'There are multiple device connected.\nChoose the device you want this action to take place';
@override
String get nothing_found => 'Nothing found';
@ -1212,7 +1197,8 @@ class AppLocalizationsEn extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*This is calculated based on Spotify\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1247,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get webview_not_found => 'Webview not found';
@override
String get webview_not_found_description => 'No webview runtime is installed in your device.\nIf it\'s installed make sure it\'s in the Environment PATH\n\nAfter installing, restart the app';
String get webview_not_found_description =>
'No webview runtime is installed in your device.\nIf it\'s installed make sure it\'s in the Environment PATH\n\nAfter installing, restart the app';
@override
String get unsupported_platform => 'Unsupported platform';
@ -1293,7 +1280,8 @@ class AppLocalizationsEn extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Do you want to export these files to';
String get export_cache_confirmation =>
'Do you want to export these files to';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,19 +1310,22 @@ class AppLocalizationsEn extends AppLocalizations {
String get view_all => 'View all';
@override
String get no_tracks_added_yet => 'Looks like you haven\'t added any tracks yet';
String get no_tracks_added_yet =>
'Looks like you haven\'t added any tracks yet';
@override
String get no_tracks => 'Looks like there are no tracks here';
@override
String get no_tracks_listened_yet => 'Looks like you haven\'t listened to anything yet';
String get no_tracks_listened_yet =>
'Looks like you haven\'t listened to anything yet';
@override
String get not_following_artists => 'You\'re not following any artists';
@override
String get no_favorite_albums_yet => 'Looks like you haven\'t added any albums to your favorites yet';
String get no_favorite_albums_yet =>
'Looks like you haven\'t added any albums to your favorites yet';
@override
String get no_logs_found => 'No logs found';
@ -1358,7 +1349,8 @@ class AppLocalizationsEn extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'In macOS/Linux/unix like OS\'s, setting path on .zshrc/.bashrc/.bash_profile etc. won\'t work.\nYou need to set the path in the shell configuration file';
String get youtube_engine_unix_issue_message =>
'In macOS/Linux/unix like OS\'s, setting path on .zshrc/.bashrc/.bash_profile etc. won\'t work.\nYou need to set the path in the shell configuration file';
@override
String get download => 'Download';
@ -1376,7 +1368,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get edit_port => 'Edit port';
@override
String get port_helper_msg => 'Default is -1 which indicates random number. If you\'ve firewall configured, setting this is recommended.';
String get port_helper_msg =>
'Default is -1 which indicates random number. If you\'ve firewall configured, setting this is recommended.';
@override
String connect_request(Object client) {
@ -1384,5 +1377,6 @@ class AppLocalizationsEn extends AppLocalizations {
}
@override
String get connection_request_denied => 'Connection denied. User denied access.';
String get connection_request_denied =>
'Connection denied. User denied access.';
}

View File

@ -356,7 +356,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get clear_all => 'Limpiar todo';
@override
String get show_hide_ui_on_hover => 'Mostrar/Ocultar interfaz al pasar el cursor';
String get show_hide_ui_on_hover =>
'Mostrar/Ocultar interfaz al pasar el cursor';
@override
String get always_on_top => 'Siempre visible';
@ -379,12 +380,6 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get account => 'Cuenta';
@override
String get login_with_spotify => 'Iniciar sesión con tu cuenta de Spotify';
@override
String get connect_with_spotify => 'Conectar con Spotify';
@override
String get logout => 'Cerrar sesión';
@ -413,7 +408,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get layout_mode => 'Modo de diseño';
@override
String get override_layout_settings => 'Anular la configuración del modo de diseño responsive';
String get override_layout_settings =>
'Anular la configuración del modo de diseño responsive';
@override
String get adaptive => 'Adaptable';
@ -443,7 +439,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get sync_album_color => 'Sincronizar color del álbum';
@override
String get sync_album_color_description => 'Usa el color dominante del arte del álbum como color de acento';
String get sync_album_color_description =>
'Usa el color dominante del arte del álbum como color de acento';
@override
String get playback => 'Reproducción';
@ -461,16 +458,19 @@ class AppLocalizationsEs extends AppLocalizations {
String get pre_download_play => 'Pre-descargar y reproducir';
@override
String get pre_download_play_description => 'En lugar de transmitir audio, descarga bytes y reproduce en su lugar (recomendado para usuarios con mayor ancho de banda)';
String get pre_download_play_description =>
'En lugar de transmitir audio, descarga bytes y reproduce en su lugar (recomendado para usuarios con mayor ancho de banda)';
@override
String get skip_non_music => 'Omitir segmentos que no son música (SponsorBlock)';
String get skip_non_music =>
'Omitir segmentos que no son música (SponsorBlock)';
@override
String get blacklist_description => 'Canciones y artistas en la lista negra';
@override
String get wait_for_download_to_finish => 'Por favor, espera a que termine la descarga actual';
String get wait_for_download_to_finish =>
'Por favor, espera a que termine la descarga actual';
@override
String get desktop => 'Escritorio';
@ -506,7 +506,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get please_sponsor => 'Por favor, apoya/dona';
@override
String get spotube_description => 'Spotube, un cliente ligero, multiplataforma y gratuito de Spotify';
String get spotube_description =>
'Spotube, un cliente ligero, multiplataforma y gratuito de Spotify';
@override
String get version => 'Versión';
@ -538,10 +539,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get license => 'Licencia';
@override
String get add_spotify_credentials => 'Agrega tus credenciales de Spotify para comenzar';
@override
String get credentials_will_not_be_shared_disclaimer => 'No te preocupes, tus credenciales no serán recopiladas ni compartidas con nadie';
String get credentials_will_not_be_shared_disclaimer =>
'No te preocupes, tus credenciales no serán recopiladas ni compartidas con nadie';
@override
String get know_how_to_login => '¿No sabes cómo hacerlo?';
@ -549,11 +548,6 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Sigue la guía paso a paso';
@override
String spotify_cookie(Object name) {
return 'Cookie de Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Cookie $name';
@ -583,33 +577,6 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get first_go_to => 'Primero, ve a';
@override
String get login_if_not_logged_in => 'e inicia sesión/registra tu cuenta si no lo has hecho aún';
@override
String get step_2 => 'Paso 2';
@override
String get step_2_steps => '1. Una vez que hayas iniciado sesión, presiona F12 o haz clic derecho con el ratón > Inspeccionar para abrir las herramientas de desarrollo del navegador.\n2. Luego ve a la pestaña \"Application\" (Chrome, Edge, Brave, etc.) o \"Storage\" (Firefox, Palemoon, etc.)\n3. Ve a la sección \"Cookies\" y luego la subsección \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Paso 3';
@override
String get step_3_steps => 'Copia el valor de la cookie \"sp_dc\"';
@override
String get success_emoji => '¡Éxito! 🥳';
@override
String get success_message => 'Ahora has iniciado sesión con éxito en tu cuenta de Spotify. ¡Buen trabajo!';
@override
String get step_4 => 'Paso 4';
@override
String get step_4_steps => 'Pega el valor copiado de \"sp_dc\"';
@override
String get something_went_wrong => 'Algo salió mal';
@ -617,19 +584,23 @@ class AppLocalizationsEs extends AppLocalizations {
String get piped_instance => 'Instancia del servidor Piped';
@override
String get piped_description => 'La instancia del servidor Piped a utilizar para la coincidencia de pistas';
String get piped_description =>
'La instancia del servidor Piped a utilizar para la coincidencia de pistas';
@override
String get piped_warning => 'Algunas pueden no funcionar bien, úsalas bajo tu propio riesgo';
String get piped_warning =>
'Algunas pueden no funcionar bien, úsalas bajo tu propio riesgo';
@override
String get invidious_instance => 'Instancia del Servidor Invidious';
@override
String get invidious_description => 'La instancia del servidor Invidious para identificar pistas';
String get invidious_description =>
'La instancia del servidor Invidious para identificar pistas';
@override
String get invidious_warning => 'Algunas instancias podrían no funcionar bien. Úselas bajo su propio riesgo';
String get invidious_warning =>
'Algunas instancias podrían no funcionar bien. Úselas bajo su propio riesgo';
@override
String get generate => 'Generar';
@ -640,13 +611,16 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'Reemplazar todas las canciones descargadas';
String get replace_downloaded_tracks =>
'Reemplazar todas las canciones descargadas';
@override
String get skip_download_tracks => 'Omitir la descarga de todas las canciones descargadas';
String get skip_download_tracks =>
'Omitir la descarga de todas las canciones descargadas';
@override
String get do_you_want_to_replace => '¿Deseas reemplazar la canción existente?';
String get do_you_want_to_replace =>
'¿Deseas reemplazar la canción existente?';
@override
String get replace => 'Reemplazar';
@ -744,7 +718,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get are_you_sure => '¿Estás seguro?';
@override
String get generating_playlist => 'Generando tu lista de reproducción personalizada...';
String get generating_playlist =>
'Generando tu lista de reproducción personalizada...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +727,27 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
String get download_warning => 'Si descargas todas las canciones de golpe, estás claramente pirateando música y causando daño a la sociedad creativa de la música. Espero que seas consciente de esto y siempre intentes respetar y apoyar el arduo trabajo de los artistas';
String get download_warning =>
'Si descargas todas las canciones de golpe, estás claramente pirateando música y causando daño a la sociedad creativa de la música. Espero que seas consciente de esto y siempre intentes respetar y apoyar el arduo trabajo de los artistas';
@override
String get download_ip_ban_warning => 'Por cierto, tu IP puede ser bloqueada en YouTube debido a solicitudes de descarga excesivas. El bloqueo de IP significa que no podrás usar YouTube (incluso si has iniciado sesión) durante al menos 2-3 meses desde esa dirección IP. Y Spotube no se hace responsable si esto ocurre alguna vez';
String get download_ip_ban_warning =>
'Por cierto, tu IP puede ser bloqueada en YouTube debido a solicitudes de descarga excesivas. El bloqueo de IP significa que no podrás usar YouTube (incluso si has iniciado sesión) durante al menos 2-3 meses desde esa dirección IP. Y Spotube no se hace responsable si esto ocurre alguna vez';
@override
String get by_clicking_accept_terms => 'Al hacer clic en \'Aceptar\', aceptas los siguientes términos:';
String get by_clicking_accept_terms =>
'Al hacer clic en \'Aceptar\', aceptas los siguientes términos:';
@override
String get download_agreement_1 => 'Sé que estoy pirateando música. Soy malo';
@override
String get download_agreement_2 => 'Apoyaré al artista donde pueda y solo lo hago porque no tengo dinero para comprar su arte';
String get download_agreement_2 =>
'Apoyaré al artista donde pueda y solo lo hago porque no tengo dinero para comprar su arte';
@override
String get download_agreement_3 => 'Soy completamente consciente de que mi IP puede ser bloqueada en YouTube y no responsabilizo a Spotube ni a sus dueños/contribuyentes por cualquier incidente causado por mi acción actual';
String get download_agreement_3 =>
'Soy completamente consciente de que mi IP puede ser bloqueada en YouTube y no responsabilizo a Spotube ni a sus dueños/contribuyentes por cualquier incidente causado por mi acción actual';
@override
String get decline => 'Rechazar';
@ -848,7 +828,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get failed_to_encrypt => 'Error al cifrar';
@override
String get encryption_failed_warning => 'Spotube utiliza el cifrado para almacenar sus datos de forma segura. Pero ha fallado. Por lo tanto, volverá a un almacenamiento no seguro\nSi está utilizando Linux, asegúrese de tener instalados servicios secretos como gnome-keyring, kde-wallet y keepassxc';
String get encryption_failed_warning =>
'Spotube utiliza el cifrado para almacenar sus datos de forma segura. Pero ha fallado. Por lo tanto, volverá a un almacenamiento no seguro\nSi está utilizando Linux, asegúrese de tener instalados servicios secretos como gnome-keyring, kde-wallet y keepassxc';
@override
String get querying_info => 'Consultando información...';
@ -922,7 +903,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get login => 'Iniciar sesión';
@override
String get login_with_your_lastfm => 'Iniciar sesión con tu cuenta de Last.fm';
String get login_with_your_lastfm =>
'Iniciar sesión con tu cuenta de Last.fm';
@override
String get scrobble_to_lastfm => 'Scrobble a Last.fm';
@ -946,7 +928,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get friends => 'Amigos';
@override
String get no_lyrics_available => 'Lo siento, no se pueden encontrar las letras de esta pista';
String get no_lyrics_available =>
'Lo siento, no se pueden encontrar las letras de esta pista';
@override
String get start_a_radio => 'Iniciar una Radio';
@ -955,7 +938,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get how_to_start_radio => '¿Cómo quieres iniciar la radio?';
@override
String get replace_queue_question => '¿Quieres reemplazar la lista de reproducción actual o añadir a ella?';
String get replace_queue_question =>
'¿Quieres reemplazar la lista de reproducción actual o añadir a ella?';
@override
String get endless_playback => 'Reproducción Infinita';
@ -964,7 +948,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get delete_playlist => 'Eliminar Lista de Reproducción';
@override
String get delete_playlist_confirmation => '¿Estás seguro de que quieres eliminar esta lista de reproducción?';
String get delete_playlist_confirmation =>
'¿Estás seguro de que quieres eliminar esta lista de reproducción?';
@override
String get local_tracks => 'Pistas Locales';
@ -982,7 +967,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get freedom_of_music => '“Libertad de la Música”';
@override
String get freedom_of_music_palm => '“Libertad de la Música en la palma de tu mano”';
String get freedom_of_music_palm =>
'“Libertad de la Música en la palma de tu mano”';
@override
String get get_started => 'Empecemos';
@ -991,13 +977,16 @@ class AppLocalizationsEs extends AppLocalizations {
String get youtube_source_description => 'Recomendado y funciona mejor.';
@override
String get piped_source_description => '¿Te sientes libre? Igual que YouTube pero más libre.';
String get piped_source_description =>
'¿Te sientes libre? Igual que YouTube pero más libre.';
@override
String get jiosaavn_source_description => 'Lo mejor para la región del sur de Asia.';
String get jiosaavn_source_description =>
'Lo mejor para la región del sur de Asia.';
@override
String get invidious_source_description => 'Similar a Piped, pero con mayor disponibilidad';
String get invidious_source_description =>
'Similar a Piped, pero con mayor disponibilidad';
@override
String highest_quality(Object quality) {
@ -1008,13 +997,15 @@ class AppLocalizationsEs extends AppLocalizations {
String get select_audio_source => 'Seleccionar Fuente de Audio';
@override
String get endless_playback_description => 'Añadir automáticamente nuevas canciones\nal final de la cola de reproducción';
String get endless_playback_description =>
'Añadir automáticamente nuevas canciones\nal final de la cola de reproducción';
@override
String get choose_your_region => 'Elige tu región';
@override
String get choose_your_region_description => 'Esto ayudará a Spotube a mostrarte el contenido adecuado\npara tu ubicación.';
String get choose_your_region_description =>
'Esto ayudará a Spotube a mostrarte el contenido adecuado\npara tu ubicación.';
@override
String get choose_your_language => 'Elige tu idioma';
@ -1023,7 +1014,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get help_project_grow => 'Ayuda a que este proyecto crezca';
@override
String get help_project_grow_description => 'Spotube es un proyecto de código abierto. Puedes ayudar a que este proyecto crezca contribuyendo al proyecto, informando errores o sugiriendo nuevas funciones.';
String get help_project_grow_description =>
'Spotube es un proyecto de código abierto. Puedes ayudar a que este proyecto crezca contribuyendo al proyecto, informando errores o sugiriendo nuevas funciones.';
@override
String get contribute_on_github => 'Contribuir en GitHub';
@ -1038,7 +1030,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get enable_connect => 'Habilitar conexión';
@override
String get enable_connect_description => 'Controla Spotube desde otros dispositivos';
String get enable_connect_description =>
'Controla Spotube desde otros dispositivos';
@override
String get devices => 'Dispositivos';
@ -1117,7 +1110,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get choose_the_device => 'Elige el dispositivo:';
@override
String get multiple_device_connected => 'Hay múltiples dispositivos conectados.\nElige el dispositivo en el que deseas realizar esta acción';
String get multiple_device_connected =>
'Hay múltiples dispositivos conectados.\nElige el dispositivo en el que deseas realizar esta acción';
@override
String get nothing_found => 'Nada encontrado';
@ -1190,7 +1184,8 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => 'Tarifas de streaming (hipotéticas)';
String get streaming_fees_hypothetical =>
'Tarifas de streaming (hipotéticas)';
@override
String get minutes_listened => 'Minutos escuchados';
@ -1212,7 +1207,8 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Esto se calcula en base al\npago por stream de Spotify de \$0.003 a \$0.005.\nEs un cálculo hipotético para dar\nuna idea de cuánto habría\npagado a los artistas si hubieras escuchado\nsu canción en Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1257,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get webview_not_found => 'No se encontró el Webview';
@override
String get webview_not_found_description => 'No hay tiempo de ejecución de Webview instalado en su dispositivo.\nSi está instalado, asegúrese de que esté en el environment PATH\n\nDespués de instalar, reinicie la aplicación';
String get webview_not_found_description =>
'No hay tiempo de ejecución de Webview instalado en su dispositivo.\nSi está instalado, asegúrese de que esté en el environment PATH\n\nDespués de instalar, reinicie la aplicación';
@override
String get unsupported_platform => 'Plataforma no soportada';
@ -1322,19 +1319,22 @@ class AppLocalizationsEs extends AppLocalizations {
String get view_all => 'Ver todo';
@override
String get no_tracks_added_yet => 'Parece que aún no has agregado ninguna canción.';
String get no_tracks_added_yet =>
'Parece que aún no has agregado ninguna canción.';
@override
String get no_tracks => 'Parece que no hay canciones aquí.';
@override
String get no_tracks_listened_yet => 'Parece que no has escuchado nada todavía.';
String get no_tracks_listened_yet =>
'Parece que no has escuchado nada todavía.';
@override
String get not_following_artists => 'No sigues a ningún artista.';
@override
String get no_favorite_albums_yet => 'Parece que aún no has agregado ningún álbum a tus favoritos.';
String get no_favorite_albums_yet =>
'Parece que aún no has agregado ningún álbum a tus favoritos.';
@override
String get no_logs_found => 'No se encontraron registros';
@ -1358,7 +1358,8 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'En macOS/Linux/sistemas operativos similares a Unix, establecer la ruta en .zshrc/.bashrc/.bash_profile etc. no funcionará.\nNecesitas establecer la ruta en el archivo de configuración del shell.';
String get youtube_engine_unix_issue_message =>
'En macOS/Linux/sistemas operativos similares a Unix, establecer la ruta en .zshrc/.bashrc/.bash_profile etc. no funcionará.\nNecesitas establecer la ruta en el archivo de configuración del shell.';
@override
String get download => 'Descargar';
@ -1376,7 +1377,8 @@ class AppLocalizationsEs extends AppLocalizations {
String get edit_port => 'Editar puerto';
@override
String get port_helper_msg => 'El valor predeterminado es -1, lo que indica un número aleatorio. Si tienes un firewall configurado, se recomienda establecer esto.';
String get port_helper_msg =>
'El valor predeterminado es -1, lo que indica un número aleatorio. Si tienes un firewall configurado, se recomienda establecer esto.';
@override
String connect_request(Object client) {
@ -1384,5 +1386,6 @@ class AppLocalizationsEs extends AppLocalizations {
}
@override
String get connection_request_denied => 'Conexión denegada. El usuario denegó el acceso.';
String get connection_request_denied =>
'Conexión denegada. El usuario denegó el acceso.';
}

View File

@ -356,7 +356,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get clear_all => 'Garbitu dena';
@override
String get show_hide_ui_on_hover => 'Erakutsi/Ezkutatu interfazea kurtsorea pasatzean';
String get show_hide_ui_on_hover =>
'Erakutsi/Ezkutatu interfazea kurtsorea pasatzean';
@override
String get always_on_top => 'Beti ikusgai';
@ -379,12 +380,6 @@ class AppLocalizationsEu extends AppLocalizations {
@override
String get account => 'Kontua';
@override
String get login_with_spotify => 'Hasi saioa zure Spotify kontuarekin';
@override
String get connect_with_spotify => 'Spotify-rekin konektatu';
@override
String get logout => 'Itxi saioa';
@ -413,7 +408,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get layout_mode => 'Diseinua';
@override
String get override_layout_settings => 'Responsive diseinuaren ezarpenak ezeztatu';
String get override_layout_settings =>
'Responsive diseinuaren ezarpenak ezeztatu';
@override
String get adaptive => 'Moldagarria';
@ -443,7 +439,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get sync_album_color => 'Sinkronizatu albumaren kolorea';
@override
String get sync_album_color_description => 'Albumaren artearen kolore nagusia erabili azentu kolore bezala';
String get sync_album_color_description =>
'Albumaren artearen kolore nagusia erabili azentu kolore bezala';
@override
String get playback => 'Erreprodukzioa';
@ -461,16 +458,19 @@ class AppLocalizationsEu extends AppLocalizations {
String get pre_download_play => 'Aurre-deskargatu eta erreproduzitu';
@override
String get pre_download_play_description => 'Streaming egin beharrean, byte-ak deskargatu eta erreproduzitu (banda-zabalera handia duten erabiltzaileentzat gomendagarria)';
String get pre_download_play_description =>
'Streaming egin beharrean, byte-ak deskargatu eta erreproduzitu (banda-zabalera handia duten erabiltzaileentzat gomendagarria)';
@override
String get skip_non_music => 'Musika ez diren segmentuak baztertu (SponsorBlock)';
String get skip_non_music =>
'Musika ez diren segmentuak baztertu (SponsorBlock)';
@override
String get blacklist_description => 'Zerrenda beltzeko abesti eta artistak';
@override
String get wait_for_download_to_finish => 'Mesedez, itxaron uneko deskarga bukatu arte';
String get wait_for_download_to_finish =>
'Mesedez, itxaron uneko deskarga bukatu arte';
@override
String get desktop => 'Mahaigaina';
@ -506,7 +506,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get please_sponsor => 'Mesedez, babestu/diruz lagundu';
@override
String get spotube_description => 'Spotube, arina, plataforma-anitza eta doakoa den Spotify-ren bezeroa';
String get spotube_description =>
'Spotube, arina, plataforma-anitza eta doakoa den Spotify-ren bezeroa';
@override
String get version => 'Bertsioa';
@ -538,10 +539,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get license => 'Lizentzia';
@override
String get add_spotify_credentials => 'Gehitu zure Spotify kredentzialak hasi ahal izateko';
@override
String get credentials_will_not_be_shared_disclaimer => 'Ez arduratu, zure kredentzialak ez ditugu bilduko edo inorekin elkarbanatuko';
String get credentials_will_not_be_shared_disclaimer =>
'Ez arduratu, zure kredentzialak ez ditugu bilduko edo inorekin elkarbanatuko';
@override
String get know_how_to_login => 'Ez dakizu nola egin?';
@ -549,11 +548,6 @@ class AppLocalizationsEu extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Jarraitu pausoz-pausoko gida';
@override
String spotify_cookie(Object name) {
return 'Spotify-ren $name cookiea';
}
@override
String cookie_name_cookie(Object name) {
return '$name cookiea';
@ -583,33 +577,6 @@ class AppLocalizationsEu extends AppLocalizations {
@override
String get first_go_to => 'Hasteko, joan hona';
@override
String get login_if_not_logged_in => 'eta hasi saioa/sortu kontua lehendik ez baduzu eginda';
@override
String get step_2 => '2. pausua';
@override
String get step_2_steps => '1. Saioa hasita duzularik, sakatu F12 edo saguaren eskuineko botoia klikatu > Ikuskatu nabigatzaileko garapen tresnak irekitzeko.\n2. Joan \"Aplikazio\" (Chrome, Edge, Brave, etab.) edo \"Biltegiratzea\" (Firefox, Palemoon, etab.)\n3. Joan \"Cookieak\" atalera eta gero \"https://accounts.spotify.com\" azpiatalera';
@override
String get step_3 => '3. pausua';
@override
String get step_3_steps => 'Kopiatu \"sp_dc\" cookiearen balioa';
@override
String get success_emoji => 'Eginda! 🥳';
@override
String get success_message => 'Ongi hasi duzu zure Spotify kontua. Lan bikaina, lagun!';
@override
String get step_4 => '4. pausua';
@override
String get step_4_steps => 'Itsatsi \"sp_dc\"-tik kopiatutako balioa';
@override
String get something_went_wrong => 'Zerbaitek huts egin du';
@ -617,19 +584,23 @@ class AppLocalizationsEu extends AppLocalizations {
String get piped_instance => 'Piped zerbitzariaren instantzia';
@override
String get piped_description => 'Kanten koizidentzietan erabiltzeko Piped zerbitzariaren instantzia';
String get piped_description =>
'Kanten koizidentzietan erabiltzeko Piped zerbitzariaren instantzia';
@override
String get piped_warning => 'Batzuk agian ez dute ongi funtzionatuko, zure ardurapean erabili';
String get piped_warning =>
'Batzuk agian ez dute ongi funtzionatuko, zure ardurapean erabili';
@override
String get invidious_instance => 'Invidious zerbitzari instantzia';
@override
String get invidious_description => 'Invidious zerbitzari instantzia, pistak bat egiteko';
String get invidious_description =>
'Invidious zerbitzari instantzia, pistak bat egiteko';
@override
String get invidious_warning => 'Instantzia batzuek ez dute ondo funtzionatuko. Zure erantzukizunpean erabili';
String get invidious_warning =>
'Instantzia batzuek ez dute ondo funtzionatuko. Zure erantzukizunpean erabili';
@override
String get generate => 'Sortu';
@ -640,10 +611,12 @@ class AppLocalizationsEu extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'Ordezkatu deskargatutako kanta guztiak';
String get replace_downloaded_tracks =>
'Ordezkatu deskargatutako kanta guztiak';
@override
String get skip_download_tracks => 'Deskargatutako kanta guztien deskarga baztertu';
String get skip_download_tracks =>
'Deskargatutako kanta guztien deskarga baztertu';
@override
String get do_you_want_to_replace => 'Dagoen kanta ordezkatu nahi duzu??';
@ -744,7 +717,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get are_you_sure => 'Ziur zaude?';
@override
String get generating_playlist => 'Zure pertsonalizatutako zerrenda sortzen...';
String get generating_playlist =>
'Zure pertsonalizatutako zerrenda sortzen...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +726,28 @@ class AppLocalizationsEu extends AppLocalizations {
}
@override
String get download_warning => 'Abesti guztiak aldi berean deskargatuz gero, argi dago musika pirateatzen ari zarela eta musikaren gizarte sortzaileari kalte egiten diozula. Honen jakitun izan eta artisten lan gogorra errespetatu eta babestea espero dut';
String get download_warning =>
'Abesti guztiak aldi berean deskargatuz gero, argi dago musika pirateatzen ari zarela eta musikaren gizarte sortzaileari kalte egiten diozula. Honen jakitun izan eta artisten lan gogorra errespetatu eta babestea espero dut';
@override
String get download_ip_ban_warning => 'Bidenabar, baliteke zure IPa YouTuben blokeatzea deskarga eskera gehiegi egiten badituzu. IPa blokeatzeak esan nahi du ezin izango duzula YouTube erabili (nahiz eta saioa hasia izan) gutxienez 2-3 hilabetez IP helbide horretatik. Eta Spotube ez da erantzule izango hori gertatzen bazaizu';
String get download_ip_ban_warning =>
'Bidenabar, baliteke zure IPa YouTuben blokeatzea deskarga eskera gehiegi egiten badituzu. IPa blokeatzeak esan nahi du ezin izango duzula YouTube erabili (nahiz eta saioa hasia izan) gutxienez 2-3 hilabetez IP helbide horretatik. Eta Spotube ez da erantzule izango hori gertatzen bazaizu';
@override
String get by_clicking_accept_terms => '\'Onartu\' klikatzean, ondorengo baldintzak onartzen dituzu:';
String get by_clicking_accept_terms =>
'\'Onartu\' klikatzean, ondorengo baldintzak onartzen dituzu:';
@override
String get download_agreement_1 => 'Badakit musika pirateatzen ari naizela. Gaiztoa naiz';
String get download_agreement_1 =>
'Badakit musika pirateatzen ari naizela. Gaiztoa naiz';
@override
String get download_agreement_2 => 'Ahal dudanean lagunduko diot artistari baina oraingoz ez dut bere artea erosteko dirurik';
String get download_agreement_2 =>
'Ahal dudanean lagunduko diot artistari baina oraingoz ez dut bere artea erosteko dirurik';
@override
String get download_agreement_3 => 'Erabat jakitun naiz YouTubek nire IPa blokea dezakeela eta ez diot Spotube-ri edo bere jabe/laguntzaileei erantzukizunik eskatuko nire oraingo jokaerak ekar ditzakeen arazoengatik';
String get download_agreement_3 =>
'Erabat jakitun naiz YouTubek nire IPa blokea dezakeela eta ez diot Spotube-ri edo bere jabe/laguntzaileei erantzukizunik eskatuko nire oraingo jokaerak ekar ditzakeen arazoengatik';
@override
String get decline => 'Baztertu';
@ -848,7 +828,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get failed_to_encrypt => 'Errorea zifratzean';
@override
String get encryption_failed_warning => 'Spotube-ek zifratzea darabil datuak modu seguruan biltegiratzeko. Baina huts egin du. Hori dela eta, biltegiratzea ez da segurua izango\nLinux erabiltzen ari bazara, ziurtatu edozein sekretu-zerbitzu (gnome-keyring, kde-wallet, keepassxc etab.) instalatuta duzula';
String get encryption_failed_warning =>
'Spotube-ek zifratzea darabil datuak modu seguruan biltegiratzeko. Baina huts egin du. Hori dela eta, biltegiratzea ez da segurua izango\nLinux erabiltzen ari bazara, ziurtatu edozein sekretu-zerbitzu (gnome-keyring, kde-wallet, keepassxc etab.) instalatuta duzula';
@override
String get querying_info => 'Informazioa egiaztatzen...';
@ -946,7 +927,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get friends => 'Lagunak';
@override
String get no_lyrics_available => 'Sentitzen dugu, ezin dira kanta honen hitzak aurkitu';
String get no_lyrics_available =>
'Sentitzen dugu, ezin dira kanta honen hitzak aurkitu';
@override
String get start_a_radio => 'Hasi Irrati bat';
@ -955,7 +937,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get how_to_start_radio => 'Nola hasi nahi duzu irratia?';
@override
String get replace_queue_question => 'Uneko zerrenda ordezkatu nahi duzu edo bertan gehitu?';
String get replace_queue_question =>
'Uneko zerrenda ordezkatu nahi duzu edo bertan gehitu?';
@override
String get endless_playback => 'Amaigabeko erreprodukzioa';
@ -964,7 +947,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get delete_playlist => 'Ezabatu zerrenda';
@override
String get delete_playlist_confirmation => 'Ziur zaude zerrenda ezabatu nahi duzula?';
String get delete_playlist_confirmation =>
'Ziur zaude zerrenda ezabatu nahi duzula?';
@override
String get local_tracks => 'Kanta lokalak';
@ -991,13 +975,16 @@ class AppLocalizationsEu extends AppLocalizations {
String get youtube_source_description => 'Gomendatua eta hobekien dabilena.';
@override
String get piped_source_description => 'Aske zara? YouTube bezala, baino askeago.';
String get piped_source_description =>
'Aske zara? YouTube bezala, baino askeago.';
@override
String get jiosaavn_source_description => 'Asia hegoaldeko herrialdeetarako hoberena.';
String get jiosaavn_source_description =>
'Asia hegoaldeko herrialdeetarako hoberena.';
@override
String get invidious_source_description => 'Piped-en antzekoa, baina eskuragarritasun handiagoarekin';
String get invidious_source_description =>
'Piped-en antzekoa, baina eskuragarritasun handiagoarekin';
@override
String highest_quality(Object quality) {
@ -1008,13 +995,15 @@ class AppLocalizationsEu extends AppLocalizations {
String get select_audio_source => 'Aukeratu Audio Iturria';
@override
String get endless_playback_description => 'Gehitu automatikoki kanta berriak\n ilararen bukaeran';
String get endless_playback_description =>
'Gehitu automatikoki kanta berriak\n ilararen bukaeran';
@override
String get choose_your_region => 'Aukeratu zure herrialdea';
@override
String get choose_your_region_description => 'Honekin Spotube-k zure kokalerakuari dagokion edukia\neskeiniko dizu.';
String get choose_your_region_description =>
'Honekin Spotube-k zure kokalerakuari dagokion edukia\neskeiniko dizu.';
@override
String get choose_your_language => 'Aukeratu zure hizkuntza';
@ -1023,7 +1012,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get help_project_grow => 'Lagundu proiektu honi hazten';
@override
String get help_project_grow_description => 'Spotube kode irekiko proiektu bat da. Proiektu hau hazten lagundu dezakezu, erroreak jakinaraziz edo ezaugarri berriak proposatuz.';
String get help_project_grow_description =>
'Spotube kode irekiko proiektu bat da. Proiektu hau hazten lagundu dezakezu, erroreak jakinaraziz edo ezaugarri berriak proposatuz.';
@override
String get contribute_on_github => 'GitHub-en lagundu';
@ -1038,7 +1028,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get enable_connect => 'Gaitu konexioa';
@override
String get enable_connect_description => 'Kontrolatu Spotube beste gailu batzuetatik';
String get enable_connect_description =>
'Kontrolatu Spotube beste gailu batzuetatik';
@override
String get devices => 'Gailuak';
@ -1117,7 +1108,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get choose_the_device => 'Aukeratu gailua:';
@override
String get multiple_device_connected => 'Hainbat gailu daude konektatuta.\nAukeratu zein gailutan aplikatu nahi duzun ekintza hau';
String get multiple_device_connected =>
'Hainbat gailu daude konektatuta.\nAukeratu zein gailutan aplikatu nahi duzun ekintza hau';
@override
String get nothing_found => 'Ezer ez da aurkitu';
@ -1190,7 +1182,8 @@ class AppLocalizationsEu extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => 'Streaming ordainketa (hipotetikoa)';
String get streaming_fees_hypothetical =>
'Streaming ordainketa (hipotetikoa)';
@override
String get minutes_listened => 'Entzundako minutuak';
@ -1212,7 +1205,8 @@ class AppLocalizationsEu extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Sportify-k stream bakoitzeko duen \$0.003 eta \$0.005\nordainsarian oinarritua da. Kalkulu hipotetiko bat,\nkanta hauek Spotify-n entzun bazenitu,\nberaiek artistari zenbat ordaiduko lioketen jakin dezazun.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1255,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get webview_not_found => 'Ez da Webview aurkitu';
@override
String get webview_not_found_description => 'Ez dago Webview abiarazte denbora-instalaziorik zure gailuan.\nInstalatuta badago, ziurtatu environment PATH-an dagoela\n\nInstalatu ondoren, berrabiarazi aplikazioa';
String get webview_not_found_description =>
'Ez dago Webview abiarazte denbora-instalaziorik zure gailuan.\nInstalatuta badago, ziurtatu environment PATH-an dagoela\n\nInstalatu ondoren, berrabiarazi aplikazioa';
@override
String get unsupported_platform => 'Plataforma ez onartua';
@ -1293,7 +1288,8 @@ class AppLocalizationsEu extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Fitxategi hauek esportatu nahi al dituzu';
String get export_cache_confirmation =>
'Fitxategi hauek esportatu nahi al dituzu';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,19 +1318,22 @@ class AppLocalizationsEu extends AppLocalizations {
String get view_all => 'Ikusi guztia';
@override
String get no_tracks_added_yet => 'Dirudienez, oraindik ez duzu abestirik gehitu.';
String get no_tracks_added_yet =>
'Dirudienez, oraindik ez duzu abestirik gehitu.';
@override
String get no_tracks => 'Ez dirudi hemen abestirik dagoenik.';
@override
String get no_tracks_listened_yet => 'Dirudienez, oraindik ez duzu ezer entzun.';
String get no_tracks_listened_yet =>
'Dirudienez, oraindik ez duzu ezer entzun.';
@override
String get not_following_artists => 'Ez zaude artisten atzetik.';
@override
String get no_favorite_albums_yet => 'Dirudienez, oraindik ez duzu albumik gehitu zure gogokoen artean.';
String get no_favorite_albums_yet =>
'Dirudienez, oraindik ez duzu albumik gehitu zure gogokoen artean.';
@override
String get no_logs_found => 'Ez dira log-ak aurkitu';
@ -1358,7 +1357,8 @@ class AppLocalizationsEu extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/Unix bezalako sistemetan, .zshrc/.bashrc/.bash_profile bezalako fitxategietan bidearen ezarpenak ez dira funtzionatuko.\nBidearen ezarpena shell konfigurazio fitxategian egin behar duzu.';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/Unix bezalako sistemetan, .zshrc/.bashrc/.bash_profile bezalako fitxategietan bidearen ezarpenak ez dira funtzionatuko.\nBidearen ezarpena shell konfigurazio fitxategian egin behar duzu.';
@override
String get download => 'Deskargatu';
@ -1376,7 +1376,8 @@ class AppLocalizationsEu extends AppLocalizations {
String get edit_port => 'Editatu portua';
@override
String get port_helper_msg => 'Lehenetsitako balioa -1 da, zenbaki aleatorioa adierazten duena. Su firewall konfiguratu baduzu, gomendatzen da hau ezartzea.';
String get port_helper_msg =>
'Lehenetsitako balioa -1 da, zenbaki aleatorioa adierazten duena. Su firewall konfiguratu baduzu, gomendatzen da hau ezartzea.';
@override
String connect_request(Object client) {
@ -1384,5 +1385,6 @@ class AppLocalizationsEu extends AppLocalizations {
}
@override
String get connection_request_denied => 'Konektatzea ukatu da. Erabiltzaileak sarbidea ukatu du.';
String get connection_request_denied =>
'Konektatzea ukatu da. Erabiltzaileak sarbidea ukatu du.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsFa extends AppLocalizations {
@override
String get account => 'حساب کاربری';
@override
String get login_with_spotify => 'با حساب اسپوتیفای خود وارد شوید';
@override
String get connect_with_spotify => 'متصل شدن به اسپوتیفای';
@override
String get logout => 'خارج شدن';
@ -413,7 +407,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get layout_mode => 'حالت چیدمان';
@override
String get override_layout_settings => 'تنطیمات حالت واکنشگرای چیدمان را لغو کن';
String get override_layout_settings =>
'تنطیمات حالت واکنشگرای چیدمان را لغو کن';
@override
String get adaptive => 'قابل تطبیق';
@ -443,7 +438,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get sync_album_color => 'هنگام سازی رنگ البوم';
@override
String get sync_album_color_description => 'از رنگ البوم هنرمند به عنوان رنگ تاکیدی استفاده میکند';
String get sync_album_color_description =>
'از رنگ البوم هنرمند به عنوان رنگ تاکیدی استفاده میکند';
@override
String get playback => 'پخش';
@ -461,7 +457,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get pre_download_play => 'دانلود و پخش کنید';
@override
String get pre_download_play_description => 'به جای پخش جریانی صدا، بایت ها را دانلود کنید و به جای آن پخش کنید (برای کاربران با پهنای باند بالاتر توصیه می شود)';
String get pre_download_play_description =>
'به جای پخش جریانی صدا، بایت ها را دانلود کنید و به جای آن پخش کنید (برای کاربران با پهنای باند بالاتر توصیه می شود)';
@override
String get skip_non_music => 'رد شدن از پخش های غیر موسیقی (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get blacklist_description => 'آهنگ ها و هنرمند های در لیست سیاه';
@override
String get wait_for_download_to_finish => 'لطفا صبر کنید تا دانلود آهنگ جاری تمام شود';
String get wait_for_download_to_finish =>
'لطفا صبر کنید تا دانلود آهنگ جاری تمام شود';
@override
String get desktop => 'میز کار';
@ -506,7 +504,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get please_sponsor => 'لطفا کمک/حمایت کنید';
@override
String get spotube_description => 'یک برنامه سبک و مولتی پلتفرم و رایگان برای همه استSpotube';
String get spotube_description =>
'یک برنامه سبک و مولتی پلتفرم و رایگان برای همه استSpotube';
@override
String get version => 'نسخه';
@ -538,10 +537,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get license => 'مجوز';
@override
String get add_spotify_credentials => 'برای شروع اعتبار اسپوتیفای خود را اضافه کنید';
@override
String get credentials_will_not_be_shared_disclaimer => 'نگران نباشید هیچ کدوما از اعتبارات شما جمع اوری نمیشود یا با کسی اشتراک گزاشته نمیشود';
String get credentials_will_not_be_shared_disclaimer =>
'نگران نباشید هیچ کدوما از اعتبارات شما جمع اوری نمیشود یا با کسی اشتراک گزاشته نمیشود';
@override
String get know_how_to_login => 'نمیدانی چگونه این کار را انجام بدهی؟';
@ -549,11 +546,6 @@ class AppLocalizationsFa extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'راهنما را گام به گام دنبال کنید';
@override
String spotify_cookie(Object name) {
return 'Spotify $name کوکی';
}
@override
String cookie_name_cookie(Object name) {
return '$name کوکی';
@ -583,33 +575,6 @@ class AppLocalizationsFa extends AppLocalizations {
@override
String get first_go_to => 'اول برو داخل ';
@override
String get login_if_not_logged_in => 'و اگر وارد نشده اید، وارد/ثبت نام کنید';
@override
String get step_2 => 'گام 2';
@override
String get step_2_steps => '1. پس از ورود به سیستم، F12 یا کلیک راست ماوس > Inspect را فشار دهید تا ابزارهای توسعه مرورگر باز شود..\n2. سپس به تب \"Application\" (Chrome, Edge, Brave etc..) یا \"Storage\" Tab (Firefox, Palemoon etc..)\n3. به قسمت \"Cookies\" و به پخش \"https://accounts.spotify.com\" بروید';
@override
String get step_3 => 'گام 3';
@override
String get step_3_steps => 'مقدار کوکی \"sp_dc\" را کپی کنید';
@override
String get success_emoji => 'موفقیت🥳';
@override
String get success_message => 'اکنون با موفقیت با حساب اسپوتیفای خود وارد شده اید';
@override
String get step_4 => 'مرحله 4';
@override
String get step_4_steps => 'مقدار کپی شده \"sp_dc\" را الصاق کنید';
@override
String get something_went_wrong => 'اشتباهی رخ داده';
@ -620,7 +585,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get piped_description => 'مشکل در ارتباط با سرور در دریافت آهنگ ها';
@override
String get piped_warning => 'برخی از آنها ممکن است خوب کارنکند.بنابراین با مسولیت خود استفاده کنید';
String get piped_warning =>
'برخی از آنها ممکن است خوب کارنکند.بنابراین با مسولیت خود استفاده کنید';
@override
String get invidious_instance => 'نمونه سرور Invidious';
@ -629,7 +595,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get invidious_description => 'نمونه سرور Invidious برای تطبیق آهنگ';
@override
String get invidious_warning => 'برخی از نمونه‌ها ممکن است به خوبی کار نکنند. با احتیاط استفاده کنید';
String get invidious_warning =>
'برخی از نمونه‌ها ممکن است به خوبی کار نکنند. با احتیاط استفاده کنید';
@override
String get generate => 'ایجاد';
@ -640,13 +607,15 @@ class AppLocalizationsFa extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'همه ی آهنگ های دانلود شده را جایگزین کنید';
String get replace_downloaded_tracks =>
'همه ی آهنگ های دانلود شده را جایگزین کنید';
@override
String get skip_download_tracks => 'همه ی آهنگ های دانلود شده را رد کنید';
@override
String get do_you_want_to_replace => 'ایا میخواهید آهنگ های موجود جایگزین کنید؟';
String get do_you_want_to_replace =>
'ایا میخواهید آهنگ های موجود جایگزین کنید؟';
@override
String get replace => 'جایگزین کردن';
@ -752,22 +721,27 @@ class AppLocalizationsFa extends AppLocalizations {
}
@override
String get download_warning => 'اگر همه ی آهنگ ها را به صورت انبو دانلود کنید به وضوح در حال دزدی موسقی هستید و در حال اسیب وارد کردن به جامه ی خلاق هنری می باشید .امیدوارم که از این موضوع اگاه باشید .همیشه سعی کنید به کار سخت هنرمند اخترام بگذارید.';
String get download_warning =>
'اگر همه ی آهنگ ها را به صورت انبو دانلود کنید به وضوح در حال دزدی موسقی هستید و در حال اسیب وارد کردن به جامه ی خلاق هنری می باشید .امیدوارم که از این موضوع اگاه باشید .همیشه سعی کنید به کار سخت هنرمند اخترام بگذارید.';
@override
String get download_ip_ban_warning => 'راستی آی پی شما می تواند در یوتوب به دلیل درخواست های دانلود بیش از حد معمول مسدود شود. بلوک آی پی به این معنی است که شما نمی توانید از یوتوب (حتی اگر وارد سیستم شده باشید) حداقل 2-3 ماه از آن دستگاه آی پی استفاده کنید. و Spotube هیچ مسئولیتی در صورت وقوع این اتفاق ندارد';
String get download_ip_ban_warning =>
'راستی آی پی شما می تواند در یوتوب به دلیل درخواست های دانلود بیش از حد معمول مسدود شود. بلوک آی پی به این معنی است که شما نمی توانید از یوتوب (حتی اگر وارد سیستم شده باشید) حداقل 2-3 ماه از آن دستگاه آی پی استفاده کنید. و Spotube هیچ مسئولیتی در صورت وقوع این اتفاق ندارد';
@override
String get by_clicking_accept_terms => 'با کلیک بر روی قبول با شرایط زیر موافقت می کنید:';
String get by_clicking_accept_terms =>
'با کلیک بر روی قبول با شرایط زیر موافقت می کنید:';
@override
String get download_agreement_1 => 'من میدانم در حال دزدی هستم .من بد هستم';
@override
String get download_agreement_2 => 'من هر کجا ک بتوانم از هنرمندان حمایت میکنم اما این کارا فقط به دلیل اینکه توانایی مالی ندارم انجام میدهم';
String get download_agreement_2 =>
'من هر کجا ک بتوانم از هنرمندان حمایت میکنم اما این کارا فقط به دلیل اینکه توانایی مالی ندارم انجام میدهم';
@override
String get download_agreement_3 => 'من کاملا میدانم که از طرف یوتوب بلاک میشم و این برنامه و مالکان را مسول این حادثه نمیدانم.';
String get download_agreement_3 =>
'من کاملا میدانم که از طرف یوتوب بلاک میشم و این برنامه و مالکان را مسول این حادثه نمیدانم.';
@override
String get decline => 'قبول نکردن';
@ -848,7 +822,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get failed_to_encrypt => 'رمز گذاری نشده';
@override
String get encryption_failed_warning => 'Spotube از رمزگذاری برای ذخیره ایمن داده های شما استفاده می کند. اما موفق به انجام این کار نشد. بنابراین به فضای ذخیره‌سازی ناامن تبدیل می‌شود\nاگر از لینوکس استفاده می‌کنید، لطفاً مطمئن شوید که سرویس مخفی (gnome-keyring، kde-wallet، keepassxc و غیره) را نصب کرده‌اید.';
String get encryption_failed_warning =>
'Spotube از رمزگذاری برای ذخیره ایمن داده های شما استفاده می کند. اما موفق به انجام این کار نشد. بنابراین به فضای ذخیره‌سازی ناامن تبدیل می‌شود\nاگر از لینوکس استفاده می‌کنید، لطفاً مطمئن شوید که سرویس مخفی (gnome-keyring، kde-wallet، keepassxc و غیره) را نصب کرده‌اید.';
@override
String get querying_info => 'جستجو درباره ';
@ -946,7 +921,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get friends => 'دوستان';
@override
String get no_lyrics_available => 'متاسفیم، قادر به یافتن متن این قطعه نیستیم';
String get no_lyrics_available =>
'متاسفیم، قادر به یافتن متن این قطعه نیستیم';
@override
String get start_a_radio => 'شروع یک رادیو';
@ -955,7 +931,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get how_to_start_radio => 'چگونه می‌خواهید رادیو را شروع کنید؟';
@override
String get replace_queue_question => 'آیا می‌خواهید لیست پخش فعلی را جایگزین کنید یا به آن اضافه کنید؟';
String get replace_queue_question =>
'آیا می‌خواهید لیست پخش فعلی را جایگزین کنید یا به آن اضافه کنید؟';
@override
String get endless_playback => 'پخش بی‌پایان';
@ -964,7 +941,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get delete_playlist => 'حذف لیست پخش';
@override
String get delete_playlist_confirmation => 'آیا مطمئن هستید که می‌خواهید این لیست پخش را حذف کنید؟';
String get delete_playlist_confirmation =>
'آیا مطمئن هستید که می‌خواهید این لیست پخش را حذف کنید؟';
@override
String get local_tracks => 'موسیقی‌های محلی';
@ -991,13 +969,15 @@ class AppLocalizationsFa extends AppLocalizations {
String get youtube_source_description => 'پیشنهاد شده و بهترین عمل می‌کند.';
@override
String get piped_source_description => 'احساس آزادی می‌کنید؟ مانند یوتیوب اما بیشتر آزاد.';
String get piped_source_description =>
'احساس آزادی می‌کنید؟ مانند یوتیوب اما بیشتر آزاد.';
@override
String get jiosaavn_source_description => 'بهترین برای منطقه جنوب آسیا.';
@override
String get invidious_source_description => 'شبیه Piped اما با در دسترس بودن بیشتر';
String get invidious_source_description =>
'شبیه Piped اما با در دسترس بودن بیشتر';
@override
String highest_quality(Object quality) {
@ -1008,13 +988,15 @@ class AppLocalizationsFa extends AppLocalizations {
String get select_audio_source => 'انتخاب منبع صوتی';
@override
String get endless_playback_description => 'خودکار اضافه کردن آهنگ‌های جدید\nبه انتهای صف';
String get endless_playback_description =>
'خودکار اضافه کردن آهنگ‌های جدید\nبه انتهای صف';
@override
String get choose_your_region => 'منطقه خود را انتخاب کنید';
@override
String get choose_your_region_description => 'این به Spotube کمک می‌کند تا محتوای مناسبی را برای موقعیت شما نشان دهد.';
String get choose_your_region_description =>
'این به Spotube کمک می‌کند تا محتوای مناسبی را برای موقعیت شما نشان دهد.';
@override
String get choose_your_language => 'زبان خود را انتخاب کنید';
@ -1023,7 +1005,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get help_project_grow => 'کمک به رشد این پروژه';
@override
String get help_project_grow_description => 'Spotube یک پروژه متن باز است. شما می‌توانید با به پروژه کمک کردن، گزارش دادن اشکالات یا پیشنهاد ویژگی‌های جدید، به این پروژه کمک کنید.';
String get help_project_grow_description =>
'Spotube یک پروژه متن باز است. شما می‌توانید با به پروژه کمک کردن، گزارش دادن اشکالات یا پیشنهاد ویژگی‌های جدید، به این پروژه کمک کنید.';
@override
String get contribute_on_github => 'مشارکت در GitHub';
@ -1117,7 +1100,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get choose_the_device => 'دستگاه را انتخاب کنید:';
@override
String get multiple_device_connected => 'چندین دستگاه متصل هستند.\nدستگاهی را انتخاب کنید که می‌خواهید این عملیات بر روی آن انجام شود';
String get multiple_device_connected =>
'چندین دستگاه متصل هستند.\nدستگاهی را انتخاب کنید که می‌خواهید این عملیات بر روی آن انجام شود';
@override
String get nothing_found => 'چیزی پیدا نشد';
@ -1212,7 +1196,8 @@ class AppLocalizationsFa extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*این بر اساس پرداخت هر پخش اسپاتیفای\nبه مبلغ 0.003 تا 0.005 دلار محاسبه شده است.\nاین یک محاسبه فرضی است که به کاربران نشان دهد چقدر ممکن است\nبه هنرمندان پرداخت می‌کردند اگر ترانه آنها را در اسپاتیفای گوش می‌دادند.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1246,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get webview_not_found => 'وب‌ویو پیدا نشد';
@override
String get webview_not_found_description => 'هیچ اجرای وب‌ویو روی دستگاه شما نصب نشده است.\nدر صورت نصب، مطمئن شوید که در environment PATH قرار دارد\n\nپس از نصب، برنامه را مجدداً راه‌اندازی کنید';
String get webview_not_found_description =>
'هیچ اجرای وب‌ویو روی دستگاه شما نصب نشده است.\nدر صورت نصب، مطمئن شوید که در environment PATH قرار دارد\n\nپس از نصب، برنامه را مجدداً راه‌اندازی کنید';
@override
String get unsupported_platform => 'پلتفرم پشتیبانی نمی‌شود';
@ -1282,7 +1268,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get clear_cache => 'پاک کردن حافظه موقت';
@override
String get clear_cache_confirmation => 'آیا می‌خواهید حافظه موقت را پاک کنید؟';
String get clear_cache_confirmation =>
'آیا می‌خواهید حافظه موقت را پاک کنید؟';
@override
String get export_cache_files => 'صادر کردن فایل‌های حافظه موقت';
@ -1293,7 +1280,8 @@ class AppLocalizationsFa extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'آیا می‌خواهید این فایل‌ها را صادر کنید به';
String get export_cache_confirmation =>
'آیا می‌خواهید این فایل‌ها را صادر کنید به';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,7 +1310,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get view_all => 'مشاهده همه';
@override
String get no_tracks_added_yet => 'به نظر می‌رسد هنوز هیچ آهنگی اضافه نکرده‌اید.';
String get no_tracks_added_yet =>
'به نظر می‌رسد هنوز هیچ آهنگی اضافه نکرده‌اید.';
@override
String get no_tracks => 'به نظر می‌رسد هیچ آهنگی در اینجا وجود ندارد.';
@ -1334,7 +1323,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get not_following_artists => 'شما هیچ هنرمندی را دنبال نمی‌کنید.';
@override
String get no_favorite_albums_yet => 'به نظر می‌رسد هنوز هیچ آلبومی را به علاقه‌مندی‌هایتان اضافه نکرده‌اید.';
String get no_favorite_albums_yet =>
'به نظر می‌رسد هنوز هیچ آلبومی را به علاقه‌مندی‌هایتان اضافه نکرده‌اید.';
@override
String get no_logs_found => 'هیچ لاگی پیدا نشد';
@ -1358,7 +1348,8 @@ class AppLocalizationsFa extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'در macOS/Linux/سیستم‌عامل‌های مشابه Unix، تنظیم مسیر در .zshrc/.bashrc/.bash_profile و غیره کار نمی‌کند.\nباید مسیر را در فایل پیکربندی شل تنظیم کنید.';
String get youtube_engine_unix_issue_message =>
'در macOS/Linux/سیستم‌عامل‌های مشابه Unix، تنظیم مسیر در .zshrc/.bashrc/.bash_profile و غیره کار نمی‌کند.\nباید مسیر را در فایل پیکربندی شل تنظیم کنید.';
@override
String get download => 'دانلود';
@ -1376,7 +1367,8 @@ class AppLocalizationsFa extends AppLocalizations {
String get edit_port => 'ویرایش پورت';
@override
String get port_helper_msg => 'پیش‌فرض -1 است که نشان‌دهنده یک عدد تصادفی است. اگر فایروال شما پیکربندی شده است، توصیه می‌شود این را تنظیم کنید.';
String get port_helper_msg =>
'پیش‌فرض -1 است که نشان‌دهنده یک عدد تصادفی است. اگر فایروال شما پیکربندی شده است، توصیه می‌شود این را تنظیم کنید.';
@override
String connect_request(Object client) {
@ -1384,5 +1376,6 @@ class AppLocalizationsFa extends AppLocalizations {
}
@override
String get connection_request_denied => 'اتصال رد شد. کاربر دسترسی را رد کرد.';
String get connection_request_denied =>
'اتصال رد شد. کاربر دسترسی را رد کرد.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsFi extends AppLocalizations {
@override
String get account => 'Käyttäjä';
@override
String get login_with_spotify => 'Kirjaudu Spotify-käyttäjällä';
@override
String get connect_with_spotify => 'Yhdistä Spotify:lla';
@override
String get logout => 'Kirjaudu ulos';
@ -413,7 +407,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get layout_mode => 'Asettelutila';
@override
String get override_layout_settings => 'Jätä reagoiva asettelutila huomioimatta';
String get override_layout_settings =>
'Jätä reagoiva asettelutila huomioimatta';
@override
String get adaptive => 'Mukautuva';
@ -443,7 +438,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get sync_album_color => 'Synkronoi albumin väri';
@override
String get sync_album_color_description => 'Käyttää albumin kansitaiteen vallitsevaa väirä korostuvärinä';
String get sync_album_color_description =>
'Käyttää albumin kansitaiteen vallitsevaa väirä korostuvärinä';
@override
String get playback => 'Toisto';
@ -461,7 +457,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get pre_download_play => 'Esilataa ja soita';
@override
String get pre_download_play_description => 'Audion suoratoiston sijaan, lataa tavut ja soita ne (Suositeltu korkeamman kaistanleveyden käyttäjille)';
String get pre_download_play_description =>
'Audion suoratoiston sijaan, lataa tavut ja soita ne (Suositeltu korkeamman kaistanleveyden käyttäjille)';
@override
String get skip_non_music => 'Ohita ei-musiikki kohdat (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get blacklist_description => 'Mustalistat kappaleet aja artistit';
@override
String get wait_for_download_to_finish => 'Odota nykyisen latauksen lopetteluun';
String get wait_for_download_to_finish =>
'Odota nykyisen latauksen lopetteluun';
@override
String get desktop => 'Työpöytä';
@ -506,7 +504,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get please_sponsor => 'Sponsoroi/Lahjoita, kiitos';
@override
String get spotube_description => 'Spotube, kevyt, cross-platform, vapaa-kaikille spotify clientti';
String get spotube_description =>
'Spotube, kevyt, cross-platform, vapaa-kaikille spotify clientti';
@override
String get version => 'Versio';
@ -538,10 +537,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get license => 'Lisenssi';
@override
String get add_spotify_credentials => 'Lisää Spotify-tunnuksesi aloittaaksesi';
@override
String get credentials_will_not_be_shared_disclaimer => 'Älä huoli, tunnuksiasi ei talleteta tai jaeta kenenkään kanssa';
String get credentials_will_not_be_shared_disclaimer =>
'Älä huoli, tunnuksiasi ei talleteta tai jaeta kenenkään kanssa';
@override
String get know_how_to_login => 'Etkö tiedä miten tehdä tämä?';
@ -549,11 +546,6 @@ class AppLocalizationsFi extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Seuraa askel askeleelta opasta';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Keksi';
}
@override
String cookie_name_cookie(Object name) {
return '$name Keksi';
@ -583,33 +575,6 @@ class AppLocalizationsFi extends AppLocalizations {
@override
String get first_go_to => 'Ensiksi, mene';
@override
String get login_if_not_logged_in => 'ja Kirjaudu/Tee tili jos et ole kirjautunut sisään';
@override
String get step_2 => 'Vaihe 2';
@override
String get step_2_steps => '1. Kun olet kirjautunut, paina F12 tai oikeaa hiiren näppäintä > Tarkista ja avaa selaimen kehittäjä työkalut.\n2. Mene sitten \"Application\"-välilehteen (Chrome, Edge, Brave jne..) tai \"Storage\"-välilehteen (Firefox, Palemoon jne..)\n3. Mene \"Cookies\"-osastoon, sitten \"https://accounts.spotify.com\" alakohtaan.';
@override
String get step_3 => 'Vaihe 3';
@override
String get step_3_steps => 'Kopioi Keksin \"sp_dc\" arvo';
@override
String get success_emoji => 'Onnistuit🥳';
@override
String get success_message => 'Olet nyt kirjautunut sisään Spotify-käyttäjällesi. Hyvää työtä toveri!';
@override
String get step_4 => 'Vaihe 4';
@override
String get step_4_steps => 'Liitä kopioitu \"sp_dc\" arvo';
@override
String get something_went_wrong => 'Jotain meni pieleen';
@ -617,19 +582,23 @@ class AppLocalizationsFi extends AppLocalizations {
String get piped_instance => 'Johdettu palvelinesiintymä';
@override
String get piped_description => 'Johdettu palvelinesiintymä Kappale täsmäyksiin';
String get piped_description =>
'Johdettu palvelinesiintymä Kappale täsmäyksiin';
@override
String get piped_warning => 'Jotkut niistä eivät toimi hyvin, käytä siis omalla vastuullasi';
String get piped_warning =>
'Jotkut niistä eivät toimi hyvin, käytä siis omalla vastuullasi';
@override
String get invidious_instance => 'Invidious-palvelinesiintymä';
@override
String get invidious_description => 'Invidious-palvelinesiintymä raitojen yhteensovittamiseen';
String get invidious_description =>
'Invidious-palvelinesiintymä raitojen yhteensovittamiseen';
@override
String get invidious_warning => 'Jotkin esiintymät eivät välttämättä toimi hyvin. Käytä omalla vastuullasi';
String get invidious_warning =>
'Jotkin esiintymät eivät välttämättä toimi hyvin. Käytä omalla vastuullasi';
@override
String get generate => 'Luo';
@ -646,7 +615,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get skip_download_tracks => 'Ohita ladattujen laulujen lataaminen';
@override
String get do_you_want_to_replace => 'Haluatko korvata olemassa olevan kappaleen??';
String get do_you_want_to_replace =>
'Haluatko korvata olemassa olevan kappaleen??';
@override
String get replace => 'Korvaa';
@ -752,22 +722,28 @@ class AppLocalizationsFi extends AppLocalizations {
}
@override
String get download_warning => 'Jos lataat kaikki laulut kerrällä olet selkeästi Piratoimassa ja aiheuttamassa vahinkoa musiikin luovaan yhteiskuntaan. Toivottavasti olet tietoinen tästä. Yritä aina kunnioittaa ja tukea Artistin kovaa työtä.';
String get download_warning =>
'Jos lataat kaikki laulut kerrällä olet selkeästi Piratoimassa ja aiheuttamassa vahinkoa musiikin luovaan yhteiskuntaan. Toivottavasti olet tietoinen tästä. Yritä aina kunnioittaa ja tukea Artistin kovaa työtä.';
@override
String get download_ip_ban_warning => 'BTW, YouTube voi estää IP-Osoitteesi tavallista liiallisten latauspyyntöjen takia. IP-Osoitteen esto tarkoittaa sitä, ettet voi käyttää YouTubea (vaikka olisit kirjautunut) vähintään 2-3kk aikana kyseiseltä laitteelta. Spotube ei kanna yhtään vastuuta jos se tapahtuu.';
String get download_ip_ban_warning =>
'BTW, YouTube voi estää IP-Osoitteesi tavallista liiallisten latauspyyntöjen takia. IP-Osoitteen esto tarkoittaa sitä, ettet voi käyttää YouTubea (vaikka olisit kirjautunut) vähintään 2-3kk aikana kyseiseltä laitteelta. Spotube ei kanna yhtään vastuuta jos se tapahtuu.';
@override
String get by_clicking_accept_terms => 'Painamalla \'hyväksy\' hyväksyt seuraaviin ehtoihin:';
String get by_clicking_accept_terms =>
'Painamalla \'hyväksy\' hyväksyt seuraaviin ehtoihin:';
@override
String get download_agreement_1 => 'Tiedän että Piratoin musiikkia. Olen paha.';
String get download_agreement_1 =>
'Tiedän että Piratoin musiikkia. Olen paha.';
@override
String get download_agreement_2 => 'Tuen Artisteja silloin kun pystyn, ja teen tämän vain koska minulla ei ole rahaa ostaa heidän taidetta';
String get download_agreement_2 =>
'Tuen Artisteja silloin kun pystyn, ja teen tämän vain koska minulla ei ole rahaa ostaa heidän taidetta';
@override
String get download_agreement_3 => 'Ymmärrän että minun YouTube voi estää IP-Osoitteeni ja en pidä Spotubea tai omistajiinsa/avustajia vastuullisena mistään omista teoistsani';
String get download_agreement_3 =>
'Ymmärrän että minun YouTube voi estää IP-Osoitteeni ja en pidä Spotubea tai omistajiinsa/avustajia vastuullisena mistään omista teoistsani';
@override
String get decline => 'Hylkää';
@ -848,7 +824,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get failed_to_encrypt => 'Salaaminen epäonnistui';
@override
String get encryption_failed_warning => 'Spotube käyttää salausta tallentaakseen tietosi, mutta epäonnistui, joten se palaa epäturvalliseen tallennukseen\nJos käytät Linuxia, varmista että sinulla on turvallisuuspalvelu (gnome-keyring, kde-wallet, keepassxc jne) asennettu';
String get encryption_failed_warning =>
'Spotube käyttää salausta tallentaakseen tietosi, mutta epäonnistui, joten se palaa epäturvalliseen tallennukseen\nJos käytät Linuxia, varmista että sinulla on turvallisuuspalvelu (gnome-keyring, kde-wallet, keepassxc jne) asennettu';
@override
String get querying_info => 'Hankitaan tietoa...';
@ -946,7 +923,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get friends => 'Kaverit';
@override
String get no_lyrics_available => 'Anteeksi, emme löytäneet lyriikoita tälle laululle';
String get no_lyrics_available =>
'Anteeksi, emme löytäneet lyriikoita tälle laululle';
@override
String get start_a_radio => 'Aloita Radio';
@ -955,7 +933,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get how_to_start_radio => 'Kuinka haluat aloittaa radion?';
@override
String get replace_queue_question => 'Haluatko korvata nykyisen jonon vai lisätä siihen?';
String get replace_queue_question =>
'Haluatko korvata nykyisen jonon vai lisätä siihen?';
@override
String get endless_playback => 'Loputon toisto';
@ -964,7 +943,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get delete_playlist => 'Poista soittolista';
@override
String get delete_playlist_confirmation => 'Oletko varma että haluat poistaa tämän soittolistan?';
String get delete_playlist_confirmation =>
'Oletko varma että haluat poistaa tämän soittolistan?';
@override
String get local_tracks => 'Paikalliset kappaleet';
@ -991,13 +971,15 @@ class AppLocalizationsFi extends AppLocalizations {
String get youtube_source_description => 'Suositeltu ja toimii parhaiten.';
@override
String get piped_source_description => 'Tuntuuko vapaalta? Sama kuin YouTube mutta paljon vapautta';
String get piped_source_description =>
'Tuntuuko vapaalta? Sama kuin YouTube mutta paljon vapautta';
@override
String get jiosaavn_source_description => 'Paras Etelä-Aasian alueelle.';
@override
String get invidious_source_description => 'Samankaltainen kuin Piped, mutta korkeammalla saatavuudella';
String get invidious_source_description =>
'Samankaltainen kuin Piped, mutta korkeammalla saatavuudella';
@override
String highest_quality(Object quality) {
@ -1008,13 +990,15 @@ class AppLocalizationsFi extends AppLocalizations {
String get select_audio_source => 'Valitse äänilähde';
@override
String get endless_playback_description => 'Lisää automaattisesti uusia lauluja\njonon perään';
String get endless_playback_description =>
'Lisää automaattisesti uusia lauluja\njonon perään';
@override
String get choose_your_region => 'Valitse alueesi';
@override
String get choose_your_region_description => 'Tämä auttaa Spotube näyttämään sinulle oikeaa sisältöä\nsijaintiasi varten.';
String get choose_your_region_description =>
'Tämä auttaa Spotube näyttämään sinulle oikeaa sisältöä\nsijaintiasi varten.';
@override
String get choose_your_language => 'Valitse kielesi';
@ -1023,7 +1007,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get help_project_grow => 'Auta tätä projektia kasvamaan';
@override
String get help_project_grow_description => 'Spotube projekti minkä lähdekoodi on julkisesti saatavilla. Voit autta tätä projektia kasvamaan muutoksilla, ilmoittamalla bugeista, tai ehdottamalla uusia ominaisuuksia.';
String get help_project_grow_description =>
'Spotube projekti minkä lähdekoodi on julkisesti saatavilla. Voit autta tätä projektia kasvamaan muutoksilla, ilmoittamalla bugeista, tai ehdottamalla uusia ominaisuuksia.';
@override
String get contribute_on_github => 'Auta GitHub:ssa';
@ -1117,7 +1102,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get choose_the_device => 'Valitse laite:';
@override
String get multiple_device_connected => 'Useita laitteita on kytketty.\nValitse laite, jossa haluat toiminnon suorittaa';
String get multiple_device_connected =>
'Useita laitteita on kytketty.\nValitse laite, jossa haluat toiminnon suorittaa';
@override
String get nothing_found => 'Ei tuloksia';
@ -1190,7 +1176,8 @@ class AppLocalizationsFi extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => 'Suoratoiston maksut (hypoteettinen)';
String get streaming_fees_hypothetical =>
'Suoratoiston maksut (hypoteettinen)';
@override
String get minutes_listened => 'Kuunneltuja minuutteja';
@ -1212,7 +1199,8 @@ class AppLocalizationsFi extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Tämä on laskettu Spotifyn suoratoiston\nmaksun perusteella, joka on 0,0030,005 dollaria.\nTämä on hypoteettinen laskelma, joka antaa käyttäjälle käsityksen\nsiitä, kuinka paljon he olisivat maksaneet artisteille,\njollei heidän kappaleensa olisi kuunneltu Spotifyssa.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1249,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get webview_not_found => 'Webview ei löydy';
@override
String get webview_not_found_description => 'Laitteellasi ei ole asennettua Webview-ajonaikaa.\nJos se on asennettu, varmista, että se on environment PATH:ssa\n\nAsennuksen jälkeen käynnistä sovellus uudelleen';
String get webview_not_found_description =>
'Laitteellasi ei ole asennettua Webview-ajonaikaa.\nJos se on asennettu, varmista, että se on environment PATH:ssa\n\nAsennuksen jälkeen käynnistä sovellus uudelleen';
@override
String get unsupported_platform => 'Ei tuettu alusta';
@ -1322,19 +1311,22 @@ class AppLocalizationsFi extends AppLocalizations {
String get view_all => 'Näytä kaikki';
@override
String get no_tracks_added_yet => 'Näyttää siltä, että et ole lisännyt vielä mitään kappaleita.';
String get no_tracks_added_yet =>
'Näyttää siltä, että et ole lisännyt vielä mitään kappaleita.';
@override
String get no_tracks => 'Näyttää siltä, että täällä ei ole kappaleita.';
@override
String get no_tracks_listened_yet => 'Näyttää siltä, että et ole kuunnellut mitään vielä.';
String get no_tracks_listened_yet =>
'Näyttää siltä, että et ole kuunnellut mitään vielä.';
@override
String get not_following_artists => 'Et seuraa yhtään artistia.';
@override
String get no_favorite_albums_yet => 'Näyttää siltä, että et ole lisännyt yhtään albumia suosikkeihisi.';
String get no_favorite_albums_yet =>
'Näyttää siltä, että et ole lisännyt yhtään albumia suosikkeihisi.';
@override
String get no_logs_found => 'Ei lokitietoja löydetty';
@ -1358,7 +1350,8 @@ class AppLocalizationsFi extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/unix-tyyppisissä käyttöjärjestelmissä polun asettaminen .zshrc/.bashrc/.bash_profile jne. ei toimi.\nSinun täytyy asettaa polku shellin asetustiedostoon.';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/unix-tyyppisissä käyttöjärjestelmissä polun asettaminen .zshrc/.bashrc/.bash_profile jne. ei toimi.\nSinun täytyy asettaa polku shellin asetustiedostoon.';
@override
String get download => 'Lataa';
@ -1376,7 +1369,8 @@ class AppLocalizationsFi extends AppLocalizations {
String get edit_port => 'Muokkaa porttia';
@override
String get port_helper_msg => 'Oletusarvo on -1, mikä tarkoittaa satunnaista numeroa. Jos sinulla on palomuuri määritetty, tämän asettamista suositellaan.';
String get port_helper_msg =>
'Oletusarvo on -1, mikä tarkoittaa satunnaista numeroa. Jos sinulla on palomuuri määritetty, tämän asettamista suositellaan.';
@override
String connect_request(Object client) {
@ -1384,5 +1378,6 @@ class AppLocalizationsFi extends AppLocalizations {
}
@override
String get connection_request_denied => 'Yhteys evätty. Käyttäjä eväsi pääsyn.';
String get connection_request_denied =>
'Yhteys evätty. Käyttäjä eväsi pääsyn.';
}

View File

@ -27,7 +27,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get settings => 'Paramètres';
@override
String get genre_categories_filter => 'Filtrer les catégories ou les genres...';
String get genre_categories_filter =>
'Filtrer les catégories ou les genres...';
@override
String get genre => 'Genre';
@ -185,7 +186,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get follow => 'S\'abonner';
@override
String get artist_url_copied => 'URL de l\'artiste copiée dans le presse-papiers';
String get artist_url_copied =>
'URL de l\'artiste copiée dans le presse-papiers';
@override
String added_to_queue(Object tracks) {
@ -315,7 +317,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get shuffle_playlist => 'Lecture aléatoire de la liste de lecture';
@override
String get unshuffle_playlist => 'Annuler la lecture aléatoire de la liste de lecture';
String get unshuffle_playlist =>
'Annuler la lecture aléatoire de la liste de lecture';
@override
String get previous_track => 'Piste précédente';
@ -356,7 +359,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get clear_all => 'Tout effacer';
@override
String get show_hide_ui_on_hover => 'Afficher/Masquer l\'interface utilisateur au survol';
String get show_hide_ui_on_hover =>
'Afficher/Masquer l\'interface utilisateur au survol';
@override
String get always_on_top => 'Toujours au-dessus';
@ -379,12 +383,6 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get account => 'Compte';
@override
String get login_with_spotify => 'Se connecter avec votre compte Spotify';
@override
String get connect_with_spotify => 'Se connecter avec Spotify';
@override
String get logout => 'Se déconnecter';
@ -413,7 +411,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get layout_mode => 'Mode de mise en page';
@override
String get override_layout_settings => 'Remplacer les paramètres de mise en page adaptative';
String get override_layout_settings =>
'Remplacer les paramètres de mise en page adaptative';
@override
String get adaptive => 'Adaptatif';
@ -443,7 +442,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get sync_album_color => 'Synchroniser la couleur de l\'album';
@override
String get sync_album_color_description => 'Utilise la couleur dominante de l\'art de l\'album comme couleur d\'accentuation';
String get sync_album_color_description =>
'Utilise la couleur dominante de l\'art de l\'album comme couleur d\'accentuation';
@override
String get playback => 'Lecture';
@ -461,16 +461,19 @@ class AppLocalizationsFr extends AppLocalizations {
String get pre_download_play => 'Pré-télécharger et lire';
@override
String get pre_download_play_description => 'Au lieu de diffuser de l\'audio, téléchargez les octets et lisez-les à la place (recommandé pour les utilisateurs à bande passante élevée)';
String get pre_download_play_description =>
'Au lieu de diffuser de l\'audio, téléchargez les octets et lisez-les à la place (recommandé pour les utilisateurs à bande passante élevée)';
@override
String get skip_non_music => 'Ignorer les segments non musicaux (SponsorBlock)';
String get skip_non_music =>
'Ignorer les segments non musicaux (SponsorBlock)';
@override
String get blacklist_description => 'Pistes et artistes en liste noire';
@override
String get wait_for_download_to_finish => 'Veuillez attendre la fin du téléchargement en cours';
String get wait_for_download_to_finish =>
'Veuillez attendre la fin du téléchargement en cours';
@override
String get desktop => 'Bureau';
@ -506,7 +509,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get please_sponsor => 'S\'il vous plaît Sponsoriser/Donner';
@override
String get spotube_description => 'Spotube, un client Spotify léger, multiplateforme et gratuit pour tous';
String get spotube_description =>
'Spotube, un client Spotify léger, multiplateforme et gratuit pour tous';
@override
String get version => 'Version';
@ -538,10 +542,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get license => 'Licence';
@override
String get add_spotify_credentials => 'Ajoutez vos identifiants Spotify pour commencer';
@override
String get credentials_will_not_be_shared_disclaimer => 'Ne vous inquiétez pas, vos identifiants ne seront ni collectés ni partagés avec qui que ce soit';
String get credentials_will_not_be_shared_disclaimer =>
'Ne vous inquiétez pas, vos identifiants ne seront ni collectés ni partagés avec qui que ce soit';
@override
String get know_how_to_login => 'Vous ne savez pas comment faire?';
@ -549,11 +551,6 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Suivez le guide étape par étape';
@override
String spotify_cookie(Object name) {
return 'Cookie Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Cookie $name';
@ -583,33 +580,6 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get first_go_to => 'Tout d\'abord, allez sur';
@override
String get login_if_not_logged_in => 'et connectez-vous/inscrivez-vous si vous n\'êtes pas connecté';
@override
String get step_2 => 'Étape 2';
@override
String get step_2_steps => '1. Une fois connecté, appuyez sur F12 ou clic droit de la souris > Inspecter pour ouvrir les outils de développement du navigateur.\n2. Ensuite, allez dans l\'onglet \"Application\" (Chrome, Edge, Brave, etc.) ou l\'onglet \"Stockage\" (Firefox, Palemoon, etc.)\n3. Allez dans la section \"Cookies\", puis dans la sous-section \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Étape 3';
@override
String get step_3_steps => 'Copiez la valeur du cookie \"sp_dc\"';
@override
String get success_emoji => 'Succès🥳';
@override
String get success_message => 'Vous êtes maintenant connecté avec succès à votre compte Spotify. Bon travail, mon ami!';
@override
String get step_4 => 'Étape 4';
@override
String get step_4_steps => 'Collez la valeur copiée de \"sp_dc\"';
@override
String get something_went_wrong => 'Quelque chose s\'est mal passé';
@ -617,19 +587,23 @@ class AppLocalizationsFr extends AppLocalizations {
String get piped_instance => 'Instance pipée';
@override
String get piped_description => 'L\'instance de serveur Piped à utiliser pour la correspondance des pistes';
String get piped_description =>
'L\'instance de serveur Piped à utiliser pour la correspondance des pistes';
@override
String get piped_warning => 'Certaines d\'entre elles peuvent ne pas fonctionner correctement. Alors utilisez à vos risques et périls';
String get piped_warning =>
'Certaines d\'entre elles peuvent ne pas fonctionner correctement. Alors utilisez à vos risques et périls';
@override
String get invidious_instance => 'Instance de serveur Invidious';
@override
String get invidious_description => 'L\'instance de serveur Invidious à utiliser pour la correspondance de pistes';
String get invidious_description =>
'L\'instance de serveur Invidious à utiliser pour la correspondance de pistes';
@override
String get invidious_warning => 'Certaines instances pourraient ne pas bien fonctionner. À utiliser à vos risques et périls';
String get invidious_warning =>
'Certaines instances pourraient ne pas bien fonctionner. À utiliser à vos risques et périls';
@override
String get generate => 'Générer';
@ -640,13 +614,16 @@ class AppLocalizationsFr extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'Remplacer toutes les pistes téléchargées';
String get replace_downloaded_tracks =>
'Remplacer toutes les pistes téléchargées';
@override
String get skip_download_tracks => 'Ignorer le téléchargement de toutes les pistes téléchargées';
String get skip_download_tracks =>
'Ignorer le téléchargement de toutes les pistes téléchargées';
@override
String get do_you_want_to_replace => 'Voulez-vous remplacer la piste existante ?';
String get do_you_want_to_replace =>
'Voulez-vous remplacer la piste existante ?';
@override
String get replace => 'Remplacer';
@ -744,7 +721,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get are_you_sure => 'Êtes-vous sûr(e) ?';
@override
String get generating_playlist => 'Génération de votre playlist personnalisée en cours...';
String get generating_playlist =>
'Génération de votre playlist personnalisée en cours...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +730,28 @@ class AppLocalizationsFr extends AppLocalizations {
}
@override
String get download_warning => 'Si vous téléchargez toutes les pistes en vrac, vous violez clairement les droits d\'auteur de la musique et vous causez des dommages à la société créative de la musique. J\'espère que vous en êtes conscient. Essayez toujours de respecter et de soutenir le travail acharné des artistes.';
String get download_warning =>
'Si vous téléchargez toutes les pistes en vrac, vous violez clairement les droits d\'auteur de la musique et vous causez des dommages à la société créative de la musique. J\'espère que vous en êtes conscient. Essayez toujours de respecter et de soutenir le travail acharné des artistes.';
@override
String get download_ip_ban_warning => 'Au fait, votre adresse IP peut être bloquée sur YouTube en raison d\'une demande excessive de téléchargements par rapport à la normale. Le blocage de l\'IP signifie que vous ne pourrez pas utiliser YouTube (même si vous êtes connecté) pendant au moins 2 à 3 mois à partir de cet appareil IP. Et Spotube ne peut être tenu responsable si cela se produit.';
String get download_ip_ban_warning =>
'Au fait, votre adresse IP peut être bloquée sur YouTube en raison d\'une demande excessive de téléchargements par rapport à la normale. Le blocage de l\'IP signifie que vous ne pourrez pas utiliser YouTube (même si vous êtes connecté) pendant au moins 2 à 3 mois à partir de cet appareil IP. Et Spotube ne peut être tenu responsable si cela se produit.';
@override
String get by_clicking_accept_terms => 'En cliquant sur \'accepter\', vous acceptez les conditions suivantes :';
String get by_clicking_accept_terms =>
'En cliquant sur \'accepter\', vous acceptez les conditions suivantes :';
@override
String get download_agreement_1 => 'Je sais que je pirate de la musique. Je suis méchant(e).';
String get download_agreement_1 =>
'Je sais que je pirate de la musique. Je suis méchant(e).';
@override
String get download_agreement_2 => 'Je soutiendrai l\'artiste autant que possible et je ne fais cela que parce que je n\'ai pas d\'argent pour acheter leur art.';
String get download_agreement_2 =>
'Je soutiendrai l\'artiste autant que possible et je ne fais cela que parce que je n\'ai pas d\'argent pour acheter leur art.';
@override
String get download_agreement_3 => 'Je suis parfaitement conscient(e) que mon adresse IP peut être bloquée sur YouTube et je ne tiens pas Spotube ni ses propriétaires/contributeurs responsables de tout accident causé par mon action actuelle.';
String get download_agreement_3 =>
'Je suis parfaitement conscient(e) que mon adresse IP peut être bloquée sur YouTube et je ne tiens pas Spotube ni ses propriétaires/contributeurs responsables de tout accident causé par mon action actuelle.';
@override
String get decline => 'Refuser';
@ -848,7 +832,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get failed_to_encrypt => 'Échec de la cryptage';
@override
String get encryption_failed_warning => 'Spotube utilise le cryptage pour stocker vos données en toute sécurité. Mais cela a échoué. Il basculera donc vers un stockage non sécurisé\nSi vous utilisez Linux, assurez-vous d\'avoir installé des services secrets tels que gnome-keyring, kde-wallet et keepassxc';
String get encryption_failed_warning =>
'Spotube utilise le cryptage pour stocker vos données en toute sécurité. Mais cela a échoué. Il basculera donc vers un stockage non sécurisé\nSi vous utilisez Linux, assurez-vous d\'avoir installé des services secrets tels que gnome-keyring, kde-wallet et keepassxc';
@override
String get querying_info => 'Interrogation des info...';
@ -946,7 +931,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get friends => 'Amis';
@override
String get no_lyrics_available => 'Désolé, impossible de trouver les paroles de cette piste';
String get no_lyrics_available =>
'Désolé, impossible de trouver les paroles de cette piste';
@override
String get start_a_radio => 'Démarrer une radio';
@ -955,7 +941,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get how_to_start_radio => 'Comment voulez-vous démarrer la radio ?';
@override
String get replace_queue_question => 'Voulez-vous remplacer la file d\'attente actuelle ou y ajouter ?';
String get replace_queue_question =>
'Voulez-vous remplacer la file d\'attente actuelle ou y ajouter ?';
@override
String get endless_playback => 'Lecture sans fin';
@ -964,7 +951,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get delete_playlist => 'Supprimer la playlist';
@override
String get delete_playlist_confirmation => 'Êtes-vous sûr de vouloir supprimer cette playlist ?';
String get delete_playlist_confirmation =>
'Êtes-vous sûr de vouloir supprimer cette playlist ?';
@override
String get local_tracks => 'Titres locaux';
@ -982,7 +970,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get freedom_of_music => '“Liberté de la musique”';
@override
String get freedom_of_music_palm => '“Liberté de la musique dans la paume de votre main”';
String get freedom_of_music_palm =>
'“Liberté de la musique dans la paume de votre main”';
@override
String get get_started => 'Commençons';
@ -991,13 +980,16 @@ class AppLocalizationsFr extends AppLocalizations {
String get youtube_source_description => 'Recommandé et fonctionne mieux.';
@override
String get piped_source_description => 'Vous vous sentez libre ? Comme YouTube mais beaucoup plus gratuit.';
String get piped_source_description =>
'Vous vous sentez libre ? Comme YouTube mais beaucoup plus gratuit.';
@override
String get jiosaavn_source_description => 'Le meilleur pour la région d\'Asie du Sud.';
String get jiosaavn_source_description =>
'Le meilleur pour la région d\'Asie du Sud.';
@override
String get invidious_source_description => 'Similaire à Piped mais avec une meilleure disponibilité';
String get invidious_source_description =>
'Similaire à Piped mais avec une meilleure disponibilité';
@override
String highest_quality(Object quality) {
@ -1008,13 +1000,15 @@ class AppLocalizationsFr extends AppLocalizations {
String get select_audio_source => 'Sélectionner la source audio';
@override
String get endless_playback_description => 'Ajouter automatiquement de nouvelles chansons à la fin de la file d\'attente';
String get endless_playback_description =>
'Ajouter automatiquement de nouvelles chansons à la fin de la file d\'attente';
@override
String get choose_your_region => 'Choisissez votre région';
@override
String get choose_your_region_description => 'Cela aidera Spotube à vous montrer le bon contenu pour votre emplacement.';
String get choose_your_region_description =>
'Cela aidera Spotube à vous montrer le bon contenu pour votre emplacement.';
@override
String get choose_your_language => 'Choisissez votre langue';
@ -1023,7 +1017,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get help_project_grow => 'Aidez ce projet à grandir';
@override
String get help_project_grow_description => 'Spotube est un projet open-source. Vous pouvez aider ce projet à grandir en contribuant au projet, en signalant des bugs ou en suggérant de nouvelles fonctionnalités.';
String get help_project_grow_description =>
'Spotube est un projet open-source. Vous pouvez aider ce projet à grandir en contribuant au projet, en signalant des bugs ou en suggérant de nouvelles fonctionnalités.';
@override
String get contribute_on_github => 'Contribuer sur GitHub';
@ -1038,7 +1033,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get enable_connect => 'Activer la connexion';
@override
String get enable_connect_description => 'Contrôlez Spotube depuis d\'autres appareils';
String get enable_connect_description =>
'Contrôlez Spotube depuis d\'autres appareils';
@override
String get devices => 'Appareils';
@ -1117,7 +1113,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get choose_the_device => 'Choisissez l\'appareil:';
@override
String get multiple_device_connected => 'Plusieurs appareils sont connectés.\nChoisissez l\'appareil sur lequel vous souhaitez effectuer cette action';
String get multiple_device_connected =>
'Plusieurs appareils sont connectés.\nChoisissez l\'appareil sur lequel vous souhaitez effectuer cette action';
@override
String get nothing_found => 'Rien trouvé';
@ -1190,7 +1187,8 @@ class AppLocalizationsFr extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => 'Frais de streaming (hypothétiques)';
String get streaming_fees_hypothetical =>
'Frais de streaming (hypothétiques)';
@override
String get minutes_listened => 'Minutes écoutées';
@ -1212,7 +1210,8 @@ class AppLocalizationsFr extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Cela est calculé en fonction du\npaiement par stream de Spotify de 0,003 \$ à 0,005 \$.\nIl s\'agit d\'un calcul hypothétique pour donner\nune idée de combien vous auriez\npayé aux artistes si vous aviez\nécouté leur chanson sur Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1260,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get webview_not_found => 'Webview non trouvé';
@override
String get webview_not_found_description => 'Aucun environnement d\'exécution Webview installé sur votre appareil.\nSi c\'est installé, assurez-vous qu\'il soit dans le environment PATH\n\nAprès l\'installation, redémarrez l\'application';
String get webview_not_found_description =>
'Aucun environnement d\'exécution Webview installé sur votre appareil.\nSi c\'est installé, assurez-vous qu\'il soit dans le environment PATH\n\nAprès l\'installation, redémarrez l\'application';
@override
String get unsupported_platform => 'Plateforme non prise en charge';
@ -1293,7 +1293,8 @@ class AppLocalizationsFr extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Voulez-vous exporter ces fichiers vers';
String get export_cache_confirmation =>
'Voulez-vous exporter ces fichiers vers';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,19 +1323,22 @@ class AppLocalizationsFr extends AppLocalizations {
String get view_all => 'Voir tout';
@override
String get no_tracks_added_yet => 'Il semble que vous n\'avez encore ajouté aucun morceau.';
String get no_tracks_added_yet =>
'Il semble que vous n\'avez encore ajouté aucun morceau.';
@override
String get no_tracks => 'Il semble qu\'il n\'y ait pas de morceaux ici.';
@override
String get no_tracks_listened_yet => 'Il semble que vous n\'avez encore rien écouté.';
String get no_tracks_listened_yet =>
'Il semble que vous n\'avez encore rien écouté.';
@override
String get not_following_artists => 'Vous ne suivez aucun artiste.';
@override
String get no_favorite_albums_yet => 'Il semble que vous n\'ayez encore ajouté aucun album à vos favoris.';
String get no_favorite_albums_yet =>
'Il semble que vous n\'ayez encore ajouté aucun album à vos favoris.';
@override
String get no_logs_found => 'Aucun log trouvé';
@ -1358,7 +1362,8 @@ class AppLocalizationsFr extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'Dans macOS/Linux/les systèmes d\'exploitation similaires à Unix, définir le chemin dans .zshrc/.bashrc/.bash_profile etc. ne fonctionnera pas.\nVous devez définir le chemin dans le fichier de configuration du shell.';
String get youtube_engine_unix_issue_message =>
'Dans macOS/Linux/les systèmes d\'exploitation similaires à Unix, définir le chemin dans .zshrc/.bashrc/.bash_profile etc. ne fonctionnera pas.\nVous devez définir le chemin dans le fichier de configuration du shell.';
@override
String get download => 'Télécharger';
@ -1376,7 +1381,8 @@ class AppLocalizationsFr extends AppLocalizations {
String get edit_port => 'Modifier le port';
@override
String get port_helper_msg => 'La valeur par défaut est -1, ce qui indique un nombre aléatoire. Si vous avez configuré un pare-feu, il est recommandé de le définir.';
String get port_helper_msg =>
'La valeur par défaut est -1, ce qui indique un nombre aléatoire. Si vous avez configuré un pare-feu, il est recommandé de le définir.';
@override
String connect_request(Object client) {
@ -1384,5 +1390,6 @@ class AppLocalizationsFr extends AppLocalizations {
}
@override
String get connection_request_denied => 'Connection denied. User denied access.';
String get connection_request_denied =>
'Connection denied. User denied access.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get account => 'खाता';
@override
String get login_with_spotify => 'अपने Spotify खाते से लॉग इन करें';
@override
String get connect_with_spotify => 'Spotify से कनेक्ट करें';
@override
String get logout => 'लॉगआउट';
@ -413,7 +407,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get layout_mode => 'लेआउट मोड';
@override
String get override_layout_settings => 'ओवरराइड रेस्पॉन्सिव लेआउट मोड सेटिंग्स';
String get override_layout_settings =>
'ओवरराइड रेस्पॉन्सिव लेआउट मोड सेटिंग्स';
@override
String get adaptive => 'अनुकूल';
@ -443,7 +438,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get sync_album_color => 'एल्बम का रंग सिंक करें';
@override
String get sync_album_color_description => 'एल्बम कला का प्रधान रंग एक्सेंट रंग के रूप में उपयोग किया जाता है';
String get sync_album_color_description =>
'एल्बम कला का प्रधान रंग एक्सेंट रंग के रूप में उपयोग किया जाता है';
@override
String get playback => 'प्लेबैक';
@ -461,16 +457,19 @@ class AppLocalizationsHi extends AppLocalizations {
String get pre_download_play => 'पूर्वावत डाउनलोड और प्ले करें';
@override
String get pre_download_play_description => 'ऑडियो स्ट्रीमिंग की बजाय बाइट्स डाउनलोड करें और बजाय में प्ले करें (उच्च बैंडविड्थ उपयोगकर्ताओं के लिए सिफारिश किया जाता है)';
String get pre_download_play_description =>
'ऑडियो स्ट्रीमिंग की बजाय बाइट्स डाउनलोड करें और बजाय में प्ले करें (उच्च बैंडविड्थ उपयोगकर्ताओं के लिए सिफारिश किया जाता है)';
@override
String get skip_non_music => 'गाने के अलावा सेगमेंट्स को छोड़ें (स्पॉन्सरब्लॉक)';
String get skip_non_music =>
'गाने के अलावा सेगमेंट्स को छोड़ें (स्पॉन्सरब्लॉक)';
@override
String get blacklist_description => 'ब्लैकलिस्ट में शामिल ट्रैक और कलाकार';
@override
String get wait_for_download_to_finish => 'वर्तमान डाउनलोड समाप्त होने तक कृपया प्रतीक्षा करें';
String get wait_for_download_to_finish =>
'वर्तमान डाउनलोड समाप्त होने तक कृपया प्रतीक्षा करें';
@override
String get desktop => 'डेस्कटॉप';
@ -506,7 +505,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get please_sponsor => 'कृपया स्पॉन्सर / डोनेट करें';
@override
String get spotube_description => 'Spotube, एक हल्का, सभी प्लेटफॉर्मों पर चलने वाला, मुफ्त स्पॉटिफाई क्लाइंट';
String get spotube_description =>
'Spotube, एक हल्का, सभी प्लेटफॉर्मों पर चलने वाला, मुफ्त स्पॉटिफाई क्लाइंट';
@override
String get version => 'संस्करण';
@ -538,10 +538,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get license => 'लाइसेंस';
@override
String get add_spotify_credentials => 'शुरू होने के लिए अपने स्पॉटिफाई क्रेडेंशियल जोड़ें';
@override
String get credentials_will_not_be_shared_disclaimer => 'चिंता न करें, आपके क्रेडेंशियल किसी भी तरह से नहीं एकत्रित या साझा किए जाएंगे';
String get credentials_will_not_be_shared_disclaimer =>
'चिंता न करें, आपके क्रेडेंशियल किसी भी तरह से नहीं एकत्रित या साझा किए जाएंगे';
@override
String get know_how_to_login => 'इसे कैसे करें पता नहीं?';
@ -549,11 +547,6 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'कदम से कदम गाइड के साथ चलें';
@override
String spotify_cookie(Object name) {
return 'स्पॉटिफाई $name कुकी';
}
@override
String cookie_name_cookie(Object name) {
return '$name कुकी';
@ -583,33 +576,6 @@ class AppLocalizationsHi extends AppLocalizations {
@override
String get first_go_to => 'पहले, जाएं';
@override
String get login_if_not_logged_in => 'और यदि आप लॉगिन नहीं हैं तो लॉगिन / साइनअप करें';
@override
String get step_2 => '2 चरण';
@override
String get step_2_steps => '1. जब आप लॉगिन हो जाएँ, तो F12 दबाएं या माउस राइट क्लिक> निरीक्षण करें ताकि ब्राउज़र डेवटूल्स खुलें।\n2. फिर ब्राउज़र के \"एप्लिकेशन\" टैब (Chrome, Edge, Brave आदि) या \"स्टोरेज\" टैब (Firefox, Palemoon आदि) में जाएं\n3. \"कुकीज़\" अनुभाग में जाएं फिर \"https: //accounts.spotify.com\" उप-अनुभाग में जाएं';
@override
String get step_3 => 'स्टेप 3';
@override
String get step_3_steps => '\"sp_dc\" कुकी का मूल्य कॉपी करें';
@override
String get success_emoji => 'सफलता🥳';
@override
String get success_message => 'अब आप अपने स्पॉटिफाई अकाउंट से सफलतापूर्वक लॉगइन हो गए हैं। अच्छा काम किया!';
@override
String get step_4 => 'स्टेप 4';
@override
String get step_4_steps => 'कॉपी किए गए \"sp_dc\" मूल्य को पेस्ट करें';
@override
String get something_went_wrong => 'कुछ गलत हो गया';
@ -620,16 +586,19 @@ class AppLocalizationsHi extends AppLocalizations {
String get piped_description => 'पाइप किए गए सर्वर';
@override
String get piped_warning => 'गानों का मिलान करने के लिए उपयोग किए जाते हैं, हो सकता है कि उनमें से कुछ के साथ ठीक से काम न करें इसलिए अपने जोखिम पर उपयोग करें';
String get piped_warning =>
'गानों का मिलान करने के लिए उपयोग किए जाते हैं, हो सकता है कि उनमें से कुछ के साथ ठीक से काम न करें इसलिए अपने जोखिम पर उपयोग करें';
@override
String get invidious_instance => 'इन्विडियस सर्वर इंस्टेंस';
@override
String get invidious_description => 'ट्रैक मिलान के लिए इन्विडियस सर्वर इंस्टेंस';
String get invidious_description =>
'ट्रैक मिलान के लिए इन्विडियस सर्वर इंस्टेंस';
@override
String get invidious_warning => 'कुछ इंस्टेंस अच्छी तरह से काम नहीं कर सकते। अपने जोखिम पर उपयोग करें';
String get invidious_warning =>
'कुछ इंस्टेंस अच्छी तरह से काम नहीं कर सकते। अपने जोखिम पर उपयोग करें';
@override
String get generate => 'उत्पन्न करें';
@ -646,7 +615,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get skip_download_tracks => 'सभी डाउनलोड किए गए ट्रैक्स को छोड़ें';
@override
String get do_you_want_to_replace => 'क्या आप मौजूदा ट्रैक को बदलना चाहते हैं?';
String get do_you_want_to_replace =>
'क्या आप मौजूदा ट्रैक को बदलना चाहते हैं?';
@override
String get replace => 'बदलें';
@ -752,22 +722,28 @@ class AppLocalizationsHi extends AppLocalizations {
}
@override
String get download_warning => 'यदि आप सभी ट्रैक्स को बल्क में डाउनलोड करते हैं, तो आप स्पष्ट रूप से संगीत की अवैध नकली बना रहे हैं और संगीत के रचनात्मक समाज को क्षति पहुंचा रहे हैं। मुझे आशा है कि आप इसके बारे में जागरूक हैं। हमेशा कोशिश करें कि कलाकार के मेहनत का सम्मान और समर्थन करें।';
String get download_warning =>
'यदि आप सभी ट्रैक्स को बल्क में डाउनलोड करते हैं, तो आप स्पष्ट रूप से संगीत की अवैध नकली बना रहे हैं और संगीत के रचनात्मक समाज को क्षति पहुंचा रहे हैं। मुझे आशा है कि आप इसके बारे में जागरूक हैं। हमेशा कोशिश करें कि कलाकार के मेहनत का सम्मान और समर्थन करें।';
@override
String get download_ip_ban_warning => 'बाहरी डाउनलोड अनुरोधों के कारण आपका आईपी YouTube पर अधिक से अधिक ब्लॉक हो सकता है। आईपी ब्लॉक का अर्थ है कि आप उसी आईपी उपकरण से कम से कम 2-3 महीनों तक YouTube का उपयोग नहीं कर सकेंगे (यदि आप लॉग इन हैं तो भी)। और स्पोट्यूब किसी भी जिम्मेदारी को नहीं उठाता है अगर ऐसा कभी होता है।';
String get download_ip_ban_warning =>
'बाहरी डाउनलोड अनुरोधों के कारण आपका आईपी YouTube पर अधिक से अधिक ब्लॉक हो सकता है। आईपी ब्लॉक का अर्थ है कि आप उसी आईपी उपकरण से कम से कम 2-3 महीनों तक YouTube का उपयोग नहीं कर सकेंगे (यदि आप लॉग इन हैं तो भी)। और स्पोट्यूब किसी भी जिम्मेदारी को नहीं उठाता है अगर ऐसा कभी होता है।';
@override
String get by_clicking_accept_terms => '\'स्वीकार\' पर क्लिक करके आप निम्नलिखित शर्तों से सहमत होते हैं:';
String get by_clicking_accept_terms =>
'\'स्वीकार\' पर क्लिक करके आप निम्नलिखित शर्तों से सहमत होते हैं:';
@override
String get download_agreement_1 => 'मुझे पता है कि मैं संगीत की अवैध नकली बना रहा हूं। मैं बुरा हूं';
String get download_agreement_1 =>
'मुझे पता है कि मैं संगीत की अवैध नकली बना रहा हूं। मैं बुरा हूं';
@override
String get download_agreement_2 => 'मैं कलाकार का समर्थन करूंगा जहां भी मुझे संभव हो और मैं केवल इसल िए ऐसा कर रहा हूं क्योंकि मेरे पास उनकी कला खरीदने के लिए पैसे नहीं हैं।';
String get download_agreement_2 =>
'मैं कलाकार का समर्थन करूंगा जहां भी मुझे संभव हो और मैं केवल इसल िए ऐसा कर रहा हूं क्योंकि मेरे पास उनकी कला खरीदने के लिए पैसे नहीं हैं।';
@override
String get download_agreement_3 => 'मैं पूरी तरह से जागरूक हूं कि मेरा आईपी YouTube पर ब्लॉक हो सकता है और मैं स्पोट्यूब या उसके मालिकों / सहयोगियों को किसी भी दुर्घटना के लिए जिम्मेदार नहीं मानता।';
String get download_agreement_3 =>
'मैं पूरी तरह से जागरूक हूं कि मेरा आईपी YouTube पर ब्लॉक हो सकता है और मैं स्पोट्यूब या उसके मालिकों / सहयोगियों को किसी भी दुर्घटना के लिए जिम्मेदार नहीं मानता।';
@override
String get decline => 'इनकार करें';
@ -848,7 +824,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get failed_to_encrypt => 'एन्क्रिप्ट करने में विफल रहा';
@override
String get encryption_failed_warning => 'Spotube आपके डेटा को सुरक्षित रूप से स्टोर करने के लिए एन्क्रिप्शन का उपयोग करता है। लेकिन इसमें विफल रहा। इसलिए, यह असुरक्षित स्टोरेज पर फॉलबैक करेगा\nयदि आप Linux का उपयोग कर रहे हैं, तो कृपया सुनिश्चित करें कि आपके पास gnome-keyring, kde-wallet, keepassxc आदि जैसी कोई सीक्रेट-सर्विस इंस्टॉल की गई है';
String get encryption_failed_warning =>
'Spotube आपके डेटा को सुरक्षित रूप से स्टोर करने के लिए एन्क्रिप्शन का उपयोग करता है। लेकिन इसमें विफल रहा। इसलिए, यह असुरक्षित स्टोरेज पर फॉलबैक करेगा\nयदि आप Linux का उपयोग कर रहे हैं, तो कृपया सुनिश्चित करें कि आपके पास gnome-keyring, kde-wallet, keepassxc आदि जैसी कोई सीक्रेट-सर्विस इंस्टॉल की गई है';
@override
String get querying_info => 'जानकारी प्राप्त करना';
@ -946,7 +923,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get friends => 'दोस्त';
@override
String get no_lyrics_available => 'क्षमा करें, इस ट्रैक के लिए गाने नहीं मिल सके';
String get no_lyrics_available =>
'क्षमा करें, इस ट्रैक के लिए गाने नहीं मिल सके';
@override
String get start_a_radio => 'रेडियो शुरू करें';
@ -955,7 +933,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get how_to_start_radio => 'रेडियो कैसे शुरू करना चाहते हैं?';
@override
String get replace_queue_question => 'क्या आप वर्तमान कतार को बदलना चाहते हैं या इसे जोड़ना चाहते हैं?';
String get replace_queue_question =>
'क्या आप वर्तमान कतार को बदलना चाहते हैं या इसे जोड़ना चाहते हैं?';
@override
String get endless_playback => 'अंतहीन प्लेबैक';
@ -964,7 +943,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get delete_playlist => 'प्लेलिस्ट हटाएं';
@override
String get delete_playlist_confirmation => 'क्या आप वाकई इस प्लेलिस्ट को हटाना चाहते हैं?';
String get delete_playlist_confirmation =>
'क्या आप वाकई इस प्लेलिस्ट को हटाना चाहते हैं?';
@override
String get local_tracks => 'स्थानीय ट्रैक्स';
@ -988,16 +968,20 @@ class AppLocalizationsHi extends AppLocalizations {
String get get_started => 'आइए शुरू करें';
@override
String get youtube_source_description => 'सिफारिश किया गया और सबसे अच्छा काम करता है।';
String get youtube_source_description =>
'सिफारिश किया गया और सबसे अच्छा काम करता है।';
@override
String get piped_source_description => 'मुफ्त महसूस कर रहे हैं? YouTube के समान लेकिन काफी अधिक मुफ्त।';
String get piped_source_description =>
'मुफ्त महसूस कर रहे हैं? YouTube के समान लेकिन काफी अधिक मुफ्त।';
@override
String get jiosaavn_source_description => 'दक्षिण एशियाई क्षेत्र के लिए सर्वोत्तम।';
String get jiosaavn_source_description =>
'दक्षिण एशियाई क्षेत्र के लिए सर्वोत्तम।';
@override
String get invidious_source_description => 'पाइप्ड के समान, लेकिन अधिक उपलब्धता के साथ';
String get invidious_source_description =>
'पाइप्ड के समान, लेकिन अधिक उपलब्धता के साथ';
@override
String highest_quality(Object quality) {
@ -1008,13 +992,15 @@ class AppLocalizationsHi extends AppLocalizations {
String get select_audio_source => 'ऑडियो स्रोत चुनें';
@override
String get endless_playback_description => 'क्रमबद्ध कतार के अंत में नए गाने स्वचालित रूप से जोड़ें';
String get endless_playback_description =>
'क्रमबद्ध कतार के अंत में नए गाने स्वचालित रूप से जोड़ें';
@override
String get choose_your_region => 'अपना क्षेत्र चुनें';
@override
String get choose_your_region_description => 'यह Spotube को आपके स्थान के लिए सही सामग्री दिखाने में मदद करेगा।';
String get choose_your_region_description =>
'यह Spotube को आपके स्थान के लिए सही सामग्री दिखाने में मदद करेगा।';
@override
String get choose_your_language => 'अपनी भाषा चुनें';
@ -1023,7 +1009,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get help_project_grow => 'इस परियोजना को बढ़ावा दें';
@override
String get help_project_grow_description => 'Spotube एक ओपन सोर्स परियोजना है। आप इस परियोजना को योगदान देकर, बग रिपोर्ट करके या नई विशेषताओं का सुझाव देकर इस परियोजना को बढ़ा सकते हैं।';
String get help_project_grow_description =>
'Spotube एक ओपन सोर्स परियोजना है। आप इस परियोजना को योगदान देकर, बग रिपोर्ट करके या नई विशेषताओं का सुझाव देकर इस परियोजना को बढ़ा सकते हैं।';
@override
String get contribute_on_github => 'GitHub पर योगदान करें';
@ -1038,7 +1025,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get enable_connect => 'कनेक्ट सक्षम करें';
@override
String get enable_connect_description => 'अन्य उपकरणों से Spotube को नियंत्रित करें';
String get enable_connect_description =>
'अन्य उपकरणों से Spotube को नियंत्रित करें';
@override
String get devices => 'उपकरण';
@ -1117,7 +1105,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get choose_the_device => 'उपकरण चुनें:';
@override
String get multiple_device_connected => 'कई उपकरण जुड़े हुए हैं।\nउस उपकरण को चुनें जिस पर आप यह क्रिया करना चाहते हैं';
String get multiple_device_connected =>
'कई उपकरण जुड़े हुए हैं।\nउस उपकरण को चुनें जिस पर आप यह क्रिया करना चाहते हैं';
@override
String get nothing_found => 'कुछ भी नहीं मिला';
@ -1190,7 +1179,8 @@ class AppLocalizationsHi extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Spotify की प्रति स्ट्रीम भुगतान के आधार पर\n\$0.003 से \$0.005 तक गणना की गई है। यह एक काल्पनिक\nगणना है जो उपयोगकर्ता को यह जानकारी देती है कि वे कितना भुगतान\nकरते यदि वे Spotify पर गाने सुनते।';
String get streaming_fees_hypothetical =>
'*Spotify की प्रति स्ट्रीम भुगतान के आधार पर\n\$0.003 से \$0.005 तक गणना की गई है। यह एक काल्पनिक\nगणना है जो उपयोगकर्ता को यह जानकारी देती है कि वे कितना भुगतान\nकरते यदि वे Spotify पर गाने सुनते।';
@override
String get minutes_listened => 'सुनिएका मिनेटहरू';
@ -1212,7 +1202,8 @@ class AppLocalizationsHi extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*यो Spotify को प्रति स्ट्रीम भुगतानको आधारमा\n\$0.003 देखि \$0.005 को बीचमा गणना गरिएको हो। यो एक काल्पनिक\nगणना हो जसले प्रयोगकर्तालाई देखाउँछ कि उनीहरूले कति\nअर्टिस्टहरूलाई तिनीहरूका गीतहरू Spotify मा सुनेमा\nभुक्तान गर्नुपर्ने थियो।';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1252,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get webview_not_found => 'वेबव्यू नहीं मिला';
@override
String get webview_not_found_description => 'आपके डिवाइस पर वेबव्यू रनटाइम इंस्टॉल नहीं है।\nअगर इंस्टॉल है, तो सुनिश्चित करें कि यह environment PATH में है\n\nइंस्टॉल करने के बाद, ऐप को पुनः शुरू करें';
String get webview_not_found_description =>
'आपके डिवाइस पर वेबव्यू रनटाइम इंस्टॉल नहीं है।\nअगर इंस्टॉल है, तो सुनिश्चित करें कि यह environment PATH में है\n\nइंस्टॉल करने के बाद, ऐप को पुनः शुरू करें';
@override
String get unsupported_platform => 'असमर्थित प्लेटफार्म';
@ -1293,7 +1285,8 @@ class AppLocalizationsHi extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'क्या आप इन फ़ाइलों को निर्यात करना चाहते हैं';
String get export_cache_confirmation =>
'क्या आप इन फ़ाइलों को निर्यात करना चाहते हैं';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,7 +1315,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get view_all => 'सभी देखें';
@override
String get no_tracks_added_yet => 'लगता है आपने अभी तक कोई ट्रैक नहीं जोड़ा है।';
String get no_tracks_added_yet =>
'लगता है आपने अभी तक कोई ट्रैक नहीं जोड़ा है।';
@override
String get no_tracks => 'लगता है यहाँ कोई ट्रैक नहीं है।';
@ -1331,10 +1325,12 @@ class AppLocalizationsHi extends AppLocalizations {
String get no_tracks_listened_yet => 'लगता है आपने अभी तक कुछ नहीं सुना है।';
@override
String get not_following_artists => 'आप किसी भी कलाकार को फॉलो नहीं कर रहे हैं।';
String get not_following_artists =>
'आप किसी भी कलाकार को फॉलो नहीं कर रहे हैं।';
@override
String get no_favorite_albums_yet => 'लगता है आपने अभी तक कोई एल्बम अपनी पसंदीदा सूची में नहीं जोड़ा है।';
String get no_favorite_albums_yet =>
'लगता है आपने अभी तक कोई एल्बम अपनी पसंदीदा सूची में नहीं जोड़ा है।';
@override
String get no_logs_found => 'कोई लॉग नहीं मिला';
@ -1358,7 +1354,8 @@ class AppLocalizationsHi extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/यूनिक्स जैसे OS में, .zshrc/.bashrc/.bash_profile आदि में पथ सेट करना काम नहीं करेगा।\nआपको पथ को शेल कॉन्फ़िगरेशन फ़ाइल में सेट करना होगा।';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/यूनिक्स जैसे OS में, .zshrc/.bashrc/.bash_profile आदि में पथ सेट करना काम नहीं करेगा।\nआपको पथ को शेल कॉन्फ़िगरेशन फ़ाइल में सेट करना होगा।';
@override
String get download => 'डाउनलोड करें';
@ -1376,7 +1373,8 @@ class AppLocalizationsHi extends AppLocalizations {
String get edit_port => 'पोर्ट संपादित करें';
@override
String get port_helper_msg => 'डिफ़ॉल्ट -1 है जो यादृच्छिक संख्या को दर्शाता है। यदि आपने फ़ायरवॉल कॉन्फ़िगर किया है, तो इसे सेट करना अनुशंसित है।';
String get port_helper_msg =>
'डिफ़ॉल्ट -1 है जो यादृच्छिक संख्या को दर्शाता है। यदि आपने फ़ायरवॉल कॉन्फ़िगर किया है, तो इसे सेट करना अनुशंसित है।';
@override
String connect_request(Object client) {
@ -1384,5 +1382,6 @@ class AppLocalizationsHi extends AppLocalizations {
}
@override
String get connection_request_denied => 'कनेक्शन अस्वीकृत। उपयोगकर्ता ने पहुंच अस्वीकृत कर दी।';
String get connection_request_denied =>
'कनेक्शन अस्वीकृत। उपयोगकर्ता ने पहुंच अस्वीकृत कर दी।';
}

View File

@ -356,7 +356,8 @@ class AppLocalizationsId extends AppLocalizations {
String get clear_all => 'Bersihkan semua';
@override
String get show_hide_ui_on_hover => 'Tampil/Sembunyikan UI saat mengarahkan kursor';
String get show_hide_ui_on_hover =>
'Tampil/Sembunyikan UI saat mengarahkan kursor';
@override
String get always_on_top => 'Selalu di atas';
@ -379,12 +380,6 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get account => 'Akun';
@override
String get login_with_spotify => 'Masuk dengan Spotify';
@override
String get connect_with_spotify => 'Hubungkan dengan Spotify';
@override
String get logout => 'Keluar';
@ -413,7 +408,8 @@ class AppLocalizationsId extends AppLocalizations {
String get layout_mode => 'Mode Tata Letak';
@override
String get override_layout_settings => 'Ganti pengaturan mode tata letak responsif';
String get override_layout_settings =>
'Ganti pengaturan mode tata letak responsif';
@override
String get adaptive => 'Adaptif';
@ -443,7 +439,8 @@ class AppLocalizationsId extends AppLocalizations {
String get sync_album_color => 'Sinkronkan warna album';
@override
String get sync_album_color_description => 'Menggunakan warna dominan sampul album sebagai warna aksen';
String get sync_album_color_description =>
'Menggunakan warna dominan sampul album sebagai warna aksen';
@override
String get playback => 'Pemutaran';
@ -461,7 +458,8 @@ class AppLocalizationsId extends AppLocalizations {
String get pre_download_play => 'Unduh dan putar';
@override
String get pre_download_play_description => 'Daripada streaming audio, unduh byte dan mainkan (Direkomendasikan untuk pengguna bandwidth yang lebih tinggi)';
String get pre_download_play_description =>
'Daripada streaming audio, unduh byte dan mainkan (Direkomendasikan untuk pengguna bandwidth yang lebih tinggi)';
@override
String get skip_non_music => 'Lewati segmen non-musik (SponsorBlock)';
@ -470,7 +468,8 @@ class AppLocalizationsId extends AppLocalizations {
String get blacklist_description => 'Lagu dan artis di daftar hitam';
@override
String get wait_for_download_to_finish => 'Tunggu hingga unduhan saat ini selesai';
String get wait_for_download_to_finish =>
'Tunggu hingga unduhan saat ini selesai';
@override
String get desktop => 'Desktop';
@ -506,7 +505,8 @@ class AppLocalizationsId extends AppLocalizations {
String get please_sponsor => 'Silakan Sponsor/Menyumbang';
@override
String get spotube_description => 'Spotube, klien Spotify yang ringan, lintas platform, dan gratis untuk semua';
String get spotube_description =>
'Spotube, klien Spotify yang ringan, lintas platform, dan gratis untuk semua';
@override
String get version => 'Versi';
@ -538,10 +538,8 @@ class AppLocalizationsId extends AppLocalizations {
String get license => 'Lisensi';
@override
String get add_spotify_credentials => 'Tambahkan kredensial Spotify Anda untuk memulai';
@override
String get credentials_will_not_be_shared_disclaimer => 'Jangan khawatir, kredensial Anda tidak akan dikumpulkan atau dibagikan kepada siapa pun';
String get credentials_will_not_be_shared_disclaimer =>
'Jangan khawatir, kredensial Anda tidak akan dikumpulkan atau dibagikan kepada siapa pun';
@override
String get know_how_to_login => 'Tidak tahu bagaimana melakukan ini?';
@ -549,11 +547,6 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Ikuti panduan Langkah demi Langkah';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookie';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookie';
@ -583,33 +576,6 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get first_go_to => 'Pertama, Pergi ke';
@override
String get login_if_not_logged_in => 'dan Masuk/Daftar jika Anda belum masuk';
@override
String get step_2 => 'Langkah 2';
@override
String get step_2_steps => '1. Setelah Anda masuk, tekan F12 atau Klik Kanan Mouse > Buka Browser Devtools.\n2. Lalu buka Tab \"Aplikasi\" (Chrome, Edge, Brave, dll.) atau Tab \"Penyimpanan\" (Firefox, Palemoon, dll.)\n3. Buka bagian \"Cookie\" lalu subbagian \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Langkah 3';
@override
String get step_3_steps => 'Salin nilai Cookie \"sp_dc\" ';
@override
String get success_emoji => 'Berhasil🥳';
@override
String get success_message => 'Sekarang Anda telah berhasil Masuk dengan akun Spotify Anda. Kerja bagus, sobat!';
@override
String get step_4 => 'Langkah 4';
@override
String get step_4_steps => 'Tempel nilai \"sp_dc\" yang disalin';
@override
String get something_went_wrong => 'Terjadi kesalahan';
@ -617,19 +583,23 @@ class AppLocalizationsId extends AppLocalizations {
String get piped_instance => 'Piped Server Instance';
@override
String get piped_description => 'The Piped server instance untuk digunakan sebagai pencocokan trek';
String get piped_description =>
'The Piped server instance untuk digunakan sebagai pencocokan trek';
@override
String get piped_warning => 'Beberapa di antaranya mungkin tidak berfungsi dengan baik. Jadi gunakan dengan risiko Anda sendiri';
String get piped_warning =>
'Beberapa di antaranya mungkin tidak berfungsi dengan baik. Jadi gunakan dengan risiko Anda sendiri';
@override
String get invidious_instance => 'Invidious Server Instance';
@override
String get invidious_description => 'The Invidious server instance to use for track matching';
String get invidious_description =>
'The Invidious server instance to use for track matching';
@override
String get invidious_warning => 'Some of them might not work well. So use at your own risk';
String get invidious_warning =>
'Some of them might not work well. So use at your own risk';
@override
String get generate => 'Generate';
@ -643,10 +613,12 @@ class AppLocalizationsId extends AppLocalizations {
String get replace_downloaded_tracks => 'Ganti semua trek yang diunduh';
@override
String get skip_download_tracks => 'Lewati pengunduhan semua trek yang diunduh';
String get skip_download_tracks =>
'Lewati pengunduhan semua trek yang diunduh';
@override
String get do_you_want_to_replace => 'Apakah Anda ingin mengganti track yang ada?';
String get do_you_want_to_replace =>
'Apakah Anda ingin mengganti track yang ada?';
@override
String get replace => 'Ganti';
@ -752,22 +724,28 @@ class AppLocalizationsId extends AppLocalizations {
}
@override
String get download_warning => 'Jika Anda mengunduh semua Lagu secara massal, Anda jelas membajak Musik & menyebabkan kerusakan pada masyarakat kreatif Musik. Saya harap Anda menyadari hal ini. Selalu berusaha menghormati & mendukung kerja keras Artis';
String get download_warning =>
'Jika Anda mengunduh semua Lagu secara massal, Anda jelas membajak Musik & menyebabkan kerusakan pada masyarakat kreatif Musik. Saya harap Anda menyadari hal ini. Selalu berusaha menghormati & mendukung kerja keras Artis';
@override
String get download_ip_ban_warning => 'BTW, IP Anda bisa diblokir di YouTube karena permintaan unduhan yang berlebihan dari biasanya. Blokir IP berarti Anda tidak dapat menggunakan YouTube (meskipun Anda masuk) setidaknya selama 2-3 bulan dari perangkat IP tersebut. Dan Spotube tidak bertanggung jawab jika hal ini terjadi';
String get download_ip_ban_warning =>
'BTW, IP Anda bisa diblokir di YouTube karena permintaan unduhan yang berlebihan dari biasanya. Blokir IP berarti Anda tidak dapat menggunakan YouTube (meskipun Anda masuk) setidaknya selama 2-3 bulan dari perangkat IP tersebut. Dan Spotube tidak bertanggung jawab jika hal ini terjadi';
@override
String get by_clicking_accept_terms => 'Dengan mengklik \'terima\' Anda menyetujui ketentuan berikut:';
String get by_clicking_accept_terms =>
'Dengan mengklik \'terima\' Anda menyetujui ketentuan berikut:';
@override
String get download_agreement_1 => 'Saya tahu saya membajak Musik. Saya buruk';
String get download_agreement_1 =>
'Saya tahu saya membajak Musik. Saya buruk';
@override
String get download_agreement_2 => 'Saya akan mendukung Artis di mana pun saya bisa dan saya melakukan ini hanya karena saya tidak punya uang untuk membeli karya seni mereka';
String get download_agreement_2 =>
'Saya akan mendukung Artis di mana pun saya bisa dan saya melakukan ini hanya karena saya tidak punya uang untuk membeli karya seni mereka';
@override
String get download_agreement_3 => 'Saya sepenuhnya menyadari bahwa IP saya dapat diblokir di YouTube & saya tidak menganggap Spotube atau pemilik/kontributornya bertanggung jawab atas kecelakaan apa pun yang disebabkan oleh tindakan saya saat ini';
String get download_agreement_3 =>
'Saya sepenuhnya menyadari bahwa IP saya dapat diblokir di YouTube & saya tidak menganggap Spotube atau pemilik/kontributornya bertanggung jawab atas kecelakaan apa pun yang disebabkan oleh tindakan saya saat ini';
@override
String get decline => 'Menolak';
@ -848,7 +826,8 @@ class AppLocalizationsId extends AppLocalizations {
String get failed_to_encrypt => 'Gagal mengenkripsi';
@override
String get encryption_failed_warning => 'Spotube menggunakan enkripsi untuk menyimpan data Anda dengan aman. Namun gagal melakukannya. Jadi itu akan kembali ke penyimpanan yang tidak aman\nJika Anda menggunakan linux, pastikan Anda telah menginstal layanan rahasia (gnome-keyring, kde-wallet, keepassxc, dll)';
String get encryption_failed_warning =>
'Spotube menggunakan enkripsi untuk menyimpan data Anda dengan aman. Namun gagal melakukannya. Jadi itu akan kembali ke penyimpanan yang tidak aman\nJika Anda menggunakan linux, pastikan Anda telah menginstal layanan rahasia (gnome-keyring, kde-wallet, keepassxc, dll)';
@override
String get querying_info => 'Mencari informasi...';
@ -946,7 +925,8 @@ class AppLocalizationsId extends AppLocalizations {
String get friends => 'Daftar Teman';
@override
String get no_lyrics_available => 'Maaf, tidak dapat menemukan lirik untuk lagu ini';
String get no_lyrics_available =>
'Maaf, tidak dapat menemukan lirik untuk lagu ini';
@override
String get start_a_radio => 'Putar Radio';
@ -955,7 +935,8 @@ class AppLocalizationsId extends AppLocalizations {
String get how_to_start_radio => 'Bagaimana Anda ingin memutar radio?';
@override
String get replace_queue_question => 'Apakah Anda ingin mengganti antrean saat ini atau menambahkannya?';
String get replace_queue_question =>
'Apakah Anda ingin mengganti antrean saat ini atau menambahkannya?';
@override
String get endless_playback => 'Pemutaran Tanpa Akhir';
@ -964,7 +945,8 @@ class AppLocalizationsId extends AppLocalizations {
String get delete_playlist => 'Hapus Daftar Putar';
@override
String get delete_playlist_confirmation => 'Anda yakin ingin menghapus daftar putar ini?';
String get delete_playlist_confirmation =>
'Anda yakin ingin menghapus daftar putar ini?';
@override
String get local_tracks => 'Trek Lokal';
@ -982,22 +964,27 @@ class AppLocalizationsId extends AppLocalizations {
String get freedom_of_music => '“Kebebasan Musik”';
@override
String get freedom_of_music_palm => '“Kebebasan Musik di telapak tangan Anda”';
String get freedom_of_music_palm =>
'“Kebebasan Musik di telapak tangan Anda”';
@override
String get get_started => 'Mari kita mulai';
@override
String get youtube_source_description => 'Direkomendasikan dan berfungsi paling baik.';
String get youtube_source_description =>
'Direkomendasikan dan berfungsi paling baik.';
@override
String get piped_source_description => 'Merasa bebas? Sama seperti YouTube tetapi banyak yang gratis.';
String get piped_source_description =>
'Merasa bebas? Sama seperti YouTube tetapi banyak yang gratis.';
@override
String get jiosaavn_source_description => 'Terbaik untuk wilayah Asia Selatan.';
String get jiosaavn_source_description =>
'Terbaik untuk wilayah Asia Selatan.';
@override
String get invidious_source_description => 'Similar to Piped but with higher availability.';
String get invidious_source_description =>
'Similar to Piped but with higher availability.';
@override
String highest_quality(Object quality) {
@ -1008,13 +995,15 @@ class AppLocalizationsId extends AppLocalizations {
String get select_audio_source => 'Pilih Sumber Suara';
@override
String get endless_playback_description => 'Tambahkan lagu baru secara otomatis\nke akhir antrean';
String get endless_playback_description =>
'Tambahkan lagu baru secara otomatis\nke akhir antrean';
@override
String get choose_your_region => 'Pilih wilayah Anda';
@override
String get choose_your_region_description => 'Ini akan membantu Spotube menampilkan konten yang tepat\nuntuk lokasi Anda.';
String get choose_your_region_description =>
'Ini akan membantu Spotube menampilkan konten yang tepat\nuntuk lokasi Anda.';
@override
String get choose_your_language => 'Pilih bahasa Anda';
@ -1023,7 +1012,8 @@ class AppLocalizationsId extends AppLocalizations {
String get help_project_grow => 'Bantu proyek ini berkembang';
@override
String get help_project_grow_description => 'Spotube adalah proyek sumber terbuka. Anda dapat membantu proyek ini berkembang dengan berkontribusi pada proyek, melaporkan bug, atau menyarankan fitur baru.';
String get help_project_grow_description =>
'Spotube adalah proyek sumber terbuka. Anda dapat membantu proyek ini berkembang dengan berkontribusi pada proyek, melaporkan bug, atau menyarankan fitur baru.';
@override
String get contribute_on_github => 'Berkontribusi di GitHub';
@ -1038,7 +1028,8 @@ class AppLocalizationsId extends AppLocalizations {
String get enable_connect => 'Aktifkan Hubungkan';
@override
String get enable_connect_description => 'Kontrol Spotube dari perangkat lain';
String get enable_connect_description =>
'Kontrol Spotube dari perangkat lain';
@override
String get devices => 'Perangkat';
@ -1117,7 +1108,8 @@ class AppLocalizationsId extends AppLocalizations {
String get choose_the_device => 'Pilih perangkat:';
@override
String get multiple_device_connected => 'Beberapa perangkat terhubung.\nPilih perangkat tempat Anda ingin melakukan tindakan ini';
String get multiple_device_connected =>
'Beberapa perangkat terhubung.\nPilih perangkat tempat Anda ingin melakukan tindakan ini';
@override
String get nothing_found => 'Tidak ditemukan apa pun';
@ -1212,7 +1204,8 @@ class AppLocalizationsId extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Ini dihitung berdasarkan pembayaran\nper stream Spotify dari \$0,003 hingga \$0,005.\nIni adalah perhitungan hipotetis untuk memberi\npengguna gambaran tentang berapa banyak\nmereka akan membayar kepada artis jika\nmereka mendengarkan lagu mereka di Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1254,8 @@ class AppLocalizationsId extends AppLocalizations {
String get webview_not_found => 'Webview tidak ditemukan';
@override
String get webview_not_found_description => 'Tidak ada runtime Webview yang diinstal di perangkat Anda.\nJika sudah diinstal, pastikan itu ada di environment PATH\n\nSetelah diinstal, restart aplikasi';
String get webview_not_found_description =>
'Tidak ada runtime Webview yang diinstal di perangkat Anda.\nJika sudah diinstal, pastikan itu ada di environment PATH\n\nSetelah diinstal, restart aplikasi';
@override
String get unsupported_platform => 'Platform tidak didukung';
@ -1293,7 +1287,8 @@ class AppLocalizationsId extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Do you want to export these files to';
String get export_cache_confirmation =>
'Do you want to export these files to';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,19 +1317,22 @@ class AppLocalizationsId extends AppLocalizations {
String get view_all => 'View all';
@override
String get no_tracks_added_yet => 'Looks like you haven\'t added any tracks yet';
String get no_tracks_added_yet =>
'Looks like you haven\'t added any tracks yet';
@override
String get no_tracks => 'Looks like there are no tracks here';
@override
String get no_tracks_listened_yet => 'Looks like you haven\'t listened to anything yet';
String get no_tracks_listened_yet =>
'Looks like you haven\'t listened to anything yet';
@override
String get not_following_artists => 'You\'re not following any artists';
@override
String get no_favorite_albums_yet => 'Looks like you haven\'t added any albums to your favorites yet';
String get no_favorite_albums_yet =>
'Looks like you haven\'t added any albums to your favorites yet';
@override
String get no_logs_found => 'No logs found';
@ -1358,7 +1356,8 @@ class AppLocalizationsId extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'In macOS/Linux/unix like OS\'s, setting path on .zshrc/.bashrc/.bash_profile etc. won\'t work.\nYou need to set the path in the shell configuration file';
String get youtube_engine_unix_issue_message =>
'In macOS/Linux/unix like OS\'s, setting path on .zshrc/.bashrc/.bash_profile etc. won\'t work.\nYou need to set the path in the shell configuration file';
@override
String get download => 'Download';
@ -1376,7 +1375,8 @@ class AppLocalizationsId extends AppLocalizations {
String get edit_port => 'Edit port';
@override
String get port_helper_msg => 'Default adalah -1 yang menunjukkan angka acak. Jika Anda telah mengonfigurasi firewall, disarankan untuk mengatur ini.';
String get port_helper_msg =>
'Default adalah -1 yang menunjukkan angka acak. Jika Anda telah mengonfigurasi firewall, disarankan untuk mengatur ini.';
@override
String connect_request(Object client) {
@ -1384,5 +1384,6 @@ class AppLocalizationsId extends AppLocalizations {
}
@override
String get connection_request_denied => 'Koneksi ditolak. Pengguna menolak akses.';
String get connection_request_denied =>
'Koneksi ditolak. Pengguna menolak akses.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get account => 'Account';
@override
String get login_with_spotify => 'Login con il tuo account Spotify';
@override
String get connect_with_spotify => 'Connetti con Spotify';
@override
String get logout => 'Esci';
@ -413,7 +407,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get layout_mode => 'Modalità Layout';
@override
String get override_layout_settings => 'Sovrascrivi le impostazioni del layout responsivo';
String get override_layout_settings =>
'Sovrascrivi le impostazioni del layout responsivo';
@override
String get adaptive => 'Adattiva';
@ -443,7 +438,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get sync_album_color => 'Syncronizza colore album';
@override
String get sync_album_color_description => 'Usa il colore dominante della copertina dell\'album come colore accento';
String get sync_album_color_description =>
'Usa il colore dominante della copertina dell\'album come colore accento';
@override
String get playback => 'Riproduzione';
@ -461,7 +457,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get pre_download_play => 'Pre-scarica e riproduci';
@override
String get pre_download_play_description => 'Anzi che effettuare lo stream dell\'audio, scarica invece i byte e li riproduce (raccomandato per gli utenti con banda più alta)';
String get pre_download_play_description =>
'Anzi che effettuare lo stream dell\'audio, scarica invece i byte e li riproduce (raccomandato per gli utenti con banda più alta)';
@override
String get skip_non_music => 'Salta i segmenti non di musica (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get blacklist_description => 'Tracce e artisti in blacklist';
@override
String get wait_for_download_to_finish => 'Prego attendere che lo scaricamento corrente finisca';
String get wait_for_download_to_finish =>
'Prego attendere che lo scaricamento corrente finisca';
@override
String get desktop => 'Desktop';
@ -506,7 +504,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get please_sponsor => 'Per favore sponsorizza/dona';
@override
String get spotube_description => 'Spotube, un client spotify gratis per tutti, multipiattaforma e leggero';
String get spotube_description =>
'Spotube, un client spotify gratis per tutti, multipiattaforma e leggero';
@override
String get version => 'Versione';
@ -538,10 +537,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get license => 'Licenza';
@override
String get add_spotify_credentials => 'Aggiungi le tue credenziali spotify per iniziare';
@override
String get credentials_will_not_be_shared_disclaimer => 'Non ti preoccupare, le tue credenziali non saranno inviate o condivise con nessuno';
String get credentials_will_not_be_shared_disclaimer =>
'Non ti preoccupare, le tue credenziali non saranno inviate o condivise con nessuno';
@override
String get know_how_to_login => 'Non sai come farlo?';
@ -549,11 +546,6 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Segui la guida passo-passo';
@override
String spotify_cookie(Object name) {
return 'Cookie Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Cookie $name';
@ -583,33 +575,6 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get first_go_to => 'Prim, vai a';
@override
String get login_if_not_logged_in => 'ed effettua il login o iscrizione se non sei già acceduto';
@override
String get step_2 => 'Passo 2';
@override
String get step_2_steps => '1. Quando sei acceduto premi F12 o premi il tasto destro del Mouse > Ispeziona per aprire gli strumenti di sviluppo del browser.\n2. Vai quindi nel tab \"Applicazione\" (Chrome, Edge, Brave etc..) o tab \"Archiviazione\" (Firefox, Palemoon etc..)\n3. Vai nella sezione \"Cookies\" quindi nella sezione \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Passo 3';
@override
String get step_3_steps => 'Copia il valore del cookie \"sp_dc\"';
@override
String get success_emoji => 'Successo🥳';
@override
String get success_message => 'Ora hai correttamente effettuato il login al tuo account Spotify. Bel lavoro, amico!';
@override
String get step_4 => 'Passo 4';
@override
String get step_4_steps => 'Incolla il valore copiato di \"sp_dc\"';
@override
String get something_went_wrong => 'Qualcosa è andato storto';
@ -617,19 +582,23 @@ class AppLocalizationsIt extends AppLocalizations {
String get piped_instance => 'Istanza Server Piped';
@override
String get piped_description => 'L\'istanza server Piped da usare per il match della tracccia';
String get piped_description =>
'L\'istanza server Piped da usare per il match della tracccia';
@override
String get piped_warning => 'Alcune di queste non funzioneranno benen. Usa quindi a tuo rischio';
String get piped_warning =>
'Alcune di queste non funzioneranno benen. Usa quindi a tuo rischio';
@override
String get invidious_instance => 'Istanza del server Invidious';
@override
String get invidious_description => 'L\'istanza del server Invidious da utilizzare per il matching delle tracce';
String get invidious_description =>
'L\'istanza del server Invidious da utilizzare per il matching delle tracce';
@override
String get invidious_warning => 'Alcuni potrebbero non funzionare bene. Usali a tuo rischio';
String get invidious_warning =>
'Alcuni potrebbero non funzionare bene. Usali a tuo rischio';
@override
String get generate => 'Genera';
@ -640,13 +609,16 @@ class AppLocalizationsIt extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'Sostituisci tutte le tracce scaricate';
String get replace_downloaded_tracks =>
'Sostituisci tutte le tracce scaricate';
@override
String get skip_download_tracks => 'Salta lo scaricamento di tutte le tracce scaricate';
String get skip_download_tracks =>
'Salta lo scaricamento di tutte le tracce scaricate';
@override
String get do_you_want_to_replace => 'Vuoi sovrascrivere la traccia esistente??';
String get do_you_want_to_replace =>
'Vuoi sovrascrivere la traccia esistente??';
@override
String get replace => 'Sovrascrivi';
@ -752,22 +724,28 @@ class AppLocalizationsIt extends AppLocalizations {
}
@override
String get download_warning => 'Se scarichi tutte le Tracce in massa stai chiaramente piratando Musica e causando un danno alla società creativa della Musica. Spero che tu sia cosciente di questo. Cerca di rispettare e supportare sempre il duro lavoro degli Artisti';
String get download_warning =>
'Se scarichi tutte le Tracce in massa stai chiaramente piratando Musica e causando un danno alla società creativa della Musica. Spero che tu sia cosciente di questo. Cerca di rispettare e supportare sempre il duro lavoro degli Artisti';
@override
String get download_ip_ban_warning => 'A proposito, il tuo IP può essere bloccato da YouTube per il numero di richieste di download eccessive rispetto la norma. Il blocco IP significa che non puoi usare YoutTube (anche hai effettuato l\'accesso) per almeno 2-3 mesi dal dispositivo con questo IP. Spotube non ha responsabilità se questo dovesse accadere';
String get download_ip_ban_warning =>
'A proposito, il tuo IP può essere bloccato da YouTube per il numero di richieste di download eccessive rispetto la norma. Il blocco IP significa che non puoi usare YoutTube (anche hai effettuato l\'accesso) per almeno 2-3 mesi dal dispositivo con questo IP. Spotube non ha responsabilità se questo dovesse accadere';
@override
String get by_clicking_accept_terms => 'Cliccando su \'accetta\' concordi con i seguenti termini:';
String get by_clicking_accept_terms =>
'Cliccando su \'accetta\' concordi con i seguenti termini:';
@override
String get download_agreement_1 => 'So che sto piratando Musica. Sono cattivo';
String get download_agreement_1 =>
'So che sto piratando Musica. Sono cattivo';
@override
String get download_agreement_2 => 'Supporterò l\'Artista come potrò e sto facendo questo solo perchè non ho denaro per acquistare il suo prodotto dell\'ingegno';
String get download_agreement_2 =>
'Supporterò l\'Artista come potrò e sto facendo questo solo perchè non ho denaro per acquistare il suo prodotto dell\'ingegno';
@override
String get download_agreement_3 => 'Sono completamente cosciente che il mio IP può essere bloccato da YouTube & non riterrò responsabili Spotube o i suoi autori/contributori per ogni inconveniente causato dalla mia azione corrente';
String get download_agreement_3 =>
'Sono completamente cosciente che il mio IP può essere bloccato da YouTube & non riterrò responsabili Spotube o i suoi autori/contributori per ogni inconveniente causato dalla mia azione corrente';
@override
String get decline => 'Declino';
@ -848,7 +826,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get failed_to_encrypt => 'Criptazione fallita';
@override
String get encryption_failed_warning => 'Spotube usa la criptazione per memorizzare in modo sicuro i dati. Ma ha fallito a farlo. Passerà quindi in ripiego alla memorizzazione non siscura\nSe stai usando Linux assicurati di avere un servizio di segretezza installato (gnome-keyring, kde-wallet, keepassxc etc)';
String get encryption_failed_warning =>
'Spotube usa la criptazione per memorizzare in modo sicuro i dati. Ma ha fallito a farlo. Passerà quindi in ripiego alla memorizzazione non siscura\nSe stai usando Linux assicurati di avere un servizio di segretezza installato (gnome-keyring, kde-wallet, keepassxc etc)';
@override
String get querying_info => 'Richiesta informazioni...';
@ -946,7 +925,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get friends => 'Amici';
@override
String get no_lyrics_available => 'Spiacente, impossibile trovare il testo di questa traccia';
String get no_lyrics_available =>
'Spiacente, impossibile trovare il testo di questa traccia';
@override
String get start_a_radio => 'Avvia una Radio';
@ -955,7 +935,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get how_to_start_radio => 'Come vuoi avviare la radio?';
@override
String get replace_queue_question => 'Vuoi sostituire la coda attuale o aggiungerla?';
String get replace_queue_question =>
'Vuoi sostituire la coda attuale o aggiungerla?';
@override
String get endless_playback => 'Riproduzione Infinita';
@ -964,7 +945,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get delete_playlist => 'Elimina Playlist';
@override
String get delete_playlist_confirmation => 'Sei sicuro di voler eliminare questa playlist?';
String get delete_playlist_confirmation =>
'Sei sicuro di voler eliminare questa playlist?';
@override
String get local_tracks => 'Tracce Locali';
@ -982,7 +964,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get freedom_of_music => '“Libertà della Musica”';
@override
String get freedom_of_music_palm => '“Libertà della Musica nel palmo della tua mano”';
String get freedom_of_music_palm =>
'“Libertà della Musica nel palmo della tua mano”';
@override
String get get_started => 'Cominciamo';
@ -991,13 +974,16 @@ class AppLocalizationsIt extends AppLocalizations {
String get youtube_source_description => 'Consigliato e funziona meglio.';
@override
String get piped_source_description => 'Ti senti libero? Come YouTube ma molto più gratuito.';
String get piped_source_description =>
'Ti senti libero? Come YouTube ma molto più gratuito.';
@override
String get jiosaavn_source_description => 'Il migliore per la regione dell\'Asia meridionale.';
String get jiosaavn_source_description =>
'Il migliore per la regione dell\'Asia meridionale.';
@override
String get invidious_source_description => 'Simile a Piped ma con maggiore disponibilità.';
String get invidious_source_description =>
'Simile a Piped ma con maggiore disponibilità.';
@override
String highest_quality(Object quality) {
@ -1008,13 +994,15 @@ class AppLocalizationsIt extends AppLocalizations {
String get select_audio_source => 'Seleziona Sorgente Audio';
@override
String get endless_playback_description => 'Aggiungi automaticamente nuove canzoni alla fine della coda';
String get endless_playback_description =>
'Aggiungi automaticamente nuove canzoni alla fine della coda';
@override
String get choose_your_region => 'Scegli la tua regione';
@override
String get choose_your_region_description => 'Questo aiuterà Spotube a mostrarti il contenuto giusto per la tua posizione.';
String get choose_your_region_description =>
'Questo aiuterà Spotube a mostrarti il contenuto giusto per la tua posizione.';
@override
String get choose_your_language => 'Scegli la tua lingua';
@ -1023,7 +1011,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get help_project_grow => 'Aiuta questo progetto a crescere';
@override
String get help_project_grow_description => 'Spotube è un progetto open-source. Puoi aiutare questo progetto a crescere contribuendo al progetto, segnalando bug o suggerendo nuove funzionalità.';
String get help_project_grow_description =>
'Spotube è un progetto open-source. Puoi aiutare questo progetto a crescere contribuendo al progetto, segnalando bug o suggerendo nuove funzionalità.';
@override
String get contribute_on_github => 'Contribuisci su GitHub';
@ -1038,7 +1027,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get enable_connect => 'Abilita connessione';
@override
String get enable_connect_description => 'Controlla Spotube da altri dispositivi';
String get enable_connect_description =>
'Controlla Spotube da altri dispositivi';
@override
String get devices => 'Dispositivi';
@ -1117,7 +1107,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get choose_the_device => 'Scegli il dispositivo:';
@override
String get multiple_device_connected => 'Sono collegati più dispositivi.\nScegli il dispositivo su cui vuoi che venga eseguita questa azione';
String get multiple_device_connected =>
'Sono collegati più dispositivi.\nScegli il dispositivo su cui vuoi che venga eseguita questa azione';
@override
String get nothing_found => 'Nessun risultato';
@ -1212,7 +1203,8 @@ class AppLocalizationsIt extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Questo è calcolato in base al pagamento per streaming di Spotify\nche va da \$0.003 a \$0.005. Questo è un calcolo ipotetico\nper dare all\'utente un\'idea di quanto avrebbe pagato agli artisti se avesse ascoltato\ne loro canzoni su Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1253,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get webview_not_found => 'Webview non trovato';
@override
String get webview_not_found_description => 'Nessun runtime Webview installato nel tuo dispositivo.\nSe è installato, assicurati che sia nel environment PATH\n\nDopo l\'installazione, riavvia l\'app';
String get webview_not_found_description =>
'Nessun runtime Webview installato nel tuo dispositivo.\nSe è installato, assicurati che sia nel environment PATH\n\nDopo l\'installazione, riavvia l\'app';
@override
String get unsupported_platform => 'Piattaforma non supportata';
@ -1322,19 +1315,22 @@ class AppLocalizationsIt extends AppLocalizations {
String get view_all => 'Vedi tutto';
@override
String get no_tracks_added_yet => 'Sembra che non hai ancora aggiunto nessun brano';
String get no_tracks_added_yet =>
'Sembra che non hai ancora aggiunto nessun brano';
@override
String get no_tracks => 'Sembra che non ci siano brani qui';
@override
String get no_tracks_listened_yet => 'Sembra che non hai ascoltato nulla ancora';
String get no_tracks_listened_yet =>
'Sembra che non hai ascoltato nulla ancora';
@override
String get not_following_artists => 'Non stai seguendo alcun artista';
@override
String get no_favorite_albums_yet => 'Sembra che non hai ancora aggiunto album ai tuoi preferiti';
String get no_favorite_albums_yet =>
'Sembra che non hai ancora aggiunto album ai tuoi preferiti';
@override
String get no_logs_found => 'Nessun registro trovato';
@ -1358,7 +1354,8 @@ class AppLocalizationsIt extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'In macOS/Linux/os simili a unix, impostare il percorso su .zshrc/.bashrc/.bash_profile ecc. non funzionerà.\nDevi impostare il percorso nel file di configurazione della shell';
String get youtube_engine_unix_issue_message =>
'In macOS/Linux/os simili a unix, impostare il percorso su .zshrc/.bashrc/.bash_profile ecc. non funzionerà.\nDevi impostare il percorso nel file di configurazione della shell';
@override
String get download => 'Scarica';
@ -1376,7 +1373,8 @@ class AppLocalizationsIt extends AppLocalizations {
String get edit_port => 'Modifica porta';
@override
String get port_helper_msg => 'Il valore predefinito è -1, che indica un numero casuale. Se hai configurato un firewall, si consiglia di impostarlo.';
String get port_helper_msg =>
'Il valore predefinito è -1, che indica un numero casuale. Se hai configurato un firewall, si consiglia di impostarlo.';
@override
String connect_request(Object client) {
@ -1384,5 +1382,6 @@ class AppLocalizationsIt extends AppLocalizations {
}
@override
String get connection_request_denied => 'Connessione negata. L\'utente ha negato l\'accesso.';
String get connection_request_denied =>
'Connessione negata. L\'utente ha negato l\'accesso.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get account => 'アカウント';
@override
String get login_with_spotify => 'Spotify アカウントでログイン';
@override
String get connect_with_spotify => 'Spotify に接続';
@override
String get logout => 'ログアウト';
@ -461,7 +455,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get pre_download_play => '事前ダウンロードと再生';
@override
String get pre_download_play_description => '音声をストリーミングする代わりに、データをバイト単位でダウンロードして再生 (回線速度が早いユーザーにおすすめ)';
String get pre_download_play_description =>
'音声をストリーミングする代わりに、データをバイト単位でダウンロードして再生 (回線速度が早いユーザーにおすすめ)';
@override
String get skip_non_music => '音楽でない部分をスキップ (SponsorBlock)';
@ -506,7 +501,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get please_sponsor => '出資/寄付もお待ちします';
@override
String get spotube_description => 'Spotube は、軽量でクロスプラットフォームな、すべて無料の spotify クライアント';
String get spotube_description =>
'Spotube は、軽量でクロスプラットフォームな、すべて無料の spotify クライアント';
@override
String get version => 'バージョン';
@ -538,10 +534,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get license => 'ライセンス';
@override
String get add_spotify_credentials => 'Spotify のログイン情報を追加してはじめましょう';
@override
String get credentials_will_not_be_shared_disclaimer => '心配ありません。個人情報を収集したり、共有されることはありません';
String get credentials_will_not_be_shared_disclaimer =>
'心配ありません。個人情報を収集したり、共有されることはありません';
@override
String get know_how_to_login => 'やり方が分からないですか?';
@ -549,11 +543,6 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'やり方の説明を見る';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookies';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookies';
@ -583,33 +572,6 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get first_go_to => '最初にここを開き';
@override
String get login_if_not_logged_in => '、ログインしてないならログインまたは登録します';
@override
String get step_2 => 'ステップ 2';
@override
String get step_2_steps => '1. ログインしたら、F12を押すか、マウス右クリック 調査(検証)でブラウザの開発者ツール (devtools) を開きます。\n2. アプリケーション (Application) タブ (Chrome, Edge, Brave など) またはストレージタブ (Firefox, Palemoon など)\n3. Cookies 欄を選択し、https://accounts.spotify.com の枝を選びます';
@override
String get step_3 => 'ステップ 3';
@override
String get step_3_steps => '\"sp_dc\" Cookieの値をコピー';
@override
String get success_emoji => '成功🥳';
@override
String get success_message => 'アカウントへのログインに成功しました。よくできました!';
@override
String get step_4 => 'ステップ 4';
@override
String get step_4_steps => 'コピーした\"sp_dc\"の値を貼り付け';
@override
String get something_went_wrong => '何か誤りがあります';
@ -752,10 +714,12 @@ class AppLocalizationsJa extends AppLocalizations {
}
@override
String get download_warning => '全曲の一括ダウンロードは明らかに音楽への海賊行為であり、音楽を生み出す共同体に損害を与えるでしょう。気づいてほしい。アーティストの多大な努力に敬意を払い、支援するようにしてください';
String get download_warning =>
'全曲の一括ダウンロードは明らかに音楽への海賊行為であり、音楽を生み出す共同体に損害を与えるでしょう。気づいてほしい。アーティストの多大な努力に敬意を払い、支援するようにしてください';
@override
String get download_ip_ban_warning => 'また、通常よりも過剰なダウンロード要求があれば、YouTubeはあなたのIPをブロックします。つまりそのIPの端末からは、少なくとも2-3か月の間、ログインしてもYouTubeを利用できなくなりす。そうなっても Spotube は一切の責任を負いません';
String get download_ip_ban_warning =>
'また、通常よりも過剰なダウンロード要求があれば、YouTubeはあなたのIPをブロックします。つまりそのIPの端末からは、少なくとも2-3か月の間、ログインしてもYouTubeを利用できなくなりす。そうなっても Spotube は一切の責任を負いません';
@override
String get by_clicking_accept_terms => '「同意する」のクリックにより、以下への同意となります:';
@ -767,7 +731,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get download_agreement_2 => '芸術作品を買うお金がないのでそうするしかないが、アーティストをできる限り支援する';
@override
String get download_agreement_3 => '私のIPがYouTubeにブロックされることがあると完全に把握した。私のこの行動により起きたどんな事故も、Spotube やその所有者/貢献者に責任はありません。';
String get download_agreement_3 =>
'私のIPがYouTubeにブロックされることがあると完全に把握した。私のこの行動により起きたどんな事故も、Spotube やその所有者/貢献者に責任はありません。';
@override
String get decline => '同意しない';
@ -848,7 +813,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get failed_to_encrypt => '暗号化に失敗しました';
@override
String get encryption_failed_warning => 'Spotubeはデータを安全に保存するために暗号化を使用しています。しかし、失敗しました。したがって、安全でないストレージにフォールバックします\nLinuxを使用している場合は、gnome-keyring、kde-wallet、keepassxcなどのシークレットサービスがインストールされていることを確認してください';
String get encryption_failed_warning =>
'Spotubeはデータを安全に保存するために暗号化を使用しています。しかし、失敗しました。したがって、安全でないストレージにフォールバックします\nLinuxを使用している場合は、gnome-keyring、kde-wallet、keepassxcなどのシークレットサービスがインストールされていることを確認してください';
@override
String get querying_info => '情報を取得中...';
@ -1014,7 +980,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get choose_your_region => '地域を選択';
@override
String get choose_your_region_description => 'これにより、Spotubeがあなたの場所に適したコンテンツを表示できます。';
String get choose_your_region_description =>
'これにより、Spotubeがあなたの場所に適したコンテンツを表示できます。';
@override
String get choose_your_language => '言語を選択してください';
@ -1023,7 +990,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get help_project_grow => 'このプロジェクトの成長を支援する';
@override
String get help_project_grow_description => 'Spotubeはオープンソースプロジェクトです。プロジェクトに貢献したり、バグを報告したり、新しい機能を提案することで、このプロジェクトの成長に貢献できます。';
String get help_project_grow_description =>
'Spotubeはオープンソースプロジェクトです。プロジェクトに貢献したり、バグを報告したり、新しい機能を提案することで、このプロジェクトの成長に貢献できます。';
@override
String get contribute_on_github => 'GitHubで貢献する';
@ -1117,7 +1085,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get choose_the_device => 'デバイスを選択:';
@override
String get multiple_device_connected => '複数のデバイスが接続されています。\nこのアクションを実行するデバイスを選択してください';
String get multiple_device_connected =>
'複数のデバイスが接続されています。\nこのアクションを実行するデバイスを選択してください';
@override
String get nothing_found => '何も見つかりませんでした';
@ -1190,7 +1159,8 @@ class AppLocalizationsJa extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*これは Spotify のストリームあたりの支払い\n\$0.003 から \$0.005 であると仮定して計算されています。\nこれは、Spotify でその曲を聴いた場合にアーティストにいくら支払ったかの\n洞察を得るための仮定の計算です。';
String get streaming_fees_hypothetical =>
'*これは Spotify のストリームあたりの支払い\n\$0.003 から \$0.005 であると仮定して計算されています。\nこれは、Spotify でその曲を聴いた場合にアーティストにいくら支払ったかの\n洞察を得るための仮定の計算です。';
@override
String get minutes_listened => 'リスニング時間';
@ -1212,7 +1182,8 @@ class AppLocalizationsJa extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*これは、Spotifyのストリームごとの支払い\n\$0.003 から \$0.005 の範囲で計算されています。これは仮想的な\n計算で、Spotify で曲を聴いた場合に、アーティストに\nどれくらい支払ったかをユーザーに示すためのものです。';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1232,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get webview_not_found => 'Webviewが見つかりません';
@override
String get webview_not_found_description => 'デバイスにWebviewランタイムがインストールされていません。\nインストールされている場合は、environment PATHにあることを確認してください\n\nインストール後、アプリを再起動してください';
String get webview_not_found_description =>
'デバイスにWebviewランタイムがインストールされていません。\nインストールされている場合は、environment PATHにあることを確認してください\n\nインストール後、アプリを再起動してください';
@override
String get unsupported_platform => 'サポートされていないプラットフォーム';
@ -1358,7 +1330,8 @@ class AppLocalizationsJa extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/Unix系OSでは、.zshrc/.bashrc/.bash_profileなどでパスを設定しても動作しません。\nシェルの設定ファイルにパスを設定する必要があります';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/Unix系OSでは、.zshrc/.bashrc/.bash_profileなどでパスを設定しても動作しません。\nシェルの設定ファイルにパスを設定する必要があります';
@override
String get download => 'ダウンロード';
@ -1376,7 +1349,8 @@ class AppLocalizationsJa extends AppLocalizations {
String get edit_port => 'ポートを編集';
@override
String get port_helper_msg => 'デフォルトは-1で、ランダムな番号を示します。ファイアウォールを設定している場合は、これを設定することをお勧めします。';
String get port_helper_msg =>
'デフォルトは-1で、ランダムな番号を示します。ファイアウォールを設定している場合は、これを設定することをお勧めします。';
@override
String connect_request(Object client) {

View File

@ -379,12 +379,6 @@ class AppLocalizationsKa extends AppLocalizations {
@override
String get account => 'ანგარიში';
@override
String get login_with_spotify => 'შედით თქვენი Spotify ანგარიშით';
@override
String get connect_with_spotify => 'დაუკავშირდით Spotify-ს';
@override
String get logout => 'გასვლა';
@ -413,7 +407,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get layout_mode => 'განლაგების რეჟიმი';
@override
String get override_layout_settings => 'რესფონსივ განლაგების რეჟიმის კონფიგურაციაზე გადაწერა';
String get override_layout_settings =>
'რესფონსივ განლაგების რეჟიმის კონფიგურაციაზე გადაწერა';
@override
String get adaptive => 'ადაპტირებული';
@ -443,7 +438,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get sync_album_color => 'ალბომის ფერის სინქრონიზაცია';
@override
String get sync_album_color_description => 'დომინანტური ალბომის ფერის აქცენტის ფერად გამოყენება';
String get sync_album_color_description =>
'დომინანტური ალბომის ფერის აქცენტის ფერად გამოყენება';
@override
String get playback => 'დაკვრა';
@ -461,16 +457,19 @@ class AppLocalizationsKa extends AppLocalizations {
String get pre_download_play => 'წინასწარ ჩამოტვირთვა და დაკვრა';
@override
String get pre_download_play_description => 'აუდიოს სტრიმინგის ნაცვლად, ბაიტების ჩამოტვირთვა და დაკვრა (რეკომენდებულია უფრო მაღალი გამტარუნარიანობის მომხმარებლებისთვის)';
String get pre_download_play_description =>
'აუდიოს სტრიმინგის ნაცვლად, ბაიტების ჩამოტვირთვა და დაკვრა (რეკომენდებულია უფრო მაღალი გამტარუნარიანობის მომხმარებლებისთვის)';
@override
String get skip_non_music => 'არა მუსიკალური ნაწილის გამოტოვება (სპონსორის ბლოკი)';
String get skip_non_music =>
'არა მუსიკალური ნაწილის გამოტოვება (სპონსორის ბლოკი)';
@override
String get blacklist_description => 'შავ სიაში მყოფი არტისტები და ტრეკები';
@override
String get wait_for_download_to_finish => 'გთხოვთ, დაელოდოთ მიმდინარე ჩამოტვირთვის დასრულებას';
String get wait_for_download_to_finish =>
'გთხოვთ, დაელოდოთ მიმდინარე ჩამოტვირთვის დასრულებას';
@override
String get desktop => 'დესკტოპი';
@ -506,7 +505,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get please_sponsor => 'გთხოვთ დაგვასპონსოროთ';
@override
String get spotube_description => 'Spotube, a lightweight, cross-platform, free-for-all spotify client';
String get spotube_description =>
'Spotube, a lightweight, cross-platform, free-for-all spotify client';
@override
String get version => 'ვერსია';
@ -538,21 +538,15 @@ class AppLocalizationsKa extends AppLocalizations {
String get license => 'ლიცენზია';
@override
String get add_spotify_credentials => 'დასაწყებად დაამატეთ თქვენი Spotify მონაცემები';
@override
String get credentials_will_not_be_shared_disclaimer => 'არ ინერვიულოთ, თქვენი მონაცემები არ იქნება შეგროვებული ან გაზიარებული ვინმესთან';
String get credentials_will_not_be_shared_disclaimer =>
'არ ინერვიულოთ, თქვენი მონაცემები არ იქნება შეგროვებული ან გაზიარებული ვინმესთან';
@override
String get know_how_to_login => 'არ იცით როგორ გააკეთოთ ეს?';
@override
String get follow_step_by_step_guide => 'მიჰყევით ნაბიჯ-ნაბიჯ სახელმძღვანელოს';
@override
String spotify_cookie(Object name) {
return 'Spotify $name ქუქი';
}
String get follow_step_by_step_guide =>
'მიჰყევით ნაბიჯ-ნაბიჯ სახელმძღვანელოს';
@override
String cookie_name_cookie(Object name) {
@ -583,33 +577,6 @@ class AppLocalizationsKa extends AppLocalizations {
@override
String get first_go_to => 'პირველი, გადადით';
@override
String get login_if_not_logged_in => 'და შესვლა/რეგისტრაცია, თუ არ ხართ შესული';
@override
String get step_2 => 'ნაბიჯი 2';
@override
String get step_2_steps => '1. როცა შეხვალთ, დააჭირეთ F12-ს ან მაუსის მარჯვენა ღილაკს > Inspect to Open the Browser devtools.\n2. შემდეგ გახსენით \"Application\" განყოფილება (Chrome, Edge, Brave etc..) ან \"Storage\" განყოფილება (Firefox, Palemoon etc..)\n3. შედით \"Cookies\" სექციაში და შემდეგ \"https://accounts.spotify.com\" სუბსექციაში';
@override
String get step_3 => 'ნაბიჯი 3';
@override
String get step_3_steps => 'დააკოპირეთ \"sp_dc\" ქუქი-ფაილის მნიშვნელობა';
@override
String get success_emoji => 'წარმატება🥳';
@override
String get success_message => 'თქვენ წარმატებით შეხვედით თქვენი Spotify ანგარიშით.';
@override
String get step_4 => 'ნაბიჯი 4';
@override
String get step_4_steps => 'ჩასვით კოპირებული \"sp_dc\" მნიშვნელობა';
@override
String get something_went_wrong => 'Რაღაც არასწორად წავიდა';
@ -617,7 +584,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get piped_instance => 'Piped Server Instance';
@override
String get piped_description => 'The Piped server instance to use for track matching';
String get piped_description =>
'The Piped server instance to use for track matching';
@override
String get piped_warning => 'ზოგიერთი მათგანმა შეიძლება კარგად არ იმუშაოს. ';
@ -626,10 +594,12 @@ class AppLocalizationsKa extends AppLocalizations {
String get invidious_instance => 'Invidious სერვერის ინსტანცია';
@override
String get invidious_description => 'Invidious სერვერის ინსტანცია, რომელიც გამოიყენება ტრეკის შესატყვისად';
String get invidious_description =>
'Invidious სერვერის ინსტანცია, რომელიც გამოიყენება ტრეკის შესატყვისად';
@override
String get invidious_warning => 'ზოგიერთი შეიძლება კარგად არ მუშაობდეს. გამოიყენეთ თქვენს პასუხისმგებლობაზე';
String get invidious_warning =>
'ზოგიერთი შეიძლება კარგად არ მუშაობდეს. გამოიყენეთ თქვენს პასუხისმგებლობაზე';
@override
String get generate => 'გააგენერირეთ';
@ -744,7 +714,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get are_you_sure => 'Დარწმუნებული ხართ?';
@override
String get generating_playlist => 'მიმდინარეობს თქვენი მორგებული ფლეილისტის გენერირება...';
String get generating_playlist =>
'მიმდინარეობს თქვენი მორგებული ფლეილისტის გენერირება...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +723,27 @@ class AppLocalizationsKa extends AppLocalizations {
}
@override
String get download_warning => 'If you download all Tracks at bulk you\'re clearly pirating Music & causing damage to the creative society of Music. I hope you are aware of this. Always, try respecting & supporting Artist\'s hard work';
String get download_warning =>
'If you download all Tracks at bulk you\'re clearly pirating Music & causing damage to the creative society of Music. I hope you are aware of this. Always, try respecting & supporting Artist\'s hard work';
@override
String get download_ip_ban_warning => 'BTW, your IP can get blocked on YouTube due excessive download requests than usual. IP block means you can\'t use YouTube (even if you\'re logged in) for at least 2-3 months from that IP device. And Spotube doesn\'t hold any responsibility if this ever happens';
String get download_ip_ban_warning =>
'BTW, your IP can get blocked on YouTube due excessive download requests than usual. IP block means you can\'t use YouTube (even if you\'re logged in) for at least 2-3 months from that IP device. And Spotube doesn\'t hold any responsibility if this ever happens';
@override
String get by_clicking_accept_terms => 'By clicking \'accept\' you agree to following terms:';
String get by_clicking_accept_terms =>
'By clicking \'accept\' you agree to following terms:';
@override
String get download_agreement_1 => 'I know I\'m pirating Music. I\'m bad';
@override
String get download_agreement_2 => 'I\'ll support the Artist wherever I can and I\'m only doing this because I don\'t have money to buy their art';
String get download_agreement_2 =>
'I\'ll support the Artist wherever I can and I\'m only doing this because I don\'t have money to buy their art';
@override
String get download_agreement_3 => 'I\'m completely aware that my IP can get blocked on YouTube & I don\'t hold Spotube or his owners/contributors responsible for any accidents caused by my current action';
String get download_agreement_3 =>
'I\'m completely aware that my IP can get blocked on YouTube & I don\'t hold Spotube or his owners/contributors responsible for any accidents caused by my current action';
@override
String get decline => 'უარყოფა';
@ -848,7 +824,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get failed_to_encrypt => 'დაშიფვრა ვერ მოხერხდა';
@override
String get encryption_failed_warning => 'Spotube uses encryption to securely store your data. But failed to do so. So it\'ll fallback to insecure storage\nIf you\'re using linux, please make sure you\'ve any secret-service (gnome-keyring, kde-wallet, keepassxc etc) installed';
String get encryption_failed_warning =>
'Spotube uses encryption to securely store your data. But failed to do so. So it\'ll fallback to insecure storage\nIf you\'re using linux, please make sure you\'ve any secret-service (gnome-keyring, kde-wallet, keepassxc etc) installed';
@override
String get querying_info => 'Querying info...';
@ -946,7 +923,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get friends => 'მეგობრები';
@override
String get no_lyrics_available => 'უკაცრავად, ამ ტრეკისთვის ტექსტის პოვნა შეუძლებელია';
String get no_lyrics_available =>
'უკაცრავად, ამ ტრეკისთვის ტექსტის პოვნა შეუძლებელია';
@override
String get start_a_radio => 'რადიოს ჩართვა';
@ -955,7 +933,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get how_to_start_radio => 'როგორ გნებავთ რადიოს ჩართვა?';
@override
String get replace_queue_question => 'გნებავთ ჩაანაცვლოთ არსებული რიგი თუ დაამატოთ მასზე?';
String get replace_queue_question =>
'გნებავთ ჩაანაცვლოთ არსებული რიგი თუ დაამატოთ მასზე?';
@override
String get endless_playback => 'დაუსრულებელი დაკვრა';
@ -964,7 +943,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get delete_playlist => 'ფლეილისტის წაშლა';
@override
String get delete_playlist_confirmation => 'დარწმუნებული ხართ რომ გნებავთ ფლეილისტის წაშლა?';
String get delete_playlist_confirmation =>
'დარწმუნებული ხართ რომ გნებავთ ფლეილისტის წაშლა?';
@override
String get local_tracks => 'ლოკალური ტრეკები';
@ -988,16 +968,20 @@ class AppLocalizationsKa extends AppLocalizations {
String get get_started => 'დავიწყოთ';
@override
String get youtube_source_description => 'რეკომენდებულია და მუშაობს საუკეთესოდ.';
String get youtube_source_description =>
'რეკომენდებულია და მუშაობს საუკეთესოდ.';
@override
String get piped_source_description => 'თავისუფლად გრძნობთ თავს? იგივეა, რაც YouTube, მაგრამ ბევრი თავისუფალი.';
String get piped_source_description =>
'თავისუფლად გრძნობთ თავს? იგივეა, რაც YouTube, მაგრამ ბევრი თავისუფალი.';
@override
String get jiosaavn_source_description => 'საუკეთესოა სამხრეთ აზიის რეგიონისთვის.';
String get jiosaavn_source_description =>
'საუკეთესოა სამხრეთ აზიის რეგიონისთვის.';
@override
String get invidious_source_description => 'მსგავსია Piped-ის, მაგრამ მაღალი ხელმისაწვდომობით.';
String get invidious_source_description =>
'მსგავსია Piped-ის, მაგრამ მაღალი ხელმისაწვდომობით.';
@override
String highest_quality(Object quality) {
@ -1008,13 +992,15 @@ class AppLocalizationsKa extends AppLocalizations {
String get select_audio_source => 'აუდიოს წყაროს არჩევა';
@override
String get endless_playback_description => 'ახალი სიმთერების ავტომატურად რიგის ბოლოში დამატება';
String get endless_playback_description =>
'ახალი სიმთერების ავტომატურად რიგის ბოლოში დამატება';
@override
String get choose_your_region => 'აირჩიე შენი რეგიონი';
@override
String get choose_your_region_description => 'This will help Spotube show you the right content\nfor your location.';
String get choose_your_region_description =>
'This will help Spotube show you the right content\nfor your location.';
@override
String get choose_your_language => 'აირჩიე ენა';
@ -1023,7 +1009,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get help_project_grow => 'დაეხმარეთ ამ პროექტს განვითარებაში';
@override
String get help_project_grow_description => 'Spotube is an open-source project. You can help this project grow by contributing to the project, reporting bugs, or suggesting new features.';
String get help_project_grow_description =>
'Spotube is an open-source project. You can help this project grow by contributing to the project, reporting bugs, or suggesting new features.';
@override
String get contribute_on_github => 'GitHub-ზე კონტრიბუცია';
@ -1038,7 +1025,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get enable_connect => 'დაკავშირების ჩართვა';
@override
String get enable_connect_description => 'აკონტროლე Spotube სხვა მოწყობილობებიდან';
String get enable_connect_description =>
'აკონტროლე Spotube სხვა მოწყობილობებიდან';
@override
String get devices => 'მოწყობილობები';
@ -1117,7 +1105,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get choose_the_device => 'აირჩიეთ მოწყობილობა:';
@override
String get multiple_device_connected => 'დაკავშირებულია რამდენიმე მოწყობილობა.\nაირჩიეთ მოწყობილობა, რომელზეც უნდა განხორციელდეს ეს მოქმედება';
String get multiple_device_connected =>
'დაკავშირებულია რამდენიმე მოწყობილობა.\nაირჩიეთ მოწყობილობა, რომელზეც უნდა განხორციელდეს ეს მოქმედება';
@override
String get nothing_found => 'არაფერი მოიძებნა';
@ -1190,7 +1179,8 @@ class AppLocalizationsKa extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*ეს рассчитывается на основе выплат за поток от Spotify\nот \$0.003 до \$0.005. ეს ჰიპოთეტური გამოთვლა იძლევა მომხმარებელს წარმოდგენას იმაზე, რამდენად\nგადახდილი იქნებოდა არტისტებისთვის, თუ მათ მოუსმინოს Spotify-ს ტრეკებს.';
String get streaming_fees_hypothetical =>
'*ეს рассчитывается на основе выплат за поток от Spotify\nот \$0.003 до \$0.005. ეს ჰიპოთეტური გამოთვლა იძლევა მომხმარებელს წარმოდგენას იმაზე, რამდენად\nგადახდილი იქნებოდა არტისტებისთვის, თუ მათ მოუსმინოს Spotify-ს ტრეკებს.';
@override
String get minutes_listened => 'წუთები მოუსმინეს';
@ -1212,7 +1202,8 @@ class AppLocalizationsKa extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*ეს გამოითვლება Spotify-ის თითოეულ სტრიმზე\nგადახდის შესაბამისად, რომელიც \$0.003 დან \$0.005-მდეა. ეს არის ჰიპოთეტური\nგამოთვლა, რომელიც აჩვენებს მომხმარებელს რამდენი გადაიხდიდა\nარტისტებს, თუკი ისინი უსმენდნენ მათ სიმღერებს Spotify-ზე.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1252,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get webview_not_found => 'ვებვიუ ვერ მოიძებნა';
@override
String get webview_not_found_description => 'თქვენს მოწყობილობაზე ვებვიუის შესრულების დრო არ არის დაყენებული.\nთუ დაყენებულია, დარწმუნდით, რომ ის environment PATH-შია\n\nდაყენების შემდეგ, გადატვირთეთ აპი';
String get webview_not_found_description =>
'თქვენს მოწყობილობაზე ვებვიუის შესრულების დრო არ არის დაყენებული.\nთუ დაყენებულია, დარწმუნდით, რომ ის environment PATH-შია\n\nდაყენების შემდეგ, გადატვირთეთ აპი';
@override
String get unsupported_platform => 'მოუხერხებელი პლატფორმა';
@ -1322,19 +1314,22 @@ class AppLocalizationsKa extends AppLocalizations {
String get view_all => 'ყველა ნახვა';
@override
String get no_tracks_added_yet => 'გაჩნდება რომ ჯერ არ გაქვთ დამატებული ტრეკები';
String get no_tracks_added_yet =>
'გაჩნდება რომ ჯერ არ გაქვთ დამატებული ტრეკები';
@override
String get no_tracks => 'გავლებული არ ჩანს არ არსებობს ტრეკები';
@override
String get no_tracks_listened_yet => 'გქონდეთ გრძნობა, რომ ჯერ არაფერი უსმენია';
String get no_tracks_listened_yet =>
'გქონდეთ გრძნობა, რომ ჯერ არაფერი უსმენია';
@override
String get not_following_artists => 'არ მიჰყვებით რომელიმე არტისტს';
@override
String get no_favorite_albums_yet => 'გაჩნდება რომ ჯერ არ გაქვთ დამატებული ალბომები თქვენს ფავორიტებში';
String get no_favorite_albums_yet =>
'გაჩნდება რომ ჯერ არ გაქვთ დამატებული ალბომები თქვენს ფავორიტებში';
@override
String get no_logs_found => 'ჩაწერები ვერ მოიძებნა';
@ -1358,7 +1353,8 @@ class AppLocalizationsKa extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/Unix მსგავსი ოპერაციული სისტემებში, .zshrc/.bashrc/.bash_profile-ით პათის დაყენება ვერ იმუშავებს.\nთქვენ უნდა დააყენოთ პათი შელ ფაილში';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/Unix მსგავსი ოპერაციული სისტემებში, .zshrc/.bashrc/.bash_profile-ით პათის დაყენება ვერ იმუშავებს.\nთქვენ უნდა დააყენოთ პათი შელ ფაილში';
@override
String get download => 'ჩამოტვირთვა';
@ -1376,7 +1372,8 @@ class AppLocalizationsKa extends AppLocalizations {
String get edit_port => 'პორტის რედაქტირება';
@override
String get port_helper_msg => 'ნაგულისხმევი არის -1, რაც შემთხვევითი ნომრის მითითებას ნიშნავს. თუ لديك firewall настроен, рекомендуется установить это.';
String get port_helper_msg =>
'ნაგულისხმევი არის -1, რაც შემთხვევითი ნომრის მითითებას ნიშნავს. თუ لديك firewall настроен, рекомендуется установить это.';
@override
String connect_request(Object client) {
@ -1384,5 +1381,6 @@ class AppLocalizationsKa extends AppLocalizations {
}
@override
String get connection_request_denied => 'კავშირი უარყოფილია. მომხმარებელმა უარყო წვდომა.';
String get connection_request_denied =>
'კავშირი უარყოფილია. მომხმარებელმა უარყო წვდომა.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get account => '계정';
@override
String get login_with_spotify => 'Spotify 계정으로 로그인';
@override
String get connect_with_spotify => 'Spotify에 연결';
@override
String get logout => '로그아웃';
@ -461,7 +455,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get pre_download_play => '재생할 곡을 미리 다운로드';
@override
String get pre_download_play_description => '스트리밍 방식을 쓰는 대신 파일 단위로 다운로드 받고 재생 (인터넷 대역폭이 높은 환경에서 추천)';
String get pre_download_play_description =>
'스트리밍 방식을 쓰는 대신 파일 단위로 다운로드 받고 재생 (인터넷 대역폭이 높은 환경에서 추천)';
@override
String get skip_non_music => '음악이 아닌 부분을 스킵 (SponsorBlock)';
@ -506,7 +501,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get please_sponsor => '후원해주시면 감사하겠습니다.';
@override
String get spotube_description => 'Spotube는, 경량에 크로스플랫폼인데다 무료이기까지한 스포티파이 클라이언트입니다';
String get spotube_description =>
'Spotube는, 경량에 크로스플랫폼인데다 무료이기까지한 스포티파이 클라이언트입니다';
@override
String get version => '버전';
@ -538,10 +534,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get license => '라이선스';
@override
String get add_spotify_credentials => '먼저 Spotify의 로그인정보를 추가하기';
@override
String get credentials_will_not_be_shared_disclaimer => '걱정마세요. 개인정보를 수집하거나 공유하지 않습니다.';
String get credentials_will_not_be_shared_disclaimer =>
'걱정마세요. 개인정보를 수집하거나 공유하지 않습니다.';
@override
String get know_how_to_login => '어떻게 하는건지 모르겠나요?';
@ -549,11 +543,6 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get follow_step_by_step_guide => '사용법 확인하기';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookies';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookies';
@ -583,33 +572,6 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get first_go_to => '가장 먼저 먼저 들어갈 곳은 ';
@override
String get login_if_not_logged_in => '그리고 로그인을 하지 않았다면 로그인해주세요';
@override
String get step_2 => '2단계';
@override
String get step_2_steps => '1. 로그인에 성공하면、F12나 마우스 우클릭 검사(Inspect)을 눌러 브라우저의 개발자 도구(devtools)를 열어주세요.\n2. 애플리케이션 (Application) 탭 (Chrome, Edge, Brave 등) 또는 스토리지 탭 (Firefox, Palemoon 등)을 열어주세요.\n3. 쿠키 (Cookies) 섹션으로 들어가서, https://accounts.spotify.com 서브섹션으로 들어가주세요.';
@override
String get step_3 => '3단계';
@override
String get step_3_steps => '\"sp_dc\" 쿠키의 값을 복사';
@override
String get success_emoji => '성공🥳';
@override
String get success_message => '성공적으로 스포티파이 게정으로 로그인했습니다. 잘했어요!';
@override
String get step_4 => '4단계';
@override
String get step_4_steps => '복사한 \"sp_dc\"값을 붙여넣기';
@override
String get something_went_wrong => '알 수 없는 이유로 동작에 실패했습니다.';
@ -752,10 +714,12 @@ class AppLocalizationsKo extends AppLocalizations {
}
@override
String get download_warning => '모든 트랙을 대량으로 다운로드하는 것은 명백한 불법 복제이며 음악 창작 사회에 피해를 입히는 행위입니다. 이 점을 알아주셨으면 합니다. 항상 아티스트의 노력을 존중하고 응원해 주세요.';
String get download_warning =>
'모든 트랙을 대량으로 다운로드하는 것은 명백한 불법 복제이며 음악 창작 사회에 피해를 입히는 행위입니다. 이 점을 알아주셨으면 합니다. 항상 아티스트의 노력을 존중하고 응원해 주세요.';
@override
String get download_ip_ban_warning => '참고로, 평소보다 과도한 다운로드 요청으로 인해 YouTube에서 IP가 차단될 수 있습니다. IP 차단은 해당 IP 기기에서 최소 2~3개월 동안 (로그인한 상태에서도) YouTube를 사용할 수 없음을 의미합니다. 그리고 이런 일이 발생하더라도 스포튜브는 어떠한 책임도 지지 않습니다.';
String get download_ip_ban_warning =>
'참고로, 평소보다 과도한 다운로드 요청으로 인해 YouTube에서 IP가 차단될 수 있습니다. IP 차단은 해당 IP 기기에서 최소 2~3개월 동안 (로그인한 상태에서도) YouTube를 사용할 수 없음을 의미합니다. 그리고 이런 일이 발생하더라도 스포튜브는 어떠한 책임도 지지 않습니다.';
@override
String get by_clicking_accept_terms => '\'동의\'를 클릭하면 다음 약관에 동의하는 것입니다:';
@ -764,10 +728,12 @@ class AppLocalizationsKo extends AppLocalizations {
String get download_agreement_1 => '알고 있습니다. 전 나쁜 사람입니다.';
@override
String get download_agreement_2 => '제가 할 수 있는 모든 곳에서 아티스트를 지원할 것이며, 저는 그들의 작품을 살 돈이 없기 때문에 이렇게 하는 것뿐입니다.';
String get download_agreement_2 =>
'제가 할 수 있는 모든 곳에서 아티스트를 지원할 것이며, 저는 그들의 작품을 살 돈이 없기 때문에 이렇게 하는 것뿐입니다.';
@override
String get download_agreement_3 => '본인은 YouTube에서 내 IP가 차단될 수 있음을 완전히 알고 있으며, 현재 내 행동으로 인해 발생하는 사고에 대해 Spotube 또는 그 소유자/기여자에게 책임을 묻지 않습니다.';
String get download_agreement_3 =>
'본인은 YouTube에서 내 IP가 차단될 수 있음을 완전히 알고 있으며, 현재 내 행동으로 인해 발생하는 사고에 대해 Spotube 또는 그 소유자/기여자에게 책임을 묻지 않습니다.';
@override
String get decline => '거절';
@ -848,7 +814,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get failed_to_encrypt => '암호화에 실패했습니다';
@override
String get encryption_failed_warning => 'Spotube는 암호화를 사용하여 데이터를 안전하게 저장합니다. 하지만 그렇게 하지 못했습니다. 따라서 안전하지 않은 저장소로 대체됩니다.\n리눅스를 사용하는 경우, 비밀 서비스(gnome-keyring, kde-wallet, keepassxc 등)가 설치되어 있는지 확인하세요.';
String get encryption_failed_warning =>
'Spotube는 암호화를 사용하여 데이터를 안전하게 저장합니다. 하지만 그렇게 하지 못했습니다. 따라서 안전하지 않은 저장소로 대체됩니다.\n리눅스를 사용하는 경우, 비밀 서비스(gnome-keyring, kde-wallet, keepassxc 등)가 설치되어 있는지 확인하세요.';
@override
String get querying_info => '정보를 얻는 중...';
@ -991,7 +958,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get youtube_source_description => '추천되며 가장 잘 작동합니다.';
@override
String get piped_source_description => '자유로운 기분이 듭니까? YouTube와 같지만 훨씬 더 무료합니다.';
String get piped_source_description =>
'자유로운 기분이 듭니까? YouTube와 같지만 훨씬 더 무료합니다.';
@override
String get jiosaavn_source_description => '남아시아 지역에 최적입니다.';
@ -1014,7 +982,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get choose_your_region => '지역 선택';
@override
String get choose_your_region_description => '이것은 Spotube가 위치에 맞는 콘텐츠를 표시하는 데 도움이 됩니다.';
String get choose_your_region_description =>
'이것은 Spotube가 위치에 맞는 콘텐츠를 표시하는 데 도움이 됩니다.';
@override
String get choose_your_language => '언어 선택';
@ -1023,7 +992,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get help_project_grow => '이 프로젝트 성장에 도움을 주세요';
@override
String get help_project_grow_description => 'Spotube는 오픈 소스 프로젝트입니다. 프로젝트에 기여하거나 버그를 보고하거나 새로운 기능을 제안하여이 프로젝트의 성장에 도움을 줄 수 있습니다.';
String get help_project_grow_description =>
'Spotube는 오픈 소스 프로젝트입니다. 프로젝트에 기여하거나 버그를 보고하거나 새로운 기능을 제안하여이 프로젝트의 성장에 도움을 줄 수 있습니다.';
@override
String get contribute_on_github => 'GitHub에서 기여하기';
@ -1117,7 +1087,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get choose_the_device => '디바이스 선택:';
@override
String get multiple_device_connected => '여러 디바이스가 연결되어 있습니다.\n이 작업을 실행할 디바이스를 선택하세요';
String get multiple_device_connected =>
'여러 디바이스가 연결되어 있습니다.\n이 작업을 실행할 디바이스를 선택하세요';
@override
String get nothing_found => '찾을 수 없음';
@ -1190,7 +1161,8 @@ class AppLocalizationsKo extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*이것은 Spotify의 스트림당 지급액\n\$0.003에서 \$0.005를 기준으로 계산된 것입니다.\n이것은 사용자가 Spotify에서 곡을 들었을 때\n아티스트에게 지불했을 금액에 대한 통찰을 제공하기 위한\n가상의 계산입니다.';
String get streaming_fees_hypothetical =>
'*이것은 Spotify의 스트림당 지급액\n\$0.003에서 \$0.005를 기준으로 계산된 것입니다.\n이것은 사용자가 Spotify에서 곡을 들었을 때\n아티스트에게 지불했을 금액에 대한 통찰을 제공하기 위한\n가상의 계산입니다.';
@override
String get minutes_listened => '청취한 시간';
@ -1212,7 +1184,8 @@ class AppLocalizationsKo extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Spotify의 스트림당 지불금 \$0.003에서 \$0.005까지의\n기준으로 계산되었습니다. 이는 사용자가 Spotify에서\n곡을 들을 때 아티스트에게 얼마를 지불했을지를\n알려주기 위한 가상의 계산입니다.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1234,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get webview_not_found => '웹뷰를 찾을 수 없음';
@override
String get webview_not_found_description => '기기에 웹뷰 런타임이 설치되지 않았습니다.\n설치되어 있으면 environment PATH에 있는지 확인하십시오\n\n설치 후 앱을 다시 시작하세요';
String get webview_not_found_description =>
'기기에 웹뷰 런타임이 설치되지 않았습니다.\n설치되어 있으면 environment PATH에 있는지 확인하십시오\n\n설치 후 앱을 다시 시작하세요';
@override
String get unsupported_platform => '지원되지 않는 플랫폼';
@ -1358,7 +1332,8 @@ class AppLocalizationsKo extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/unix와 같은 운영 체제에서는 .zshrc/.bashrc/.bash_profile 등에 경로 설정이 작동하지 않습니다.\n셸 구성 파일에 경로를 설정해야 합니다';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/unix와 같은 운영 체제에서는 .zshrc/.bashrc/.bash_profile 등에 경로 설정이 작동하지 않습니다.\n셸 구성 파일에 경로를 설정해야 합니다';
@override
String get download => '다운로드';
@ -1376,7 +1351,8 @@ class AppLocalizationsKo extends AppLocalizations {
String get edit_port => '포트 편집';
@override
String get port_helper_msg => '기본값은 -1로 무작위 숫자를 나타냅니다. 방화벽이 구성된 경우 이를 설정하는 것이 좋습니다.';
String get port_helper_msg =>
'기본값은 -1로 무작위 숫자를 나타냅니다. 방화벽이 구성된 경우 이를 설정하는 것이 좋습니다.';
@override
String connect_request(Object client) {

View File

@ -309,7 +309,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get mini_player => 'मिनि प्लेयर';
@override
String get slide_to_seek => 'अगाडि वा पछाडि खोजी गर्नका लागि स्लाइड गर्नुहोस्';
String get slide_to_seek =>
'अगाडि वा पछाडि खोजी गर्नका लागि स्लाइड गर्नुहोस्';
@override
String get shuffle_playlist => 'प्लेलिस्ट शफल गर्नुहोस्';
@ -379,12 +380,6 @@ class AppLocalizationsNe extends AppLocalizations {
@override
String get account => 'खाता';
@override
String get login_with_spotify => 'तपाईंको Spotify खातासँग लगइन गर्नुहोस्';
@override
String get connect_with_spotify => 'Spotify सँग जडान गर्नुहोस्';
@override
String get logout => 'बाहिर निस्कनुहोस्';
@ -413,7 +408,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get layout_mode => 'लेआउट मोड';
@override
String get override_layout_settings => 'अनुकूलित प्रतिकृयात्मक लेआउट मोड सेटिङ्गहरू';
String get override_layout_settings =>
'अनुकूलित प्रतिकृयात्मक लेआउट मोड सेटिङ्गहरू';
@override
String get adaptive => 'अनुकूलित';
@ -443,7 +439,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get sync_album_color => 'एल्बम रङ्ग सिङ्क गर्नुहोस्';
@override
String get sync_album_color_description => 'एल्बम कला को प्रमुख रङ्गलाई एक्सेन्ट रङ्गको रूपमा प्रयोग गर्दछ';
String get sync_album_color_description =>
'एल्बम कला को प्रमुख रङ्गलाई एक्सेन्ट रङ्गको रूपमा प्रयोग गर्दछ';
@override
String get playback => 'प्लेब्याक';
@ -461,16 +458,19 @@ class AppLocalizationsNe extends AppLocalizations {
String get pre_download_play => 'पूर्व-डाउनलोड र प्ले गर्नुहोस्';
@override
String get pre_download_play_description => 'आडियो स्ट्रिम गर्नु नगरी बाइटहरू डाउनलोड गरी बजाउँछ (उच्च ब्यान्डविथ उपयोगकर्ताहरूको लागि सिफारिस गरिएको)';
String get pre_download_play_description =>
'आडियो स्ट्रिम गर्नु नगरी बाइटहरू डाउनलोड गरी बजाउँछ (उच्च ब्यान्डविथ उपयोगकर्ताहरूको लागि सिफारिस गरिएको)';
@override
String get skip_non_music => 'गीतहरू बाहेक कुनै अनुष्ठान छोड्नुहोस् (स्पन्सरब्लक)';
String get skip_non_music =>
'गीतहरू बाहेक कुनै अनुष्ठान छोड्नुहोस् (स्पन्सरब्लक)';
@override
String get blacklist_description => 'कालोसूची गीत र कलाकारहरू';
@override
String get wait_for_download_to_finish => 'कृपया हालको डाउनलोड समाप्त हुन लागि पर्खनुहोस्';
String get wait_for_download_to_finish =>
'कृपया हालको डाउनलोड समाप्त हुन लागि पर्खनुहोस्';
@override
String get desktop => 'डेस्कटप';
@ -491,7 +491,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get about => 'बारेमा';
@override
String get u_love_spotube => 'हामीले थाहा पारेका छौं तपाईंलाई Spotube मन पर्छ';
String get u_love_spotube =>
'हामीले थाहा पारेका छौं तपाईंलाई Spotube मन पर्छ';
@override
String get check_for_updates => 'अपडेटहरूको लागि जाँच गर्नुहोस्';
@ -506,7 +507,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get please_sponsor => 'कृपया स्पन्सर/डोनेट गर्नुहोस्';
@override
String get spotube_description => 'Spotube, एक हल्का, समृद्ध, स्वतन्त्र Spotify क्लाइयन';
String get spotube_description =>
'Spotube, एक हल्का, समृद्ध, स्वतन्त्र Spotify क्लाइयन';
@override
String get version => 'संस्करण';
@ -538,21 +540,15 @@ class AppLocalizationsNe extends AppLocalizations {
String get license => 'लाइसेन्स';
@override
String get add_spotify_credentials => 'सुरु हुनका लागि तपाईंको स्पटिफाई क्रेडेन्शियल थप्नुहोस्';
@override
String get credentials_will_not_be_shared_disclaimer => 'चिन्ता नगर्नुहोस्, तपाईंको कुनै पनि क्रेडेन्शियलहरूले कसैले संग्रह वा साझा गर्नेछैन';
String get credentials_will_not_be_shared_disclaimer =>
'चिन्ता नगर्नुहोस्, तपाईंको कुनै पनि क्रेडेन्शियलहरूले कसैले संग्रह वा साझा गर्नेछैन';
@override
String get know_how_to_login => 'कसरी लगिन गर्ने भन्ने थाहा छैन?';
@override
String get follow_step_by_step_guide => 'चरणबद्ध मार्गदर्शनमा साथी बनाउनुहोस्';
@override
String spotify_cookie(Object name) {
return 'Spotify $name कुकी';
}
String get follow_step_by_step_guide =>
'चरणबद्ध मार्गदर्शनमा साथी बनाउनुहोस्';
@override
String cookie_name_cookie(Object name) {
@ -583,33 +579,6 @@ class AppLocalizationsNe extends AppLocalizations {
@override
String get first_go_to => 'पहिलो, जानुहोस्';
@override
String get login_if_not_logged_in => 'र लगइन/साइनअप गर्नुहोस् जुन तपाईंले लगइन गरेनन्';
@override
String get step_2 => 'कदम 2';
@override
String get step_2_steps => '1. एकबार तपाईं लगइन गरे पछि, F12 थिच्नुहोस् वा माउस राइट क्लिक गर्नुहोस् > इन्स्पेक्ट गर्नुहोस् भने ब्राउजर डेभटुलहरू खुलाउनका लागि।\n2. तपाईंको \"एप्लिकेसन\" ट्याबमा जानुहोस् (Chrome, Edge, Brave इत्यादि) वा \"स्टोरेज\" ट्याबमा जानुहोस् (Firefox, Palemoon इत्यादि)\n3. तपाईंको इन्सेक्ट गरेको ब्राउजर डेभटुलहरूमा \"कुकीहरू\" खण्डमा जानुहोस् अनि \"https://accounts.spotify.com\" उपकोणमा जानुहोस्';
@override
String get step_3 => 'कदम 3';
@override
String get step_3_steps => '\"sp_dc\"\"sp_key\" (वा sp_gaid) कुकीहरूको मानहरू प्रतिलिपि गर्नुहोस्';
@override
String get success_emoji => 'सफलता 🥳';
@override
String get success_message => 'हाम्रो सानो भाइ, अब तपाईं सफलतापूर्वक आफ्नो Spotify खातामा लगइन गरेका छौं। राम्रो काम गरेको!';
@override
String get step_4 => 'कदम 4';
@override
String get step_4_steps => 'प्रतिलिपि गरेको \"sp_dc\"\"sp_key\" (वा sp_gaid) मानहरूलाई आफ्नो ठाउँमा पेस्ट गर्नुहोस्';
@override
String get something_went_wrong => 'केहि गल्ति भएको छ';
@ -617,19 +586,23 @@ class AppLocalizationsNe extends AppLocalizations {
String get piped_instance => 'पाइपड सर्भर इन्स्ट्यान्स';
@override
String get piped_description => 'गीत मिलाउको लागि प्रयोग गर्ने पाइपड सर्भर इन्स्ट्यान्स';
String get piped_description =>
'गीत मिलाउको लागि प्रयोग गर्ने पाइपड सर्भर इन्स्ट्यान्स';
@override
String get piped_warning => 'तिनीहरूमध्ये केहि ठिक गर्न सक्छ। यसलाई आफ्नो जोखिममा प्रयोग गर्नुहोस्';
String get piped_warning =>
'तिनीहरूमध्ये केहि ठिक गर्न सक्छ। यसलाई आफ्नो जोखिममा प्रयोग गर्नुहोस्';
@override
String get invidious_instance => 'Invidious सर्भर इन्स्टेन्स';
@override
String get invidious_description => 'ट्र्याक मिलाउनका लागि प्रयोग हुने Invidious सर्भर इन्स्टेन्स';
String get invidious_description =>
'ट्र्याक मिलाउनका लागि प्रयोग हुने Invidious सर्भर इन्स्टेन्स';
@override
String get invidious_warning => 'केहीले राम्रोसँग काम नगर्न सक्छ। आफ्नो जोखिममा प्रयोग गर्नुहोस्';
String get invidious_warning =>
'केहीले राम्रोसँग काम नगर्न सक्छ। आफ्नो जोखिममा प्रयोग गर्नुहोस्';
@override
String get generate => 'जनरेट';
@ -640,13 +613,16 @@ class AppLocalizationsNe extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'सबै डाउनलोड गरिएका ट्र्याकहरूलाई परिवर्तन गर्नुहोस्';
String get replace_downloaded_tracks =>
'सबै डाउनलोड गरिएका ट्र्याकहरूलाई परिवर्तन गर्नुहोस्';
@override
String get skip_download_tracks => 'सबै डाउनलोड गरिएका ट्र्याकहरूलाई छोड्नुहोस्';
String get skip_download_tracks =>
'सबै डाउनलोड गरिएका ट्र्याकहरूलाई छोड्नुहोस्';
@override
String get do_you_want_to_replace => 'के तपाईंले वर्तमान ट्र्याकलाई परिवर्तन गर्न चाहनुहुन्छ?';
String get do_you_want_to_replace =>
'के तपाईंले वर्तमान ट्र्याकलाई परिवर्तन गर्न चाहनुहुन्छ?';
@override
String get replace => 'परिवर्तन गर्नुहोस्';
@ -752,22 +728,28 @@ class AppLocalizationsNe extends AppLocalizations {
}
@override
String get download_warning => 'यदि तपाईं सबै ट्र्याकहरूलाई बल्कमा डाउनलोड गर्छनु हो भने तपाईं स्पष्ट रूपमा साङ्गीत चोरी गरिरहेका छन् र यो साङ्गीतको रचनात्मक समाजलाई क्षति पनि पुर्याउँछ। उमेराइएको छ कि तपाईं यसको बारेमा जागरूक छिनुहुन्छ। सधैं, कला गर्दै र कलाकारको कडा परम्परा समर्थन गर्दै आइन्छ।';
String get download_warning =>
'यदि तपाईं सबै ट्र्याकहरूलाई बल्कमा डाउनलोड गर्छनु हो भने तपाईं स्पष्ट रूपमा साङ्गीत चोरी गरिरहेका छन् र यो साङ्गीतको रचनात्मक समाजलाई क्षति पनि पुर्याउँछ। उमेराइएको छ कि तपाईं यसको बारेमा जागरूक छिनुहुन्छ। सधैं, कला गर्दै र कलाकारको कडा परम्परा समर्थन गर्दै आइन्छ।';
@override
String get download_ip_ban_warning => 'बितिएका डाउनलोड अनुरोधहरूका कारण तपाईंको आइपीले YouTube मा ब्लक हुन सक्छ। आइपी ब्लक भनेको कम्तीमा 2-3 महिनासम्म तपाईं त्यस आइपी यन्त्रबाट YouTube प्रयोग गर्न सक्नुहुन्छ। र यदि यो हुँदैछ भने स्पट्यूबले यसलाई कसैले गरेको बारेमा कुनै दायित्व लिन्छैन।';
String get download_ip_ban_warning =>
'बितिएका डाउनलोड अनुरोधहरूका कारण तपाईंको आइपीले YouTube मा ब्लक हुन सक्छ। आइपी ब्लक भनेको कम्तीमा 2-3 महिनासम्म तपाईं त्यस आइपी यन्त्रबाट YouTube प्रयोग गर्न सक्नुहुन्छ। र यदि यो हुँदैछ भने स्पट्यूबले यसलाई कसैले गरेको बारेमा कुनै दायित्व लिन्छैन।';
@override
String get by_clicking_accept_terms => '\'स्वीकृत\' गरेर तपाईं निम्नलिखित निर्वाचन गर्दैछिन्:';
String get by_clicking_accept_terms =>
'\'स्वीकृत\' गरेर तपाईं निम्नलिखित निर्वाचन गर्दैछिन्:';
@override
String get download_agreement_1 => 'म मन्ने छु कि म साङ्गीत चोरी गरिरहेको छु। म बुरो हुँ';
String get download_agreement_1 =>
'म मन्ने छु कि म साङ्गीत चोरी गरिरहेको छु। म बुरो हुँ';
@override
String get download_agreement_2 => 'म कहिल्यै कहिल्यै तिनीहरूलाई समर्थन गर्नेछु र म यो तिनीहरूको कला किन्ने पैसा छैन भने मा मात्र यो गरेको छु';
String get download_agreement_2 =>
'म कहिल्यै कहिल्यै तिनीहरूलाई समर्थन गर्नेछु र म यो तिनीहरूको कला किन्ने पैसा छैन भने मा मात्र यो गरेको छु';
@override
String get download_agreement_3 => 'म पूरा रूपमा जान्छु कि मेरो आइपी YouTube मा ब्लक हुन सक्छ र म मन्छेहरूले मेरो चासोबाट भएको कुनै दुर्घटनामा स्पट्यूब वा तिनीहरूको मालिकहरू/सहयोगीहरूलाई दायित्वी ठान्छुँभन्ने पूर्ण जानकारी छैन';
String get download_agreement_3 =>
'म पूरा रूपमा जान्छु कि मेरो आइपी YouTube मा ब्लक हुन सक्छ र म मन्छेहरूले मेरो चासोबाट भएको कुनै दुर्घटनामा स्पट्यूब वा तिनीहरूको मालिकहरू/सहयोगीहरूलाई दायित्वी ठान्छुँभन्ने पूर्ण जानकारी छैन';
@override
String get decline => 'अस्वीकृत';
@ -848,7 +830,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get failed_to_encrypt => 'एन्क्रिप्ट गर्न सकिएन';
@override
String get encryption_failed_warning => 'स्पट्यूबले तपाईंको डेटा सुरक्षित रूपमा स्टोर गर्नका लागि एन्क्रिप्ट गर्न खोजेको छ। तर यसले गरेको छैन। यसले असुरक्षित स्टोरेजमा फल्लब्याक गर्दछ\nयदि तपाईंले लिनक्स प्रयोग गरिरहेका छन् भने कृपया सुनिश्चित गर्नुहोस् कि तपाईंले कुनै सीक्रेट-सर्भिस (गोनोम-किरिङ, केडीइ-वालेट, किपासेक्ससि इत्यादि) इन्स्टल गरेका छौं';
String get encryption_failed_warning =>
'स्पट्यूबले तपाईंको डेटा सुरक्षित रूपमा स्टोर गर्नका लागि एन्क्रिप्ट गर्न खोजेको छ। तर यसले गरेको छैन। यसले असुरक्षित स्टोरेजमा फल्लब्याक गर्दछ\nयदि तपाईंले लिनक्स प्रयोग गरिरहेका छन् भने कृपया सुनिश्चित गर्नुहोस् कि तपाईंले कुनै सीक्रेट-सर्भिस (गोनोम-किरिङ, केडीइ-वालेट, किपासेक्ससि इत्यादि) इन्स्टल गरेका छौं';
@override
String get querying_info => 'जानकारी हेर्दै...';
@ -865,7 +848,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get you_are_offline => 'तपाईं वर्तमान अफलाइन हुनुहुन्छ';
@override
String get connection_restored => 'तपाईंको इन्टरनेट कनेक्सन पुन: स्थापित भएको छ';
String get connection_restored =>
'तपाईंको इन्टरनेट कनेक्सन पुन: स्थापित भएको छ';
@override
String get use_system_title_bar => 'सिस्टम शीर्षक पट्टी प्रयोग गर्नुहोस्';
@ -874,7 +858,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get crunching_results => 'परिणामहरू कपालबाट पीस्दै...';
@override
String get search_to_get_results => 'परिणामहरू प्राप्त गर्नका लागि खोज्नुहोस्';
String get search_to_get_results =>
'परिणामहरू प्राप्त गर्नका लागि खोज्नुहोस्';
@override
String get use_amoled_mode => 'कृष्ण ब्ल्याक गाढा थिम प्रयोग गर्नुहोस्';
@ -922,7 +907,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get login => 'लगइन';
@override
String get login_with_your_lastfm => 'तपाईंको लास्ट.एफ.एम खातामा लगइन गर्नुहोस्';
String get login_with_your_lastfm =>
'तपाईंको लास्ट.एफ.एम खातामा लगइन गर्नुहोस्';
@override
String get scrobble_to_lastfm => 'लास्ट.एफ.एम मा स्क्रबल गर्नुहोस्';
@ -946,7 +932,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get friends => 'साथीहरू';
@override
String get no_lyrics_available => 'क्षमा गर्दैछौं, यस ट्र्याकका लागि गीतका शब्दहरू फेला परेन';
String get no_lyrics_available =>
'क्षमा गर्दैछौं, यस ट्र्याकका लागि गीतका शब्दहरू फेला परेन';
@override
String get start_a_radio => 'रेडियो सुरु गर्नुहोस्';
@ -955,7 +942,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get how_to_start_radio => 'तपाईं रेडियो कसरी सुरु गर्न चाहानुहुन्छ?';
@override
String get replace_queue_question => 'के तपाईं वर्तमान कताक्ष कोट बदल्न चाहानुहुन्छ वा यसलाई थप्नुहुन्छ?';
String get replace_queue_question =>
'के तपाईं वर्तमान कताक्ष कोट बदल्न चाहानुहुन्छ वा यसलाई थप्नुहुन्छ?';
@override
String get endless_playback => 'अनन्त प्लेब्याक';
@ -964,7 +952,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get delete_playlist => 'प्लेलिस्ट मेटाउनुहोस्';
@override
String get delete_playlist_confirmation => 'के तपाईं यो प्लेलिस्ट मेटाउन निश्चित हुनुहुन्छ?';
String get delete_playlist_confirmation =>
'के तपाईं यो प्लेलिस्ट मेटाउन निश्चित हुनुहुन्छ?';
@override
String get local_tracks => 'स्थानिय ट्र्याकहरू';
@ -991,10 +980,12 @@ class AppLocalizationsNe extends AppLocalizations {
String get youtube_source_description => 'सिफारिस गरिएको र बेस्ट काम गर्दछ।';
@override
String get piped_source_description => 'मुक्त सुस्त? YouTube जस्तै तर धेरै मुक्त।';
String get piped_source_description =>
'मुक्त सुस्त? YouTube जस्तै तर धेरै मुक्त।';
@override
String get jiosaavn_source_description => 'दक्षिण एशियाली क्षेत्रको लागि सर्वोत्तम।';
String get jiosaavn_source_description =>
'दक्षिण एशियाली क्षेत्रको लागि सर्वोत्तम।';
@override
String get invidious_source_description => 'Piped जस्तै तर उच्च उपलब्धतासँग।';
@ -1008,13 +999,15 @@ class AppLocalizationsNe extends AppLocalizations {
String get select_audio_source => 'आडियो स्रोत चयन गर्नुहोस्';
@override
String get endless_playback_description => 'नयाँ गीतहरूलाई स्वचालित रूपमा कताक्षको अन्तमा जोड्नुहोस्';
String get endless_playback_description =>
'नयाँ गीतहरूलाई स्वचालित रूपमा कताक्षको अन्तमा जोड्नुहोस्';
@override
String get choose_your_region => 'तपाईंको क्षेत्र छनौट गर्नुहोस्';
@override
String get choose_your_region_description => 'यो Spotubeलाई तपाईंको स्थानका लागि सहि सामग्री देखाउने मद्दत गर्नेछ।';
String get choose_your_region_description =>
'यो Spotubeलाई तपाईंको स्थानका लागि सहि सामग्री देखाउने मद्दत गर्नेछ।';
@override
String get choose_your_language => 'तपाईंको भाषा छनौट गर्नुहोस्';
@ -1023,7 +1016,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get help_project_grow => 'यस परियोजनामा वृद्धि गराउनुहोस्';
@override
String get help_project_grow_description => 'Spotube एक खुला स्रोतको परियोजना हो। तपाईं परियोजनामा योगदान गरेर, त्रुटिहरू सूचिकै, वा नयाँ सुविधाहरू सुझाव दिएर यस परियोजनामा वृद्धि गर्न सक्नुहुन्छ।';
String get help_project_grow_description =>
'Spotube एक खुला स्रोतको परियोजना हो। तपाईं परियोजनामा योगदान गरेर, त्रुटिहरू सूचिकै, वा नयाँ सुविधाहरू सुझाव दिएर यस परियोजनामा वृद्धि गर्न सक्नुहुन्छ।';
@override
String get contribute_on_github => 'GitHubमा योगदान गर्नुहोस्';
@ -1038,7 +1032,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get enable_connect => 'कनेक्ट सक्रिय गर्नुहोस्';
@override
String get enable_connect_description => 'अन्य उपकरणहरूबाट Spotube कन्ट्रोल गर्नुहोस्';
String get enable_connect_description =>
'अन्य उपकरणहरूबाट Spotube कन्ट्रोल गर्नुहोस्';
@override
String get devices => 'उपकरणहरू';
@ -1117,7 +1112,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get choose_the_device => 'उपकरण चयन गर्नुहोस्:';
@override
String get multiple_device_connected => 'धेरै उपकरण जडान गरिएको छ।\nयो क्रियाकलाप गर्ने उपकरण चयन गर्नुहोस्';
String get multiple_device_connected =>
'धेरै उपकरण जडान गरिएको छ।\nयो क्रियाकलाप गर्ने उपकरण चयन गर्नुहोस्';
@override
String get nothing_found => 'केही फेला परेन';
@ -1190,7 +1186,8 @@ class AppLocalizationsNe extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*यो Spotify को प्रति स्ट्रिमको आधारमा गणना गरिएको छ\n\$0.003 देखि \$0.005 बीचको भुक्तानी। यो एक काल्पनिक गणना हो\nउपयोगकर्तालाई यो थाहा दिनको लागि कि उनीहरूले अर्टिस्टहरूलाई\nSpotify मा गीत सुनेको भए कति भुक्तानी गर्ने थिए।';
String get streaming_fees_hypothetical =>
'*यो Spotify को प्रति स्ट्रिमको आधारमा गणना गरिएको छ\n\$0.003 देखि \$0.005 बीचको भुक्तानी। यो एक काल्पनिक गणना हो\nउपयोगकर्तालाई यो थाहा दिनको लागि कि उनीहरूले अर्टिस्टहरूलाई\nSpotify मा गीत सुनेको भए कति भुक्तानी गर्ने थिए।';
@override
String get minutes_listened => 'सुनिएका मिनेटहरू';
@ -1212,7 +1209,8 @@ class AppLocalizationsNe extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*यो Spotify को प्रति स्ट्रीम भुगतानको आधारमा\n\$0.003 देखि \$0.005 को बीचमा गणना गरिएको हो। यो एक काल्पनिक\nगणना हो जसले प्रयोगकर्तालाई देखाउँछ कि उनीहरूले कति\nअर्टिस्टहरूलाई तिनीहरूका गीतहरू Spotify मा सुनेमा\nभुक्तान गर्नुपर्ने थियो।';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1259,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get webview_not_found => 'वेबभ्यू फेला परेन';
@override
String get webview_not_found_description => 'तपाईंको उपकरणमा कुनै वेबभ्यू रनटाइम स्थापना गरिएको छैन।\nयदि स्थापना गरिएको छ भने, environment PATH मा छ कि छैन भनेर सुनिश्चित गर्नुहोस्\n\nस्थापना पछि, अनुप्रयोग पुनः सुरु गर्नुहोस्';
String get webview_not_found_description =>
'तपाईंको उपकरणमा कुनै वेबभ्यू रनटाइम स्थापना गरिएको छैन।\nयदि स्थापना गरिएको छ भने, environment PATH मा छ कि छैन भनेर सुनिश्चित गर्नुहोस्\n\nस्थापना पछि, अनुप्रयोग पुनः सुरु गर्नुहोस्';
@override
String get unsupported_platform => 'असमर्थित प्लेटफार्म';
@ -1322,19 +1321,22 @@ class AppLocalizationsNe extends AppLocalizations {
String get view_all => 'सभी देखें';
@override
String get no_tracks_added_yet => 'लगता है आपने अभी तक कोई ट्रैक नहीं जोड़ा है';
String get no_tracks_added_yet =>
'लगता है आपने अभी तक कोई ट्रैक नहीं जोड़ा है';
@override
String get no_tracks => 'यहाँ कोई ट्रैक नहीं दिख रहे हैं';
@override
String get no_tracks_listened_yet => 'आपने अभी तक कुछ नहीं सुना है ऐसा लगता है';
String get no_tracks_listened_yet =>
'आपने अभी तक कुछ नहीं सुना है ऐसा लगता है';
@override
String get not_following_artists => 'आप किसी कलाकार को फॉलो नहीं कर रहे हैं';
@override
String get no_favorite_albums_yet => 'लगता है आपने अभी तक कोई एल्बम पसंदीदा में नहीं जोड़ा है';
String get no_favorite_albums_yet =>
'लगता है आपने अभी तक कोई एल्बम पसंदीदा में नहीं जोड़ा है';
@override
String get no_logs_found => 'कोई लॉग नहीं मिला';
@ -1358,7 +1360,8 @@ class AppLocalizationsNe extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/unix जैसे ऑपरेटिंग सिस्टम में, .zshrc/.bashrc/.bash_profile आदि में पथ सेट करना काम नहीं करेगा।\nआपको शेल कॉन्फ़िगरेशन फ़ाइल में पथ सेट करना होगा';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/unix जैसे ऑपरेटिंग सिस्टम में, .zshrc/.bashrc/.bash_profile आदि में पथ सेट करना काम नहीं करेगा।\nआपको शेल कॉन्फ़िगरेशन फ़ाइल में पथ सेट करना होगा';
@override
String get download => 'डाउनलोड';
@ -1376,7 +1379,8 @@ class AppLocalizationsNe extends AppLocalizations {
String get edit_port => 'पोर्ट सम्पादन गर्नुहोस्';
@override
String get port_helper_msg => 'डिफ़ॉल्ट -1 हो जुन यादृच्छिक संख्या जनाउँछ। यदि तपाईंले फायरवाल कन्फिगर गर्नुभएको छ भने, यसलाई सेट गर्न सिफारिस गरिन्छ।';
String get port_helper_msg =>
'डिफ़ॉल्ट -1 हो जुन यादृच्छिक संख्या जनाउँछ। यदि तपाईंले फायरवाल कन्फिगर गर्नुभएको छ भने, यसलाई सेट गर्न सिफारिस गरिन्छ।';
@override
String connect_request(Object client) {
@ -1384,5 +1388,6 @@ class AppLocalizationsNe extends AppLocalizations {
}
@override
String get connection_request_denied => 'जडान अस्वीकृत। प्रयोगकर्ताले पहुँच अस्वीकृत गर्यो।';
String get connection_request_denied =>
'जडान अस्वीकृत। प्रयोगकर्ताले पहुँच अस्वीकृत गर्यो।';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get account => 'Account';
@override
String get login_with_spotify => 'Inloggen met je Spotify-account';
@override
String get connect_with_spotify => 'Verbinden met Spotify';
@override
String get logout => 'Afmelden';
@ -413,7 +407,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get layout_mode => 'Opmaakmodus';
@override
String get override_layout_settings => 'Instellingen voor responsieve opmaakmodus opheffen';
String get override_layout_settings =>
'Instellingen voor responsieve opmaakmodus opheffen';
@override
String get adaptive => 'Adaptief';
@ -443,7 +438,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get sync_album_color => 'Albumkleur synchroniseren';
@override
String get sync_album_color_description => 'Gebruikt de overheersende kleur van het album als accentkleur';
String get sync_album_color_description =>
'Gebruikt de overheersende kleur van het album als accentkleur';
@override
String get playback => 'Weergave';
@ -461,7 +457,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get pre_download_play => 'Vooraf downloaden en afspelen';
@override
String get pre_download_play_description => 'In plaats van audio te streamen, kun je bytes downloaden en afspelen (aanbevolen voor gebruikers met een hogere bandbreedte)';
String get pre_download_play_description =>
'In plaats van audio te streamen, kun je bytes downloaden en afspelen (aanbevolen voor gebruikers met een hogere bandbreedte)';
@override
String get skip_non_music => 'Niet-muzieksegmenten overslaan (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get blacklist_description => 'Nummers en artiesten op de zwarte lijst';
@override
String get wait_for_download_to_finish => 'Wacht tot de huidige download is voltooid';
String get wait_for_download_to_finish =>
'Wacht tot de huidige download is voltooid';
@override
String get desktop => 'Bureaublad';
@ -506,7 +504,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get please_sponsor => 'Sponsor/Doneer a.u.b.';
@override
String get spotube_description => 'Spotube, een lichtgewicht, cross-platform, vrij-voor-alles Spotify-client';
String get spotube_description =>
'Spotube, een lichtgewicht, cross-platform, vrij-voor-alles Spotify-client';
@override
String get version => 'Versie';
@ -538,10 +537,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get license => 'Licentie';
@override
String get add_spotify_credentials => 'Voeg om te beginnen je spotify-aanmeldgegevens toe';
@override
String get credentials_will_not_be_shared_disclaimer => 'Maak je geen zorgen, je gegevens worden niet verzameld of gedeeld met anderen.';
String get credentials_will_not_be_shared_disclaimer =>
'Maak je geen zorgen, je gegevens worden niet verzameld of gedeeld met anderen.';
@override
String get know_how_to_login => 'Weet je niet hoe je dit moet doen?';
@ -549,11 +546,6 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Volg de stapsgewijze handleiding';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookie';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookie';
@ -583,33 +575,6 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get first_go_to => 'Ga eerst naar';
@override
String get login_if_not_logged_in => 'en Inloggen/Aanmelden als je niet bent ingelogd';
@override
String get step_2 => 'Stap 2';
@override
String get step_2_steps => '1. Zodra je bent aangemeld, druk je op F12 of klik je met de rechtermuisknop > Inspect om de Browser devtools te openen.\n2. Ga vervolgens naar het tabblad \"Toepassing\" (Chrome, Edge, Brave enz..) of naar het tabblad \"Opslag\" (Firefox, Palemoon enz..).\n3. Ga naar de sectie \"Cookies\" en vervolgens naar de subsectie \"https://accounts.spotify.com\".';
@override
String get step_3 => 'Stap 3';
@override
String get step_3_steps => 'De waarde van cookie \"sp_dc\" kopiëren';
@override
String get success_emoji => 'Succes🥳';
@override
String get success_message => 'Je bent nu ingelogd met je Spotify account. Goed gedaan!';
@override
String get step_4 => 'Stap 4';
@override
String get step_4_steps => 'De gekopieerde waarde \"sp_dc\" plakken';
@override
String get something_went_wrong => 'Er ging iets mis';
@ -617,19 +582,23 @@ class AppLocalizationsNl extends AppLocalizations {
String get piped_instance => 'Piped-serverinstantie';
@override
String get piped_description => 'De Piped-serverinstantie die moet worden gebruikt voor overeenkomstige nummers';
String get piped_description =>
'De Piped-serverinstantie die moet worden gebruikt voor overeenkomstige nummers';
@override
String get piped_warning => 'Sommige werken misschien niet goed. Dus gebruik ze op eigen risico';
String get piped_warning =>
'Sommige werken misschien niet goed. Dus gebruik ze op eigen risico';
@override
String get invidious_instance => 'Invidious-serverinstantie';
@override
String get invidious_description => 'De Invidious-serverinstantie die gebruikt wordt voor trackmatching';
String get invidious_description =>
'De Invidious-serverinstantie die gebruikt wordt voor trackmatching';
@override
String get invidious_warning => 'Sommigen werken mogelijk niet goed. Gebruik op eigen risico';
String get invidious_warning =>
'Sommigen werken mogelijk niet goed. Gebruik op eigen risico';
@override
String get generate => 'Genereren';
@ -643,7 +612,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get replace_downloaded_tracks => 'Alle gedownloade nummers vervangen';
@override
String get skip_download_tracks => 'Downloaden van alle gedownloade nummers overslaan';
String get skip_download_tracks =>
'Downloaden van alle gedownloade nummers overslaan';
@override
String get do_you_want_to_replace => 'Wil je het bestaande nummer vervangen?';
@ -752,22 +722,28 @@ class AppLocalizationsNl extends AppLocalizations {
}
@override
String get download_warning => 'Als je alle nummers in bulk downloadt, ben je duidelijk bezig met muziekpiraterij en breng je schade toe aan de creatieve muziekmaatschappij. Ik hoop dat je je hiervan bewust bent. Probeer altijd het harde werk van artiesten te respecteren en te steunen.';
String get download_warning =>
'Als je alle nummers in bulk downloadt, ben je duidelijk bezig met muziekpiraterij en breng je schade toe aan de creatieve muziekmaatschappij. Ik hoop dat je je hiervan bewust bent. Probeer altijd het harde werk van artiesten te respecteren en te steunen.';
@override
String get download_ip_ban_warning => 'BTW, je IP-adres kan worden geblokkeerd op YouTube als gevolg van buitensporige downloadverzoeken. IP-blokkering betekent dat je YouTube niet kunt gebruiken (zelfs als je ingelogd bent) voor tenminste 2-3 maanden vanaf dat IP-apparaat. Spotube is niet verantwoordelijk als dit ooit gebeurt.';
String get download_ip_ban_warning =>
'BTW, je IP-adres kan worden geblokkeerd op YouTube als gevolg van buitensporige downloadverzoeken. IP-blokkering betekent dat je YouTube niet kunt gebruiken (zelfs als je ingelogd bent) voor tenminste 2-3 maanden vanaf dat IP-apparaat. Spotube is niet verantwoordelijk als dit ooit gebeurt.';
@override
String get by_clicking_accept_terms => 'Door op \'accepteren\' te klikken ga je akkoord met de volgende voorwaarden:';
String get by_clicking_accept_terms =>
'Door op \'accepteren\' te klikken ga je akkoord met de volgende voorwaarden:';
@override
String get download_agreement_1 => 'Ik weet dat ik muziek illegaal donload. Ik ben slecht.';
String get download_agreement_1 =>
'Ik weet dat ik muziek illegaal donload. Ik ben slecht.';
@override
String get download_agreement_2 => 'Ik steun de artiest waar ik kan en ik doe dit alleen omdat ik geen geld heb om hun kunst te kopen.';
String get download_agreement_2 =>
'Ik steun de artiest waar ik kan en ik doe dit alleen omdat ik geen geld heb om hun kunst te kopen.';
@override
String get download_agreement_3 => 'Ik ben me er volledig van bewust dat mijn IP geblokkeerd kan worden op YouTube & ik houd Spotube of zijn eigenaars/contributeurs niet verantwoordelijk voor ongelukken die veroorzaakt worden door mijn huidige actie.';
String get download_agreement_3 =>
'Ik ben me er volledig van bewust dat mijn IP geblokkeerd kan worden op YouTube & ik houd Spotube of zijn eigenaars/contributeurs niet verantwoordelijk voor ongelukken die veroorzaakt worden door mijn huidige actie.';
@override
String get decline => 'Weigeren';
@ -848,7 +824,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get failed_to_encrypt => 'Versleuteling mislukt';
@override
String get encryption_failed_warning => 'Spotube gebruikt versleuteling om je gegevens veilig op te slaan. Maar dat is niet gelukt. Dus zal het terugvallen op onveilige opslag.\nAls je linux gebruikt, zorg er dan voor dat je een geheim-dienst (gnome-keyring, kde-wallet, keepassxc etc) hebt geïnstalleerd.';
String get encryption_failed_warning =>
'Spotube gebruikt versleuteling om je gegevens veilig op te slaan. Maar dat is niet gelukt. Dus zal het terugvallen op onveilige opslag.\nAls je linux gebruikt, zorg er dan voor dat je een geheim-dienst (gnome-keyring, kde-wallet, keepassxc etc) hebt geïnstalleerd.';
@override
String get querying_info => 'Info opvragen…';
@ -946,7 +923,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get friends => 'Vrienden';
@override
String get no_lyrics_available => 'Sorry, geen teksten gevonden voor dit nummer';
String get no_lyrics_available =>
'Sorry, geen teksten gevonden voor dit nummer';
@override
String get start_a_radio => 'Start een Radio';
@ -955,7 +933,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get how_to_start_radio => 'Hoe wilt u de radio starten?';
@override
String get replace_queue_question => 'Wilt u de huidige wachtrij vervangen of eraan toevoegen?';
String get replace_queue_question =>
'Wilt u de huidige wachtrij vervangen of eraan toevoegen?';
@override
String get endless_playback => 'Eindeloze Afspelen';
@ -964,7 +943,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get delete_playlist => 'Verwijder Afspeellijst';
@override
String get delete_playlist_confirmation => 'Weet u zeker dat u deze afspeellijst wilt verwijderen?';
String get delete_playlist_confirmation =>
'Weet u zeker dat u deze afspeellijst wilt verwijderen?';
@override
String get local_tracks => 'Lokale Nummers';
@ -982,7 +962,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get freedom_of_music => '“Vrijheid van Muziek”';
@override
String get freedom_of_music_palm => '“Vrijheid van Muziek in de palm van je hand”';
String get freedom_of_music_palm =>
'“Vrijheid van Muziek in de palm van je hand”';
@override
String get get_started => 'Laten we beginnen';
@ -991,13 +972,16 @@ class AppLocalizationsNl extends AppLocalizations {
String get youtube_source_description => 'Aanbevolen en werkt het beste.';
@override
String get piped_source_description => 'Voel je vrij? Hetzelfde als YouTube maar veel gratis.';
String get piped_source_description =>
'Voel je vrij? Hetzelfde als YouTube maar veel gratis.';
@override
String get jiosaavn_source_description => 'Het beste voor de Zuid-Aziatische regio.';
String get jiosaavn_source_description =>
'Het beste voor de Zuid-Aziatische regio.';
@override
String get invidious_source_description => 'Vergelijkbaar met Piped, maar met een hogere beschikbaarheid.';
String get invidious_source_description =>
'Vergelijkbaar met Piped, maar met een hogere beschikbaarheid.';
@override
String highest_quality(Object quality) {
@ -1008,13 +992,15 @@ class AppLocalizationsNl extends AppLocalizations {
String get select_audio_source => 'Selecteer Audiobron';
@override
String get endless_playback_description => 'Voeg automatisch nieuwe nummers toe aan het einde van de wachtrij';
String get endless_playback_description =>
'Voeg automatisch nieuwe nummers toe aan het einde van de wachtrij';
@override
String get choose_your_region => 'Kies uw regio';
@override
String get choose_your_region_description => 'Dit zal Spotube helpen om de juiste inhoud voor uw locatie te tonen.';
String get choose_your_region_description =>
'Dit zal Spotube helpen om de juiste inhoud voor uw locatie te tonen.';
@override
String get choose_your_language => 'Kies uw taal';
@ -1023,7 +1009,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get help_project_grow => 'Help dit project groeien';
@override
String get help_project_grow_description => 'Spotube is een open-source project. U kunt dit project helpen groeien door bij te dragen aan het project, bugs te melden of nieuwe functies voor te stellen.';
String get help_project_grow_description =>
'Spotube is een open-source project. U kunt dit project helpen groeien door bij te dragen aan het project, bugs te melden of nieuwe functies voor te stellen.';
@override
String get contribute_on_github => 'Bijdragen op GitHub';
@ -1038,7 +1025,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get enable_connect => 'Verbinding inschakelen';
@override
String get enable_connect_description => 'Spotube bedienen vanaf andere apparaten';
String get enable_connect_description =>
'Spotube bedienen vanaf andere apparaten';
@override
String get devices => 'Apparaten';
@ -1117,7 +1105,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get choose_the_device => 'Kies het apparaat:';
@override
String get multiple_device_connected => 'Er zijn meerdere apparaten verbonden.\nKies het apparaat waarop je deze actie wilt uitvoeren';
String get multiple_device_connected =>
'Er zijn meerdere apparaten verbonden.\nKies het apparaat waarop je deze actie wilt uitvoeren';
@override
String get nothing_found => 'Niets gevonden';
@ -1190,7 +1179,8 @@ class AppLocalizationsNl extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Dit is berekend op basis van Spotify\'s uitbetaling per stream\nvan \$0.003 tot \$0.005. Dit is een hypothetische\nberekening om gebruikers inzicht te geven in hoeveel ze\naan de artiesten zouden hebben betaald als ze hun lied op Spotify zouden hebben beluisterd.';
String get streaming_fees_hypothetical =>
'*Dit is berekend op basis van Spotify\'s uitbetaling per stream\nvan \$0.003 tot \$0.005. Dit is een hypothetische\nberekening om gebruikers inzicht te geven in hoeveel ze\naan de artiesten zouden hebben betaald als ze hun lied op Spotify zouden hebben beluisterd.';
@override
String get minutes_listened => 'Luistertijd';
@ -1212,7 +1202,8 @@ class AppLocalizationsNl extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Dit is berekend op basis van Spotify\'s betaling per stream\nvan \$0.003 tot \$0.005. Dit is een hypothetische\nberekening om de gebruiker inzicht te geven in hoeveel ze\naan de artiesten zouden hebben betaald als ze hun liedjes op Spotify\nzouden luisteren.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1252,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get webview_not_found => 'Webview niet gevonden';
@override
String get webview_not_found_description => 'Er is geen Webview-runtime geïnstalleerd op uw apparaat.\nAls het is geïnstalleerd, zorg ervoor dat het in het environment PATH staat\n\nHerstart de app na installatie';
String get webview_not_found_description =>
'Er is geen Webview-runtime geïnstalleerd op uw apparaat.\nAls het is geïnstalleerd, zorg ervoor dat het in het environment PATH staat\n\nHerstart de app na installatie';
@override
String get unsupported_platform => 'Niet ondersteund platform';
@ -1293,7 +1285,8 @@ class AppLocalizationsNl extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Wilt u deze bestanden exporteren naar';
String get export_cache_confirmation =>
'Wilt u deze bestanden exporteren naar';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,19 +1315,22 @@ class AppLocalizationsNl extends AppLocalizations {
String get view_all => 'Bekijk alles';
@override
String get no_tracks_added_yet => 'Het lijkt erop dat je nog geen nummers hebt toegevoegd';
String get no_tracks_added_yet =>
'Het lijkt erop dat je nog geen nummers hebt toegevoegd';
@override
String get no_tracks => 'Het lijkt erop dat er hier geen nummers zijn';
@override
String get no_tracks_listened_yet => 'Het lijkt erop dat je nog niets hebt beluisterd';
String get no_tracks_listened_yet =>
'Het lijkt erop dat je nog niets hebt beluisterd';
@override
String get not_following_artists => 'Je volgt geen artiesten';
@override
String get no_favorite_albums_yet => 'Het lijkt erop dat je nog geen albums aan je favorieten hebt toegevoegd';
String get no_favorite_albums_yet =>
'Het lijkt erop dat je nog geen albums aan je favorieten hebt toegevoegd';
@override
String get no_logs_found => 'Geen logbestanden gevonden';
@ -1358,7 +1354,8 @@ class AppLocalizationsNl extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'Op macOS/Linux/unix-achtige besturingssystemen werkt het instellen van paden in .zshrc/.bashrc/.bash_profile enz. niet.\nJe moet het pad instellen in het shell-configuratiebestand';
String get youtube_engine_unix_issue_message =>
'Op macOS/Linux/unix-achtige besturingssystemen werkt het instellen van paden in .zshrc/.bashrc/.bash_profile enz. niet.\nJe moet het pad instellen in het shell-configuratiebestand';
@override
String get download => 'Downloaden';
@ -1376,7 +1373,8 @@ class AppLocalizationsNl extends AppLocalizations {
String get edit_port => 'Poort bewerken';
@override
String get port_helper_msg => 'Standaard is -1, wat een willekeurig nummer aangeeft. Als je een firewall hebt geconfigureerd, wordt aanbevolen dit in te stellen.';
String get port_helper_msg =>
'Standaard is -1, wat een willekeurig nummer aangeeft. Als je een firewall hebt geconfigureerd, wordt aanbevolen dit in te stellen.';
@override
String connect_request(Object client) {
@ -1384,5 +1382,6 @@ class AppLocalizationsNl extends AppLocalizations {
}
@override
String get connection_request_denied => 'Verbinding geweigerd. Gebruiker heeft toegang geweigerd.';
String get connection_request_denied =>
'Verbinding geweigerd. Gebruiker heeft toegang geweigerd.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsPl extends AppLocalizations {
@override
String get account => 'Konto';
@override
String get login_with_spotify => 'Zaloguj się używając konta Spotify';
@override
String get connect_with_spotify => 'Połącz z Spotify';
@override
String get logout => 'Wyloguj';
@ -413,7 +407,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get layout_mode => 'Tryb Układu';
@override
String get override_layout_settings => 'Nadpisz responsywne ustawienia trybu układu';
String get override_layout_settings =>
'Nadpisz responsywne ustawienia trybu układu';
@override
String get adaptive => 'Adaptacyjny';
@ -443,7 +438,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get sync_album_color => 'Synchronizuj kolor albumu';
@override
String get sync_album_color_description => 'Używa dominującego koloru okładki albumu jako koloru akcentującego';
String get sync_album_color_description =>
'Używa dominującego koloru okładki albumu jako koloru akcentującego';
@override
String get playback => 'Odtwarzanie';
@ -461,7 +457,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get pre_download_play => 'Wstępnie pobierz i odtwórz';
@override
String get pre_download_play_description => 'Zamiast przesyłać strumieniowo dźwięk, pobiera odpowiedni bufor i odtwarza (zalecane dla użytkowników o większej przepustowości)';
String get pre_download_play_description =>
'Zamiast przesyłać strumieniowo dźwięk, pobiera odpowiedni bufor i odtwarza (zalecane dla użytkowników o większej przepustowości)';
@override
String get skip_non_music => 'Pomiń nie-muzyczne segmenty (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get blacklist_description => 'Czarna lista utworów i artystów';
@override
String get wait_for_download_to_finish => 'Proszę poczekać na zakończenie obecnego pobierania.';
String get wait_for_download_to_finish =>
'Proszę poczekać na zakończenie obecnego pobierania.';
@override
String get desktop => 'Pulpit';
@ -506,7 +504,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get please_sponsor => 'Proszę wesprzyj projekt';
@override
String get spotube_description => 'Spotube, lekki, wieloplatformowy, darmowy dla wszystkich klient Spotify';
String get spotube_description =>
'Spotube, lekki, wieloplatformowy, darmowy dla wszystkich klient Spotify';
@override
String get version => 'Wersja';
@ -538,21 +537,15 @@ class AppLocalizationsPl extends AppLocalizations {
String get license => 'Licencja';
@override
String get add_spotify_credentials => 'Dodaj swoje dane logowania Spotify, aby zacząć';
@override
String get credentials_will_not_be_shared_disclaimer => 'Nie martw się, żadne dane logowania nie są zbierane ani udostępniane nikomu';
String get credentials_will_not_be_shared_disclaimer =>
'Nie martw się, żadne dane logowania nie są zbierane ani udostępniane nikomu';
@override
String get know_how_to_login => 'Nie wiesz, jak się zalogować?';
@override
String get follow_step_by_step_guide => 'Postępuj zgodnie z poradnikiem krok po kroku';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Ciasteczko';
}
String get follow_step_by_step_guide =>
'Postępuj zgodnie z poradnikiem krok po kroku';
@override
String cookie_name_cookie(Object name) {
@ -583,33 +576,6 @@ class AppLocalizationsPl extends AppLocalizations {
@override
String get first_go_to => 'Po pierwsze przejdź do';
@override
String get login_if_not_logged_in => 'i Zaloguj się/Zarejestruj jeśli nie jesteś zalogowany';
@override
String get step_2 => 'Krok 2';
@override
String get step_2_steps => '1. Jeśli jesteś zalogowany, naciśnij klawisz F12 lub Kliknij prawym przyciskiem myszy > Zbadaj, aby odtworzyć narzędzia developerskie.\n2. Następnie przejdź do zakładki \"Application\" (Chrome, Edge, Brave etc..) lub zakładki \"Storage\" (Firefox, Palemoon etc..)\n3. Przejdź do sekcji \"Cookies\" a następnie do pod-sekcji \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Krok 3';
@override
String get step_3_steps => 'Skopiuj wartość ciasteczka \"sp_dc\"';
@override
String get success_emoji => 'Sukces!🥳';
@override
String get success_message => 'Udało ci się zalogować! Dobra robota, stary!';
@override
String get step_4 => 'Krok 4';
@override
String get step_4_steps => 'Wklej skopiowaną wartość \"sp_dc\"';
@override
String get something_went_wrong => 'Coś poszło nie tak 🙁';
@ -617,19 +583,23 @@ class AppLocalizationsPl extends AppLocalizations {
String get piped_instance => 'Instancja serwera Piped';
@override
String get piped_description => 'Instancja serwera Piped używana jest do dopasowania utworów.';
String get piped_description =>
'Instancja serwera Piped używana jest do dopasowania utworów.';
@override
String get piped_warning => 'Niektóre z nich mogą nie działać. Używasz na własną odpowiedzialność!';
String get piped_warning =>
'Niektóre z nich mogą nie działać. Używasz na własną odpowiedzialność!';
@override
String get invidious_instance => 'Instancja serwera Invidious';
@override
String get invidious_description => 'Instancja serwera Invidious do dopasowywania utworów';
String get invidious_description =>
'Instancja serwera Invidious do dopasowywania utworów';
@override
String get invidious_warning => 'Niektóre z nich mogą nie działać dobrze. Używaj na własne ryzyko';
String get invidious_warning =>
'Niektóre z nich mogą nie działać dobrze. Używaj na własne ryzyko';
@override
String get generate => 'Generuj';
@ -643,7 +613,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get replace_downloaded_tracks => 'Zamień wszystkie pobrane utwory';
@override
String get skip_download_tracks => 'Pomiń pobieranie wszystkich pobranych utworów';
String get skip_download_tracks =>
'Pomiń pobieranie wszystkich pobranych utworów';
@override
String get do_you_want_to_replace => 'Chcesz zamienić istniejący utwór ??';
@ -752,22 +723,27 @@ class AppLocalizationsPl extends AppLocalizations {
}
@override
String get download_warning => 'Jeśli hurtowo pobierasz wszystkie utwory, wyraźnie piracisz muzykę i wyrządzasz szkody kreatywnej społeczności muzycznej. Mam nadzieję, że jesteś tego świadomy. Zawsze staraj się szanować i wspierać ciężką pracę Artysty';
String get download_warning =>
'Jeśli hurtowo pobierasz wszystkie utwory, wyraźnie piracisz muzykę i wyrządzasz szkody kreatywnej społeczności muzycznej. Mam nadzieję, że jesteś tego świadomy. Zawsze staraj się szanować i wspierać ciężką pracę Artysty';
@override
String get download_ip_ban_warning => 'Przy okazji, Twój adres IP może zostać zablokowany w YouTube z powodu nadmiernych żądań pobierania niż zwykle. Blokada IP oznacza, że nie możesz korzystać z YouTube (nawet jeśli jesteś zalogowany) przez co najmniej 2-3 miesiące z IP tego urządzenia. Spotube nie ponosi żadnej odpowiedzialności, jeśli tak się stanie';
String get download_ip_ban_warning =>
'Przy okazji, Twój adres IP może zostać zablokowany w YouTube z powodu nadmiernych żądań pobierania niż zwykle. Blokada IP oznacza, że nie możesz korzystać z YouTube (nawet jeśli jesteś zalogowany) przez co najmniej 2-3 miesiące z IP tego urządzenia. Spotube nie ponosi żadnej odpowiedzialności, jeśli tak się stanie';
@override
String get by_clicking_accept_terms => 'Klikając \'Akceptuj\' zgadzasz się z następującymi warunkami:';
String get by_clicking_accept_terms =>
'Klikając \'Akceptuj\' zgadzasz się z następującymi warunkami:';
@override
String get download_agreement_1 => 'Wiem, że piracę muzykę. Jestem zły.';
@override
String get download_agreement_2 => 'Będę wspierał artystę i robię to tylko dlatego, że nie mam pieniędzy na albumy wykonawcy. ';
String get download_agreement_2 =>
'Będę wspierał artystę i robię to tylko dlatego, że nie mam pieniędzy na albumy wykonawcy. ';
@override
String get download_agreement_3 => 'Jestem całkowicie świadomy, że moje IP może zostać zablokowane w YouTube i nie pociągam Spotube ani jego właścicieli/współtwórców do odpowiedzialności za jakiekolwiek wypadki spowodowane moimi obecnymi działaniami';
String get download_agreement_3 =>
'Jestem całkowicie świadomy, że moje IP może zostać zablokowane w YouTube i nie pociągam Spotube ani jego właścicieli/współtwórców do odpowiedzialności za jakiekolwiek wypadki spowodowane moimi obecnymi działaniami';
@override
String get decline => 'Odrzuć';
@ -848,7 +824,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get failed_to_encrypt => 'Nie można zaszyfrować :(';
@override
String get encryption_failed_warning => 'Spotube używa szyfrowania do bezpiecznego przechowywania danych. Ale nie udało się tego zrobić. Więc powróci do niezabezpieczonego przechowywania\nJeśli używasz Linuksa, upewnij się, że masz zainstalowane jakieś usługi do szyfrowania (gnome-keyring, kde-wallet, keepassxc itp.)';
String get encryption_failed_warning =>
'Spotube używa szyfrowania do bezpiecznego przechowywania danych. Ale nie udało się tego zrobić. Więc powróci do niezabezpieczonego przechowywania\nJeśli używasz Linuksa, upewnij się, że masz zainstalowane jakieś usługi do szyfrowania (gnome-keyring, kde-wallet, keepassxc itp.)';
@override
String get querying_info => 'Szukam informacji...';
@ -865,7 +842,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get you_are_offline => 'Obecnie jesteś offline';
@override
String get connection_restored => 'Twoje połączenie z internetem zostało przywrócone';
String get connection_restored =>
'Twoje połączenie z internetem zostało przywrócone';
@override
String get use_system_title_bar => 'Użyj paska tytułu systemu';
@ -946,7 +924,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get friends => 'Przyjaciele';
@override
String get no_lyrics_available => 'Przepraszamy, nie można znaleźć tekstu dla tego utworu';
String get no_lyrics_available =>
'Przepraszamy, nie można znaleźć tekstu dla tego utworu';
@override
String get start_a_radio => 'Uruchom radio';
@ -955,7 +934,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get how_to_start_radio => 'Jak chcesz uruchomić radio?';
@override
String get replace_queue_question => 'Czy chcesz zastąpić bieżącą kolejkę czy dodać do niej?';
String get replace_queue_question =>
'Czy chcesz zastąpić bieżącą kolejkę czy dodać do niej?';
@override
String get endless_playback => 'Nieskończona Odtwarzanie';
@ -964,7 +944,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get delete_playlist => 'Usuń Playlistę';
@override
String get delete_playlist_confirmation => 'Czy na pewno chcesz usunąć tę listę odtwarzania?';
String get delete_playlist_confirmation =>
'Czy na pewno chcesz usunąć tę listę odtwarzania?';
@override
String get local_tracks => 'Lokalne Utwory';
@ -991,13 +972,16 @@ class AppLocalizationsPl extends AppLocalizations {
String get youtube_source_description => 'Polecane i działa najlepiej.';
@override
String get piped_source_description => 'Czujesz się wolny? To samo co YouTube, ale dużo za darmo.';
String get piped_source_description =>
'Czujesz się wolny? To samo co YouTube, ale dużo za darmo.';
@override
String get jiosaavn_source_description => 'Najlepszy dla regionu Azji Południowej.';
String get jiosaavn_source_description =>
'Najlepszy dla regionu Azji Południowej.';
@override
String get invidious_source_description => 'Podobne do Piped, ale o wyższej dostępności.';
String get invidious_source_description =>
'Podobne do Piped, ale o wyższej dostępności.';
@override
String highest_quality(Object quality) {
@ -1008,13 +992,15 @@ class AppLocalizationsPl extends AppLocalizations {
String get select_audio_source => 'Wybierz Źródło Audio';
@override
String get endless_playback_description => 'Automatycznie dodaj nowe utwory na koniec kolejki';
String get endless_playback_description =>
'Automatycznie dodaj nowe utwory na koniec kolejki';
@override
String get choose_your_region => 'Wybierz swoją region';
@override
String get choose_your_region_description => 'To pomoże Spotube pokazać Ci odpowiednią treść dla Twojej lokalizacji.';
String get choose_your_region_description =>
'To pomoże Spotube pokazać Ci odpowiednią treść dla Twojej lokalizacji.';
@override
String get choose_your_language => 'Wybierz swój język';
@ -1023,7 +1009,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get help_project_grow => 'Pomóż temu projektowi rosnąć';
@override
String get help_project_grow_description => 'Spotube to projekt open-source. Możesz pomóc temu projektowi rosnąć, przyczyniając się do projektu, zgłaszając błędy lub sugerując nowe funkcje.';
String get help_project_grow_description =>
'Spotube to projekt open-source. Możesz pomóc temu projektowi rosnąć, przyczyniając się do projektu, zgłaszając błędy lub sugerując nowe funkcje.';
@override
String get contribute_on_github => 'Przyczyniaj się na GitHubie';
@ -1038,7 +1025,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get enable_connect => 'Włącz połączenie';
@override
String get enable_connect_description => 'Kontroluj Spotube z innych urządzeń';
String get enable_connect_description =>
'Kontroluj Spotube z innych urządzeń';
@override
String get devices => 'Urządzenia';
@ -1117,7 +1105,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get choose_the_device => 'Wybierz urządzenie:';
@override
String get multiple_device_connected => 'Jest wiele urządzeń podłączonych.\nWybierz urządzenie, na którym chcesz wykonać tę akcję';
String get multiple_device_connected =>
'Jest wiele urządzeń podłączonych.\nWybierz urządzenie, na którym chcesz wykonać tę akcję';
@override
String get nothing_found => 'Nic nie znaleziono';
@ -1190,7 +1179,8 @@ class AppLocalizationsPl extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Obliczone na podstawie wypłaty Spotify za stream\nod \$0.003 do \$0.005. Jest to hipotetyczne\nobliczenie, które ma na celu pokazanie, ile\nużytkownik zapłaciłby artystom, gdyby odsłuchał\ntych utworów na Spotify.';
String get streaming_fees_hypothetical =>
'*Obliczone na podstawie wypłaty Spotify za stream\nod \$0.003 do \$0.005. Jest to hipotetyczne\nobliczenie, które ma na celu pokazanie, ile\nużytkownik zapłaciłby artystom, gdyby odsłuchał\ntych utworów na Spotify.';
@override
String get minutes_listened => 'Minuty odsłuchane';
@ -1212,7 +1202,8 @@ class AppLocalizationsPl extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Obliczone na podstawie płatności Spotify za strumień\nw zakresie od \$0.003 do \$0.005. Jest to hipotetyczne\nobliczenie mające na celu pokazanie użytkownikowi, ile\nzapłaciliby artystom, gdyby słuchali ich utworów na Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1252,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get webview_not_found => 'Nie znaleziono Webview';
@override
String get webview_not_found_description => 'Na twoim urządzeniu nie zainstalowano środowiska uruchomieniowego Webview.\nJeśli jest zainstalowany, upewnij się, że jest w environment PATH\n\nPo instalacji uruchom ponownie aplikację';
String get webview_not_found_description =>
'Na twoim urządzeniu nie zainstalowano środowiska uruchomieniowego Webview.\nJeśli jest zainstalowany, upewnij się, że jest w environment PATH\n\nPo instalacji uruchom ponownie aplikację';
@override
String get unsupported_platform => 'Nieobsługiwana platforma';
@ -1282,7 +1274,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get clear_cache => 'Wyczyść pamięć podręczną';
@override
String get clear_cache_confirmation => 'Czy chcesz wyczyścić pamięć podręczną?';
String get clear_cache_confirmation =>
'Czy chcesz wyczyścić pamięć podręczną?';
@override
String get export_cache_files => 'Eksportuj pliki z pamięci podręcznej';
@ -1293,7 +1286,8 @@ class AppLocalizationsPl extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Czy chcesz wyeksportować te pliki do';
String get export_cache_confirmation =>
'Czy chcesz wyeksportować te pliki do';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,19 +1316,22 @@ class AppLocalizationsPl extends AppLocalizations {
String get view_all => 'Zobacz wszystko';
@override
String get no_tracks_added_yet => 'Wygląda na to, że jeszcze nie dodałeś żadnych utworów';
String get no_tracks_added_yet =>
'Wygląda na to, że jeszcze nie dodałeś żadnych utworów';
@override
String get no_tracks => 'Wygląda na to, że tutaj nie ma żadnych utworów';
@override
String get no_tracks_listened_yet => 'Wygląda na to, że jeszcze nic nie słuchałeś';
String get no_tracks_listened_yet =>
'Wygląda na to, że jeszcze nic nie słuchałeś';
@override
String get not_following_artists => 'Nie obserwujesz żadnych artystów';
@override
String get no_favorite_albums_yet => 'Wygląda na to, że jeszcze nie dodałeś żadnych albumów do ulubionych';
String get no_favorite_albums_yet =>
'Wygląda na to, że jeszcze nie dodałeś żadnych albumów do ulubionych';
@override
String get no_logs_found => 'Nie znaleziono żadnych logów';
@ -1358,7 +1355,8 @@ class AppLocalizationsPl extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'W systemach macOS/Linux/unix, ustawianie ścieżki w .zshrc/.bashrc/.bash_profile itp. nie będzie działać.\nMusisz ustawić ścieżkę w pliku konfiguracyjnym powłoki';
String get youtube_engine_unix_issue_message =>
'W systemach macOS/Linux/unix, ustawianie ścieżki w .zshrc/.bashrc/.bash_profile itp. nie będzie działać.\nMusisz ustawić ścieżkę w pliku konfiguracyjnym powłoki';
@override
String get download => 'Pobierz';
@ -1376,7 +1374,8 @@ class AppLocalizationsPl extends AppLocalizations {
String get edit_port => 'Edytuj port';
@override
String get port_helper_msg => 'Domyślna wartość to -1, co oznacza losową liczbę. Jeśli masz skonfigurowany zaporę, zaleca się jej ustawienie.';
String get port_helper_msg =>
'Domyślna wartość to -1, co oznacza losową liczbę. Jeśli masz skonfigurowany zaporę, zaleca się jej ustawienie.';
@override
String connect_request(Object client) {
@ -1384,5 +1383,6 @@ class AppLocalizationsPl extends AppLocalizations {
}
@override
String get connection_request_denied => 'Połączenie odrzucone. Użytkownik odmówił dostępu.';
String get connection_request_denied =>
'Połączenie odrzucone. Użytkownik odmówił dostępu.';
}

View File

@ -185,7 +185,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get follow => 'Seguir';
@override
String get artist_url_copied => 'URL do artista copiada para a área de transferência';
String get artist_url_copied =>
'URL do artista copiada para a área de transferência';
@override
String added_to_queue(Object tracks) {
@ -379,12 +380,6 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get account => 'Conta';
@override
String get login_with_spotify => 'Fazer login com sua conta do Spotify';
@override
String get connect_with_spotify => 'Conectar ao Spotify';
@override
String get logout => 'Sair';
@ -413,7 +408,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get layout_mode => 'Modo de Layout';
@override
String get override_layout_settings => 'Substituir configurações do modo de layout responsivo';
String get override_layout_settings =>
'Substituir configurações do modo de layout responsivo';
@override
String get adaptive => 'Adaptável';
@ -443,7 +439,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get sync_album_color => 'Sincronizar cor do álbum';
@override
String get sync_album_color_description => 'Usa a cor predominante da capa do álbum como cor de destaque';
String get sync_album_color_description =>
'Usa a cor predominante da capa do álbum como cor de destaque';
@override
String get playback => 'Reprodução';
@ -461,7 +458,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get pre_download_play => 'Pré-download e reprodução';
@override
String get pre_download_play_description => 'Em vez de transmitir áudio, baixar bytes e reproduzir (recomendado para usuários com maior largura de banda)';
String get pre_download_play_description =>
'Em vez de transmitir áudio, baixar bytes e reproduzir (recomendado para usuários com maior largura de banda)';
@override
String get skip_non_music => 'Pular segmentos não musicais (SponsorBlock)';
@ -470,7 +468,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get blacklist_description => 'Faixas e artistas na lista negra';
@override
String get wait_for_download_to_finish => 'Aguarde o download atual ser concluído';
String get wait_for_download_to_finish =>
'Aguarde o download atual ser concluído';
@override
String get desktop => 'Desktop';
@ -506,7 +505,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get please_sponsor => 'Por favor, patrocine/doe';
@override
String get spotube_description => 'Spotube, um cliente leve, multiplataforma e gratuito para o Spotify';
String get spotube_description =>
'Spotube, um cliente leve, multiplataforma e gratuito para o Spotify';
@override
String get version => 'Versão';
@ -538,10 +538,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get license => 'Licença';
@override
String get add_spotify_credentials => 'Adicione suas credenciais do Spotify para começar';
@override
String get credentials_will_not_be_shared_disclaimer => 'Não se preocupe, suas credenciais não serão coletadas nem compartilhadas com ninguém';
String get credentials_will_not_be_shared_disclaimer =>
'Não se preocupe, suas credenciais não serão coletadas nem compartilhadas com ninguém';
@override
String get know_how_to_login => 'Não sabe como fazer isso?';
@ -549,11 +547,6 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Siga o guia passo a passo';
@override
String spotify_cookie(Object name) {
return 'Cookie do Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Cookie $name';
@ -583,33 +576,6 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get first_go_to => 'Primeiro, vá para';
@override
String get login_if_not_logged_in => 'e faça login/cadastro se ainda não estiver logado';
@override
String get step_2 => 'Passo 2';
@override
String get step_2_steps => '1. Uma vez logado, pressione F12 ou clique com o botão direito do mouse > Inspecionar para abrir as ferramentas de desenvolvimento do navegador.\n2. Em seguida, vá para a guia \"Aplicativo\" (Chrome, Edge, Brave, etc.) ou \"Armazenamento\" (Firefox, Palemoon, etc.)\n3. Acesse a seção \"Cookies\" e depois a subseção \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Passo 3';
@override
String get step_3_steps => 'Copie o valor do cookie \"sp_dc\"';
@override
String get success_emoji => 'Sucesso🥳';
@override
String get success_message => 'Agora você está logado com sucesso em sua conta do Spotify. Bom trabalho!';
@override
String get step_4 => 'Passo 4';
@override
String get step_4_steps => 'Cole o valor copiado de \"sp_dc\"';
@override
String get something_went_wrong => 'Algo deu errado';
@ -617,19 +583,23 @@ class AppLocalizationsPt extends AppLocalizations {
String get piped_instance => 'Instância do Servidor Piped';
@override
String get piped_description => 'A instância do servidor Piped a ser usada para correspondência de faixas';
String get piped_description =>
'A instância do servidor Piped a ser usada para correspondência de faixas';
@override
String get piped_warning => 'Algumas delas podem não funcionar bem. Use por sua conta e risco';
String get piped_warning =>
'Algumas delas podem não funcionar bem. Use por sua conta e risco';
@override
String get invidious_instance => 'Instância do Servidor Invidious';
@override
String get invidious_description => 'A instância do servidor Invidious a ser usada para correspondência de faixas';
String get invidious_description =>
'A instância do servidor Invidious a ser usada para correspondência de faixas';
@override
String get invidious_warning => 'Alguns podem não funcionar bem. Use por sua conta e risco';
String get invidious_warning =>
'Alguns podem não funcionar bem. Use por sua conta e risco';
@override
String get generate => 'Gerar';
@ -643,7 +613,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get replace_downloaded_tracks => 'Substituir todas as faixas baixadas';
@override
String get skip_download_tracks => 'Pular o download de todas as faixas baixadas';
String get skip_download_tracks =>
'Pular o download de todas as faixas baixadas';
@override
String get do_you_want_to_replace => 'Deseja substituir a faixa existente?';
@ -752,22 +723,28 @@ class AppLocalizationsPt extends AppLocalizations {
}
@override
String get download_warning => 'Se você baixar todas as faixas em massa, estará claramente pirateando música e causando danos à sociedade criativa da música. Espero que você esteja ciente disso. Sempre tente respeitar e apoiar o trabalho árduo dos artistas';
String get download_warning =>
'Se você baixar todas as faixas em massa, estará claramente pirateando música e causando danos à sociedade criativa da música. Espero que você esteja ciente disso. Sempre tente respeitar e apoiar o trabalho árduo dos artistas';
@override
String get download_ip_ban_warning => 'Além disso, seu IP pode ser bloqueado no YouTube devido a solicitações de download excessivas. O bloqueio de IP significa que você não poderá usar o YouTube (mesmo se estiver conectado) por pelo menos 2-3 meses a partir do dispositivo IP. E o Spotube não se responsabiliza se isso acontecer';
String get download_ip_ban_warning =>
'Além disso, seu IP pode ser bloqueado no YouTube devido a solicitações de download excessivas. O bloqueio de IP significa que você não poderá usar o YouTube (mesmo se estiver conectado) por pelo menos 2-3 meses a partir do dispositivo IP. E o Spotube não se responsabiliza se isso acontecer';
@override
String get by_clicking_accept_terms => 'Ao clicar em \'aceitar\', você concorda com os seguintes termos:';
String get by_clicking_accept_terms =>
'Ao clicar em \'aceitar\', você concorda com os seguintes termos:';
@override
String get download_agreement_1 => 'Eu sei que estou pirateando música. Sou mau';
String get download_agreement_1 =>
'Eu sei que estou pirateando música. Sou mau';
@override
String get download_agreement_2 => 'Vou apoiar o artista onde puder e estou fazendo isso porque não tenho dinheiro para comprar sua arte';
String get download_agreement_2 =>
'Vou apoiar o artista onde puder e estou fazendo isso porque não tenho dinheiro para comprar sua arte';
@override
String get download_agreement_3 => 'Estou completamente ciente de que meu IP pode ser bloqueado no YouTube e não responsabilizo o Spotube ou seus proprietários/colaboradores por quaisquer acidentes causados pela minha ação atual';
String get download_agreement_3 =>
'Estou completamente ciente de que meu IP pode ser bloqueado no YouTube e não responsabilizo o Spotube ou seus proprietários/colaboradores por quaisquer acidentes causados pela minha ação atual';
@override
String get decline => 'Recusar';
@ -848,7 +825,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get failed_to_encrypt => 'Falha ao criptografar';
@override
String get encryption_failed_warning => 'O Spotube usa criptografia para armazenar seus dados com segurança, mas falhou em fazê-lo. Portanto, ele voltará para o armazenamento não seguro.\nSe você estiver usando o Linux, certifique-se de ter algum serviço secreto (gnome-keyring, kde-wallet, keepassxc, etc.) instalado';
String get encryption_failed_warning =>
'O Spotube usa criptografia para armazenar seus dados com segurança, mas falhou em fazê-lo. Portanto, ele voltará para o armazenamento não seguro.\nSe você estiver usando o Linux, certifique-se de ter algum serviço secreto (gnome-keyring, kde-wallet, keepassxc, etc.) instalado';
@override
String get querying_info => 'Consultando informações...';
@ -946,7 +924,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get friends => 'Amigos';
@override
String get no_lyrics_available => 'Desculpe, não foi possível encontrar a letra desta faixa';
String get no_lyrics_available =>
'Desculpe, não foi possível encontrar a letra desta faixa';
@override
String get start_a_radio => 'Iniciar uma Rádio';
@ -955,7 +934,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get how_to_start_radio => 'Como você deseja iniciar a rádio?';
@override
String get replace_queue_question => 'Você deseja substituir a fila atual ou acrescentar a ela?';
String get replace_queue_question =>
'Você deseja substituir a fila atual ou acrescentar a ela?';
@override
String get endless_playback => 'Reprodução sem fim';
@ -964,7 +944,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get delete_playlist => 'Excluir Lista de Reprodução';
@override
String get delete_playlist_confirmation => 'Tem certeza de que deseja excluir esta lista de reprodução?';
String get delete_playlist_confirmation =>
'Tem certeza de que deseja excluir esta lista de reprodução?';
@override
String get local_tracks => 'Faixas Locais';
@ -982,7 +963,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get freedom_of_music => '“Liberdade da Música”';
@override
String get freedom_of_music_palm => '“Liberdade da Música na palma da sua mão”';
String get freedom_of_music_palm =>
'“Liberdade da Música na palma da sua mão”';
@override
String get get_started => 'Vamos começar';
@ -991,13 +973,16 @@ class AppLocalizationsPt extends AppLocalizations {
String get youtube_source_description => 'Recomendado e funciona melhor.';
@override
String get piped_source_description => 'Sentindo-se livre? Igual ao YouTube, mas muito mais grátis.';
String get piped_source_description =>
'Sentindo-se livre? Igual ao YouTube, mas muito mais grátis.';
@override
String get jiosaavn_source_description => 'Melhor para a região da Ásia do Sul.';
String get jiosaavn_source_description =>
'Melhor para a região da Ásia do Sul.';
@override
String get invidious_source_description => 'Semelhante ao Piped, mas com maior disponibilidade.';
String get invidious_source_description =>
'Semelhante ao Piped, mas com maior disponibilidade.';
@override
String highest_quality(Object quality) {
@ -1008,13 +993,15 @@ class AppLocalizationsPt extends AppLocalizations {
String get select_audio_source => 'Selecionar Fonte de Áudio';
@override
String get endless_playback_description => 'Adicionar automaticamente novas músicas\nao final da fila';
String get endless_playback_description =>
'Adicionar automaticamente novas músicas\nao final da fila';
@override
String get choose_your_region => 'Escolha sua região';
@override
String get choose_your_region_description => 'Isso ajudará o Spotube a mostrar o conteúdo certo\npara sua localização.';
String get choose_your_region_description =>
'Isso ajudará o Spotube a mostrar o conteúdo certo\npara sua localização.';
@override
String get choose_your_language => 'Escolha seu idioma';
@ -1023,7 +1010,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get help_project_grow => 'Ajude este projeto a crescer';
@override
String get help_project_grow_description => 'Spotube é um projeto de código aberto. Você pode ajudar este projeto a crescer contribuindo para o projeto, relatando bugs ou sugerindo novos recursos.';
String get help_project_grow_description =>
'Spotube é um projeto de código aberto. Você pode ajudar este projeto a crescer contribuindo para o projeto, relatando bugs ou sugerindo novos recursos.';
@override
String get contribute_on_github => 'Contribuir no GitHub';
@ -1038,7 +1026,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get enable_connect => 'Ativar conexão';
@override
String get enable_connect_description => 'Controle o Spotube a partir de outros dispositivos';
String get enable_connect_description =>
'Controle o Spotube a partir de outros dispositivos';
@override
String get devices => 'Dispositivos';
@ -1117,7 +1106,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get choose_the_device => 'Escolha o dispositivo:';
@override
String get multiple_device_connected => 'Há vários dispositivos conectados.\nEscolha o dispositivo no qual deseja executar esta ação';
String get multiple_device_connected =>
'Há vários dispositivos conectados.\nEscolha o dispositivo no qual deseja executar esta ação';
@override
String get nothing_found => 'Nada encontrado';
@ -1190,7 +1180,8 @@ class AppLocalizationsPt extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Calculado com base no pagamento por stream do Spotify\nque varia de \$0.003 a \$0.005. Isso é um cálculo hipotético\npara fornecer uma visão ao usuário sobre quanto eles\nteriam pago aos artistas se estivessem ouvindo\no seu som no Spotify.';
String get streaming_fees_hypothetical =>
'*Calculado com base no pagamento por stream do Spotify\nque varia de \$0.003 a \$0.005. Isso é um cálculo hipotético\npara fornecer uma visão ao usuário sobre quanto eles\nteriam pago aos artistas se estivessem ouvindo\no seu som no Spotify.';
@override
String get minutes_listened => 'Minutos ouvidos';
@ -1212,7 +1203,8 @@ class AppLocalizationsPt extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Isso é calculado com base no pagamento por stream do Spotify\nque varia de \$0.003 a \$0.005. Esta é uma cálculo hipotético\npara dar ao usuário uma visão de quanto teriam pago aos artistas\nse eles ouvissem suas músicas no Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1253,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get webview_not_found => 'Webview não encontrado';
@override
String get webview_not_found_description => 'Nenhum runtime Webview está instalado no seu dispositivo.\nSe estiver instalado, certifique-se de que está no environment PATH\n\nApós a instalação, reinicie o aplicativo';
String get webview_not_found_description =>
'Nenhum runtime Webview está instalado no seu dispositivo.\nSe estiver instalado, certifique-se de que está no environment PATH\n\nApós a instalação, reinicie o aplicativo';
@override
String get unsupported_platform => 'Plataforma não suportada';
@ -1322,7 +1315,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get view_all => 'Ver tudo';
@override
String get no_tracks_added_yet => 'Parece que você ainda não adicionou nenhuma faixa';
String get no_tracks_added_yet =>
'Parece que você ainda não adicionou nenhuma faixa';
@override
String get no_tracks => 'Parece que não há faixas aqui';
@ -1334,7 +1328,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get not_following_artists => 'Você não está seguindo nenhum artista';
@override
String get no_favorite_albums_yet => 'Parece que você ainda não adicionou nenhum álbum aos favoritos';
String get no_favorite_albums_yet =>
'Parece que você ainda não adicionou nenhum álbum aos favoritos';
@override
String get no_logs_found => 'Nenhum log encontrado';
@ -1358,7 +1353,8 @@ class AppLocalizationsPt extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'Em sistemas macOS/Linux/unix, definir o caminho no .zshrc/.bashrc/.bash_profile etc. não funcionará.\nVocê precisa definir o caminho no arquivo de configuração do shell';
String get youtube_engine_unix_issue_message =>
'Em sistemas macOS/Linux/unix, definir o caminho no .zshrc/.bashrc/.bash_profile etc. não funcionará.\nVocê precisa definir o caminho no arquivo de configuração do shell';
@override
String get download => 'Baixar';
@ -1376,7 +1372,8 @@ class AppLocalizationsPt extends AppLocalizations {
String get edit_port => 'Editar porta';
@override
String get port_helper_msg => 'O padrão é -1, que indica um número aleatório. Se você tiver um firewall configurado, é recomendável definir isso.';
String get port_helper_msg =>
'O padrão é -1, que indica um número aleatório. Se você tiver um firewall configurado, é recomendável definir isso.';
@override
String connect_request(Object client) {
@ -1384,5 +1381,6 @@ class AppLocalizationsPt extends AppLocalizations {
}
@override
String get connection_request_denied => 'Conexão negada. O usuário negou o acesso .';
String get connection_request_denied =>
'Conexão negada. O usuário negou o acesso .';
}

View File

@ -185,7 +185,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get follow => 'Подписаться';
@override
String get artist_url_copied => 'URL-адрес исполнителя скопирован в буфер обмена';
String get artist_url_copied =>
'URL-адрес исполнителя скопирован в буфер обмена';
@override
String added_to_queue(Object tracks) {
@ -379,12 +380,6 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get account => 'Аккаунт';
@override
String get login_with_spotify => 'Войдите с помощью своей учетной записи Spotify';
@override
String get connect_with_spotify => 'Подключитесь к Spotify';
@override
String get logout => 'Выйти';
@ -413,7 +408,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get layout_mode => 'Режим компоновки';
@override
String get override_layout_settings => 'Изменить настройки режима адаптивной компоновки';
String get override_layout_settings =>
'Изменить настройки режима адаптивной компоновки';
@override
String get adaptive => 'Адаптивный';
@ -443,7 +439,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get sync_album_color => 'Синхронизировать цвет альбома';
@override
String get sync_album_color_description => 'Использует основной цвет обложки альбома как цвет акцента';
String get sync_album_color_description =>
'Использует основной цвет обложки альбома как цвет акцента';
@override
String get playback => 'Воспроизведение';
@ -461,16 +458,19 @@ class AppLocalizationsRu extends AppLocalizations {
String get pre_download_play => 'Предварительная загрузка и воспроизведение';
@override
String get pre_download_play_description => 'Вместо потоковой передачи аудио используйте загруженные байты и воспроизводьте их (рекомендуется для пользователей с высокой пропускной способностью)';
String get pre_download_play_description =>
'Вместо потоковой передачи аудио используйте загруженные байты и воспроизводьте их (рекомендуется для пользователей с высокой пропускной способностью)';
@override
String get skip_non_music => 'Пропускать немузыкальные сегменты (SponsorBlock)';
String get skip_non_music =>
'Пропускать немузыкальные сегменты (SponsorBlock)';
@override
String get blacklist_description => 'Черный список треков и артистов';
@override
String get wait_for_download_to_finish => 'Пожалуйста, дождитесь завершения текущей загрузки';
String get wait_for_download_to_finish =>
'Пожалуйста, дождитесь завершения текущей загрузки';
@override
String get desktop => 'Компьютер';
@ -506,7 +506,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get please_sponsor => 'Стать спосором/поддержать';
@override
String get spotube_description => 'Spotube это легкий, кросс-платформенный клиент Spotify, предоставляющий бесплатный доступ для всех пользователей';
String get spotube_description =>
'Spotube это легкий, кросс-платформенный клиент Spotify, предоставляющий бесплатный доступ для всех пользователей';
@override
String get version => 'Версия';
@ -538,10 +539,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get license => 'Лицензия';
@override
String get add_spotify_credentials => 'Добавьте ваши учетные данные Spotify, чтобы начать';
@override
String get credentials_will_not_be_shared_disclaimer => 'Не беспокойся, никакая личная информация не собирается и не передается';
String get credentials_will_not_be_shared_disclaimer =>
'Не беспокойся, никакая личная информация не собирается и не передается';
@override
String get know_how_to_login => 'Не знаете, как это сделать?';
@ -549,11 +548,6 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Следуйте пошаговому руководству';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookie';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookie';
@ -583,33 +577,6 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get first_go_to => 'Сначала перейдите в';
@override
String get login_if_not_logged_in => 'и войдите или зарегистрируйтесь, если вы не вошли в систему';
@override
String get step_2 => 'Шаг 2';
@override
String get step_2_steps => '1. После входа в систему нажмите F12 или щелкните правой кнопкой мыши > «Проверить», чтобы открыть инструменты разработчика браузера.\n2. Затем перейдите на вкладку \"Application\" (Chrome, Edge, Brave и т.д..) or \"Storage\" (Firefox, Palemoon и т.д..)\n3. Перейдите в раздел \"Cookies\", а затем в подраздел \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Шаг 3';
@override
String get step_3_steps => 'Скопируйте значение Cookie \"sp_dc\"';
@override
String get success_emoji => 'Успешно🥳';
@override
String get success_message => 'Теперь вы успешно вошли в свою учетную запись Spotify. Отличная работа, приятель!';
@override
String get step_4 => 'Шаг 4';
@override
String get step_4_steps => 'Вставьте скопированное значение \"sp_dc\"';
@override
String get something_went_wrong => 'Что-то пошло не так';
@ -617,19 +584,23 @@ class AppLocalizationsRu extends AppLocalizations {
String get piped_instance => 'Экземпляр сервера Piped';
@override
String get piped_description => 'Серверный экземпляр Piped для сопоставления треков';
String get piped_description =>
'Серверный экземпляр Piped для сопоставления треков';
@override
String get piped_warning => 'Некоторые из них могут работать неправильно, поэтому используйте на свой страх и риск';
String get piped_warning =>
'Некоторые из них могут работать неправильно, поэтому используйте на свой страх и риск';
@override
String get invidious_instance => 'Экземпляр сервера Invidious';
@override
String get invidious_description => 'Экземпляр сервера Invidious для сопоставления треков';
String get invidious_description =>
'Экземпляр сервера Invidious для сопоставления треков';
@override
String get invidious_warning => 'Некоторые могут работать не очень хорошо. Используйте на свой страх и риск';
String get invidious_warning =>
'Некоторые могут работать не очень хорошо. Используйте на свой страх и риск';
@override
String get generate => 'Генерировать';
@ -643,7 +614,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get replace_downloaded_tracks => 'Заменить все ранее скачанные треки';
@override
String get skip_download_tracks => 'Пропустить загрузку всех ранее скачанных треков';
String get skip_download_tracks =>
'Пропустить загрузку всех ранее скачанных треков';
@override
String get do_you_want_to_replace => 'Хотите заменить существующий трек??';
@ -752,22 +724,28 @@ class AppLocalizationsRu extends AppLocalizations {
}
@override
String get download_warning => 'При скачивании всех треков пакетом вы фактически занимаетесь пиратством и наносите ущерб творческому обществу музыки. Надеюсь, что вы осознаете это. Всегда старайтесь уважать и поддерживать усилия исполнителей, вложенные в их творчество';
String get download_warning =>
'При скачивании всех треков пакетом вы фактически занимаетесь пиратством и наносите ущерб творческому обществу музыки. Надеюсь, что вы осознаете это. Всегда старайтесь уважать и поддерживать усилия исполнителей, вложенные в их творчество';
@override
String get download_ip_ban_warning => 'Кроме того, стоит учитывать, что из-за чрезмерного количества запросов на скачивание ваш IP-адрес может быть заблокирован на YouTube. Блокировка IP означает, что вы не сможете использовать YouTube (даже если вы вошли в свою учетную запись) в течение, как минимум, 2-3 месяцев с того устройства, с которого были сделаны эти запросы. Важно заметить, что Spotube не несет ответственности за такие события';
String get download_ip_ban_warning =>
'Кроме того, стоит учитывать, что из-за чрезмерного количества запросов на скачивание ваш IP-адрес может быть заблокирован на YouTube. Блокировка IP означает, что вы не сможете использовать YouTube (даже если вы вошли в свою учетную запись) в течение, как минимум, 2-3 месяцев с того устройства, с которого были сделаны эти запросы. Важно заметить, что Spotube не несет ответственности за такие события';
@override
String get by_clicking_accept_terms => 'Нажимая \'принять\', вы соглашаетесь с следующими условиями:';
String get by_clicking_accept_terms =>
'Нажимая \'принять\', вы соглашаетесь с следующими условиями:';
@override
String get download_agreement_1 => 'Я осознаю, что я использую музыку незаконно. Это плохо.';
String get download_agreement_1 =>
'Я осознаю, что я использую музыку незаконно. Это плохо.';
@override
String get download_agreement_2 => 'Я бы поддержал исполнителей, где только смог, и делаю это, так как не имею средств на приобретение их творчества';
String get download_agreement_2 =>
'Я бы поддержал исполнителей, где только смог, и делаю это, так как не имею средств на приобретение их творчества';
@override
String get download_agreement_3 => 'Я полностью осознаю, что мой IP-адрес может быть заблокирован на YouTube, и я не считаю Spotube или его владельцев/соавторов ответственными за какие-либо неприятности, вызванные моими текущими действиями';
String get download_agreement_3 =>
'Я полностью осознаю, что мой IP-адрес может быть заблокирован на YouTube, и я не считаю Spotube или его владельцев/соавторов ответственными за какие-либо неприятности, вызванные моими текущими действиями';
@override
String get decline => 'Отклонить';
@ -848,7 +826,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get failed_to_encrypt => 'Не удалось зашифровать';
@override
String get encryption_failed_warning => 'Spotube использует шифрование для безопасного хранения ваших данных. Однако в этом случае произошла ошибка. Поэтому будет использовано небезопасное хранилище.\nЕсли вы используете Linux, убедитесь, что у вас установлен какой-либо инструмент для работы с секретами (gnome-keyring, kde-wallet, keepassxc и т.д.)';
String get encryption_failed_warning =>
'Spotube использует шифрование для безопасного хранения ваших данных. Однако в этом случае произошла ошибка. Поэтому будет использовано небезопасное хранилище.\nЕсли вы используете Linux, убедитесь, что у вас установлен какой-либо инструмент для работы с секретами (gnome-keyring, kde-wallet, keepassxc и т.д.)';
@override
String get querying_info => 'Запрос информации...';
@ -946,7 +925,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get friends => 'Друзья';
@override
String get no_lyrics_available => 'Извините, не удается найти текст для этого трека';
String get no_lyrics_available =>
'Извините, не удается найти текст для этого трека';
@override
String get start_a_radio => 'Запустить радио';
@ -955,7 +935,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get how_to_start_radio => 'Как вы хотите запустить радио?';
@override
String get replace_queue_question => 'Хотите заменить текущую очередь или добавить к ней?';
String get replace_queue_question =>
'Хотите заменить текущую очередь или добавить к ней?';
@override
String get endless_playback => 'Бесконечное воспроизведение';
@ -964,7 +945,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get delete_playlist => 'Удалить плейлист';
@override
String get delete_playlist_confirmation => 'Вы уверены, что хотите удалить этот плейлист?';
String get delete_playlist_confirmation =>
'Вы уверены, что хотите удалить этот плейлист?';
@override
String get local_tracks => 'Локальные треки';
@ -988,16 +970,20 @@ class AppLocalizationsRu extends AppLocalizations {
String get get_started => 'Начнем';
@override
String get youtube_source_description => 'Рекомендуется и лучше всего работает.';
String get youtube_source_description =>
'Рекомендуется и лучше всего работает.';
@override
String get piped_source_description => 'Чувствуете себя свободно? То же самое, что и YouTube, но намного бесплатно.';
String get piped_source_description =>
'Чувствуете себя свободно? То же самое, что и YouTube, но намного бесплатно.';
@override
String get jiosaavn_source_description => 'Лучший для Южно-Азиатского региона.';
String get jiosaavn_source_description =>
'Лучший для Южно-Азиатского региона.';
@override
String get invidious_source_description => 'Похож на Piped, но с более высокой доступностью.';
String get invidious_source_description =>
'Похож на Piped, но с более высокой доступностью.';
@override
String highest_quality(Object quality) {
@ -1008,13 +994,15 @@ class AppLocalizationsRu extends AppLocalizations {
String get select_audio_source => 'Выберите аудиоисточник';
@override
String get endless_playback_description => 'Автоматически добавляйте новые песни\nв конец очереди';
String get endless_playback_description =>
'Автоматически добавляйте новые песни\nв конец очереди';
@override
String get choose_your_region => 'Выберите ваш регион';
@override
String get choose_your_region_description => 'Это поможет Spotube показать вам правильный контент\nдля вашего местоположения.';
String get choose_your_region_description =>
'Это поможет Spotube показать вам правильный контент\nдля вашего местоположения.';
@override
String get choose_your_language => 'Выберите ваш язык';
@ -1023,7 +1011,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get help_project_grow => 'Помогите этому проекту расти';
@override
String get help_project_grow_description => 'Spotube - это проект с открытым исходным кодом. Вы можете помочь этому проекту развиваться, внося вклад в проект, сообщая ошибках или предлагая новые функции.';
String get help_project_grow_description =>
'Spotube - это проект с открытым исходным кодом. Вы можете помочь этому проекту развиваться, внося вклад в проект, сообщая ошибках или предлагая новые функции.';
@override
String get contribute_on_github => 'Внести вклад на GitHub';
@ -1038,7 +1027,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get enable_connect => 'Включить подключение';
@override
String get enable_connect_description => 'Управление Spotube с других устройств';
String get enable_connect_description =>
'Управление Spotube с других устройств';
@override
String get devices => 'Устройства';
@ -1117,7 +1107,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get choose_the_device => 'Выберите устройство:';
@override
String get multiple_device_connected => 'Подключено несколько устройств.\nВыберите устройство, на котором вы хотите выполнить это действие';
String get multiple_device_connected =>
'Подключено несколько устройств.\nВыберите устройство, на котором вы хотите выполнить это действие';
@override
String get nothing_found => 'Ничего не найдено';
@ -1190,7 +1181,8 @@ class AppLocalizationsRu extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Рассчитано на основе выплат Spotify за стрим\nот \$0.003 до \$0.005. Это гипотетический\nрасчет, чтобы показать пользователю, сколько бы он\nзаплатил артистам, если бы слушал их песни на Spotify.';
String get streaming_fees_hypothetical =>
'*Рассчитано на основе выплат Spotify за стрим\nот \$0.003 до \$0.005. Это гипотетический\nрасчет, чтобы показать пользователю, сколько бы он\nзаплатил артистам, если бы слушал их песни на Spotify.';
@override
String get minutes_listened => 'Минут прослушивания';
@ -1212,7 +1204,8 @@ class AppLocalizationsRu extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Это рассчитано на основе выплат Spotify за стрим\nот \$0.003 до \$0.005. Это гипотетический расчет,\nчтобы дать пользователю представление о том, сколько бы он\nзаплатил артистам, если бы слушал их песни на Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1254,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get webview_not_found => 'Webview не найден';
@override
String get webview_not_found_description => 'На вашем устройстве не установлена среда выполнения Webview.\nЕсли он установлен, убедитесь, что он находится в environment PATH\n\nПосле установки перезапустите приложение';
String get webview_not_found_description =>
'На вашем устройстве не установлена среда выполнения Webview.\nЕсли он установлен, убедитесь, что он находится в environment PATH\n\nПосле установки перезапустите приложение';
@override
String get unsupported_platform => 'Платформа не поддерживается';
@ -1293,7 +1287,8 @@ class AppLocalizationsRu extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Вы хотите экспортировать эти файлы в';
String get export_cache_confirmation =>
'Вы хотите экспортировать эти файлы в';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,7 +1317,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get view_all => 'Просмотреть все';
@override
String get no_tracks_added_yet => 'Похоже, вы ещё не добавили ни одного трека';
String get no_tracks_added_yet =>
'Похоже, вы ещё не добавили ни одного трека';
@override
String get no_tracks => 'Похоже, здесь нет треков';
@ -1334,7 +1330,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get not_following_artists => 'Вы не подписаны на художников';
@override
String get no_favorite_albums_yet => 'Похоже, вы ещё не добавили ни одного альбома в избранное';
String get no_favorite_albums_yet =>
'Похоже, вы ещё не добавили ни одного альбома в избранное';
@override
String get no_logs_found => 'Логи не найдены';
@ -1358,7 +1355,8 @@ class AppLocalizationsRu extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'В macOS/Linux/Unix-подобных ОС, установка пути в .zshrc/.bashrc/.bash_profile и т.д. не будет работать.\nВы должны установить путь в файле конфигурации оболочки';
String get youtube_engine_unix_issue_message =>
'В macOS/Linux/Unix-подобных ОС, установка пути в .zshrc/.bashrc/.bash_profile и т.д. не будет работать.\nВы должны установить путь в файле конфигурации оболочки';
@override
String get download => 'Скачать';
@ -1376,7 +1374,8 @@ class AppLocalizationsRu extends AppLocalizations {
String get edit_port => 'Редактировать порт';
@override
String get port_helper_msg => 'По умолчанию -1, что означает случайное число. Если у вас настроен брандмауэр, рекомендуется установить это.';
String get port_helper_msg =>
'По умолчанию -1, что означает случайное число. Если у вас настроен брандмауэр, рекомендуется установить это.';
@override
String connect_request(Object client) {
@ -1384,5 +1383,6 @@ class AppLocalizationsRu extends AppLocalizations {
}
@override
String get connection_request_denied => 'Подключение отклонено. Пользователь отказал в доступе.';
String get connection_request_denied =>
'Подключение отклонено. Пользователь отказал в доступе.';
}

View File

@ -185,7 +185,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get follow => 'பின்தொடர்';
@override
String get artist_url_copied => 'கலைஞர் URL கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது';
String get artist_url_copied =>
'கலைஞர் URL கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது';
@override
String added_to_queue(Object tracks) {
@ -379,12 +380,6 @@ class AppLocalizationsTa extends AppLocalizations {
@override
String get account => 'கணக்கு';
@override
String get login_with_spotify => 'உங்கள் Spotify கணக்கில் உள்நுழைக';
@override
String get connect_with_spotify => 'Spotify உடன் இணைக்கவும்';
@override
String get logout => 'வெளியேறு';
@ -443,7 +438,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get sync_album_color => 'ஆல்பம் நிறத்தை ஒத்திசை';
@override
String get sync_album_color_description => 'ஆல்பம் படத்தின் முக்கிய நிறத்தை அழுத்த நிறமாகப் பயன்படுத்துகிறது';
String get sync_album_color_description =>
'ஆல்பம் படத்தின் முக்கிய நிறத்தை அழுத்த நிறமாகப் பயன்படுத்துகிறது';
@override
String get playback => 'பின்னணி';
@ -461,16 +457,19 @@ class AppLocalizationsTa extends AppLocalizations {
String get pre_download_play => 'முன்பதிவிறக்கம் மற்றும் இயக்கம்';
@override
String get pre_download_play_description => 'ஒலியை ஸ்ட்ரீம் செய்வதற்குப் பதிலாக, பைட்டுகளைப் பதிவிறக்கி இயக்கவும் (அதிக பேண்ட்விட்த் பயனர்களுக்கு பரிந்துரைக்கப்படுகிறது)';
String get pre_download_play_description =>
'ஒலியை ஸ்ட்ரீம் செய்வதற்குப் பதிலாக, பைட்டுகளைப் பதிவிறக்கி இயக்கவும் (அதிக பேண்ட்விட்த் பயனர்களுக்கு பரிந்துரைக்கப்படுகிறது)';
@override
String get skip_non_music => 'இசையல்லாத பகுதிகளைத் தவிர் (SponsorBlock)';
@override
String get blacklist_description => 'தடைசெய்யப்பட்ட பாடல்கள் மற்றும் கலைஞர்கள்';
String get blacklist_description =>
'தடைசெய்யப்பட்ட பாடல்கள் மற்றும் கலைஞர்கள்';
@override
String get wait_for_download_to_finish => 'தற்போதைய பதிவிறக்கம் முடியும் வரை காத்திருக்கவும்';
String get wait_for_download_to_finish =>
'தற்போதைய பதிவிறக்கம் முடியும் வரை காத்திருக்கவும்';
@override
String get desktop => 'கணினி';
@ -491,7 +490,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get about => 'பற்றி';
@override
String get u_love_spotube => 'நீங்கள் Spotube ஐ நேசிக்கிறீர்கள் என்பது எங்களுக்குத் தெரியும்';
String get u_love_spotube =>
'நீங்கள் Spotube ஐ நேசிக்கிறீர்கள் என்பது எங்களுக்குத் தெரியும்';
@override
String get check_for_updates => 'புதுப்பிப்புகளைச் சரிபார்';
@ -506,7 +506,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get please_sponsor => 'தயவுசெய்து ஆதரவு/நன்கொடை அளியுங்கள்';
@override
String get spotube_description => 'Spotube, ஒரு லேசான, பல தளங்களில் இயங்கும், அனைவருக்கும் இலவசமான spotify கிளையன்ட்';
String get spotube_description =>
'Spotube, ஒரு லேசான, பல தளங்களில் இயங்கும், அனைவருக்கும் இலவசமான spotify கிளையன்ட்';
@override
String get version => 'பதிப்பு';
@ -538,21 +539,15 @@ class AppLocalizationsTa extends AppLocalizations {
String get license => 'உரிமம்';
@override
String get add_spotify_credentials => 'தொடங்குவதற்கு உங்கள் spotify சான்றுகளைச் சேர்க்கவும்';
@override
String get credentials_will_not_be_shared_disclaimer => 'கவலைப்பட வேண்டாம், உங்கள் சான்றுகள் எதுவும் சேகரிக்கப்படாது அல்லது யாருடனும் பகிரப்படாது';
String get credentials_will_not_be_shared_disclaimer =>
'கவலைப்பட வேண்டாம், உங்கள் சான்றுகள் எதுவும் சேகரிக்கப்படாது அல்லது யாருடனும் பகிரப்படாது';
@override
String get know_how_to_login => 'இதை எப்படி செய்வது என்று தெரியவில்லையா?';
@override
String get follow_step_by_step_guide => 'படிப்படியான வழிகாட்டியைப் பின்பற்றவும்';
@override
String spotify_cookie(Object name) {
return 'Spotify $name நட்புநிரல்';
}
String get follow_step_by_step_guide =>
'படிப்படியான வழிகாட்டியைப் பின்பற்றவும்';
@override
String cookie_name_cookie(Object name) {
@ -583,33 +578,6 @@ class AppLocalizationsTa extends AppLocalizations {
@override
String get first_go_to => 'முதலில், செல்லவேண்டியது';
@override
String get login_if_not_logged_in => 'நீங்கள் உள்நுழையவில்லை என்றால் உள்நுழைக/பதிவுசெய்க';
@override
String get step_2 => 'இரண்டாம் படி';
@override
String get step_2_steps => '1. நீங்கள் உள்நுழைந்தவுடன், F12 ஐ அழுத்தவும் அல்லது வலது கிளிக் செய்து > ஆய்வு செய்யவும் உலாவி டெவ்டூல்களைத் திறக்கவும்.\n2. பின்னர் \"பயன்பாடு\" தாவலுக்குச் செல்லவும் (Chrome, Edge, Brave போன்றவை) அல்லது \"சேமிப்பகம்\" தாவல் (Firefox, Palemoon போன்றவை)\n3. \"குக்கிகள்\" பிரிவுக்குச் சென்று பின்னர் \"https://accounts.spotify.com\" பிரிவுக்குச் செல்லவும்';
@override
String get step_3 => 'மூன்றாம் படி';
@override
String get step_3_steps => '\"sp_dc\" நட்புநிரலின் மதிப்பை நகலெடுக்கவும்';
@override
String get success_emoji => 'வெற்றி🥳';
@override
String get success_message => 'இப்போது நீங்கள் உங்கள் Spotify கணக்கில் வெற்றிகரமாக உள்நுழைந்துள்ளீர்கள். நல்லது, நண்பரே!';
@override
String get step_4 => 'நான்காம் படி';
@override
String get step_4_steps => 'நகலெடுக்கப்பட்ட \"sp_dc\" மதிப்பை ஒட்டவும்';
@override
String get something_went_wrong => 'ஏதோ தவறு நடந்துவிட்டது';
@ -617,19 +585,23 @@ class AppLocalizationsTa extends AppLocalizations {
String get piped_instance => 'Piped சேவையகம் நிகழ்வு';
@override
String get piped_description => 'பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Piped சேவையகம் நிகழ்வு';
String get piped_description =>
'பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Piped சேவையகம் நிகழ்வு';
@override
String get piped_warning => 'அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்';
String get piped_warning =>
'அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்';
@override
String get invidious_instance => 'Invidious சேவையக நிகழ்வு';
@override
String get invidious_description => 'பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Invidious சேவையக நிகழ்வு';
String get invidious_description =>
'பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Invidious சேவையக நிகழ்வு';
@override
String get invidious_warning => 'அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்';
String get invidious_warning =>
'அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்';
@override
String get generate => 'உருவாக்கு';
@ -640,13 +612,16 @@ class AppLocalizationsTa extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் மாற்றவும்';
String get replace_downloaded_tracks =>
'பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் மாற்றவும்';
@override
String get skip_download_tracks => 'பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் தவிர்க்கவும்';
String get skip_download_tracks =>
'பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் தவிர்க்கவும்';
@override
String get do_you_want_to_replace => 'ஏற்கனவே உள்ள பாடலை மாற்ற விரும்புகிறீர்களா?';
String get do_you_want_to_replace =>
'ஏற்கனவே உள்ள பாடலை மாற்ற விரும்புகிறீர்களா?';
@override
String get replace => 'மாற்று';
@ -669,7 +644,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get country => 'நாடு';
@override
String get number_of_tracks_generate => 'உருவாக்க வேண்டிய பாடல்களின் எண்ணிக்கை';
String get number_of_tracks_generate =>
'உருவாக்க வேண்டிய பாடல்களின் எண்ணிக்கை';
@override
String get acousticness => 'அகவுஸ்டிக்னெஸ்';
@ -744,7 +720,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get are_you_sure => 'உறுதியாக இருக்கிறீர்களா?';
@override
String get generating_playlist => 'உங்கள் தனிப்பயன்பாட்டிற்கான பாடல் பட்டியலை உருவாக்குகிறது...';
String get generating_playlist =>
'உங்கள் தனிப்பயன்பாட்டிற்கான பாடல் பட்டியலை உருவாக்குகிறது...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +729,28 @@ class AppLocalizationsTa extends AppLocalizations {
}
@override
String get download_warning => 'நீங்கள் அனைத்து பாடல்களையும் மொத்தமாக பதிவிறக்கினால், நீங்கள் தெளிவாக இசையைத் திருடுகிறீர்கள் மற்றும் இசையின் படைப்பாற்றல் சமூகத்திற்கு சேதம் விளைவிக்கிறீர்கள். நீங்கள் இதை அறிந்திருக்கிறீர்கள் என்று நம்புகிறேன். எப்போதும், கலைஞரின் கடின உழைப்பை மதித்து ஆதரிக்க முயற்சி செய்யுங்கள்';
String get download_warning =>
'நீங்கள் அனைத்து பாடல்களையும் மொத்தமாக பதிவிறக்கினால், நீங்கள் தெளிவாக இசையைத் திருடுகிறீர்கள் மற்றும் இசையின் படைப்பாற்றல் சமூகத்திற்கு சேதம் விளைவிக்கிறீர்கள். நீங்கள் இதை அறிந்திருக்கிறீர்கள் என்று நம்புகிறேன். எப்போதும், கலைஞரின் கடின உழைப்பை மதித்து ஆதரிக்க முயற்சி செய்யுங்கள்';
@override
String get download_ip_ban_warning => 'மேலும், அதிகப்படியான பதிவிறக்க கோரிக்கைகள் காரணமாக உங்கள் IP YouTube இல் தடைசெய்யப்படலாம். IP தடை என்பது குறைந்தது 2-3 மாதங்களுக்கு அந்த IP சாதனத்திலிருந்து YouTube ஐப் பயன்படுத்த முடியாது (நீங்கள் உள்நுழைந்திருந்தாலும் கூட). இது ஒருபோதும் நடந்தால் Spotube பொறுப்பேற்காது';
String get download_ip_ban_warning =>
'மேலும், அதிகப்படியான பதிவிறக்க கோரிக்கைகள் காரணமாக உங்கள் IP YouTube இல் தடைசெய்யப்படலாம். IP தடை என்பது குறைந்தது 2-3 மாதங்களுக்கு அந்த IP சாதனத்திலிருந்து YouTube ஐப் பயன்படுத்த முடியாது (நீங்கள் உள்நுழைந்திருந்தாலும் கூட). இது ஒருபோதும் நடந்தால் Spotube பொறுப்பேற்காது';
@override
String get by_clicking_accept_terms => '\'ஏற்றுக்கொள்\' என்பதைக் கிளிக் செய்வதன் மூலம் பின்வரும் விதிமுறைகளுக்கு நீங்கள் ஒப்புக்கொள்கிறீர்கள்:';
String get by_clicking_accept_terms =>
'\'ஏற்றுக்கொள்\' என்பதைக் கிளிக் செய்வதன் மூலம் பின்வரும் விதிமுறைகளுக்கு நீங்கள் ஒப்புக்கொள்கிறீர்கள்:';
@override
String get download_agreement_1 => 'நான் இசையைத் திருடுகிறேன் என்பது எனக்குத் தெரியும். நான் கெட்டவன்';
String get download_agreement_1 =>
'நான் இசையைத் திருடுகிறேன் என்பது எனக்குத் தெரியும். நான் கெட்டவன்';
@override
String get download_agreement_2 => 'நான் கலைஞரை முடிந்தவரை ஆதரிப்பேன், அவர்களின் கலைக்கு பணம் செலுத்த எனக்கு பணம் இல்லாததால் மட்டுமே இதைச் செய்கிறேன்';
String get download_agreement_2 =>
'நான் கலைஞரை முடிந்தவரை ஆதரிப்பேன், அவர்களின் கலைக்கு பணம் செலுத்த எனக்கு பணம் இல்லாததால் மட்டுமே இதைச் செய்கிறேன்';
@override
String get download_agreement_3 => 'என் IP YouTube இல் தடைசெய்யப்படலாம் என்பதை நான் முழுமையாக அறிவேன், மேலும் என் தற்போதைய செயலால் ஏற்படும் எந்த விபத்துகளுக்கும் Spotube அல்லது அதன் உரிமையாளர்கள்/பங்களிப்பாளர்களை பொறுப்பாக்க மாட்டேன்';
String get download_agreement_3 =>
'என் IP YouTube இல் தடைசெய்யப்படலாம் என்பதை நான் முழுமையாக அறிவேன், மேலும் என் தற்போதைய செயலால் ஏற்படும் எந்த விபத்துகளுக்கும் Spotube அல்லது அதன் உரிமையாளர்கள்/பங்களிப்பாளர்களை பொறுப்பாக்க மாட்டேன்';
@override
String get decline => 'மறு';
@ -848,7 +831,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get failed_to_encrypt => 'குறியாக்கம் தோல்வியடைந்தது';
@override
String get encryption_failed_warning => 'Spotube உங்கள் தரவை பாதுகாப்பாக சேமிக்க குறியாக்கத்தைப் பயன்படுத்துகிறது. ஆனால் அவ்வாறு செய்ய முடியவில்லை. எனவே இது பாதுகாப்பற்ற சேமிப்பகத்திற்கு மாறும்\nநீங்கள் லினக்ஸ் பயன்படுத்துகிறீர்கள் என்றால், எந்த ரகசிய சேவையும் (gnome-keyring, kde-wallet, keepassxc போன்றவை) நிறுவப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்';
String get encryption_failed_warning =>
'Spotube உங்கள் தரவை பாதுகாப்பாக சேமிக்க குறியாக்கத்தைப் பயன்படுத்துகிறது. ஆனால் அவ்வாறு செய்ய முடியவில்லை. எனவே இது பாதுகாப்பற்ற சேமிப்பகத்திற்கு மாறும்\nநீங்கள் லினக்ஸ் பயன்படுத்துகிறீர்கள் என்றால், எந்த ரகசிய சேவையும் (gnome-keyring, kde-wallet, keepassxc போன்றவை) நிறுவப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்';
@override
String get querying_info => 'தகவலைக் கேட்கிறது...';
@ -946,7 +930,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get friends => 'நண்பர்கள்';
@override
String get no_lyrics_available => 'மன்னிக்கவும், இந்தப் பாடலுக்கான பாடல் வரிகளைக் கண்டுபிடிக்க முடியவில்லை';
String get no_lyrics_available =>
'மன்னிக்கவும், இந்தப் பாடலுக்கான பாடல் வரிகளைக் கண்டுபிடிக்க முடியவில்லை';
@override
String get start_a_radio => 'வானொலியைத் தொடங்கு';
@ -955,7 +940,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get how_to_start_radio => 'வானொலியை எவ்வாறு தொடங்க விரும்புகிறீர்கள்?';
@override
String get replace_queue_question => 'தற்போதைய வரிசையை மாற்ற விரும்புகிறீர்களா அல்லது அதனுடன் சேர்க்க விரும்புகிறீர்களா?';
String get replace_queue_question =>
'தற்போதைய வரிசையை மாற்ற விரும்புகிறீர்களா அல்லது அதனுடன் சேர்க்க விரும்புகிறீர்களா?';
@override
String get endless_playback => 'முடிவற்ற இயக்கம்';
@ -964,7 +950,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get delete_playlist => 'பாடல் பட்டியலை நீக்கு';
@override
String get delete_playlist_confirmation => 'இந்த பாடல் பட்டியலை நீக்க விரும்புகிறீர்களா?';
String get delete_playlist_confirmation =>
'இந்த பாடல் பட்டியலை நீக்க விரும்புகிறீர்களா?';
@override
String get local_tracks => 'உள்ளூர் பாடல்கள்';
@ -988,16 +975,20 @@ class AppLocalizationsTa extends AppLocalizations {
String get get_started => 'தொடங்குவோம்';
@override
String get youtube_source_description => 'பரிந்துரைக்கப்படுகிறது மற்றும் சிறப்பாக செயல்படுகிறது.';
String get youtube_source_description =>
'பரிந்துரைக்கப்படுகிறது மற்றும் சிறப்பாக செயல்படுகிறது.';
@override
String get piped_source_description => 'சுதந்திரமாக உணர்கிறீர்களா? YouTube போலவே ஆனால் மிகவும் சுதந்திரமானது.';
String get piped_source_description =>
'சுதந்திரமாக உணர்கிறீர்களா? YouTube போலவே ஆனால் மிகவும் சுதந்திரமானது.';
@override
String get jiosaavn_source_description => 'தெற்காசியப் பிராந்தியத்திற்கு சிறந்தது.';
String get jiosaavn_source_description =>
'தெற்காசியப் பிராந்தியத்திற்கு சிறந்தது.';
@override
String get invidious_source_description => 'Piped ஐப் போன்றது ஆனால் அதிக கிடைக்கும் தன்மையுடன்.';
String get invidious_source_description =>
'Piped ஐப் போன்றது ஆனால் அதிக கிடைக்கும் தன்மையுடன்.';
@override
String highest_quality(Object quality) {
@ -1008,13 +999,15 @@ class AppLocalizationsTa extends AppLocalizations {
String get select_audio_source => 'ஒலி மூலத்தைத் தேர்ந்தெடுக்கவும்';
@override
String get endless_playback_description => 'வரிசையின் இறுதியில் புதிய பாடல்களை\nதானாகவே சேர்க்கவும்';
String get endless_playback_description =>
'வரிசையின் இறுதியில் புதிய பாடல்களை\nதானாகவே சேர்க்கவும்';
@override
String get choose_your_region => 'உங்கள் பிராந்தியத்தைத் தேர்ந்தெடுக்கவும்';
@override
String get choose_your_region_description => 'இது உங்கள் இருப்பிடத்திற்கான சரியான உள்ளடக்கத்தை\nSpotube காட்ட உதவும்.';
String get choose_your_region_description =>
'இது உங்கள் இருப்பிடத்திற்கான சரியான உள்ளடக்கத்தை\nSpotube காட்ட உதவும்.';
@override
String get choose_your_language => 'உங்கள் மொழியைத் தேர்ந்தெடுக்கவும்';
@ -1023,13 +1016,15 @@ class AppLocalizationsTa extends AppLocalizations {
String get help_project_grow => 'இந்த திட்டம் வளர உதவுங்கள்';
@override
String get help_project_grow_description => 'Spotube ஒரு திறந்த மூல திட்டம். திட்டத்திற்கு பங்களிப்பு செய்வதன் மூலம், பிழைகளைப் புகாரளிப்பதன் மூலம் அல்லது புதிய அம்சங்களைப் பரிந்துரைப்பதன் மூலம் இந்தத் திட்டம் வளர உதவலாம்.';
String get help_project_grow_description =>
'Spotube ஒரு திறந்த மூல திட்டம். திட்டத்திற்கு பங்களிப்பு செய்வதன் மூலம், பிழைகளைப் புகாரளிப்பதன் மூலம் அல்லது புதிய அம்சங்களைப் பரிந்துரைப்பதன் மூலம் இந்தத் திட்டம் வளர உதவலாம்.';
@override
String get contribute_on_github => 'GitHub இல் பங்களியுங்கள்';
@override
String get donate_on_open_collective => 'Open Collective இல் நன்கொடை அளியுங்கள்';
String get donate_on_open_collective =>
'Open Collective இல் நன்கொடை அளியுங்கள்';
@override
String get browse_anonymously => 'அநாமதேயமாக உலாவுக';
@ -1038,7 +1033,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get enable_connect => 'இணைப்பை இயக்கு';
@override
String get enable_connect_description => 'மற்ற சாதனங்களிலிருந்து Spotube ஐக் கட்டுப்படுத்தவும்';
String get enable_connect_description =>
'மற்ற சாதனங்களிலிருந்து Spotube ஐக் கட்டுப்படுத்தவும்';
@override
String get devices => 'சாதனங்கள்';
@ -1117,7 +1113,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get choose_the_device => 'சாதனத்தைத் தேர்ந்தெடுக்கவும்:';
@override
String get multiple_device_connected => 'பல சாதனங்கள் இணைக்கப்பட்டுள்ளன.\nஇந்த செயல் நடைபெற வேண்டிய சாதனத்தைத் தேர்ந்தெடுக்கவும்';
String get multiple_device_connected =>
'பல சாதனங்கள் இணைக்கப்பட்டுள்ளன.\nஇந்த செயல் நடைபெற வேண்டிய சாதனத்தைத் தேர்ந்தெடுக்கவும்';
@override
String get nothing_found => 'எதுவும் கிடைக்கவில்லை';
@ -1212,7 +1209,8 @@ class AppLocalizationsTa extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*இது Spotify இன் ஒவ்வொரு ஸ்ட்ரீமிற்கும்\n\$0.003 முதல் \$0.005 வரை அளவீடு அடிப்படையில் கணக்கிடப்படுகிறது. இது ஒரு கற்பனை\nகணக்கீடு ஆகும், பயனர் எந்த அளவிற்கு கலைஞர்களுக்கு\nஅதோர் பாடலை Spotify மென்பொருளில் கேட்டால் எவ்வளவு பணம் செலுத்தினார்கள் என்பதைக் கண்டுபிடிக்க.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1259,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get webview_not_found => 'வெப்வியூ கிடைக்கவில்லை';
@override
String get webview_not_found_description => 'உங்கள் சாதனத்தில் எந்தவொரு வெப்வியூ இயக்கத்தை நிறுவவில்லை.\nஇது நிறுவப்பட்டிருந்தால், சுற்றுச்சூழல் பாதையில் PATH உள்ளது என்பதை உறுதிபடுத்தவும்\n\nநிறுவித்த பிறகு, செயலியை மறுதொடக்கம் செய்யவும்';
String get webview_not_found_description =>
'உங்கள் சாதனத்தில் எந்தவொரு வெப்வியூ இயக்கத்தை நிறுவவில்லை.\nஇது நிறுவப்பட்டிருந்தால், சுற்றுச்சூழல் பாதையில் PATH உள்ளது என்பதை உறுதிபடுத்தவும்\n\nநிறுவித்த பிறகு, செயலியை மறுதொடக்கம் செய்யவும்';
@override
String get unsupported_platform => 'அதிர்ஷ்டகாத உருப்படியை ஆதரிக்கவில்லை';
@ -1293,7 +1292,8 @@ class AppLocalizationsTa extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'இந்த கோப்புகளை ஏற்றுமதி செய்ய விரும்புகிறீர்களா?';
String get export_cache_confirmation =>
'இந்த கோப்புகளை ஏற்றுமதி செய்ய விரும்புகிறீர்களா?';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,7 +1322,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get view_all => 'அனைத்தையும் காண்க';
@override
String get no_tracks_added_yet => 'உங்கள் பாடல்களை இன்னும் சேர்க்கவில்லை என்றால் தெரியாதே';
String get no_tracks_added_yet =>
'உங்கள் பாடல்களை இன்னும் சேர்க்கவில்லை என்றால் தெரியாதே';
@override
String get no_tracks => 'இங்கு பாடல்கள் எதுவும் இல்லை';
@ -1334,7 +1335,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get not_following_artists => 'நீங்கள் எந்த கலைஞரையும் பின்தொடரவில்லை';
@override
String get no_favorite_albums_yet => 'நீங்கள் இன்னும் எந்த ஆல்பங்களையும் பிடித்தவையாகச் சேர்க்கவில்லை';
String get no_favorite_albums_yet =>
'நீங்கள் இன்னும் எந்த ஆல்பங்களையும் பிடித்தவையாகச் சேர்க்கவில்லை';
@override
String get no_logs_found => 'பதிவுகள் எதுவும் கிடைக்கவில்லை';
@ -1358,7 +1360,8 @@ class AppLocalizationsTa extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/unix போல் OS இல், .zshrc/.bashrc/.bash_profile போன்றவை அமைப்பில் பாதையை PATH அமைப்பது இயலாது.\nநீங்கள்.shell configuration file இல் பாதையை அமைக்க வேண்டும்';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/unix போல் OS இல், .zshrc/.bashrc/.bash_profile போன்றவை அமைப்பில் பாதையை PATH அமைப்பது இயலாது.\nநீங்கள்.shell configuration file இல் பாதையை அமைக்க வேண்டும்';
@override
String get download => 'பதிவிறக்கு';
@ -1376,7 +1379,8 @@ class AppLocalizationsTa extends AppLocalizations {
String get edit_port => 'போர்டு திருத்தவும்';
@override
String get port_helper_msg => 'இயல்புநிலை -1 ஆகும், இது சீரற்ற எண்ணை குறிக்கிறது. நீங்கள் தீயணைப்பு அமைக்கப்பட்டிருந்தால், இதை அமைப்பது பரிந்துரைக்கப்படுகிறது.';
String get port_helper_msg =>
'இயல்புநிலை -1 ஆகும், இது சீரற்ற எண்ணை குறிக்கிறது. நீங்கள் தீயணைப்பு அமைக்கப்பட்டிருந்தால், இதை அமைப்பது பரிந்துரைக்கப்படுகிறது.';
@override
String connect_request(Object client) {
@ -1384,5 +1388,6 @@ class AppLocalizationsTa extends AppLocalizations {
}
@override
String get connection_request_denied => 'இணைப்பு மறுக்கப்பட்டது. பயனர் அணுகலை மறுத்தார்.';
String get connection_request_denied =>
'இணைப்பு மறுக்கப்பட்டது. பயனர் அணுகலை மறுத்தார்.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsTh extends AppLocalizations {
@override
String get account => 'บัญชี';
@override
String get login_with_spotify => 'เข้าสู่ระบบด้วยบัญชี Spotify';
@override
String get connect_with_spotify => 'เชื่อมต่อกับ Spotify';
@override
String get logout => 'ออกจากระบบ';
@ -413,7 +407,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get layout_mode => 'โหมดเค้าโครง';
@override
String get override_layout_settings => 'แทนที่การตั้งค่าโหมดเค้าโครงแบบตอบสนอง';
String get override_layout_settings =>
'แทนที่การตั้งค่าโหมดเค้าโครงแบบตอบสนอง';
@override
String get adaptive => 'ปรับเปลี่ยน';
@ -443,7 +438,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get sync_album_color => 'ซิงค์สีอัลบั้ม';
@override
String get sync_album_color_description => 'ใช้สีเด่นของอาร์ตอัลบั้มเป็นสีเน้น';
String get sync_album_color_description =>
'ใช้สีเด่นของอาร์ตอัลบั้มเป็นสีเน้น';
@override
String get playback => 'การเล่น';
@ -461,7 +457,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get pre_download_play => 'ดาวน์โหลดล่วงหน้าและเล่น';
@override
String get pre_download_play_description => 'แทนที่จะสตรีมเสียง ดาวน์โหลดข้อมูลและเล่นแทน (แนะนำสำหรับผู้ใช้แบนด์วิดธ์สูง)';
String get pre_download_play_description =>
'แทนที่จะสตรีมเสียง ดาวน์โหลดข้อมูลและเล่นแทน (แนะนำสำหรับผู้ใช้แบนด์วิดธ์สูง)';
@override
String get skip_non_music => 'ข้ามส่วนที่ไม่ใช่เพลง (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get blacklist_description => 'แทร็กและศิลปินที่บล็อก';
@override
String get wait_for_download_to_finish => 'โปรดรอให้การดาวน์โหลดปัจจุบันเสร็จสิ้น';
String get wait_for_download_to_finish =>
'โปรดรอให้การดาวน์โหลดปัจจุบันเสร็จสิ้น';
@override
String get desktop => 'เดสก์ท็อป';
@ -506,7 +504,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get please_sponsor => 'กรุณาสนับสนุน/บริจาค';
@override
String get spotube_description => 'Spotube โปรแกรมเล่น Spotify ฟรีสำหรับทุกคน น้ำหนักเบา รองรับหลายแพลตฟอร์ม';
String get spotube_description =>
'Spotube โปรแกรมเล่น Spotify ฟรีสำหรับทุกคน น้ำหนักเบา รองรับหลายแพลตฟอร์ม';
@override
String get version => 'รุ่น';
@ -538,10 +537,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get license => 'ใบอนุญาต';
@override
String get add_spotify_credentials => 'เพิ่มข้อมูลรับรอง Spotify ของคุณเพื่อเริ่มต้น';
@override
String get credentials_will_not_be_shared_disclaimer => 'ไม่ต้องกังวล ข้อมูลรับรองใดๆ ของคุณจะไม่ถูกเก็บรวบรวมหรือแชร์กับใคร';
String get credentials_will_not_be_shared_disclaimer =>
'ไม่ต้องกังวล ข้อมูลรับรองใดๆ ของคุณจะไม่ถูกเก็บรวบรวมหรือแชร์กับใคร';
@override
String get know_how_to_login => 'ไม่รู้จักวิธีดำเนินการนี้ใช่ไหม';
@ -549,11 +546,6 @@ class AppLocalizationsTh extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'ทำตามคู่มือทีละขั้น';
@override
String spotify_cookie(Object name) {
return 'คุกกี้ Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'คุกกี้ $name';
@ -583,33 +575,6 @@ class AppLocalizationsTh extends AppLocalizations {
@override
String get first_go_to => 'ก่อนอื่น ไปที่';
@override
String get login_if_not_logged_in => 'ยังไม่ได้เข้าสู่ระบบ ให้เข้าสู่ระบบ/ลงทะเบียน';
@override
String get step_2 => 'ขั้นที่ 2';
@override
String get step_2_steps => '1. หลังจากเข้าสู่ระบบแล้ว กด F12 หรือ คลิกขวาที่เมาส์ > ตรวจสอบเพื่อเปิด Devtools เบราว์เซอร์\n2. จากนั้นไปที่แท็บ \"แอปพลิเคชัน\" (Chrome, Edge, Brave เป็นต้น) หรือแท็บ \"ที่เก็บข้อมูล\" (Firefox, Palemoon เป็นต้น)\n3. ไปที่ส่วน \"คุกกี้\" แล้วไปที่ subsection \"https: //accounts.spotify.com\"';
@override
String get step_3 => 'ขั้นที่ 3';
@override
String get step_3_steps => 'คัดลอกค่าคุกกี้ \"sp_dc\"';
@override
String get success_emoji => 'สำเร็จ';
@override
String get success_message => 'ตอนนี้คุณเข้าสู่ระบบด้วยบัญชี Spotify ของคุณเรียบร้อยแล้ว ยอดเยี่ยม!';
@override
String get step_4 => 'ขั้นที่ 4';
@override
String get step_4_steps => 'วางค่า \"sp_dc\" ที่คัดลอกมา';
@override
String get something_went_wrong => 'มีอะไรผิดพลาด';
@ -617,19 +582,23 @@ class AppLocalizationsTh extends AppLocalizations {
String get piped_instance => 'อินสแตนซ์เซิร์ฟเวอร์แบบ Pipe';
@override
String get piped_description => 'อินสแตนซ์เซิร์ฟเวอร์แบบ Pipe ที่ใช้สำหรับการจับคู่แทร็ก';
String get piped_description =>
'อินสแตนซ์เซิร์ฟเวอร์แบบ Pipe ที่ใช้สำหรับการจับคู่แทร็ก';
@override
String get piped_warning => 'บางอย่างอาจใช้งานไม่ได้ผล คุณจึงต้องรับความเสี่ยงเอง';
String get piped_warning =>
'บางอย่างอาจใช้งานไม่ได้ผล คุณจึงต้องรับความเสี่ยงเอง';
@override
String get invidious_instance => 'อินสแตนซ์เซิร์ฟเวอร์ Invidious';
@override
String get invidious_description => 'อินสแตนซ์เซิร์ฟเวอร์ Invidious ที่ใช้สำหรับการจับคู่เพลง';
String get invidious_description =>
'อินสแตนซ์เซิร์ฟเวอร์ Invidious ที่ใช้สำหรับการจับคู่เพลง';
@override
String get invidious_warning => 'บางอันอาจใช้งานไม่ดี ใช้ด้วยความเสี่ยงของคุณเอง';
String get invidious_warning =>
'บางอันอาจใช้งานไม่ดี ใช้ด้วยความเสี่ยงของคุณเอง';
@override
String get generate => 'สร้าง';
@ -752,22 +721,28 @@ class AppLocalizationsTh extends AppLocalizations {
}
@override
String get download_warning => 'ถ้าคุณดาวน์โหลดเพลงทั้งหมดเป็นจำนวนมาก คุณกำลังละเมิดลิขสิทธิ์เพลงและสร้างความเสียหายให้กับสังคมดนตรี สร้างสรรค์ หวังว่าคุณจะรับรู้เรื่องนี้ เสมอ พยายามเคารพและสนับสนุนผลงานหนักของศิลปิน';
String get download_warning =>
'ถ้าคุณดาวน์โหลดเพลงทั้งหมดเป็นจำนวนมาก คุณกำลังละเมิดลิขสิทธิ์เพลงและสร้างความเสียหายให้กับสังคมดนตรี สร้างสรรค์ หวังว่าคุณจะรับรู้เรื่องนี้ เสมอ พยายามเคารพและสนับสนุนผลงานหนักของศิลปิน';
@override
String get download_ip_ban_warning => 'นอกเหนือจากนั้น IP ของคุณอาจถูกบล็อกบน YouTube เนื่องจากคำขอดาวน์โหลดมากเกินกว่าปกติ การบล็อก IP หมายความว่าคุณไม่สามารถใช้ YouTube (แม้ว่าคุณจะล็อกอินอยู่) เป็นเวลาอย่างน้อย 2-3 เดือนจากอุปกรณ์ IP นั้น และ Spotube จะไม่รับผิดชอบใด ๆ หากสิ่งนี้เกิดขึ้น';
String get download_ip_ban_warning =>
'นอกเหนือจากนั้น IP ของคุณอาจถูกบล็อกบน YouTube เนื่องจากคำขอดาวน์โหลดมากเกินกว่าปกติ การบล็อก IP หมายความว่าคุณไม่สามารถใช้ YouTube (แม้ว่าคุณจะล็อกอินอยู่) เป็นเวลาอย่างน้อย 2-3 เดือนจากอุปกรณ์ IP นั้น และ Spotube จะไม่รับผิดชอบใด ๆ หากสิ่งนี้เกิดขึ้น';
@override
String get by_clicking_accept_terms => 'คลิก \'ยอมรับ\' คุณยินยอมตามเงื่อนไขต่อไปนี้:';
String get by_clicking_accept_terms =>
'คลิก \'ยอมรับ\' คุณยินยอมตามเงื่อนไขต่อไปนี้:';
@override
String get download_agreement_1 => 'ฉันรู้ว่าฉันกำลังละเมิดลิขสิทธิ์เพลง ฉันเลว';
String get download_agreement_1 =>
'ฉันรู้ว่าฉันกำลังละเมิดลิขสิทธิ์เพลง ฉันเลว';
@override
String get download_agreement_2 => 'ฉันจะสนับสนุนศิลปินทุกที่ที่ฉันทำได้และฉันทำสิ่งนี้เพียงเพราะฉันไม่มีเงินซื้อผลงานศิลปะของพวกเขา';
String get download_agreement_2 =>
'ฉันจะสนับสนุนศิลปินทุกที่ที่ฉันทำได้และฉันทำสิ่งนี้เพียงเพราะฉันไม่มีเงินซื้อผลงานศิลปะของพวกเขา';
@override
String get download_agreement_3 => 'ฉันรับทราบอย่างสมบูรณ์ว่า IP ของฉันอาจถูกบล็อกบน YouTube และฉันจะไม่ถือ Spotube หรือเจ้าของ/ผู้มีส่วนร่วมใด ๆ รับผิดชอบต่ออุบัติเหตุใด ๆ ที่เกิดจากการกระทำปัจจุบันของฉัน';
String get download_agreement_3 =>
'ฉันรับทราบอย่างสมบูรณ์ว่า IP ของฉันอาจถูกบล็อกบน YouTube และฉันจะไม่ถือ Spotube หรือเจ้าของ/ผู้มีส่วนร่วมใด ๆ รับผิดชอบต่ออุบัติเหตุใด ๆ ที่เกิดจากการกระทำปัจจุบันของฉัน';
@override
String get decline => 'ปฏิเสธ';
@ -848,7 +823,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get failed_to_encrypt => 'เข้ารหัสล้มเหลว';
@override
String get encryption_failed_warning => 'Spotube ใช้การเข้ารหัสเพื่อเก็บข้อมูลของคุณอย่างปลอดภัย แต่ไม่สามารถทำได้ ดังนั้นจะเปลี่ยนเป็นการจัดเก็บที่ไม่ปลอดภัย\nหากคุณใช้ Linux โปรดตรวจสอบว่าคุณได้ติดตั้งบริการลับ (gnome-keyring, kde-wallet, keepassxc เป็นต้น)';
String get encryption_failed_warning =>
'Spotube ใช้การเข้ารหัสเพื่อเก็บข้อมูลของคุณอย่างปลอดภัย แต่ไม่สามารถทำได้ ดังนั้นจะเปลี่ยนเป็นการจัดเก็บที่ไม่ปลอดภัย\nหากคุณใช้ Linux โปรดตรวจสอบว่าคุณได้ติดตั้งบริการลับ (gnome-keyring, kde-wallet, keepassxc เป็นต้น)';
@override
String get querying_info => 'กำลังดึงข้อมูล...';
@ -865,7 +841,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get you_are_offline => 'คุณออฟไลน์อยู่';
@override
String get connection_restored => 'การเชื่อมต่ออินเทอร์เน็ตของคุณได้รับการกู้คืน';
String get connection_restored =>
'การเชื่อมต่ออินเทอร์เน็ตของคุณได้รับการกู้คืน';
@override
String get use_system_title_bar => 'ใช้แถบชื่อระบบ';
@ -955,7 +932,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get how_to_start_radio => 'หากต้องการเปิดวิทยุฟังยังไง?';
@override
String get replace_queue_question => 'คุณต้องการแทนที่คิวปัจจุบันหรือเพิ่มเข้าไปหรือไม่';
String get replace_queue_question =>
'คุณต้องการแทนที่คิวปัจจุบันหรือเพิ่มเข้าไปหรือไม่';
@override
String get endless_playback => 'เล่นซ้ำ';
@ -964,7 +942,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get delete_playlist => 'ลบเพลย์ลิสต์';
@override
String get delete_playlist_confirmation => 'คุณแน่ใจที่จะลบเพลย์ลิสต์นี้หรือไม่';
String get delete_playlist_confirmation =>
'คุณแน่ใจที่จะลบเพลย์ลิสต์นี้หรือไม่';
@override
String get local_tracks => 'เพลงในเครื่อง';
@ -991,13 +970,15 @@ class AppLocalizationsTh extends AppLocalizations {
String get youtube_source_description => 'แนะนำและใช้งานได้ดีที่สุด';
@override
String get piped_source_description => 'รู้สึกอิสระ? เหมือน YouTube แต่ฟรีกว่าเยอะ';
String get piped_source_description =>
'รู้สึกอิสระ? เหมือน YouTube แต่ฟรีกว่าเยอะ';
@override
String get jiosaavn_source_description => 'ดีที่สุดสำหรับภูมิภาคเอเชียใต้';
@override
String get invidious_source_description => 'คล้ายกับ Piped แต่มีความพร้อมใช้งานสูงกว่า';
String get invidious_source_description =>
'คล้ายกับ Piped แต่มีความพร้อมใช้งานสูงกว่า';
@override
String highest_quality(Object quality) {
@ -1014,7 +995,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get choose_your_region => 'เลือกภูมิภาคของคุณ';
@override
String get choose_your_region_description => 'สิ่งนี้จะช่วยให้ Spotube แสดงเนื้อหาที่เหมาะสมสำหรับคุณ';
String get choose_your_region_description =>
'สิ่งนี้จะช่วยให้ Spotube แสดงเนื้อหาที่เหมาะสมสำหรับคุณ';
@override
String get choose_your_language => 'เลือกภาษาของคุณ';
@ -1023,7 +1005,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get help_project_grow => 'ช่วยให้โครงการนี้เติบโต';
@override
String get help_project_grow_description => 'Spotube เป็นโครงการโอเพนซอร์ส คุณสามารถช่วยให้โครงการนี้เติบโตได้โดยการมีส่วนร่วมในโครงการ รายงานข้อบกพร่อง หรือเสนอคุณสมบัติใหม่';
String get help_project_grow_description =>
'Spotube เป็นโครงการโอเพนซอร์ส คุณสามารถช่วยให้โครงการนี้เติบโตได้โดยการมีส่วนร่วมในโครงการ รายงานข้อบกพร่อง หรือเสนอคุณสมบัติใหม่';
@override
String get contribute_on_github => 'มีส่วนร่วมบน GitHub';
@ -1117,7 +1100,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get choose_the_device => 'เลือกอุปกรณ์:';
@override
String get multiple_device_connected => 'มีอุปกรณ์เชื่อมต่อหลายเครื่อง\nเลือกอุปกรณ์ที่คุณต้องการให้การดำเนินการนี้เกิดขึ้น';
String get multiple_device_connected =>
'มีอุปกรณ์เชื่อมต่อหลายเครื่อง\nเลือกอุปกรณ์ที่คุณต้องการให้การดำเนินการนี้เกิดขึ้น';
@override
String get nothing_found => 'ไม่พบข้อมูล';
@ -1190,7 +1174,8 @@ class AppLocalizationsTh extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*คำนวณจากการจ่ายเงินต่อการสตรีมของ Spotify\nระหว่าง \$0.003 ถึง \$0.005 นี่เป็นการคำนวณสมมุติ\nเพื่อให้ข้อมูลแก่ผู้ใช้เกี่ยวกับจำนวนเงินที่พวกเขา\nอาจจะจ่ายให้กับศิลปินหากพวกเขาฟังเพลงของพวกเขาใน Spotify';
String get streaming_fees_hypothetical =>
'*คำนวณจากการจ่ายเงินต่อการสตรีมของ Spotify\nระหว่าง \$0.003 ถึง \$0.005 นี่เป็นการคำนวณสมมุติ\nเพื่อให้ข้อมูลแก่ผู้ใช้เกี่ยวกับจำนวนเงินที่พวกเขา\nอาจจะจ่ายให้กับศิลปินหากพวกเขาฟังเพลงของพวกเขาใน Spotify';
@override
String get minutes_listened => 'เวลาที่ฟัง';
@ -1212,7 +1197,8 @@ class AppLocalizationsTh extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*คำนวณตามการจ่ายต่อสตรีมของ Spotify\nซึ่งอยู่ในช่วง \$0.003 ถึง \$0.005 นี่เป็นการคำนวณสมมุติ\nเพื่อให้ผู้ใช้ทราบว่าพวกเขาจะจ่ายเงินให้ศิลปินเท่าไหร่\nหากพวกเขาฟังเพลงของพวกเขาใน Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1247,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get webview_not_found => 'ไม่พบ Webview';
@override
String get webview_not_found_description => 'ไม่พบ runtime ของ Webview บนอุปกรณ์ของคุณ\nหากติดตั้งแล้วตรวจสอบให้แน่ใจว่าอยู่ใน environment PATH\n\nหลังจากติดตั้งแล้ว ให้รีสตาร์ทแอป';
String get webview_not_found_description =>
'ไม่พบ runtime ของ Webview บนอุปกรณ์ของคุณ\nหากติดตั้งแล้วตรวจสอบให้แน่ใจว่าอยู่ใน environment PATH\n\nหลังจากติดตั้งแล้ว ให้รีสตาร์ทแอป';
@override
String get unsupported_platform => 'แพลตฟอร์มไม่รองรับ';
@ -1334,7 +1321,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get not_following_artists => 'คุณไม่ได้ติดตามศิลปินใด ๆ';
@override
String get no_favorite_albums_yet => 'ดูเหมือนคุณยังไม่ได้เพิ่มอัลบัมใด ๆ ในรายการโปรด';
String get no_favorite_albums_yet =>
'ดูเหมือนคุณยังไม่ได้เพิ่มอัลบัมใด ๆ ในรายการโปรด';
@override
String get no_logs_found => 'ไม่พบบันทึก';
@ -1358,7 +1346,8 @@ class AppLocalizationsTh extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'ใน macOS/Linux/Unix อย่าง OS การตั้งค่าพาธใน .zshrc/.bashrc/.bash_profile เป็นต้น จะไม่ทำงาน\nคุณต้องตั้งค่าพาธในไฟล์การกำหนดค่า shell';
String get youtube_engine_unix_issue_message =>
'ใน macOS/Linux/Unix อย่าง OS การตั้งค่าพาธใน .zshrc/.bashrc/.bash_profile เป็นต้น จะไม่ทำงาน\nคุณต้องตั้งค่าพาธในไฟล์การกำหนดค่า shell';
@override
String get download => 'ดาวน์โหลด';
@ -1376,7 +1365,8 @@ class AppLocalizationsTh extends AppLocalizations {
String get edit_port => 'แก้ไขพอร์ต';
@override
String get port_helper_msg => 'ค่าเริ่มต้นคือ -1 ซึ่งหมายถึงหมายเลขสุ่ม หากคุณได้กำหนดค่าไฟร์วอลล์แล้ว แนะนำให้ตั้งค่านี้';
String get port_helper_msg =>
'ค่าเริ่มต้นคือ -1 ซึ่งหมายถึงหมายเลขสุ่ม หากคุณได้กำหนดค่าไฟร์วอลล์แล้ว แนะนำให้ตั้งค่านี้';
@override
String connect_request(Object client) {
@ -1384,5 +1374,6 @@ class AppLocalizationsTh extends AppLocalizations {
}
@override
String get connection_request_denied => 'การเชื่อมต่อล้มเหลว ผู้ใช้ปฏิเสธการเข้าถึง';
String get connection_request_denied =>
'การเชื่อมต่อล้มเหลว ผู้ใช้ปฏิเสธการเข้าถึง';
}

View File

@ -79,7 +79,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get liked_tracks => 'Mga Nagustuhang Track';
@override
String get liked_tracks_description => 'Lahat ng mga track na iyong nagustuhan';
String get liked_tracks_description =>
'Lahat ng mga track na iyong nagustuhan';
@override
String get playlist => 'Playlist';
@ -342,7 +343,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get queue => 'Pila';
@override
String get alternative_track_sources => 'Alternatibong mga pinagmulan ng track';
String get alternative_track_sources =>
'Alternatibong mga pinagmulan ng track';
@override
String get download_track => 'I-download ang track';
@ -379,12 +381,6 @@ class AppLocalizationsTl extends AppLocalizations {
@override
String get account => 'Account';
@override
String get login_with_spotify => 'Mag-login gamit ang iyong Spotify account';
@override
String get connect_with_spotify => 'Kumonekta sa Spotify';
@override
String get logout => 'Mag-logout';
@ -413,7 +409,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get layout_mode => 'Mode ng Layout';
@override
String get override_layout_settings => 'I-override ang mga setting ng responsive layout mode';
String get override_layout_settings =>
'I-override ang mga setting ng responsive layout mode';
@override
String get adaptive => 'Umaangkop';
@ -443,7 +440,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get sync_album_color => 'I-sync ang kulay ng album';
@override
String get sync_album_color_description => 'Ginagamit ang pangunahing kulay ng album art bilang kulay ng accent';
String get sync_album_color_description =>
'Ginagamit ang pangunahing kulay ng album art bilang kulay ng accent';
@override
String get playback => 'Playback';
@ -461,16 +459,19 @@ class AppLocalizationsTl extends AppLocalizations {
String get pre_download_play => 'Mag-pre-download at i-play';
@override
String get pre_download_play_description => 'Sa halip na mag-stream ng audio, mag-download ng bytes at i-play sa halip (Inirerekomenda para sa mga gumagamit ng mataas na bandwidth)';
String get pre_download_play_description =>
'Sa halip na mag-stream ng audio, mag-download ng bytes at i-play sa halip (Inirerekomenda para sa mga gumagamit ng mataas na bandwidth)';
@override
String get skip_non_music => 'Laktawan ang mga segment na hindi musika (SponsorBlock)';
String get skip_non_music =>
'Laktawan ang mga segment na hindi musika (SponsorBlock)';
@override
String get blacklist_description => 'Mga track at artista na nasa blacklist';
@override
String get wait_for_download_to_finish => 'Mangyaring maghintay para matapos ang kasalukuyang pag-download';
String get wait_for_download_to_finish =>
'Mangyaring maghintay para matapos ang kasalukuyang pag-download';
@override
String get desktop => 'Desktop';
@ -506,7 +507,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get please_sponsor => 'Mangyaring Mag-sponsor/Mag-donate';
@override
String get spotube_description => 'Spotube, isang magaan, cross-platform, libreng-para-sa-lahat na spotify client';
String get spotube_description =>
'Spotube, isang magaan, cross-platform, libreng-para-sa-lahat na spotify client';
@override
String get version => 'Bersyon';
@ -538,10 +540,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get license => 'Lisensya';
@override
String get add_spotify_credentials => 'Idagdag ang iyong mga kredensyal sa spotify para makapagsimula';
@override
String get credentials_will_not_be_shared_disclaimer => 'Huwag mag-alala, ang alinman sa iyong mga kredensyal ay hindi kokolektahin o ibabahagi sa sinuman';
String get credentials_will_not_be_shared_disclaimer =>
'Huwag mag-alala, ang alinman sa iyong mga kredensyal ay hindi kokolektahin o ibabahagi sa sinuman';
@override
String get know_how_to_login => 'Hindi mo alam kung paano gawin ito?';
@ -549,11 +549,6 @@ class AppLocalizationsTl extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Sundin ang Hakbang-hakbang na gabay';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookie';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookie';
@ -583,33 +578,6 @@ class AppLocalizationsTl extends AppLocalizations {
@override
String get first_go_to => 'Una, Pumunta sa';
@override
String get login_if_not_logged_in => 'at Mag-login/Mag-signup kung hindi ka naka-log in';
@override
String get step_2 => 'Hakbang 2';
@override
String get step_2_steps => '1. Kapag naka-log in ka na, pindutin ang F12 o i-right click ang Mouse > Inspect para Buksan ang Browser devtools.\n2. Pagkatapos ay pumunta sa \"Application\" Tab (Chrome, Edge, Brave atbp..) o \"Storage\" Tab (Firefox, Palemoon atbp..)\n3. Pumunta sa \"Cookies\" na seksyon at pagkatapos sa \"https://accounts.spotify.com\" na subseksyon';
@override
String get step_3 => 'Hakbang 3';
@override
String get step_3_steps => 'Kopyahin ang halaga ng \"sp_dc\" Cookie';
@override
String get success_emoji => 'Tagumpay🥳';
@override
String get success_message => 'Ngayon ay matagumpay kang Naka-log in gamit ang iyong Spotify account. Magaling, kaibigan!';
@override
String get step_4 => 'Hakbang 4';
@override
String get step_4_steps => 'I-paste ang na-kopyang halaga ng \"sp_dc\"';
@override
String get something_went_wrong => 'May nangyaring mali';
@ -617,19 +585,23 @@ class AppLocalizationsTl extends AppLocalizations {
String get piped_instance => 'Instance ng Piped Server';
@override
String get piped_description => 'Ang instance ng Piped server na gagamitin para sa pagtutugma ng track';
String get piped_description =>
'Ang instance ng Piped server na gagamitin para sa pagtutugma ng track';
@override
String get piped_warning => 'Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro';
String get piped_warning =>
'Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro';
@override
String get invidious_instance => 'Instance ng Invidious Server';
@override
String get invidious_description => 'Ang instance ng Invidious server na gagamitin para sa pagtutugma ng track';
String get invidious_description =>
'Ang instance ng Invidious server na gagamitin para sa pagtutugma ng track';
@override
String get invidious_warning => 'Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro';
String get invidious_warning =>
'Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro';
@override
String get generate => 'Gumawa';
@ -640,13 +612,16 @@ class AppLocalizationsTl extends AppLocalizations {
}
@override
String get replace_downloaded_tracks => 'Palitan ang lahat ng na-download na mga track';
String get replace_downloaded_tracks =>
'Palitan ang lahat ng na-download na mga track';
@override
String get skip_download_tracks => 'Laktawan ang pag-download ng lahat ng na-download na mga track';
String get skip_download_tracks =>
'Laktawan ang pag-download ng lahat ng na-download na mga track';
@override
String get do_you_want_to_replace => 'Gusto mo bang palitan ang umiiral na track??';
String get do_you_want_to_replace =>
'Gusto mo bang palitan ang umiiral na track??';
@override
String get replace => 'Palitan';
@ -752,22 +727,28 @@ class AppLocalizationsTl extends AppLocalizations {
}
@override
String get download_warning => 'Kung nag-download ka ng lahat ng Track sa maramihan, malinaw na nagpa-pirate ka ng Musika at nagsasanhi ng pinsala sa creative society ng Musika. Sana ay alam mo ito. Palaging, subukang igalang at suportahan ang masipag na paggawa ng Artist';
String get download_warning =>
'Kung nag-download ka ng lahat ng Track sa maramihan, malinaw na nagpa-pirate ka ng Musika at nagsasanhi ng pinsala sa creative society ng Musika. Sana ay alam mo ito. Palaging, subukang igalang at suportahan ang masipag na paggawa ng Artist';
@override
String get download_ip_ban_warning => 'Sa nga pala, ang iyong IP ay maaaring ma-block sa YouTube dahil sa sobrang mga kahilingan sa pag-download kaysa sa karaniwan. Ang IP block ay nangangahulugang hindi mo magagamit ang YouTube (kahit na naka-log in ka) sa loob ng hindi bababa sa 2-3 buwan mula sa device na may IP na iyon. At hindi pinanghahawakan ng Spotube ang anumang responsibilidad kung mangyayari ito';
String get download_ip_ban_warning =>
'Sa nga pala, ang iyong IP ay maaaring ma-block sa YouTube dahil sa sobrang mga kahilingan sa pag-download kaysa sa karaniwan. Ang IP block ay nangangahulugang hindi mo magagamit ang YouTube (kahit na naka-log in ka) sa loob ng hindi bababa sa 2-3 buwan mula sa device na may IP na iyon. At hindi pinanghahawakan ng Spotube ang anumang responsibilidad kung mangyayari ito';
@override
String get by_clicking_accept_terms => 'Sa pamamagitan ng pag-click sa \'tanggapin\', sumasang-ayon ka sa mga sumusunod na tuntunin:';
String get by_clicking_accept_terms =>
'Sa pamamagitan ng pag-click sa \'tanggapin\', sumasang-ayon ka sa mga sumusunod na tuntunin:';
@override
String get download_agreement_1 => 'Alam kong nagpa-pirate ako ng Musika. Masama ako';
String get download_agreement_1 =>
'Alam kong nagpa-pirate ako ng Musika. Masama ako';
@override
String get download_agreement_2 => 'Susuportahan ko ang Artist saan man ako maaari at ginagawa ko lang ito dahil wala akong pera para bumili ng kanilang sining';
String get download_agreement_2 =>
'Susuportahan ko ang Artist saan man ako maaari at ginagawa ko lang ito dahil wala akong pera para bumili ng kanilang sining';
@override
String get download_agreement_3 => 'Lubos kong nauunawaan na ang aking IP ay maaaring ma-block sa YouTube at hindi ko pinanghahawakan ang Spotube o ang kanyang mga may-ari/nag-ambag na responsable para sa anumang aksidente na sanhi ng aking kasalukuyang aksyon';
String get download_agreement_3 =>
'Lubos kong nauunawaan na ang aking IP ay maaaring ma-block sa YouTube at hindi ko pinanghahawakan ang Spotube o ang kanyang mga may-ari/nag-ambag na responsable para sa anumang aksidente na sanhi ng aking kasalukuyang aksyon';
@override
String get decline => 'Tanggihan';
@ -848,7 +829,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get failed_to_encrypt => 'Nabigong i-encrypt';
@override
String get encryption_failed_warning => 'Gumagamit ng encryption ang Spotube para ligtas na i-store ang iyong data. Ngunit nabigo. Kaya babalik ito sa hindi secure na storage\nKung gumagamit ka ng linux, mangyaring tiyakin na mayroon kang anumang secret-service na naka-install (gnome-keyring, kde-wallet, keepassxc atbp)';
String get encryption_failed_warning =>
'Gumagamit ng encryption ang Spotube para ligtas na i-store ang iyong data. Ngunit nabigo. Kaya babalik ito sa hindi secure na storage\nKung gumagamit ka ng linux, mangyaring tiyakin na mayroon kang anumang secret-service na naka-install (gnome-keyring, kde-wallet, keepassxc atbp)';
@override
String get querying_info => 'Kinukuha ang impormasyon...';
@ -865,7 +847,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get you_are_offline => 'Kasalukuyan kang offline';
@override
String get connection_restored => 'Naibalik na ang iyong koneksyon sa internet';
String get connection_restored =>
'Naibalik na ang iyong koneksyon sa internet';
@override
String get use_system_title_bar => 'Gamitin ang title bar ng system';
@ -922,7 +905,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get login => 'Mag-login';
@override
String get login_with_your_lastfm => 'Mag-login gamit ang iyong Last.fm account';
String get login_with_your_lastfm =>
'Mag-login gamit ang iyong Last.fm account';
@override
String get scrobble_to_lastfm => 'I-scrobble sa Last.fm';
@ -946,7 +930,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get friends => 'Mga Kaibigan';
@override
String get no_lyrics_available => 'Paumanhin, hindi mahanap ang lyrics para sa track na ito';
String get no_lyrics_available =>
'Paumanhin, hindi mahanap ang lyrics para sa track na ito';
@override
String get start_a_radio => 'Magsimula ng Radio';
@ -955,7 +940,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get how_to_start_radio => 'Paano mo gustong simulan ang radio?';
@override
String get replace_queue_question => 'Gusto mo bang palitan ang kasalukuyang pila o idagdag dito?';
String get replace_queue_question =>
'Gusto mo bang palitan ang kasalukuyang pila o idagdag dito?';
@override
String get endless_playback => 'Walang Hanggang Playback';
@ -964,7 +950,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get delete_playlist => 'Burahin ang Playlist';
@override
String get delete_playlist_confirmation => 'Sigurado ka bang gusto mong burahin ang playlist na ito?';
String get delete_playlist_confirmation =>
'Sigurado ka bang gusto mong burahin ang playlist na ito?';
@override
String get local_tracks => 'Mga Lokal na Track';
@ -988,16 +975,20 @@ class AppLocalizationsTl extends AppLocalizations {
String get get_started => 'Magsimula na tayo';
@override
String get youtube_source_description => 'Inirerekomenda at pinakamahusay na gumagana.';
String get youtube_source_description =>
'Inirerekomenda at pinakamahusay na gumagana.';
@override
String get piped_source_description => 'Gusto ng kalayaan? Kapareho ng YouTube ngunit mas malaya.';
String get piped_source_description =>
'Gusto ng kalayaan? Kapareho ng YouTube ngunit mas malaya.';
@override
String get jiosaavn_source_description => 'Pinakamahusay para sa rehiyon ng South Asia.';
String get jiosaavn_source_description =>
'Pinakamahusay para sa rehiyon ng South Asia.';
@override
String get invidious_source_description => 'Katulad ng Piped ngunit may mas mataas na availability.';
String get invidious_source_description =>
'Katulad ng Piped ngunit may mas mataas na availability.';
@override
String highest_quality(Object quality) {
@ -1008,13 +999,15 @@ class AppLocalizationsTl extends AppLocalizations {
String get select_audio_source => 'Pumili ng Pinagmulan ng Audio';
@override
String get endless_playback_description => 'Awtomatikong magdagdag ng mga bagong kanta\nsa dulo ng pila';
String get endless_playback_description =>
'Awtomatikong magdagdag ng mga bagong kanta\nsa dulo ng pila';
@override
String get choose_your_region => 'Piliin ang iyong rehiyon';
@override
String get choose_your_region_description => 'Ito ay tutulong sa Spotube na ipakita sa iyo ang tamang content\npara sa iyong lokasyon.';
String get choose_your_region_description =>
'Ito ay tutulong sa Spotube na ipakita sa iyo ang tamang content\npara sa iyong lokasyon.';
@override
String get choose_your_language => 'Piliin ang iyong wika';
@ -1023,7 +1016,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get help_project_grow => 'Tulungan ang proyektong ito na lumago';
@override
String get help_project_grow_description => 'Ang Spotube ay isang open-source na proyekto. Maaari mong tulungan ang proyektong ito na lumago sa pamamagitan ng pag-contribute sa proyekto, pag-ulat ng mga bug, o pagmungkahi ng mga bagong feature.';
String get help_project_grow_description =>
'Ang Spotube ay isang open-source na proyekto. Maaari mong tulungan ang proyektong ito na lumago sa pamamagitan ng pag-contribute sa proyekto, pag-ulat ng mga bug, o pagmungkahi ng mga bagong feature.';
@override
String get contribute_on_github => 'Mag-contribute sa GitHub';
@ -1038,7 +1032,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get enable_connect => 'I-enable ang Connect';
@override
String get enable_connect_description => 'Kontrolin ang Spotube mula sa ibang mga device';
String get enable_connect_description =>
'Kontrolin ang Spotube mula sa ibang mga device';
@override
String get devices => 'Mga Device';
@ -1117,7 +1112,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get choose_the_device => 'Piliin ang device:';
@override
String get multiple_device_connected => 'Mayroong maraming device na nakakonekta.\nPiliin ang device kung saan mo gustong maganap ang aksyon na ito';
String get multiple_device_connected =>
'Mayroong maraming device na nakakonekta.\nPiliin ang device kung saan mo gustong maganap ang aksyon na ito';
@override
String get nothing_found => 'Walang nahanap';
@ -1190,7 +1186,8 @@ class AppLocalizationsTl extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => 'Mga bayarin sa streaming (hypothetical)';
String get streaming_fees_hypothetical =>
'Mga bayarin sa streaming (hypothetical)';
@override
String get minutes_listened => 'Mga minutong pinapakinggan';
@ -1212,7 +1209,8 @@ class AppLocalizationsTl extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Ito ay kinalkula batay sa bawat stream\nna bayad ng Spotify na \$0.003 hanggang \$0.005. Ito ay isang hypothetical\nna pagkalkula para bigyan ang user ng ideya kung magkano\nang kanilang ibabayad sa mga artista kung sila ay nakikinig\nng kanilang kanta sa Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1259,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get webview_not_found => 'Hindi nahanap ang Webview';
@override
String get webview_not_found_description => 'Walang webview runtime na naka-install sa iyong device.\nKung naka-install ito, siguraduhing nasa Environment PATH\n\nPagkatapos mag-install, i-restart ang app';
String get webview_not_found_description =>
'Walang webview runtime na naka-install sa iyong device.\nKung naka-install ito, siguraduhing nasa Environment PATH\n\nPagkatapos mag-install, i-restart ang app';
@override
String get unsupported_platform => 'Hindi suportadong platform';
@ -1293,7 +1292,8 @@ class AppLocalizationsTl extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Gusto mo bang i-export ang mga file na ito sa';
String get export_cache_confirmation =>
'Gusto mo bang i-export ang mga file na ito sa';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,7 +1322,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get view_all => 'Tingnan lahat';
@override
String get no_tracks_added_yet => 'Mukhang wala ka pang idinaragdag na mga track';
String get no_tracks_added_yet =>
'Mukhang wala ka pang idinaragdag na mga track';
@override
String get no_tracks => 'Mukhang walang mga track dito';
@ -1331,10 +1332,12 @@ class AppLocalizationsTl extends AppLocalizations {
String get no_tracks_listened_yet => 'Mukhang wala ka pang pinakikinggan';
@override
String get not_following_artists => 'Hindi ka sumusunod sa anumang mga artista';
String get not_following_artists =>
'Hindi ka sumusunod sa anumang mga artista';
@override
String get no_favorite_albums_yet => 'Mukhang wala ka pang idinagdag na anumang mga album sa iyong mga paborito';
String get no_favorite_albums_yet =>
'Mukhang wala ka pang idinagdag na anumang mga album sa iyong mga paborito';
@override
String get no_logs_found => 'Walang nahanap na mga log';
@ -1358,7 +1361,8 @@ class AppLocalizationsTl extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'Sa macOS/Linux/unix tulad ng OS, ang pag-set ng path sa .zshrc/.bashrc/.bash_profile atbp. ay hindi gagana.\nKailangan mong i-set ang path sa configuration file ng shell';
String get youtube_engine_unix_issue_message =>
'Sa macOS/Linux/unix tulad ng OS, ang pag-set ng path sa .zshrc/.bashrc/.bash_profile atbp. ay hindi gagana.\nKailangan mong i-set ang path sa configuration file ng shell';
@override
String get download => 'I-download';
@ -1376,7 +1380,8 @@ class AppLocalizationsTl extends AppLocalizations {
String get edit_port => 'I-edit ang port';
@override
String get port_helper_msg => 'Ang default ay -1 na nagpapahiwatig ng random na numero. Kung na-configure mo ang firewall, inirerekomenda na itakda ito.';
String get port_helper_msg =>
'Ang default ay -1 na nagpapahiwatig ng random na numero. Kung na-configure mo ang firewall, inirerekomenda na itakda ito.';
@override
String connect_request(Object client) {
@ -1384,5 +1389,6 @@ class AppLocalizationsTl extends AppLocalizations {
}
@override
String get connection_request_denied => 'Tanggihan ang koneksyon. Tinanggihan ng gumagamit ang pag-access.';
String get connection_request_denied =>
'Tanggihan ang koneksyon. Tinanggihan ng gumagamit ang pag-access.';
}

View File

@ -27,7 +27,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get settings => 'Ayarlar';
@override
String get genre_categories_filter => 'Kategorileri veya türleri filtreleyin...';
String get genre_categories_filter =>
'Kategorileri veya türleri filtreleyin...';
@override
String get genre => 'Tür';
@ -356,7 +357,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get clear_all => 'Tümünü temizle';
@override
String get show_hide_ui_on_hover => 'Fareyle üzerine gelindiğinde kullanıcı arayüzünü göster/gizle';
String get show_hide_ui_on_hover =>
'Fareyle üzerine gelindiğinde kullanıcı arayüzünü göster/gizle';
@override
String get always_on_top => 'Her zaman üstte';
@ -379,12 +381,6 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get account => 'Hesap';
@override
String get login_with_spotify => 'Spotify hesabı ile giriş yap';
@override
String get connect_with_spotify => 'Spotify ile bağlan';
@override
String get logout => 'Çıkış yap';
@ -413,7 +409,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get layout_mode => 'Düzen modu';
@override
String get override_layout_settings => 'Duyarlı düzen modu ayarlarını geçersiz kıl';
String get override_layout_settings =>
'Duyarlı düzen modu ayarlarını geçersiz kıl';
@override
String get adaptive => 'Uyarlanabilir';
@ -443,7 +440,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get sync_album_color => 'Albüm rengini senkronize et';
@override
String get sync_album_color_description => 'Vurgu rengi olarak albüm resminin baskın rengini kullanır';
String get sync_album_color_description =>
'Vurgu rengi olarak albüm resminin baskın rengini kullanır';
@override
String get playback => 'Oynatma';
@ -461,16 +459,19 @@ class AppLocalizationsTr extends AppLocalizations {
String get pre_download_play => 'Önceden indir ve oynat';
@override
String get pre_download_play_description => 'Ses akışı yerine baytları indir ve oynat (Daha yüksek bant genişliğine sahip kullanıcılar için önerilir)';
String get pre_download_play_description =>
'Ses akışı yerine baytları indir ve oynat (Daha yüksek bant genişliğine sahip kullanıcılar için önerilir)';
@override
String get skip_non_music => 'Müzik olmayan bölümleri atlat (SponsorBlock)';
@override
String get blacklist_description => 'Kara listeye alınan parçalar ve sanatçılar';
String get blacklist_description =>
'Kara listeye alınan parçalar ve sanatçılar';
@override
String get wait_for_download_to_finish => 'Lütfen mevcut indirme işleminin tamamlanmasını bekleyin';
String get wait_for_download_to_finish =>
'Lütfen mevcut indirme işleminin tamamlanmasını bekleyin';
@override
String get desktop => 'Masaüstü';
@ -506,7 +507,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get please_sponsor => 'Sponsor Ol/Bağış Yap';
@override
String get spotube_description => 'Spotube, hafif, platformlar arası uyumlu ve herkes için ücretsiz bir Spotify istemcisidir.';
String get spotube_description =>
'Spotube, hafif, platformlar arası uyumlu ve herkes için ücretsiz bir Spotify istemcisidir.';
@override
String get version => 'Sürüm';
@ -538,10 +540,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get license => 'Lisans';
@override
String get add_spotify_credentials => 'Başlamak için spotify kimlik bilgilerinizi ekleyin';
@override
String get credentials_will_not_be_shared_disclaimer => 'Endişelenmeyin, kimlik bilgilerinizden hiçbiri toplanmayacak veya kimseyle paylaşılmayacak';
String get credentials_will_not_be_shared_disclaimer =>
'Endişelenmeyin, kimlik bilgilerinizden hiçbiri toplanmayacak veya kimseyle paylaşılmayacak';
@override
String get know_how_to_login => 'Bunu nasıl yapacağınızı bilmiyor musunuz?';
@ -549,11 +549,6 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Adım adım kılavuzu takip edin';
@override
String spotify_cookie(Object name) {
return 'Spotify $name çerezi';
}
@override
String cookie_name_cookie(Object name) {
return '$name çerezi';
@ -583,33 +578,6 @@ class AppLocalizationsTr extends AppLocalizations {
@override
String get first_go_to => 'İlk olarak şuraya gidin:';
@override
String get login_if_not_logged_in => 've oturum açmadıysanız Oturum açın/Kaydolun';
@override
String get step_2 => '2. Adım';
@override
String get step_2_steps => '1. Oturum açtıktan sonra, tarayıcı geliştirme araçlarını açmak için F12\'ye veya fareye sağ tıklayın > İncele\'ye basın.\n2. Daha sonra \"Uygulama\" sekmesine (Chrome, Edge, Brave vb..) veya \"Depolama\" sekmesine (Firefox, Palemoon vb..) gidin\n3. \"Çerezler\" bölümüne, ardından \"https://accounts.spotify.com\" alt bölümüne gidin';
@override
String get step_3 => '3. Adım';
@override
String get step_3_steps => '\"sp_dc\" Çerezinin değerini kopyalayın';
@override
String get success_emoji => 'Başarılı🥳';
@override
String get success_message => 'Artık Spotify hesabınızla başarıyla giriş yaptınız. Tebrik ederim!';
@override
String get step_4 => '4. Adım';
@override
String get step_4_steps => 'Kopyalanan \"sp_dc\" değerini yapıştırın';
@override
String get something_went_wrong => 'Bir hata oluştu';
@ -617,19 +585,23 @@ class AppLocalizationsTr extends AppLocalizations {
String get piped_instance => 'Piped sunucu örneği';
@override
String get piped_description => 'Parça eşleştirme için kullanılacak Piped sunucu örneği';
String get piped_description =>
'Parça eşleştirme için kullanılacak Piped sunucu örneği';
@override
String get piped_warning => 'Bazıları iyi çalışmayabilir. Yani riski size ait olmak üzere kullanın';
String get piped_warning =>
'Bazıları iyi çalışmayabilir. Yani riski size ait olmak üzere kullanın';
@override
String get invidious_instance => 'Invidious Sunucu Örneği';
@override
String get invidious_description => 'Parça eşleştirmesi için kullanılacak Invidious sunucu örneği';
String get invidious_description =>
'Parça eşleştirmesi için kullanılacak Invidious sunucu örneği';
@override
String get invidious_warning => 'Bazıları iyi çalışmayabilir. Kendi riskinizde kullanın';
String get invidious_warning =>
'Bazıları iyi çalışmayabilir. Kendi riskinizde kullanın';
@override
String get generate => 'Oluştur';
@ -646,7 +618,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get skip_download_tracks => 'İndirilen tüm parçaları indirmeyi atla';
@override
String get do_you_want_to_replace => 'Mevcut parçayı değiştirmek istiyor musunuz?';
String get do_you_want_to_replace =>
'Mevcut parçayı değiştirmek istiyor musunuz?';
@override
String get replace => 'Değiştir';
@ -752,22 +725,28 @@ class AppLocalizationsTr extends AppLocalizations {
}
@override
String get download_warning => 'Tüm şarkıları toplu olarak indiriyorsanız, açıkça müzik korsanlığı yapıyorsunuz ve müzik dünyasının yaratıcı topluluğuna zarar veriyorsunuz demektir. Umuyorum bunun farkındasınızdır. Her zaman, sanatçıların emeğine saygı göstermeyi ve desteklemeyi deneyin.';
String get download_warning =>
'Tüm şarkıları toplu olarak indiriyorsanız, açıkça müzik korsanlığı yapıyorsunuz ve müzik dünyasının yaratıcı topluluğuna zarar veriyorsunuz demektir. Umuyorum bunun farkındasınızdır. Her zaman, sanatçıların emeğine saygı göstermeyi ve desteklemeyi deneyin.';
@override
String get download_ip_ban_warning => 'Ayrıca, normalden fazla indirme istekleri nedeniyle YouTube\'da IP\'niz engellenebilir. IP engeli, en az 2-3 ay boyunca YouTube\'u (hatta oturum açmış olsanız bile) o IP cihazından kullanamayacağınız anlamına gelir. Ve eğer böyle bir durum yaşanırsa, Spotube bundan hiçbir sorumluluk kabul etmez.';
String get download_ip_ban_warning =>
'Ayrıca, normalden fazla indirme istekleri nedeniyle YouTube\'da IP\'niz engellenebilir. IP engeli, en az 2-3 ay boyunca YouTube\'u (hatta oturum açmış olsanız bile) o IP cihazından kullanamayacağınız anlamına gelir. Ve eğer böyle bir durum yaşanırsa, Spotube bundan hiçbir sorumluluk kabul etmez.';
@override
String get by_clicking_accept_terms => '\"Kabul et\" e tıklayarak aşağıdaki şartları kabul etmiş olursunuz:';
String get by_clicking_accept_terms =>
'\"Kabul et\" e tıklayarak aşağıdaki şartları kabul etmiş olursunuz:';
@override
String get download_agreement_1 => 'Müzik korsanlığı yaptığımı biliyorum. Ben fakir biriyim.';
String get download_agreement_1 =>
'Müzik korsanlığı yaptığımı biliyorum. Ben fakir biriyim.';
@override
String get download_agreement_2 => 'Sanatçıyı elimden geldiğince destekleyeceğim ve bunu sadece sanatını satın alacak param olmadığı için yapıyorum';
String get download_agreement_2 =>
'Sanatçıyı elimden geldiğince destekleyeceğim ve bunu sadece sanatını satın alacak param olmadığı için yapıyorum';
@override
String get download_agreement_3 => 'YouTube\'da IP\'min engellenebileceğinin tamamen farkındayım ve mevcut eylemlerimden kaynaklanan herhangi bir kaza için Spotube\'u veya sahiplerini/katkıda bulunanları sorumlu tutmuyorum.';
String get download_agreement_3 =>
'YouTube\'da IP\'min engellenebileceğinin tamamen farkındayım ve mevcut eylemlerimden kaynaklanan herhangi bir kaza için Spotube\'u veya sahiplerini/katkıda bulunanları sorumlu tutmuyorum.';
@override
String get decline => 'Reddet';
@ -848,7 +827,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get failed_to_encrypt => 'Şifreleme başarısız oldu';
@override
String get encryption_failed_warning => 'Spotube, verilerinizi güvenli bir şekilde depolamak için şifreleme kullanır. Ancak bunu başaramadı. Bu nedenle, güvensiz depolamaya geri dönecektir\nLinux kullanıyorsanız, lütfen gnome-keyring, kde-wallet, keepassxc vb. herhangi bir gizli servisin yüklü olduğundan emin olun.';
String get encryption_failed_warning =>
'Spotube, verilerinizi güvenli bir şekilde depolamak için şifreleme kullanır. Ancak bunu başaramadı. Bu nedenle, güvensiz depolamaya geri dönecektir\nLinux kullanıyorsanız, lütfen gnome-keyring, kde-wallet, keepassxc vb. herhangi bir gizli servisin yüklü olduğundan emin olun.';
@override
String get querying_info => 'Bilgi sorgulanıyor...';
@ -955,7 +935,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get how_to_start_radio => 'Radyoyu nasıl başlatmak istersiniz?';
@override
String get replace_queue_question => 'Mevcut kuyruğu değiştirmek mi yoksa eklemek mi istersiniz?';
String get replace_queue_question =>
'Mevcut kuyruğu değiştirmek mi yoksa eklemek mi istersiniz?';
@override
String get endless_playback => 'Sonsuz olarak oynat';
@ -964,7 +945,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get delete_playlist => 'Oynatma listesini sil';
@override
String get delete_playlist_confirmation => 'Bu oynatma listesini silmek istediğinizden emin misiniz?';
String get delete_playlist_confirmation =>
'Bu oynatma listesini silmek istediğinizden emin misiniz?';
@override
String get local_tracks => 'Yerel parçalar';
@ -988,16 +970,19 @@ class AppLocalizationsTr extends AppLocalizations {
String get get_started => 'Haydi başlayalım';
@override
String get youtube_source_description => 'Tavsiye edilir ve en iyi şekilde çalışır.';
String get youtube_source_description =>
'Tavsiye edilir ve en iyi şekilde çalışır.';
@override
String get piped_source_description => 'Özgür hissediyor musunuz? YouTube ile aynı, ama çok daha özgür.';
String get piped_source_description =>
'Özgür hissediyor musunuz? YouTube ile aynı, ama çok daha özgür.';
@override
String get jiosaavn_source_description => 'Güney Asya bölgesi için en iyisi.';
@override
String get invidious_source_description => 'Piped\'a benzer, ancak daha yüksek kullanılabilirliğe sahip.';
String get invidious_source_description =>
'Piped\'a benzer, ancak daha yüksek kullanılabilirliğe sahip.';
@override
String highest_quality(Object quality) {
@ -1008,13 +993,15 @@ class AppLocalizationsTr extends AppLocalizations {
String get select_audio_source => 'Ses kaynağını seçin';
@override
String get endless_playback_description => 'Yeni şarkıları otomatik olarak\nkuyruğun sonuna ekle';
String get endless_playback_description =>
'Yeni şarkıları otomatik olarak\nkuyruğun sonuna ekle';
@override
String get choose_your_region => 'Bölgenizi seçin';
@override
String get choose_your_region_description => 'Bu, Spotube\'un konumunuza uygun içerikleri göstermesine yardımcı olacaktır.';
String get choose_your_region_description =>
'Bu, Spotube\'un konumunuza uygun içerikleri göstermesine yardımcı olacaktır.';
@override
String get choose_your_language => 'Dilinizi seçin';
@ -1023,7 +1010,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get help_project_grow => 'Bu projenin büyümesine yardımcı olun';
@override
String get help_project_grow_description => 'Spotube açık kaynaklı bir projedir. Projeye katkıda bulunarak, hataları bildirerek veya yeni özellikler önererek bu projenin büyümesine yardımcı olabilirsiniz.';
String get help_project_grow_description =>
'Spotube açık kaynaklı bir projedir. Projeye katkıda bulunarak, hataları bildirerek veya yeni özellikler önererek bu projenin büyümesine yardımcı olabilirsiniz.';
@override
String get contribute_on_github => 'GitHub\'da katkıda bulun';
@ -1038,7 +1026,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get enable_connect => 'Bağlanmayı etkinleştir';
@override
String get enable_connect_description => 'Spotube\'u diğer cihazlardan kontrol edin';
String get enable_connect_description =>
'Spotube\'u diğer cihazlardan kontrol edin';
@override
String get devices => 'Cihazlar';
@ -1117,7 +1106,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get choose_the_device => 'Cihazı seçin:';
@override
String get multiple_device_connected => 'Birden fazla cihaz bağlı.\nBu işlemi gerçekleştirmek istediğiniz cihazı seçin';
String get multiple_device_connected =>
'Birden fazla cihaz bağlı.\nBu işlemi gerçekleştirmek istediğiniz cihazı seçin';
@override
String get nothing_found => 'Hiçbir şey bulunamadı';
@ -1190,7 +1180,8 @@ class AppLocalizationsTr extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Spotify\'ın akış başına ödeme miktarına\n\$0.003 ile \$0.005 arasında hesaplanmıştır. Bu, kullanıcıya\nSpotify\'da şarkılarını dinlerse sanatçılara ne kadar ödeme\nyapmış olabileceğini göstermek için hipotetik bir hesaplamadır.';
String get streaming_fees_hypothetical =>
'*Spotify\'ın akış başına ödeme miktarına\n\$0.003 ile \$0.005 arasında hesaplanmıştır. Bu, kullanıcıya\nSpotify\'da şarkılarını dinlerse sanatçılara ne kadar ödeme\nyapmış olabileceğini göstermek için hipotetik bir hesaplamadır.';
@override
String get minutes_listened => 'Dinlenilen Dakikalar';
@ -1212,7 +1203,8 @@ class AppLocalizationsTr extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Bu, Spotify\'ın her yayın başına ödemenin\n\$0.003 ile \$0.005 arasında olduğu varsayımıyla hesaplanmıştır. Bu\nhipotetik bir hesaplamadır, kullanıcıya şarkılarını Spotify\'da dinlediklerinde\nsanatçılara ne kadar ödeme yapacaklarını gösterir.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1253,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get webview_not_found => 'Webview bulunamadı';
@override
String get webview_not_found_description => 'Cihazınızda herhangi bir Webview çalışma zamanı yüklü değil.\nEğer kuruluysa, ortam YOLUNDA olduğundan emin olun\n\nKurulumdan sonra uygulamayı yeniden başlatın';
String get webview_not_found_description =>
'Cihazınızda herhangi bir Webview çalışma zamanı yüklü değil.\nEğer kuruluysa, ortam YOLUNDA olduğundan emin olun\n\nKurulumdan sonra uygulamayı yeniden başlatın';
@override
String get unsupported_platform => 'Desteklenmeyen platform';
@ -1282,7 +1275,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get clear_cache => 'Önbelleği temizle';
@override
String get clear_cache_confirmation => 'Önbelleği temizlemek istiyor musunuz?';
String get clear_cache_confirmation =>
'Önbelleği temizlemek istiyor musunuz?';
@override
String get export_cache_files => 'Önbelleğe Alınmış Dosyaları Dışa Aktar';
@ -1293,7 +1287,8 @@ class AppLocalizationsTr extends AppLocalizations {
}
@override
String get export_cache_confirmation => 'Bu dosyaları dışa aktarmak istiyor musunuz';
String get export_cache_confirmation =>
'Bu dosyaları dışa aktarmak istiyor musunuz';
@override
String exported_n_out_of_m_files(Object files, Object filesExported) {
@ -1322,19 +1317,22 @@ class AppLocalizationsTr extends AppLocalizations {
String get view_all => 'Tümünü Gör';
@override
String get no_tracks_added_yet => 'Henüz hiçbir şarkı eklemediniz gibi görünüyor';
String get no_tracks_added_yet =>
'Henüz hiçbir şarkı eklemediniz gibi görünüyor';
@override
String get no_tracks => 'Burada hiç şarkı yok gibi görünüyor';
@override
String get no_tracks_listened_yet => 'Henüz hiçbir şey dinlemediniz gibi görünüyor';
String get no_tracks_listened_yet =>
'Henüz hiçbir şey dinlemediniz gibi görünüyor';
@override
String get not_following_artists => 'Hiçbir sanatçıyı takip etmiyorsunuz';
@override
String get no_favorite_albums_yet => 'Henüz favorilerinize herhangi bir albüm eklemediniz gibi görünüyor';
String get no_favorite_albums_yet =>
'Henüz favorilerinize herhangi bir albüm eklemediniz gibi görünüyor';
@override
String get no_logs_found => 'Log bulunamadı';
@ -1358,7 +1356,8 @@ class AppLocalizationsTr extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'macOS/Linux/Unix benzeri işletim sistemlerinde, .zshrc/.bashrc/.bash_profile gibi dosyalarda yol ayarlamak işe yaramaz.\nYolunuzu kabuk yapılandırma dosyasına ayarlamanız gerekir';
String get youtube_engine_unix_issue_message =>
'macOS/Linux/Unix benzeri işletim sistemlerinde, .zshrc/.bashrc/.bash_profile gibi dosyalarda yol ayarlamak işe yaramaz.\nYolunuzu kabuk yapılandırma dosyasına ayarlamanız gerekir';
@override
String get download => 'İndir';
@ -1376,7 +1375,8 @@ class AppLocalizationsTr extends AppLocalizations {
String get edit_port => 'Portu düzenle';
@override
String get port_helper_msg => 'Varsayılan -1\'dir, bu da rastgele bir sayıyı gösterir. Bir güvenlik duvarınız varsa, bunu ayarlamanız önerilir.';
String get port_helper_msg =>
'Varsayılan -1\'dir, bu da rastgele bir sayıyı gösterir. Bir güvenlik duvarınız varsa, bunu ayarlamanız önerilir.';
@override
String connect_request(Object client) {
@ -1384,5 +1384,6 @@ class AppLocalizationsTr extends AppLocalizations {
}
@override
String get connection_request_denied => 'Bağlantı reddedildi. Kullanıcı erişimi reddetti.';
String get connection_request_denied =>
'Bağlantı reddedildi. Kullanıcı erişimi reddetti.';
}

View File

@ -309,13 +309,15 @@ class AppLocalizationsUk extends AppLocalizations {
String get mini_player => 'Міні-плеєр';
@override
String get slide_to_seek => 'Проведіть пальцем, щоб перемотати вперед або назад';
String get slide_to_seek =>
'Проведіть пальцем, щоб перемотати вперед або назад';
@override
String get shuffle_playlist => 'Випадковий порядок відтворення плейлиста';
@override
String get unshuffle_playlist => 'Відключити випадковий порядок відтворення плейлиста';
String get unshuffle_playlist =>
'Відключити випадковий порядок відтворення плейлиста';
@override
String get previous_track => 'Попередній трек';
@ -356,7 +358,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get clear_all => 'Очистити все';
@override
String get show_hide_ui_on_hover => 'Показувати/приховувати інтерфейс при наведенні курсору';
String get show_hide_ui_on_hover =>
'Показувати/приховувати інтерфейс при наведенні курсору';
@override
String get always_on_top => 'Завжди зверху';
@ -379,12 +382,6 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get account => 'Обліковий запис';
@override
String get login_with_spotify => 'Увійти за допомогою облікового запису Spotify';
@override
String get connect_with_spotify => 'Підключитися до Spotify';
@override
String get logout => 'Вийти';
@ -413,7 +410,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get layout_mode => 'Режим макета';
@override
String get override_layout_settings => 'Перезаписати налаштування адаптивного режиму макета';
String get override_layout_settings =>
'Перезаписати налаштування адаптивного режиму макета';
@override
String get adaptive => 'Адаптивний';
@ -443,7 +441,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get sync_album_color => 'Синхронізувати колір альбому';
@override
String get sync_album_color_description => 'Використовує домінуючий колір обкладинки альбому як колір акценту';
String get sync_album_color_description =>
'Використовує домінуючий колір обкладинки альбому як колір акценту';
@override
String get playback => 'Відтворення';
@ -461,7 +460,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get pre_download_play => 'Попереднє завантаження та відтворення';
@override
String get pre_download_play_description => 'Замість потокового відтворення аудіо завантажте байти та відтворіть їх (рекомендовано для користувачів з високою пропускною здатністю)';
String get pre_download_play_description =>
'Замість потокового відтворення аудіо завантажте байти та відтворіть їх (рекомендовано для користувачів з високою пропускною здатністю)';
@override
String get skip_non_music => 'Пропустити не музичні сегменти';
@ -470,7 +470,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get blacklist_description => 'Треки та виконавці в чорному списку';
@override
String get wait_for_download_to_finish => 'Зачекайте, поки завершиться поточна загрузка';
String get wait_for_download_to_finish =>
'Зачекайте, поки завершиться поточна загрузка';
@override
String get desktop => 'Робочий стіл';
@ -506,7 +507,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get please_sponsor => 'Будь ласка, станьте спонсором/зробіть пожертву';
@override
String get spotube_description => 'Spotube, легкий, кросплатформовий, безкоштовний клієнт Spotify';
String get spotube_description =>
'Spotube, легкий, кросплатформовий, безкоштовний клієнт Spotify';
@override
String get version => 'Версія';
@ -538,10 +540,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get license => 'Ліцензія';
@override
String get add_spotify_credentials => 'Додайте свої облікові дані Spotify, щоб почати';
@override
String get credentials_will_not_be_shared_disclaimer => 'Не хвилюйтеся, жодні ваші облікові дані не будуть зібрані або передані кому-небудь';
String get credentials_will_not_be_shared_disclaimer =>
'Не хвилюйтеся, жодні ваші облікові дані не будуть зібрані або передані кому-небудь';
@override
String get know_how_to_login => 'Не знаєте, як це зробити?';
@ -549,11 +549,6 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Дотримуйтесь покрокової інструкції';
@override
String spotify_cookie(Object name) {
return 'Кукі-файл Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Кукі-файл $name';
@ -583,33 +578,6 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get first_go_to => 'Спочатку перейдіть на';
@override
String get login_if_not_logged_in => 'та Увійдіть/Зареєструйтесь, якщо ви не ввійшли';
@override
String get step_2 => 'Крок 2';
@override
String get step_2_steps => '1. Після входу натисніть F12 або клацніть правою кнопкою миші > Інспектувати, щоб відкрити інструменти розробки браузера.\n2. Потім перейдіть на вкладку \'Програма\' (Chrome, Edge, Brave тощо) або вкладку \'Сховище\' (Firefox, Palemoon тощо).\n3. Перейдіть до розділу \'Кукі-файли\', а потім до підрозділу \'https://accounts.spotify.com\'';
@override
String get step_3 => 'Крок 3';
@override
String get step_3_steps => 'Скопіюйте значення cookie \"sp_dc\"';
@override
String get success_emoji => 'Успіх🥳';
@override
String get success_message => 'Тепер ви успішно ввійшли у свій обліковий запис Spotify. Гарна робота, друже!';
@override
String get step_4 => 'Крок 4';
@override
String get step_4_steps => 'Вставте скопійоване значення \"sp_dc\"';
@override
String get something_went_wrong => 'Щось пішло не так';
@ -617,19 +585,23 @@ class AppLocalizationsUk extends AppLocalizations {
String get piped_instance => 'Примірник сервера Piped';
@override
String get piped_description => 'Примірник сервера Piped, який використовуватиметься для зіставлення треків';
String get piped_description =>
'Примірник сервера Piped, який використовуватиметься для зіставлення треків';
@override
String get piped_warning => 'Деякі з них можуть працювати неправильно. Тому використовуйте на свій страх і ризик';
String get piped_warning =>
'Деякі з них можуть працювати неправильно. Тому використовуйте на свій страх і ризик';
@override
String get invidious_instance => 'Екземпляр сервера Invidious';
@override
String get invidious_description => 'Екземпляр сервера Invidious для зіставлення треків';
String get invidious_description =>
'Екземпляр сервера Invidious для зіставлення треків';
@override
String get invidious_warning => 'Деякі можуть працювати не дуже добре. Використовуйте на власний ризик';
String get invidious_warning =>
'Деякі можуть працювати не дуже добре. Використовуйте на власний ризик';
@override
String get generate => 'Генерувати';
@ -643,7 +615,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get replace_downloaded_tracks => 'Замінити всі завантажені треки';
@override
String get skip_download_tracks => 'Пропустити завантаження всіх завантажених треків';
String get skip_download_tracks =>
'Пропустити завантаження всіх завантажених треків';
@override
String get do_you_want_to_replace => 'Ви хочете замінити існуючий трек?';
@ -744,7 +717,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get are_you_sure => 'Ви впевнені?';
@override
String get generating_playlist => 'Створення вашого персонального плейлиста...';
String get generating_playlist =>
'Створення вашого персонального плейлиста...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +726,27 @@ class AppLocalizationsUk extends AppLocalizations {
}
@override
String get download_warning => 'Якщо ви завантажуєте всі треки масово, ви явно піратствуєте і завдаєте шкоди музичному творчому співтовариству. Сподіваюся, ви усвідомлюєте це. Завжди намагайтеся поважати і підтримувати важку працю артиста';
String get download_warning =>
'Якщо ви завантажуєте всі треки масово, ви явно піратствуєте і завдаєте шкоди музичному творчому співтовариству. Сподіваюся, ви усвідомлюєте це. Завжди намагайтеся поважати і підтримувати важку працю артиста';
@override
String get download_ip_ban_warning => 'До речі, ваш IP може бути заблокований на YouTube через надмірну кількість запитів на завантаження, ніж зазвичай. Блокування IP-адреси означає, що ви не зможете користуватися YouTube (навіть якщо ви увійшли в систему) протягом щонайменше 2-3 місяців з цього пристрою. І Spotube не несе жодної відповідальності, якщо це станеться';
String get download_ip_ban_warning =>
'До речі, ваш IP може бути заблокований на YouTube через надмірну кількість запитів на завантаження, ніж зазвичай. Блокування IP-адреси означає, що ви не зможете користуватися YouTube (навіть якщо ви увійшли в систему) протягом щонайменше 2-3 місяців з цього пристрою. І Spotube не несе жодної відповідальності, якщо це станеться';
@override
String get by_clicking_accept_terms => 'Натискаючи \'прийняти\', ви погоджуєтеся з наступними умовами:';
String get by_clicking_accept_terms =>
'Натискаючи \'прийняти\', ви погоджуєтеся з наступними умовами:';
@override
String get download_agreement_1 => 'Я знаю, що краду музику. Я поганий.';
@override
String get download_agreement_2 => 'Я підтримаю автора, де тільки зможу, і роблю це лише тому, що не маю грошей, щоб купити його роботи.';
String get download_agreement_2 =>
'Я підтримаю автора, де тільки зможу, і роблю це лише тому, що не маю грошей, щоб купити його роботи.';
@override
String get download_agreement_3 => 'Я повністю усвідомлюю, що мій IP може бути заблокований на YouTube, і я не покладаю на Spotube або його власників/контрибуторів відповідальність за будь-які нещасні випадки, спричинені моїми діями.';
String get download_agreement_3 =>
'Я повністю усвідомлюю, що мій IP може бути заблокований на YouTube, і я не покладаю на Spotube або його власників/контрибуторів відповідальність за будь-які нещасні випадки, спричинені моїми діями.';
@override
String get decline => 'Відхилити';
@ -848,7 +827,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get failed_to_encrypt => 'Не вдалося зашифрувати';
@override
String get encryption_failed_warning => 'Spotube використовує шифрування для безпечного зберігання ваших даних. Але не вдалося цього зробити. Тому він перейде до небезпечного зберігання\nЯкщо ви використовуєте Linux, переконайтеся, що у вас встановлено будь-який секретний сервіс (gnome-keyring, kde-wallet, keepassxc тощо)';
String get encryption_failed_warning =>
'Spotube використовує шифрування для безпечного зберігання ваших даних. Але не вдалося цього зробити. Тому він перейде до небезпечного зберігання\nЯкщо ви використовуєте Linux, переконайтеся, що у вас встановлено будь-який секретний сервіс (gnome-keyring, kde-wallet, keepassxc тощо)';
@override
String get querying_info => 'Запит інформації...';
@ -946,7 +926,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get friends => 'Друзі';
@override
String get no_lyrics_available => 'Вибачте, не вдалося знайти текст для цього треку';
String get no_lyrics_available =>
'Вибачте, не вдалося знайти текст для цього треку';
@override
String get start_a_radio => 'Запустити радіо';
@ -955,7 +936,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get how_to_start_radio => 'Як ви хочете запустити радіо?';
@override
String get replace_queue_question => 'Ви хочете замінити поточну чергу чи додати до неї?';
String get replace_queue_question =>
'Ви хочете замінити поточну чергу чи додати до неї?';
@override
String get endless_playback => 'Безкінечне відтворення';
@ -964,7 +946,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get delete_playlist => 'Видалити плейлист';
@override
String get delete_playlist_confirmation => 'Ви впевнені, що хочете видалити цей плейлист?';
String get delete_playlist_confirmation =>
'Ви впевнені, що хочете видалити цей плейлист?';
@override
String get local_tracks => 'Місцеві треки';
@ -988,16 +971,20 @@ class AppLocalizationsUk extends AppLocalizations {
String get get_started => 'Давайте почнемо';
@override
String get youtube_source_description => 'Рекомендовано та працює краще за все.';
String get youtube_source_description =>
'Рекомендовано та працює краще за все.';
@override
String get piped_source_description => 'Чи почуваєте себе вільно? Те саме, що і на YouTube, але набагато безкоштовно.';
String get piped_source_description =>
'Чи почуваєте себе вільно? Те саме, що і на YouTube, але набагато безкоштовно.';
@override
String get jiosaavn_source_description => 'Найкраще для регіону Південної Азії.';
String get jiosaavn_source_description =>
'Найкраще для регіону Південної Азії.';
@override
String get invidious_source_description => 'Подібний до Piped, але з вищою доступністю.';
String get invidious_source_description =>
'Подібний до Piped, але з вищою доступністю.';
@override
String highest_quality(Object quality) {
@ -1008,13 +995,15 @@ class AppLocalizationsUk extends AppLocalizations {
String get select_audio_source => 'Виберіть джерело аудіо';
@override
String get endless_playback_description => 'Автоматично додавати нові пісні\nв кінець черги';
String get endless_playback_description =>
'Автоматично додавати нові пісні\nв кінець черги';
@override
String get choose_your_region => 'Виберіть ваш регіон';
@override
String get choose_your_region_description => 'Це допоможе Spotube показати вам правильний контент\nдля вашого місцезнаходження.';
String get choose_your_region_description =>
'Це допоможе Spotube показати вам правильний контент\nдля вашого місцезнаходження.';
@override
String get choose_your_language => 'Виберіть свою мову';
@ -1023,7 +1012,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get help_project_grow => 'Допоможіть цьому проекту рости';
@override
String get help_project_grow_description => 'Spotube - це проект з відкритим кодом. Ви можете допомогти цьому проекту зростати, вносячи свій внесок у проект, повідомляючи про помилки або пропонуючи нові функції.';
String get help_project_grow_description =>
'Spotube - це проект з відкритим кодом. Ви можете допомогти цьому проекту зростати, вносячи свій внесок у проект, повідомляючи про помилки або пропонуючи нові функції.';
@override
String get contribute_on_github => 'Долучайтесь на GitHub';
@ -1117,7 +1107,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get choose_the_device => 'Виберіть пристрій:';
@override
String get multiple_device_connected => 'Підключено кілька пристроїв.\nВиберіть пристрій, на якому ви хочете виконати цю дію';
String get multiple_device_connected =>
'Підключено кілька пристроїв.\nВиберіть пристрій, на якому ви хочете виконати цю дію';
@override
String get nothing_found => 'Нічого не знайдено';
@ -1190,7 +1181,8 @@ class AppLocalizationsUk extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Розраховано на основі виплат Spotify за стримінг\nвід \$0.003 до \$0.005. Це гіпотетичний\nрозрахунок, щоб дати уявлення користувачу про те, скільки б він\nзаплатив артистам, якби слухав їхні пісні на Spotify.';
String get streaming_fees_hypothetical =>
'*Розраховано на основі виплат Spotify за стримінг\nвід \$0.003 до \$0.005. Це гіпотетичний\nрозрахунок, щоб дати уявлення користувачу про те, скільки б він\nзаплатив артистам, якби слухав їхні пісні на Spotify.';
@override
String get minutes_listened => 'Хвилини прослуховування';
@ -1212,7 +1204,8 @@ class AppLocalizationsUk extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Це розраховано на основі виплат Spotify за стрім\nвід \$0.003 до \$0.005. Це гіпотетичний розрахунок,\nщоб дати користувачеві уявлення про те, скільки б він заплатив\nартистам, якби слухав їхні пісні на Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1254,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get webview_not_found => 'Webview не знайдено';
@override
String get webview_not_found_description => 'На вашому пристрої не встановлено виконуване середовище Webview.\nЯкщо воно встановлено, переконайтеся, що воно знаходиться в environment PATH\n\nПісля встановлення перезапустіть програму';
String get webview_not_found_description =>
'На вашому пристрої не встановлено виконуване середовище Webview.\nЯкщо воно встановлено, переконайтеся, що воно знаходиться в environment PATH\n\nПісля встановлення перезапустіть програму';
@override
String get unsupported_platform => 'Непідтримувана платформа';
@ -1334,7 +1328,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get not_following_artists => 'Ви не підписані на жодного артиста';
@override
String get no_favorite_albums_yet => 'Здається, ви ще не додали жодного альбому в улюблені';
String get no_favorite_albums_yet =>
'Здається, ви ще не додали жодного альбому в улюблені';
@override
String get no_logs_found => 'Жодних журналів не знайдено';
@ -1358,7 +1353,8 @@ class AppLocalizationsUk extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'У macOS/Linux/Unix-подібних ОС, встановлення шляху в .zshrc/.bashrc/.bash_profile тощо не працює.\nВам потрібно налаштувати шлях у файлі конфігурації оболонки';
String get youtube_engine_unix_issue_message =>
'У macOS/Linux/Unix-подібних ОС, встановлення шляху в .zshrc/.bashrc/.bash_profile тощо не працює.\nВам потрібно налаштувати шлях у файлі конфігурації оболонки';
@override
String get download => 'Завантажити';
@ -1376,7 +1372,8 @@ class AppLocalizationsUk extends AppLocalizations {
String get edit_port => 'Редагувати порт';
@override
String get port_helper_msg => 'За замовчуванням -1, що означає випадкове число. Якщо у вас налаштований брандмауер, рекомендується це налаштувати.';
String get port_helper_msg =>
'За замовчуванням -1, що означає випадкове число. Якщо у вас налаштований брандмауер, рекомендується це налаштувати.';
@override
String connect_request(Object client) {
@ -1384,5 +1381,6 @@ class AppLocalizationsUk extends AppLocalizations {
}
@override
String get connection_request_denied => 'Підключення відхилено. Користувач відмовив у доступі.';
String get connection_request_denied =>
'Підключення відхилено. Користувач відмовив у доступі.';
}

View File

@ -356,7 +356,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get clear_all => 'Xóa tất cả';
@override
String get show_hide_ui_on_hover => 'Hiển thị/Ẩn giao diện người dùng khi di chuột qua';
String get show_hide_ui_on_hover =>
'Hiển thị/Ẩn giao diện người dùng khi di chuột qua';
@override
String get always_on_top => 'Luôn ở trên cùng';
@ -379,12 +380,6 @@ class AppLocalizationsVi extends AppLocalizations {
@override
String get account => 'Tài khoản';
@override
String get login_with_spotify => 'Đăng nhập bằng tài khoản Spotify của bạn';
@override
String get connect_with_spotify => 'Liên kết với Spotify';
@override
String get logout => 'Đăng xuất';
@ -443,7 +438,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get sync_album_color => 'Đồng bộ màu album';
@override
String get sync_album_color_description => 'Sử dụng màu chủ đạo của hình ảnh album làm màu nhấn';
String get sync_album_color_description =>
'Sử dụng màu chủ đạo của hình ảnh album làm màu nhấn';
@override
String get playback => 'Phát';
@ -461,7 +457,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get pre_download_play => 'Tải xuống và phát';
@override
String get pre_download_play_description => 'Thay vì stream âm thanh, tải xuống trước và phát (Khuyến nghị cho người dùng có băng thông cao)';
String get pre_download_play_description =>
'Thay vì stream âm thanh, tải xuống trước và phát (Khuyến nghị cho người dùng có băng thông cao)';
@override
String get skip_non_music => 'Bỏ qua các đoạn không phải nhạc (SponsorBlock)';
@ -470,7 +467,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get blacklist_description => 'Các bài hát và nghệ sĩ trong blacklist';
@override
String get wait_for_download_to_finish => 'Vui lòng đợi quá trình tải xuống hiện tại hoàn thành';
String get wait_for_download_to_finish =>
'Vui lòng đợi quá trình tải xuống hiện tại hoàn thành';
@override
String get desktop => 'Máy tính';
@ -506,7 +504,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get please_sponsor => 'Vui lòng tài trợ/ủng hộ';
@override
String get spotube_description => 'Spotube, một ứng dụng Spotify nhẹ, đa nền tảng và miễn phí';
String get spotube_description =>
'Spotube, một ứng dụng Spotify nhẹ, đa nền tảng và miễn phí';
@override
String get version => 'Phiên bản';
@ -538,10 +537,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get license => 'Giấy phép';
@override
String get add_spotify_credentials => 'Điền thông tin đăng nhập Spotify của bạn';
@override
String get credentials_will_not_be_shared_disclaimer => 'Đừng lo, thông tin đăng nhập của bạn sẽ không được thu thập hoặc chia sẻ với bất kỳ ai';
String get credentials_will_not_be_shared_disclaimer =>
'Đừng lo, thông tin đăng nhập của bạn sẽ không được thu thập hoặc chia sẻ với bất kỳ ai';
@override
String get know_how_to_login => 'Không biết cách lấy thông tin đăng nhập?';
@ -549,11 +546,6 @@ class AppLocalizationsVi extends AppLocalizations {
@override
String get follow_step_by_step_guide => 'Các bước lấy thông tin đăng nhập';
@override
String spotify_cookie(Object name) {
return 'Cookie Spotify $name';
}
@override
String cookie_name_cookie(Object name) {
return 'Cookie $name';
@ -583,33 +575,6 @@ class AppLocalizationsVi extends AppLocalizations {
@override
String get first_go_to => 'Đầu tiên, truy cập';
@override
String get login_if_not_logged_in => 'và Đăng nhập/Đăng ký nếu chưa có tài khoản';
@override
String get step_2 => 'Bước 2';
@override
String get step_2_steps => '1. Sau khi đăng nhập, nhấn F12 hoặc Chuột phải > Mở devtools của trình duyệt.\n2. Sau đó, chuyển đến Tab \"Ứng dụng/Application\" (Chrome, Edge, Brave, v.v.) hoặc Tab \"Lưu trữ/Storage\" (Firefox, Palemoon, v.v.)\n3. Chuyển đến phần \"Cookie\" sau đó phần con \"https://accounts.spotify.com\"';
@override
String get step_3 => 'Bước 3';
@override
String get step_3_steps => 'Sao chép giá trị của Cookie \"sp_dc\"\"sp_key\" (hoặc sp_gaid)';
@override
String get success_emoji => 'Thành công🥳';
@override
String get success_message => 'Bây giờ bạn đã đăng nhập thành công bằng tài khoản Spotify của mình. Làm tốt lắm!';
@override
String get step_4 => 'Bước 4';
@override
String get step_4_steps => 'Dán giá trị đã sao chép của Cookie \"sp_dc\"\"sp_key\" (hoặc sp_gaid) vào các trường tương ứng';
@override
String get something_went_wrong => 'Đã xảy ra lỗi';
@ -617,19 +582,23 @@ class AppLocalizationsVi extends AppLocalizations {
String get piped_instance => 'Phiên bản Server Piped';
@override
String get piped_description => 'Phiên bản Piped để sử dụng cho Track matching';
String get piped_description =>
'Phiên bản Piped để sử dụng cho Track matching';
@override
String get piped_warning => 'Một số phiên bản Piped có thể không hoạt động tốt';
String get piped_warning =>
'Một số phiên bản Piped có thể không hoạt động tốt';
@override
String get invidious_instance => 'Phiên bản máy chủ Invidious';
@override
String get invidious_description => 'Phiên bản máy chủ Invidious để sử dụng để so khớp bản nhạc';
String get invidious_description =>
'Phiên bản máy chủ Invidious để sử dụng để so khớp bản nhạc';
@override
String get invidious_warning => 'Một số có thể sẽ không hoạt động tốt. Vì vậy hãy sử dụng với rủi ro của riêng bạn';
String get invidious_warning =>
'Một số có thể sẽ không hoạt động tốt. Vì vậy hãy sử dụng với rủi ro của riêng bạn';
@override
String get generate => 'Tạo';
@ -643,10 +612,12 @@ class AppLocalizationsVi extends AppLocalizations {
String get replace_downloaded_tracks => 'Thay thế tất cả các bài hát đã tải';
@override
String get skip_download_tracks => 'Bỏ qua tải xuống tất cả các bài hát đã tải';
String get skip_download_tracks =>
'Bỏ qua tải xuống tất cả các bài hát đã tải';
@override
String get do_you_want_to_replace => 'Bạn có muốn thay thế bài hát hiện có không?';
String get do_you_want_to_replace =>
'Bạn có muốn thay thế bài hát hiện có không?';
@override
String get replace => 'Thay thế';
@ -744,7 +715,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get are_you_sure => 'Bạn có chắc chắn?';
@override
String get generating_playlist => 'Đang tạo danh sách phát tùy chỉnh của bạn...';
String get generating_playlist =>
'Đang tạo danh sách phát tùy chỉnh của bạn...';
@override
String selected_count_tracks(Object count) {
@ -752,22 +724,28 @@ class AppLocalizationsVi extends AppLocalizations {
}
@override
String get download_warning => 'Tải xuống tất cả các bài hát một lần, sẽ vi phạm bản quyền âm nhạc và gây thiệt hại cho xã hội sáng tạo âm nhạc. Hy vọng bạn nhận thức được điều này. Hãy luôn tôn trọng và ủng hộ công sức của nghệ sĩ';
String get download_warning =>
'Tải xuống tất cả các bài hát một lần, sẽ vi phạm bản quyền âm nhạc và gây thiệt hại cho xã hội sáng tạo âm nhạc. Hy vọng bạn nhận thức được điều này. Hãy luôn tôn trọng và ủng hộ công sức của nghệ sĩ';
@override
String get download_ip_ban_warning => 'Địa chỉ IP của bạn có thể bị chặn trên YouTube do yêu cầu tải xuống quá mức so với bình thường. Chặn IP có nghĩa là bạn không thể sử dụng YouTube (ngay cả khi bạn đã đăng nhập) ít nhất 2-3 tháng từ thiết bị IP đó. Và Spotube không chịu trách nhiệm nếu điều này xảy ra';
String get download_ip_ban_warning =>
'Địa chỉ IP của bạn có thể bị chặn trên YouTube do yêu cầu tải xuống quá mức so với bình thường. Chặn IP có nghĩa là bạn không thể sử dụng YouTube (ngay cả khi bạn đã đăng nhập) ít nhất 2-3 tháng từ thiết bị IP đó. Và Spotube không chịu trách nhiệm nếu điều này xảy ra';
@override
String get by_clicking_accept_terms => 'Bằng cách nhấp vào \'Chấp nhận\', bạn đồng ý với các điều khoản sau:';
String get by_clicking_accept_terms =>
'Bằng cách nhấp vào \'Chấp nhận\', bạn đồng ý với các điều khoản sau:';
@override
String get download_agreement_1 => 'Tôi biết mình đang vi phạm bản quyền âm nhạc. Đó là không tốt.';
String get download_agreement_1 =>
'Tôi biết mình đang vi phạm bản quyền âm nhạc. Đó là không tốt.';
@override
String get download_agreement_2 => 'Tôi sẽ ủng hộ nghệ sĩ bất cứ nơi nào tôi có thể và tôi chỉ làm điều này vì tôi không có tiền để mua tác phẩm của họ';
String get download_agreement_2 =>
'Tôi sẽ ủng hộ nghệ sĩ bất cứ nơi nào tôi có thể và tôi chỉ làm điều này vì tôi không có tiền để mua tác phẩm của họ';
@override
String get download_agreement_3 => 'Tôi hoàn toàn nhận thức được rằng địa chỉ IP của tôi có thể bị chặn trên YouTube và tôi không đổ lỗi cho Spotube hoặc chủ sở hữu/người đóng góp của nó về bất kỳ tai nạn nào do hành động này của tôi';
String get download_agreement_3 =>
'Tôi hoàn toàn nhận thức được rằng địa chỉ IP của tôi có thể bị chặn trên YouTube và tôi không đổ lỗi cho Spotube hoặc chủ sở hữu/người đóng góp của nó về bất kỳ tai nạn nào do hành động này của tôi';
@override
String get decline => 'Từ chối';
@ -848,7 +826,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get failed_to_encrypt => 'Mã hóa không thành công';
@override
String get encryption_failed_warning => 'Spotube không thành công trong việc mã hóa nhằm lưu trữ dữ liêu an toàn. vậy nên sẽ chuyển về lưu trữ không an toàn\nNếu bạn đang sử dụng Linux, đảm bảo rằng bạn có sử dụng dịch vụ bảo mật (gnome-keyring, kde-wallet, keepassxc, v.v.)';
String get encryption_failed_warning =>
'Spotube không thành công trong việc mã hóa nhằm lưu trữ dữ liêu an toàn. vậy nên sẽ chuyển về lưu trữ không an toàn\nNếu bạn đang sử dụng Linux, đảm bảo rằng bạn có sử dụng dịch vụ bảo mật (gnome-keyring, kde-wallet, keepassxc, v.v.)';
@override
String get querying_info => 'Đang truy vấn thông tin...';
@ -865,7 +844,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get you_are_offline => 'Bạn đang ngoại tuyến';
@override
String get connection_restored => 'Kết nối internet của bạn đã được khôi phục';
String get connection_restored =>
'Kết nối internet của bạn đã được khôi phục';
@override
String get use_system_title_bar => 'Sử dụng thanh tiêu đề hệ thống';
@ -922,7 +902,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get login => 'Đăng nhập';
@override
String get login_with_your_lastfm => 'Đăng nhập bằng tài khoản Last.fm của bạn';
String get login_with_your_lastfm =>
'Đăng nhập bằng tài khoản Last.fm của bạn';
@override
String get scrobble_to_lastfm => 'Scrobble đến Last.fm';
@ -946,16 +927,19 @@ class AppLocalizationsVi extends AppLocalizations {
String get friends => 'Bạn bè';
@override
String get no_lyrics_available => 'Xin lỗi, không tìm thấy lời cho bài hát này';
String get no_lyrics_available =>
'Xin lỗi, không tìm thấy lời cho bài hát này';
@override
String get start_a_radio => 'Bắt đầu Một Đài phát thanh';
@override
String get how_to_start_radio => 'Bạn muốn bắt đầu đài phát thanh như thế nào?';
String get how_to_start_radio =>
'Bạn muốn bắt đầu đài phát thanh như thế nào?';
@override
String get replace_queue_question => 'Bạn muốn thay thế hàng đợi hiện tại hay thêm vào?';
String get replace_queue_question =>
'Bạn muốn thay thế hàng đợi hiện tại hay thêm vào?';
@override
String get endless_playback => 'Phát không giới hạn';
@ -964,7 +948,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get delete_playlist => 'Xóa Danh sách phát';
@override
String get delete_playlist_confirmation => 'Bạn có chắc chắn muốn xóa danh sách phát này không?';
String get delete_playlist_confirmation =>
'Bạn có chắc chắn muốn xóa danh sách phát này không?';
@override
String get local_tracks => 'Bài hát Địa phương';
@ -982,22 +967,26 @@ class AppLocalizationsVi extends AppLocalizations {
String get freedom_of_music => '“Sự Tự do của Âm nhạc”';
@override
String get freedom_of_music_palm => '“Sự Tự do của Âm nhạc trong lòng bàn tay của bạn”';
String get freedom_of_music_palm =>
'“Sự Tự do của Âm nhạc trong lòng bàn tay của bạn”';
@override
String get get_started => 'Bắt đầu thôi';
@override
String get youtube_source_description => 'Được đề xuất và hoạt động tốt nhất.';
String get youtube_source_description =>
'Được đề xuất và hoạt động tốt nhất.';
@override
String get piped_source_description => 'Cảm thấy tự do? Giống như YouTube nhưng miễn phí hơn rất nhiều.';
String get piped_source_description =>
'Cảm thấy tự do? Giống như YouTube nhưng miễn phí hơn rất nhiều.';
@override
String get jiosaavn_source_description => 'Tốt nhất cho khu vực Nam Á.';
@override
String get invidious_source_description => 'Tương tự như Piped nhưng có tính khả dụng cao hơn.';
String get invidious_source_description =>
'Tương tự như Piped nhưng có tính khả dụng cao hơn.';
@override
String highest_quality(Object quality) {
@ -1008,13 +997,15 @@ class AppLocalizationsVi extends AppLocalizations {
String get select_audio_source => 'Chọn Nguồn Âm thanh';
@override
String get endless_playback_description => 'Tự động thêm các bài hát mới\nvào cuối hàng đợi';
String get endless_playback_description =>
'Tự động thêm các bài hát mới\nvào cuối hàng đợi';
@override
String get choose_your_region => 'Chọn khu vực của bạn';
@override
String get choose_your_region_description => 'Điều này sẽ giúp Spotube hiển thị nội dung phù hợp cho vị trí của bạn.';
String get choose_your_region_description =>
'Điều này sẽ giúp Spotube hiển thị nội dung phù hợp cho vị trí của bạn.';
@override
String get choose_your_language => 'Chọn ngôn ngữ của bạn';
@ -1023,7 +1014,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get help_project_grow => 'Hãy giúp dự án này phát triển';
@override
String get help_project_grow_description => 'Spotube là một dự án mã nguồn mở. Bạn có thể giúp dự án này phát triển bằng cách đóng góp vào dự án, báo cáo lỗi hoặc đề xuất tính năng mới.';
String get help_project_grow_description =>
'Spotube là một dự án mã nguồn mở. Bạn có thể giúp dự án này phát triển bằng cách đóng góp vào dự án, báo cáo lỗi hoặc đề xuất tính năng mới.';
@override
String get contribute_on_github => 'Đóng góp trên GitHub';
@ -1038,7 +1030,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get enable_connect => 'Kích hoạt kết nối';
@override
String get enable_connect_description => 'Điều khiển Spotube từ các thiết bị khác';
String get enable_connect_description =>
'Điều khiển Spotube từ các thiết bị khác';
@override
String get devices => 'Thiết bị';
@ -1117,7 +1110,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get choose_the_device => 'Chọn thiết bị:';
@override
String get multiple_device_connected => 'Có nhiều thiết bị kết nối.\nChọn thiết bị mà bạn muốn thực hiện hành động này';
String get multiple_device_connected =>
'Có nhiều thiết bị kết nối.\nChọn thiết bị mà bạn muốn thực hiện hành động này';
@override
String get nothing_found => 'Không tìm thấy gì';
@ -1190,7 +1184,8 @@ class AppLocalizationsVi extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*Tính toán dựa trên thanh toán của Spotify cho mỗi lần phát\ntừ \$0.003 đến \$0.005. Đây là một tính toán giả định để\ngive người dùng cái nhìn về số tiền họ sẽ chi trả cho các nghệ sĩ nếu họ nghe\nbài hát của họ trên Spotify.';
String get streaming_fees_hypothetical =>
'*Tính toán dựa trên thanh toán của Spotify cho mỗi lần phát\ntừ \$0.003 đến \$0.005. Đây là một tính toán giả định để\ngive người dùng cái nhìn về số tiền họ sẽ chi trả cho các nghệ sĩ nếu họ nghe\nbài hát của họ trên Spotify.';
@override
String get minutes_listened => 'Thời gian nghe';
@ -1212,7 +1207,8 @@ class AppLocalizationsVi extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*Được tính toán dựa trên khoản thanh toán của Spotify cho mỗi lượt phát\ntừ \$0.003 đến \$0.005. Đây là một tính toán giả định để\ncung cấp cho người dùng cái nhìn về số tiền họ sẽ phải trả\ncho các nghệ sĩ nếu họ nghe bài hát của họ trên Spotify.';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1257,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get webview_not_found => 'Không tìm thấy Webview';
@override
String get webview_not_found_description => 'Không có runtime Webview nào được cài đặt trên thiết bị của bạn.\nNếu đã cài đặt, hãy đảm bảo rằng nó nằm trong environment PATH\n\nSau khi cài đặt, hãy khởi động lại ứng dụng';
String get webview_not_found_description =>
'Không có runtime Webview nào được cài đặt trên thiết bị của bạn.\nNếu đã cài đặt, hãy đảm bảo rằng nó nằm trong environment PATH\n\nSau khi cài đặt, hãy khởi động lại ứng dụng';
@override
String get unsupported_platform => 'Nền tảng không được hỗ trợ';
@ -1331,10 +1328,12 @@ class AppLocalizationsVi extends AppLocalizations {
String get no_tracks_listened_yet => 'Có vẻ bạn chưa nghe gì cả';
@override
String get not_following_artists => 'Bạn không đang theo dõi bất kỳ nghệ sĩ nào';
String get not_following_artists =>
'Bạn không đang theo dõi bất kỳ nghệ sĩ nào';
@override
String get no_favorite_albums_yet => 'Có vẻ bạn chưa thêm album nào vào danh sách yêu thích';
String get no_favorite_albums_yet =>
'Có vẻ bạn chưa thêm album nào vào danh sách yêu thích';
@override
String get no_logs_found => 'Không tìm thấy nhật ký';
@ -1358,7 +1357,8 @@ class AppLocalizationsVi extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => 'Trên macOS/Linux/Unix, việc thiết lập đường dẫn trong .zshrc/.bashrc/.bash_profile v.v. sẽ không hoạt động.\nBạn cần thiết lập đường dẫn trong tệp cấu hình shell';
String get youtube_engine_unix_issue_message =>
'Trên macOS/Linux/Unix, việc thiết lập đường dẫn trong .zshrc/.bashrc/.bash_profile v.v. sẽ không hoạt động.\nBạn cần thiết lập đường dẫn trong tệp cấu hình shell';
@override
String get download => 'Tải xuống';
@ -1376,7 +1376,8 @@ class AppLocalizationsVi extends AppLocalizations {
String get edit_port => 'Chỉnh sửa cổng';
@override
String get port_helper_msg => 'Mặc định là -1, có nghĩa là số ngẫu nhiên. Nếu bạn đã cấu hình tường lửa, nên đặt điều này.';
String get port_helper_msg =>
'Mặc định là -1, có nghĩa là số ngẫu nhiên. Nếu bạn đã cấu hình tường lửa, nên đặt điều này.';
@override
String connect_request(Object client) {
@ -1384,5 +1385,6 @@ class AppLocalizationsVi extends AppLocalizations {
}
@override
String get connection_request_denied => 'Kết nối bị từ chối. Người dùng đã từ chối quyền truy cập.';
String get connection_request_denied =>
'Kết nối bị từ chối. Người dùng đã từ chối quyền truy cập.';
}

View File

@ -379,12 +379,6 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get account => '账户';
@override
String get login_with_spotify => '使用 Spotify 登录';
@override
String get connect_with_spotify => '与 Spotify 账户连接';
@override
String get logout => '退出';
@ -538,10 +532,8 @@ class AppLocalizationsZh extends AppLocalizations {
String get license => '许可证';
@override
String get add_spotify_credentials => '添加你的 Spotify 登录信息以开始使用';
@override
String get credentials_will_not_be_shared_disclaimer => '不用担心,软件不会收集或分享任何个人数据给第三方';
String get credentials_will_not_be_shared_disclaimer =>
'不用担心,软件不会收集或分享任何个人数据给第三方';
@override
String get know_how_to_login => '不知道该怎么做?';
@ -549,11 +541,6 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get follow_step_by_step_guide => '请按照以下指南进行';
@override
String spotify_cookie(Object name) {
return 'Spotify $name Cookie';
}
@override
String cookie_name_cookie(Object name) {
return '$name Cookie';
@ -583,33 +570,6 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get first_go_to => '首先,前往';
@override
String get login_if_not_logged_in => '如果尚未登录,请登录或者注册一个账户';
@override
String get step_2 => '步骤 2';
@override
String get step_2_steps => '1. 一旦你已经完成登录, 按 F12 键或者鼠标右击网页空白区域 > 选择“检查”以打开浏览器开发者工具DevTools\n2. 然后选择 \"应用Application\" 标签页Chrome, Edge, Brave 等基于 Chromium 的浏览器) 或 \"存储Storage\" 标签页 Firefox, Palemoon 等基于 Firefox 的浏览器))\n3. 选择 \"Cookies\" 栏目然后选择 \"https://accounts.spotify.com\" 子栏目';
@override
String get step_3 => '步骤 3';
@override
String get step_3_steps => '复制\"sp_dc\" Cookie的值';
@override
String get success_emoji => '成功🥳';
@override
String get success_message => '你已经成功使用 Spotify 登录。干得漂亮!';
@override
String get step_4 => '步骤 4';
@override
String get step_4_steps => '粘贴复制的\"sp_dc\"';
@override
String get something_went_wrong => '某些地方出现了问题';
@ -752,10 +712,12 @@ class AppLocalizationsZh extends AppLocalizations {
}
@override
String get download_warning => '如果你大量下载这些歌曲,你显然在侵犯音乐的版权并对音乐创作社区造成了伤害。我希望你能意识到这一点。永远要尊重并支持艺术家们的辛勤工作';
String get download_warning =>
'如果你大量下载这些歌曲,你显然在侵犯音乐的版权并对音乐创作社区造成了伤害。我希望你能意识到这一点。永远要尊重并支持艺术家们的辛勤工作';
@override
String get download_ip_ban_warning => '小心,如果出现超出正常的下载请求那你的 IP 可能会被 YouTube 封禁,这意味着你的设备将在长达 2-3 个月的时间内无法使用该 IP 访问 YouTube即使你没登录。Spotube 对此不承担任何责任';
String get download_ip_ban_warning =>
'小心,如果出现超出正常的下载请求那你的 IP 可能会被 YouTube 封禁,这意味着你的设备将在长达 2-3 个月的时间内无法使用该 IP 访问 YouTube即使你没登录。Spotube 对此不承担任何责任';
@override
String get by_clicking_accept_terms => '点击 \'同意\' 代表着你同意以下的条款';
@ -767,7 +729,8 @@ class AppLocalizationsZh extends AppLocalizations {
String get download_agreement_2 => '我将尽可能支持艺术家的工作。我现在之所以做不到是因为缺乏资金来购买正版';
@override
String get download_agreement_3 => '我完全了解我的 IP 存在被 YouTube的风险。我同意 Spotube 的所有者与贡献者们无须对我目前的行为所导致的任何后果负责';
String get download_agreement_3 =>
'我完全了解我的 IP 存在被 YouTube的风险。我同意 Spotube 的所有者与贡献者们无须对我目前的行为所导致的任何后果负责';
@override
String get decline => '拒绝';
@ -848,7 +811,8 @@ class AppLocalizationsZh extends AppLocalizations {
String get failed_to_encrypt => '加密失败';
@override
String get encryption_failed_warning => 'Spotube使用加密来安全地存储您的数据。但是失败了。因此它将回退到不安全的存储\n如果您使用Linux请确保已安装gnome-keyring、kde-wallet和keepassxc等秘密服务';
String get encryption_failed_warning =>
'Spotube使用加密来安全地存储您的数据。但是失败了。因此它将回退到不安全的存储\n如果您使用Linux请确保已安装gnome-keyring、kde-wallet和keepassxc等秘密服务';
@override
String get querying_info => '正在查询信息...';
@ -1023,7 +987,8 @@ class AppLocalizationsZh extends AppLocalizations {
String get help_project_grow => '帮助这个项目成长';
@override
String get help_project_grow_description => 'Spotube是一个开源项目。您可以通过为项目做出贡献、报告错误或建议新功能来帮助该项目成长。';
String get help_project_grow_description =>
'Spotube是一个开源项目。您可以通过为项目做出贡献、报告错误或建议新功能来帮助该项目成长。';
@override
String get contribute_on_github => '在GitHub上做出贡献';
@ -1190,7 +1155,8 @@ class AppLocalizationsZh extends AppLocalizations {
}
@override
String get streaming_fees_hypothetical => '*基于 Spotify 每次播放的支付金额\n\$0.003 到 \$0.005 计算。这是一个假设性的\n计算,旨在让用户了解如果他们在 Spotify 上收听\n这些歌曲,可能会付给艺术家的金额。';
String get streaming_fees_hypothetical =>
'*基于 Spotify 每次播放的支付金额\n\$0.003 到 \$0.005 计算。这是一个假设性的\n计算,旨在让用户了解如果他们在 Spotify 上收听\n这些歌曲,可能会付给艺术家的金额。';
@override
String get minutes_listened => '听的分钟数';
@ -1212,7 +1178,8 @@ class AppLocalizationsZh extends AppLocalizations {
}
@override
String get spotify_hipotetical_calculation => '*根据 Spotify 每次流媒体的支付金额\n\$0.003 到 \$0.005 进行计算。这是一个假设性的\n计算,用于给用户了解他们如果在 Spotify 上\n收听歌曲会支付给艺术家的金额。';
String get hipotetical_calculation =>
'*This is calculated based on average online music streaming platform\'s per stream\npayout of \$0.003 to \$0.005. This is a hypothetical\ncalculation to give user insight about how much they\nwould have paid to the artists if they were to listen\ntheir song in different music streaming platform.';
@override
String count_mins(Object minutes) {
@ -1261,7 +1228,8 @@ class AppLocalizationsZh extends AppLocalizations {
String get webview_not_found => '未找到 Webview';
@override
String get webview_not_found_description => '您的设备中未安装 Webview 运行时。\n如果已安装,请确保它在 environment PATH 中\n\n安装后,重新启动应用程序';
String get webview_not_found_description =>
'您的设备中未安装 Webview 运行时。\n如果已安装,请确保它在 environment PATH 中\n\n安装后,重新启动应用程序';
@override
String get unsupported_platform => '不支持的平台';
@ -1358,7 +1326,8 @@ class AppLocalizationsZh extends AppLocalizations {
}
@override
String get youtube_engine_unix_issue_message => '在 macOS/Linux/Unix 类操作系统中,在 .zshrc/.bashrc/.bash_profile 等文件中设置路径无效。\n您需要在 shell 配置文件中设置路径';
String get youtube_engine_unix_issue_message =>
'在 macOS/Linux/Unix 类操作系统中,在 .zshrc/.bashrc/.bash_profile 等文件中设置路径无效。\n您需要在 shell 配置文件中设置路径';
@override
String get download => '下载';

View File

@ -1,5 +1,6 @@
import 'dart:async';
import 'dart:ui';
import 'dart:io';
import 'package:desktop_webview_window/desktop_webview_window.dart';
import 'package:flutter/foundation.dart';
@ -16,7 +17,7 @@ import 'package:media_kit/media_kit.dart';
import 'package:metadata_god/metadata_god.dart';
import 'package:smtc_windows/smtc_windows.dart';
import 'package:spotube/collections/env.dart';
import 'package:spotube/collections/initializers.dart';
import 'package:spotube/collections/http-override.dart';
import 'package:spotube/collections/intents.dart';
import 'package:spotube/collections/routes.dart';
import 'package:spotube/hooks/configurators/use_close_behavior.dart';
@ -30,6 +31,8 @@ import 'package:spotube/modules/settings/color_scheme_picker_dialog.dart';
import 'package:spotube/provider/audio_player/audio_player_streams.dart';
import 'package:spotube/provider/database/database.dart';
import 'package:spotube/provider/glance/glance.dart';
import 'package:spotube/provider/metadata_plugin/metadata_plugin_provider.dart';
import 'package:spotube/provider/metadata_plugin/updater/update_checker.dart';
import 'package:spotube/provider/server/bonsoir.dart';
import 'package:spotube/provider/server/server.dart';
import 'package:spotube/provider/tray_manager/tray_manager.dart';
@ -65,7 +68,9 @@ Future<void> main(List<String> rawArgs) async {
AppLogger.runZoned(() async {
final widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
await registerWindowsScheme("spotify");
HttpOverrides.global = BadCertificateAllowlistOverrides();
// await registerWindowsScheme("spotify");
tz.initializeTimeZones();
@ -145,8 +150,11 @@ class Spotube extends HookConsumerWidget {
ref.listen(audioPlayerStreamListenersProvider, (_, __) {});
ref.listen(bonsoirProvider, (_, __) {});
ref.listen(connectClientsProvider, (_, __) {});
ref.listen(metadataPluginsProvider, (_, __) {});
ref.listen(metadataPluginProvider, (_, __) {});
ref.listen(serverProvider, (_, __) {});
ref.listen(trayManagerProvider, (_, __) {});
ref.listen(metadataPluginUpdateCheckerProvider, (_, __) {});
useFixWindowStretching();
useDisableBatteryOptimizations();

View File

@ -5,7 +5,7 @@ import 'dart:convert';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:media_kit/media_kit.dart' hide Track;
import 'package:spotify/spotify.dart' hide Playlist;
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/provider/audio_player/state.dart';
part 'connect.freezed.dart';

View File

@ -33,20 +33,25 @@ WebSocketLoadEventData _$WebSocketLoadEventDataFromJson(
/// @nodoc
mixin _$WebSocketLoadEventData {
@JsonKey(name: 'tracks', toJson: _tracksJson)
List<Track> get tracks => throw _privateConstructorUsedError;
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks => throw _privateConstructorUsedError;
Object? get collection => throw _privateConstructorUsedError;
int? get initialIndex => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)
playlist,
required TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)
album,
}) =>
@ -54,13 +59,17 @@ mixin _$WebSocketLoadEventData {
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult? Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
}) =>
@ -68,13 +77,17 @@ mixin _$WebSocketLoadEventData {
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
required TResult orElse(),
@ -117,7 +130,9 @@ abstract class $WebSocketLoadEventDataCopyWith<$Res> {
_$WebSocketLoadEventDataCopyWithImpl<$Res, WebSocketLoadEventData>;
@useResult
$Res call(
{@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
int? initialIndex});
}
@ -144,7 +159,7 @@ class _$WebSocketLoadEventDataCopyWithImpl<$Res,
tracks: null == tracks
? _value.tracks
: tracks // ignore: cast_nullable_to_non_nullable
as List<Track>,
as List<SpotubeTrackObject>,
initialIndex: freezed == initialIndex
? _value.initialIndex
: initialIndex // ignore: cast_nullable_to_non_nullable
@ -163,9 +178,13 @@ abstract class _$$WebSocketLoadEventDataPlaylistImplCopyWith<$Res>
@override
@useResult
$Res call(
{@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex});
$SpotubeSimplePlaylistObjectCopyWith<$Res>? get collection;
}
/// @nodoc
@ -191,17 +210,32 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
tracks: null == tracks
? _value._tracks
: tracks // ignore: cast_nullable_to_non_nullable
as List<Track>,
as List<SpotubeTrackObject>,
collection: freezed == collection
? _value.collection
: collection // ignore: cast_nullable_to_non_nullable
as PlaylistSimple?,
as SpotubeSimplePlaylistObject?,
initialIndex: freezed == initialIndex
? _value.initialIndex
: initialIndex // ignore: cast_nullable_to_non_nullable
as int?,
));
}
/// Create a copy of WebSocketLoadEventData
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$SpotubeSimplePlaylistObjectCopyWith<$Res>? get collection {
if (_value.collection == null) {
return null;
}
return $SpotubeSimplePlaylistObjectCopyWith<$Res>(_value.collection!,
(value) {
return _then(_value.copyWith(collection: value));
});
}
}
/// @nodoc
@ -209,8 +243,9 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res>
class _$WebSocketLoadEventDataPlaylistImpl
extends WebSocketLoadEventDataPlaylist {
_$WebSocketLoadEventDataPlaylistImpl(
{@JsonKey(name: 'tracks', toJson: _tracksJson)
required final List<Track> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
this.collection,
this.initialIndex,
final String? $type})
@ -222,17 +257,18 @@ class _$WebSocketLoadEventDataPlaylistImpl
Map<String, dynamic> json) =>
_$$WebSocketLoadEventDataPlaylistImplFromJson(json);
final List<Track> _tracks;
final List<SpotubeTrackObject> _tracks;
@override
@JsonKey(name: 'tracks', toJson: _tracksJson)
List<Track> get tracks {
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks {
if (_tracks is EqualUnmodifiableListView) return _tracks;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_tracks);
}
@override
final PlaylistSimple? collection;
final SpotubeSimplePlaylistObject? collection;
@override
final int? initialIndex;
@ -275,13 +311,17 @@ class _$WebSocketLoadEventDataPlaylistImpl
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)
playlist,
required TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)
album,
}) {
@ -292,13 +332,17 @@ class _$WebSocketLoadEventDataPlaylistImpl
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult? Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
}) {
@ -309,13 +353,17 @@ class _$WebSocketLoadEventDataPlaylistImpl
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
required TResult orElse(),
@ -367,9 +415,10 @@ class _$WebSocketLoadEventDataPlaylistImpl
abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData {
factory WebSocketLoadEventDataPlaylist(
{@JsonKey(name: 'tracks', toJson: _tracksJson)
required final List<Track> tracks,
final PlaylistSimple? collection,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
final SpotubeSimplePlaylistObject? collection,
final int? initialIndex}) = _$WebSocketLoadEventDataPlaylistImpl;
WebSocketLoadEventDataPlaylist._() : super._();
@ -377,10 +426,11 @@ abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData {
_$WebSocketLoadEventDataPlaylistImpl.fromJson;
@override
@JsonKey(name: 'tracks', toJson: _tracksJson)
List<Track> get tracks;
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks;
@override
PlaylistSimple? get collection;
SpotubeSimplePlaylistObject? get collection;
@override
int? get initialIndex;
@ -403,9 +453,13 @@ abstract class _$$WebSocketLoadEventDataAlbumImplCopyWith<$Res>
@override
@useResult
$Res call(
{@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex});
$SpotubeSimpleAlbumObjectCopyWith<$Res>? get collection;
}
/// @nodoc
@ -431,25 +485,40 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res>
tracks: null == tracks
? _value._tracks
: tracks // ignore: cast_nullable_to_non_nullable
as List<Track>,
as List<SpotubeTrackObject>,
collection: freezed == collection
? _value.collection
: collection // ignore: cast_nullable_to_non_nullable
as AlbumSimple?,
as SpotubeSimpleAlbumObject?,
initialIndex: freezed == initialIndex
? _value.initialIndex
: initialIndex // ignore: cast_nullable_to_non_nullable
as int?,
));
}
/// Create a copy of WebSocketLoadEventData
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$SpotubeSimpleAlbumObjectCopyWith<$Res>? get collection {
if (_value.collection == null) {
return null;
}
return $SpotubeSimpleAlbumObjectCopyWith<$Res>(_value.collection!, (value) {
return _then(_value.copyWith(collection: value));
});
}
}
/// @nodoc
@JsonSerializable()
class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
_$WebSocketLoadEventDataAlbumImpl(
{@JsonKey(name: 'tracks', toJson: _tracksJson)
required final List<Track> tracks,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
this.collection,
this.initialIndex,
final String? $type})
@ -461,17 +530,18 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
Map<String, dynamic> json) =>
_$$WebSocketLoadEventDataAlbumImplFromJson(json);
final List<Track> _tracks;
final List<SpotubeTrackObject> _tracks;
@override
@JsonKey(name: 'tracks', toJson: _tracksJson)
List<Track> get tracks {
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks {
if (_tracks is EqualUnmodifiableListView) return _tracks;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_tracks);
}
@override
final AlbumSimple? collection;
final SpotubeSimpleAlbumObject? collection;
@override
final int? initialIndex;
@ -513,13 +583,17 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)
playlist,
required TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)
album,
}) {
@ -530,13 +604,17 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult? Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
}) {
@ -547,13 +625,17 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
PlaylistSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex)?
playlist,
TResult Function(
@JsonKey(name: 'tracks', toJson: _tracksJson) List<Track> tracks,
AlbumSimple? collection,
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex)?
album,
required TResult orElse(),
@ -605,9 +687,10 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum {
abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData {
factory WebSocketLoadEventDataAlbum(
{@JsonKey(name: 'tracks', toJson: _tracksJson)
required final List<Track> tracks,
final AlbumSimple? collection,
{@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
required final List<SpotubeTrackObject> tracks,
final SpotubeSimpleAlbumObject? collection,
final int? initialIndex}) = _$WebSocketLoadEventDataAlbumImpl;
WebSocketLoadEventDataAlbum._() : super._();
@ -615,10 +698,11 @@ abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData {
_$WebSocketLoadEventDataAlbumImpl.fromJson;
@override
@JsonKey(name: 'tracks', toJson: _tracksJson)
List<Track> get tracks;
@Assert("tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject")
List<SpotubeTrackObject> get tracks;
@override
AlbumSimple? get collection;
SpotubeSimpleAlbumObject? get collection;
@override
int? get initialIndex;

View File

@ -10,11 +10,12 @@ _$WebSocketLoadEventDataPlaylistImpl
_$$WebSocketLoadEventDataPlaylistImplFromJson(Map json) =>
_$WebSocketLoadEventDataPlaylistImpl(
tracks: (json['tracks'] as List<dynamic>)
.map((e) => Track.fromJson(Map<String, dynamic>.from(e as Map)))
.map((e) => SpotubeTrackObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
collection: json['collection'] == null
? null
: PlaylistSimple.fromJson(
: SpotubeSimplePlaylistObject.fromJson(
Map<String, dynamic>.from(json['collection'] as Map)),
initialIndex: (json['initialIndex'] as num?)?.toInt(),
$type: json['runtimeType'] as String?,
@ -23,7 +24,7 @@ _$WebSocketLoadEventDataPlaylistImpl
Map<String, dynamic> _$$WebSocketLoadEventDataPlaylistImplToJson(
_$WebSocketLoadEventDataPlaylistImpl instance) =>
<String, dynamic>{
'tracks': _tracksJson(instance.tracks),
'tracks': instance.tracks.map((e) => e.toJson()).toList(),
'collection': instance.collection?.toJson(),
'initialIndex': instance.initialIndex,
'runtimeType': instance.$type,
@ -33,11 +34,12 @@ _$WebSocketLoadEventDataAlbumImpl _$$WebSocketLoadEventDataAlbumImplFromJson(
Map json) =>
_$WebSocketLoadEventDataAlbumImpl(
tracks: (json['tracks'] as List<dynamic>)
.map((e) => Track.fromJson(Map<String, dynamic>.from(e as Map)))
.map((e) =>
SpotubeTrackObject.fromJson(Map<String, dynamic>.from(e as Map)))
.toList(),
collection: json['collection'] == null
? null
: AlbumSimple.fromJson(
: SpotubeSimpleAlbumObject.fromJson(
Map<String, dynamic>.from(json['collection'] as Map)),
initialIndex: (json['initialIndex'] as num?)?.toInt(),
$type: json['runtimeType'] as String?,
@ -46,7 +48,7 @@ _$WebSocketLoadEventDataAlbumImpl _$$WebSocketLoadEventDataAlbumImplFromJson(
Map<String, dynamic> _$$WebSocketLoadEventDataAlbumImplToJson(
_$WebSocketLoadEventDataAlbumImpl instance) =>
<String, dynamic>{
'tracks': _tracksJson(instance.tracks),
'tracks': instance.tracks.map((e) => e.toJson()).toList(),
'collection': instance.collection?.toJson(),
'initialIndex': instance.initialIndex,
'runtimeType': instance.$type,

View File

@ -1,22 +1,26 @@
part of 'connect.dart';
List<Map<String, dynamic>> _tracksJson(List<Track> tracks) {
return tracks.map((e) => e.toJson()).toList();
}
@freezed
class WebSocketLoadEventData with _$WebSocketLoadEventData {
const WebSocketLoadEventData._();
factory WebSocketLoadEventData.playlist({
@JsonKey(name: 'tracks', toJson: _tracksJson) required List<Track> tracks,
PlaylistSimple? collection,
@Assert(
"tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject",
)
required List<SpotubeTrackObject> tracks,
SpotubeSimplePlaylistObject? collection,
int? initialIndex,
}) = WebSocketLoadEventDataPlaylist;
factory WebSocketLoadEventData.album({
@JsonKey(name: 'tracks', toJson: _tracksJson) required List<Track> tracks,
AlbumSimple? collection,
@Assert(
"tracks is List<SpotubeFullTrackObject>",
"tracks must be a list of SpotubeFullTrackObject",
)
required List<SpotubeTrackObject> tracks,
SpotubeSimpleAlbumObject? collection,
int? initialIndex,
}) = WebSocketLoadEventDataAlbum;

View File

@ -338,13 +338,16 @@ class WebSocketRemoveTrackEvent extends WebSocketEvent<String> {
WebSocketRemoveTrackEvent(String data) : super(WsEvent.removeTrack, data);
}
class WebSocketAddTrackEvent extends WebSocketEvent<Track> {
WebSocketAddTrackEvent(Track data) : super(WsEvent.addTrack, data);
class WebSocketAddTrackEvent extends WebSocketEvent<SpotubeFullTrackObject> {
WebSocketAddTrackEvent(SpotubeFullTrackObject data)
: super(WsEvent.addTrack, data);
WebSocketAddTrackEvent.fromJson(Map<String, dynamic> json)
: super(
WsEvent.addTrack,
Track.fromJson(json["data"] as Map<String, dynamic>),
SpotubeFullTrackObject.fromJson(
json["data"] as Map<String, dynamic>,
),
);
}

View File

@ -1,75 +0,0 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/services/sourced_track/sourced_track.dart';
class CurrentPlaylist {
List<Track>? _tempTrack;
List<Track> tracks;
String id;
String name;
String thumbnail;
bool isLocal;
CurrentPlaylist({
required this.tracks,
required this.id,
required this.name,
required this.thumbnail,
this.isLocal = false,
});
static CurrentPlaylist fromJson(Map<String, dynamic> map, Ref ref) {
return CurrentPlaylist(
id: map["id"],
tracks: List.castFrom<dynamic, Track>(map["tracks"]
.map(
(track) => map["isLocal"] == true
? SourcedTrack.fromJson(track, ref: ref)
: Track.fromJson(track),
)
.toList()),
name: map["name"],
thumbnail: map["thumbnail"],
isLocal: map["isLocal"],
);
}
List<String> get trackIds => tracks.map((e) => e.id!).toList();
bool shuffle(Track? topTrack) {
// won't shuffle if already shuffled
if (_tempTrack == null) {
_tempTrack = [...tracks];
tracks = List.from(tracks)..shuffle();
if (topTrack != null) {
tracks.remove(topTrack);
tracks.insert(0, topTrack);
}
return true;
}
return false;
}
bool unshuffle() {
// without _tempTracks unshuffling can't be done
if (_tempTrack != null) {
tracks = [..._tempTrack!];
_tempTrack = null;
return true;
}
return false;
}
Map<String, dynamic> toJson() {
return {
"id": id,
"name": name,
"tracks": tracks
.map((track) =>
track is SourcedTrack ? track.toJson() : track.toJson())
.toList(),
"thumbnail": thumbnail,
"isLocal": isLocal,
};
}
}

View File

@ -4,14 +4,16 @@ import 'dart:convert';
import 'dart:io';
import 'package:drift/drift.dart';
import 'package:drift/remote.dart';
import 'package:encrypt/encrypt.dart';
import 'package:media_kit/media_kit.dart' hide Track;
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart' show ThemeMode, Colors;
import 'package:spotify/spotify.dart' hide Playlist;
import 'package:spotube/models/database/database.steps.dart';
import 'package:spotube/models/lyrics.dart';
import 'package:spotube/models/metadata/market.dart';
import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/services/kv_store/encrypted_kv_store.dart';
import 'package:spotube/services/kv_store/kv_store.dart';
import 'package:spotube/services/sourced_track/enums.dart';
@ -35,12 +37,14 @@ part 'tables/source_match.dart';
part 'tables/audio_player_state.dart';
part 'tables/history.dart';
part 'tables/lyrics.dart';
part 'tables/metadata_plugins.dart';
part 'typeconverters/color.dart';
part 'typeconverters/locale.dart';
part 'typeconverters/string_list.dart';
part 'typeconverters/encrypted_text.dart';
part 'typeconverters/map.dart';
part 'typeconverters/map_list.dart';
part 'typeconverters/subtitle.dart';
@DriftDatabase(
@ -52,17 +56,16 @@ part 'typeconverters/subtitle.dart';
SkipSegmentTable,
SourceMatchTable,
AudioPlayerStateTable,
PlaylistTable,
PlaylistMediaTable,
HistoryTable,
LyricsTable,
MetadataPluginsTable,
],
)
class AppDatabase extends _$AppDatabase {
AppDatabase() : super(_openConnection());
@override
int get schemaVersion => 6;
int get schemaVersion => 7;
@override
MigrationStrategy get migration {
@ -115,10 +118,28 @@ class AppDatabase extends _$AppDatabase {
);
},
from5To6: (m, schema) async {
// Add new column to preferences table
try {
await m.addColumn(
schema.preferencesTable,
schema.preferencesTable.connectPort,
);
} on DriftRemoteException catch (e) {
// If the column already exists, ignore the error
if (e.remoteCause !=
'duplicate column name: ${schema.preferencesTable.connectPort.name}') {
rethrow;
}
}
},
from6To7: (m, schema) async {
await m.createTable(schema.metadataPluginsTable);
await m.addColumn(
schema.preferencesTable,
schema.preferencesTable.connectPort,
schema.audioPlayerStateTable,
schema.audioPlayerStateTable.currentIndex,
);
await m.addColumn(
schema.audioPlayerStateTable,
schema.audioPlayerStateTable.tracks,
);
},
),

File diff suppressed because it is too large Load Diff

View File

@ -3,8 +3,8 @@ import 'package:drift/internal/versioned_schema.dart' as i0;
import 'package:drift/drift.dart' as i1;
import 'package:drift/drift.dart'; // ignore_for_file: type=lint,unused_import
import 'package:flutter/material.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/models/database/database.dart';
import 'package:spotube/models/metadata/market.dart';
import 'package:spotube/services/sourced_track/enums.dart';
// GENERATED BY drift_dev, DO NOT MODIFY.
@ -1692,12 +1692,310 @@ class Shape13 extends i0.VersionedTable {
i1.GeneratedColumn<int> _column_56(String aliasedName) =>
i1.GeneratedColumn<int>('connect_port', aliasedName, false,
type: i1.DriftSqlType.int, defaultValue: const Constant(-1));
final class Schema7 extends i0.VersionedSchema {
Schema7({required super.database}) : super(version: 7);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
authenticationTable,
blacklistTable,
preferencesTable,
scrobblerTable,
skipSegmentTable,
sourceMatchTable,
audioPlayerStateTable,
historyTable,
lyricsTable,
metadataPluginsTable,
uniqueBlacklist,
uniqTrackMatch,
];
late final Shape0 authenticationTable = Shape0(
source: i0.VersionedTable(
entityName: 'authentication_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
],
attachedDatabase: database,
),
alias: null);
late final Shape1 blacklistTable = Shape1(
source: i0.VersionedTable(
entityName: 'blacklist_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_4,
_column_5,
_column_6,
],
attachedDatabase: database,
),
alias: null);
late final Shape13 preferencesTable = Shape13(
source: i0.VersionedTable(
entityName: 'preferences_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_7,
_column_8,
_column_9,
_column_10,
_column_11,
_column_12,
_column_13,
_column_14,
_column_15,
_column_55,
_column_17,
_column_18,
_column_19,
_column_20,
_column_21,
_column_22,
_column_23,
_column_24,
_column_25,
_column_26,
_column_54,
_column_27,
_column_28,
_column_29,
_column_30,
_column_31,
_column_56,
_column_53,
],
attachedDatabase: database,
),
alias: null);
late final Shape3 scrobblerTable = Shape3(
source: i0.VersionedTable(
entityName: 'scrobbler_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_32,
_column_33,
_column_34,
],
attachedDatabase: database,
),
alias: null);
late final Shape4 skipSegmentTable = Shape4(
source: i0.VersionedTable(
entityName: 'skip_segment_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_35,
_column_36,
_column_37,
_column_32,
],
attachedDatabase: database,
),
alias: null);
late final Shape5 sourceMatchTable = Shape5(
source: i0.VersionedTable(
entityName: 'source_match_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_37,
_column_38,
_column_39,
_column_32,
],
attachedDatabase: database,
),
alias: null);
late final Shape14 audioPlayerStateTable = Shape14(
source: i0.VersionedTable(
entityName: 'audio_player_state_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_40,
_column_41,
_column_42,
_column_43,
_column_57,
_column_58,
],
attachedDatabase: database,
),
alias: null);
late final Shape9 historyTable = Shape9(
source: i0.VersionedTable(
entityName: 'history_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_32,
_column_50,
_column_51,
_column_52,
],
attachedDatabase: database,
),
alias: null);
late final Shape10 lyricsTable = Shape10(
source: i0.VersionedTable(
entityName: 'lyrics_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_37,
_column_52,
],
attachedDatabase: database,
),
alias: null);
late final Shape15 metadataPluginsTable = Shape15(
source: i0.VersionedTable(
entityName: 'metadata_plugins_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_59,
_column_60,
_column_61,
_column_62,
_column_63,
_column_64,
_column_65,
_column_66,
_column_67,
_column_68,
],
attachedDatabase: database,
),
alias: null);
final i1.Index uniqueBlacklist = i1.Index('unique_blacklist',
'CREATE UNIQUE INDEX unique_blacklist ON blacklist_table (element_type, element_id)');
final i1.Index uniqTrackMatch = i1.Index('uniq_track_match',
'CREATE UNIQUE INDEX uniq_track_match ON source_match_table (track_id, source_id, source_type)');
}
class Shape14 extends i0.VersionedTable {
Shape14({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<bool> get playing =>
columnsByName['playing']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get loopMode =>
columnsByName['loop_mode']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get shuffled =>
columnsByName['shuffled']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get collections =>
columnsByName['collections']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get tracks =>
columnsByName['tracks']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<int> get currentIndex =>
columnsByName['current_index']! as i1.GeneratedColumn<int>;
}
i1.GeneratedColumn<String> _column_57(String aliasedName) =>
i1.GeneratedColumn<String>('tracks', aliasedName, false,
type: i1.DriftSqlType.string, defaultValue: const Constant("[]"));
i1.GeneratedColumn<int> _column_58(String aliasedName) =>
i1.GeneratedColumn<int>('current_index', aliasedName, false,
type: i1.DriftSqlType.int, defaultValue: const Constant(0));
class Shape15 extends i0.VersionedTable {
Shape15({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get name =>
columnsByName['name']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get description =>
columnsByName['description']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get version =>
columnsByName['version']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get author =>
columnsByName['author']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get entryPoint =>
columnsByName['entry_point']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get apis =>
columnsByName['apis']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get abilities =>
columnsByName['abilities']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get selected =>
columnsByName['selected']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get repository =>
columnsByName['repository']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get pluginApiVersion =>
columnsByName['plugin_api_version']! as i1.GeneratedColumn<String>;
}
i1.GeneratedColumn<String> _column_59(String aliasedName) =>
i1.GeneratedColumn<String>('name', aliasedName, false,
additionalChecks: i1.GeneratedColumn.checkTextLength(
minTextLength: 1, maxTextLength: 50),
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_60(String aliasedName) =>
i1.GeneratedColumn<String>('description', aliasedName, false,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_61(String aliasedName) =>
i1.GeneratedColumn<String>('version', aliasedName, false,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_62(String aliasedName) =>
i1.GeneratedColumn<String>('author', aliasedName, false,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_63(String aliasedName) =>
i1.GeneratedColumn<String>('entry_point', aliasedName, false,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_64(String aliasedName) =>
i1.GeneratedColumn<String>('apis', aliasedName, false,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_65(String aliasedName) =>
i1.GeneratedColumn<String>('abilities', aliasedName, false,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<bool> _column_66(String aliasedName) =>
i1.GeneratedColumn<bool>('selected', aliasedName, false,
type: i1.DriftSqlType.bool,
defaultConstraints: i1.GeneratedColumn.constraintIsAlways(
'CHECK ("selected" IN (0, 1))'),
defaultValue: const Constant(false));
i1.GeneratedColumn<String> _column_67(String aliasedName) =>
i1.GeneratedColumn<String>('repository', aliasedName, true,
type: i1.DriftSqlType.string);
i1.GeneratedColumn<String> _column_68(String aliasedName) =>
i1.GeneratedColumn<String>('plugin_api_version', aliasedName, false,
type: i1.DriftSqlType.string);
i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
}) {
return (currentVersion, database) async {
switch (currentVersion) {
@ -1726,6 +2024,11 @@ i0.MigrationStepWithVersion migrationSteps({
final migrator = i1.Migrator(database, schema);
await from5To6(migrator, schema);
return 6;
case 6:
final schema = Schema7(database: database);
final migrator = i1.Migrator(database, schema);
await from6To7(migrator, schema);
return 7;
default:
throw ArgumentError.value('Unknown migration from $currentVersion');
}
@ -1738,6 +2041,7 @@ i1.OnUpgrade stepByStep({
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
required Future<void> Function(i1.Migrator m, Schema7 schema) from6To7,
}) =>
i0.VersionedSchema.stepByStepHelper(
step: migrationSteps(
@ -1746,4 +2050,5 @@ i1.OnUpgrade stepByStep({
from3To4: from3To4,
from4To5: from4To5,
from5To6: from5To6,
from6To7: from6To7,
));

View File

@ -6,22 +6,29 @@ class AudioPlayerStateTable extends Table {
TextColumn get loopMode => textEnum<PlaylistMode>()();
BoolColumn get shuffled => boolean()();
TextColumn get collections => text().map(const StringListConverter())();
TextColumn get tracks => text()
.map(const SpotubeTrackObjectListConverter())
.withDefault(const Constant("[]"))();
IntColumn get currentIndex => integer().withDefault(const Constant(0))();
}
class PlaylistTable extends Table {
IntColumn get id => integer().autoIncrement()();
IntColumn get audioPlayerStateId =>
integer().references(AudioPlayerStateTable, #id)();
IntColumn get index => integer()();
}
class SpotubeTrackObjectListConverter
extends TypeConverter<List<SpotubeTrackObject>, String> {
const SpotubeTrackObjectListConverter();
class PlaylistMediaTable extends Table {
IntColumn get id => integer().autoIncrement()();
IntColumn get playlistId => integer().references(PlaylistTable, #id)();
@override
List<SpotubeTrackObject> fromSql(String fromDb) {
final raw = (jsonDecode(fromDb) as List).cast<Map>();
TextColumn get uri => text()();
TextColumn get extras =>
text().nullable().map(const MapTypeConverter<String, dynamic>())();
TextColumn get httpHeaders =>
text().nullable().map(const MapTypeConverter<String, String>())();
return raw
.map((e) => SpotubeTrackObject.fromJson(e.cast<String, dynamic>()))
.toList();
}
@override
String toSql(List<SpotubeTrackObject> value) {
return jsonEncode(
value.map((e) => e.toJson()).toList(),
);
}
}

View File

@ -16,10 +16,16 @@ class HistoryTable extends Table {
}
extension HistoryItemParseExtension on HistoryTableData {
PlaylistSimple? get playlist =>
type == HistoryEntryType.playlist ? PlaylistSimple.fromJson(data) : null;
AlbumSimple? get album =>
type == HistoryEntryType.album ? AlbumSimple.fromJson(data) : null;
Track? get track =>
type == HistoryEntryType.track ? Track.fromJson(data) : null;
SpotubeSimplePlaylistObject? get playlist =>
type == HistoryEntryType.playlist && !data.containsKey("external_urls")
? SpotubeSimplePlaylistObject.fromJson(data)
: null;
SpotubeSimpleAlbumObject? get album =>
type == HistoryEntryType.album && !data.containsKey("external_urls")
? SpotubeSimpleAlbumObject.fromJson(data)
: null;
SpotubeTrackObject? get track =>
type == HistoryEntryType.track && !data.containsKey("external_urls")
? SpotubeTrackObject.fromJson(data)
: null;
}

View File

@ -0,0 +1,15 @@
part of '../database.dart';
class MetadataPluginsTable extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text().withLength(min: 1, max: 50)();
TextColumn get description => text()();
TextColumn get version => text()();
TextColumn get author => text()();
TextColumn get entryPoint => text()();
TextColumn get apis => text().map(const StringListConverter())();
TextColumn get abilities => text().map(const StringListConverter())();
BoolColumn get selected => boolean().withDefault(const Constant(false))();
TextColumn get repository => text().nullable()();
TextColumn get pluginApiVersion => text()();
}

View File

@ -0,0 +1,20 @@
part of '../database.dart';
class MapListConverter
extends TypeConverter<List<Map<String, dynamic>>, String> {
const MapListConverter();
@override
List<Map<String, dynamic>> fromSql(String fromDb) {
return fromDb
.split(",")
.where((e) => e.isNotEmpty)
.map((e) => json.decode(e) as Map<String, dynamic>)
.toList();
}
@override
String toSql(List<Map<String, dynamic>> value) {
return value.map((e) => json.encode(e)).join(",");
}
}

View File

@ -1,44 +0,0 @@
import 'package:spotify/spotify.dart';
class LocalTrack extends Track {
final String path;
LocalTrack.fromTrack({
required Track track,
required this.path,
}) : super() {
album = track.album;
artists = track.artists;
availableMarkets = track.availableMarkets;
discNumber = track.discNumber;
durationMs = track.durationMs;
explicit = track.explicit;
externalIds = track.externalIds;
externalUrls = track.externalUrls;
href = track.href;
id = track.id;
isPlayable = track.isPlayable;
linkedFrom = track.linkedFrom;
name = track.name;
popularity = track.popularity;
previewUrl = track.previewUrl;
trackNumber = track.trackNumber;
type = track.type;
uri = track.uri;
}
factory LocalTrack.fromJson(Map<String, dynamic> json) {
return LocalTrack.fromTrack(
track: Track.fromJson(json),
path: json['path'],
);
}
@override
Map<String, dynamic> toJson() {
return {
...super.toJson(),
'path': path,
};
}
}

View File

@ -0,0 +1,42 @@
part of 'metadata.dart';
enum SpotubeAlbumType {
album,
single,
compilation,
}
@freezed
class SpotubeFullAlbumObject with _$SpotubeFullAlbumObject {
factory SpotubeFullAlbumObject({
required String id,
required String name,
required List<SpotubeSimpleArtistObject> artists,
@Default([]) List<SpotubeImageObject> images,
required String releaseDate,
required String externalUri,
required int totalTracks,
required SpotubeAlbumType albumType,
String? recordLabel,
List<String>? genres,
}) = _SpotubeFullAlbumObject;
factory SpotubeFullAlbumObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeFullAlbumObjectFromJson(json);
}
@freezed
class SpotubeSimpleAlbumObject with _$SpotubeSimpleAlbumObject {
factory SpotubeSimpleAlbumObject({
required String id,
required String name,
required String externalUri,
required List<SpotubeSimpleArtistObject> artists,
@Default([]) List<SpotubeImageObject> images,
required SpotubeAlbumType albumType,
String? releaseDate,
}) = _SpotubeSimpleAlbumObject;
factory SpotubeSimpleAlbumObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeSimpleAlbumObjectFromJson(json);
}

View File

@ -0,0 +1,41 @@
part of 'metadata.dart';
@freezed
class SpotubeFullArtistObject with _$SpotubeFullArtistObject {
factory SpotubeFullArtistObject({
required String id,
required String name,
required String externalUri,
@Default([]) List<SpotubeImageObject> images,
List<String>? genres,
int? followers,
}) = _SpotubeFullArtistObject;
factory SpotubeFullArtistObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeFullArtistObjectFromJson(json);
}
@freezed
class SpotubeSimpleArtistObject with _$SpotubeSimpleArtistObject {
factory SpotubeSimpleArtistObject({
required String id,
required String name,
required String externalUri,
List<SpotubeImageObject>? images,
}) = _SpotubeSimpleArtistObject;
factory SpotubeSimpleArtistObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeSimpleArtistObjectFromJson(json);
}
extension SpotubeFullArtistObjectAsString on List<SpotubeFullArtistObject> {
String asString() {
return map((e) => e.name).join(", ");
}
}
extension SpotubeSimpleArtistObjectAsString on List<SpotubeSimpleArtistObject> {
String asString() {
return map((e) => e.name).join(", ");
}
}

View File

@ -0,0 +1,21 @@
part of 'metadata.dart';
@Freezed(genericArgumentFactories: true)
class SpotubeBrowseSectionObject<T> with _$SpotubeBrowseSectionObject<T> {
factory SpotubeBrowseSectionObject({
required String id,
required String title,
required String externalUri,
required bool browseMore,
required List<T> items,
}) = _SpotubeBrowseSectionObject<T>;
factory SpotubeBrowseSectionObject.fromJson(
Map<String, Object?> json,
T Function(Map<String, dynamic> json) fromJsonT,
) =>
_$SpotubeBrowseSectionObjectFromJson<T>(
json,
(json) => fromJsonT(json as Map<String, dynamic>),
);
}

View File

@ -0,0 +1,26 @@
part of 'metadata.dart';
enum FormFieldVariant { text, password, number }
@Freezed(unionKey: 'objectType')
class MetadataFormFieldObject with _$MetadataFormFieldObject {
@FreezedUnionValue("input")
factory MetadataFormFieldObject.input({
required String objectType,
required String id,
@Default(FormFieldVariant.text) FormFieldVariant variant,
String? placeholder,
String? defaultValue,
bool? required,
String? regex,
}) = MetadataFormFieldInputObject;
@FreezedUnionValue("text")
factory MetadataFormFieldObject.text({
required String objectType,
required String text,
}) = MetadataFormFieldTextObject;
factory MetadataFormFieldObject.fromJson(Map<String, dynamic> json) =>
_$MetadataFormFieldObjectFromJson(json);
}

View File

@ -0,0 +1,83 @@
part of 'metadata.dart';
@freezed
class SpotubeImageObject with _$SpotubeImageObject {
factory SpotubeImageObject({
required String url,
int? width,
int? height,
}) = _SpotubeImageObject;
factory SpotubeImageObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeImageObjectFromJson(json);
}
enum ImagePlaceholder {
albumArt,
artist,
collection,
online,
}
final placeholderUrlMap = {
ImagePlaceholder.albumArt: Assets.albumPlaceholder.path,
ImagePlaceholder.artist: Assets.userPlaceholder.path,
ImagePlaceholder.collection: Assets.placeholder.path,
ImagePlaceholder.online:
"https://avatars.dicebear.com/api/bottts/${PrimitiveUtils.uuid.v4()}.png",
};
extension SpotubeImageExtensions on List<SpotubeImageObject>? {
/// Returns the URL of the image at the specified index.
String asUrlString({
int index = 1,
required ImagePlaceholder placeholder,
}) {
final sortedImage = this?.sorted((a, b) => a.width!.compareTo(b.width!));
return sortedImage != null && sortedImage.isNotEmpty
? sortedImage[
index > sortedImage.length - 1 ? sortedImage.length - 1 : index]
.url
: placeholderUrlMap[placeholder]!;
}
String smallest(ImagePlaceholder placeholder) {
final sortedImage = this?.sorted((a, b) {
final widthComparison = (a.width ?? 0).compareTo(b.width ?? 0);
if (widthComparison != 0) return widthComparison;
return (a.height ?? 0).compareTo(b.height ?? 0);
});
return sortedImage != null && sortedImage.isNotEmpty
? sortedImage.first.url
: placeholderUrlMap[placeholder]!;
}
String from200PxTo300PxOrSmallestImage([
ImagePlaceholder placeholder = ImagePlaceholder.albumArt,
]) {
final placeholderUrl = placeholderUrlMap[placeholder]!;
// Sort images by width and height to find the smallest one
final sortedImage = this?.sorted((a, b) {
final widthComparison = (a.width ?? 0).compareTo(b.width ?? 0);
if (widthComparison != 0) return widthComparison;
return (a.height ?? 0).compareTo(b.height ?? 0);
});
return sortedImage != null && sortedImage.isNotEmpty
? sortedImage.firstWhere(
(image) {
final width = image.width ?? 0;
final height = image.height ?? 0;
return width >= 200 &&
height >= 200 &&
width <= 300 &&
height <= 300;
},
orElse: () => sortedImage.first,
).url
: placeholderUrl;
}
}

View File

@ -0,0 +1,252 @@
enum Market {
AD,
AE,
AF,
AG,
AI,
AL,
AM,
AO,
AQ,
AR,
AS,
AT,
AU,
AW,
AX,
AZ,
BA,
BB,
BD,
BE,
BF,
BG,
BH,
BI,
BJ,
BL,
BM,
BN,
BO,
BQ,
BR,
BS,
BT,
BV,
BW,
BY,
BZ,
CA,
CC,
CD,
CF,
CG,
CH,
CI,
CK,
CL,
CM,
CN,
CO,
CR,
CU,
CV,
CW,
CX,
CY,
CZ,
DE,
DJ,
DK,
DM,
DO,
DZ,
EC,
EE,
EG,
EH,
ER,
ES,
ET,
FI,
FJ,
FK,
FM,
FO,
FR,
GA,
GB,
GD,
GE,
GF,
GG,
GH,
GI,
GL,
GM,
GN,
GP,
GQ,
GR,
GS,
GT,
GU,
GW,
GY,
HK,
HM,
HN,
HR,
HT,
HU,
ID,
IE,
IL,
IM,
IN,
IO,
IQ,
IR,
IS,
IT,
JE,
JM,
JO,
JP,
KE,
KG,
KH,
KI,
KM,
KN,
KP,
KR,
KW,
KY,
KZ,
LA,
LB,
LC,
LI,
LK,
LR,
LS,
LT,
LU,
LV,
LY,
MA,
MC,
MD,
ME,
MF,
MG,
MH,
MK,
ML,
MM,
MN,
MO,
MP,
MQ,
MR,
MS,
MT,
MU,
MV,
MW,
MX,
MY,
MZ,
NA,
NC,
NE,
NF,
NG,
NI,
NL,
NO,
NP,
NR,
NU,
NZ,
OM,
PA,
PE,
PF,
PG,
PH,
PK,
PL,
PM,
PN,
PR,
PS,
PT,
PW,
PY,
QA,
RE,
RO,
RS,
RU,
RW,
SA,
SB,
SC,
SD,
SE,
SG,
SH,
SI,
SJ,
SK,
SL,
SM,
SN,
SO,
SR,
SS,
ST,
SV,
SX,
SY,
SZ,
TC,
TD,
TF,
TG,
TH,
TJ,
TK,
TL,
TM,
TN,
TO,
TR,
TT,
TV,
TW,
TZ,
UA,
UG,
UM,
US,
UY,
UZ,
VA,
VC,
VE,
VG,
VI,
VN,
VU,
WF,
WS,
XK,
YE,
YT,
ZA,
ZM,
ZW,
}

View File

@ -0,0 +1,30 @@
library metadata_objects;
import 'dart:io';
import 'dart:typed_data';
import 'package:collection/collection.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:metadata_god/metadata_god.dart';
import 'package:mime/mime.dart';
import 'package:path/path.dart';
import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/utils/primitive_utils.dart';
part 'metadata.g.dart';
part 'metadata.freezed.dart';
part 'album.dart';
part 'artist.dart';
part 'browse.dart';
part 'fields.dart';
part 'image.dart';
part 'pagination.dart';
part 'playlist.dart';
part 'search.dart';
part 'track.dart';
part 'user.dart';
part 'plugin.dart';
part 'repository.dart';

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,502 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'metadata.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
_$SpotubeFullAlbumObjectImpl _$$SpotubeFullAlbumObjectImplFromJson(Map json) =>
_$SpotubeFullAlbumObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
artists: (json['artists'] as List<dynamic>)
.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
releaseDate: json['releaseDate'] as String,
externalUri: json['externalUri'] as String,
totalTracks: (json['totalTracks'] as num).toInt(),
albumType: $enumDecode(_$SpotubeAlbumTypeEnumMap, json['albumType']),
recordLabel: json['recordLabel'] as String?,
genres:
(json['genres'] as List<dynamic>?)?.map((e) => e as String).toList(),
);
Map<String, dynamic> _$$SpotubeFullAlbumObjectImplToJson(
_$SpotubeFullAlbumObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'artists': instance.artists.map((e) => e.toJson()).toList(),
'images': instance.images.map((e) => e.toJson()).toList(),
'releaseDate': instance.releaseDate,
'externalUri': instance.externalUri,
'totalTracks': instance.totalTracks,
'albumType': _$SpotubeAlbumTypeEnumMap[instance.albumType]!,
'recordLabel': instance.recordLabel,
'genres': instance.genres,
};
const _$SpotubeAlbumTypeEnumMap = {
SpotubeAlbumType.album: 'album',
SpotubeAlbumType.single: 'single',
SpotubeAlbumType.compilation: 'compilation',
};
_$SpotubeSimpleAlbumObjectImpl _$$SpotubeSimpleAlbumObjectImplFromJson(
Map json) =>
_$SpotubeSimpleAlbumObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
externalUri: json['externalUri'] as String,
artists: (json['artists'] as List<dynamic>)
.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
albumType: $enumDecode(_$SpotubeAlbumTypeEnumMap, json['albumType']),
releaseDate: json['releaseDate'] as String?,
);
Map<String, dynamic> _$$SpotubeSimpleAlbumObjectImplToJson(
_$SpotubeSimpleAlbumObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'externalUri': instance.externalUri,
'artists': instance.artists.map((e) => e.toJson()).toList(),
'images': instance.images.map((e) => e.toJson()).toList(),
'albumType': _$SpotubeAlbumTypeEnumMap[instance.albumType]!,
'releaseDate': instance.releaseDate,
};
_$SpotubeFullArtistObjectImpl _$$SpotubeFullArtistObjectImplFromJson(
Map json) =>
_$SpotubeFullArtistObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
externalUri: json['externalUri'] as String,
images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
genres:
(json['genres'] as List<dynamic>?)?.map((e) => e as String).toList(),
followers: (json['followers'] as num?)?.toInt(),
);
Map<String, dynamic> _$$SpotubeFullArtistObjectImplToJson(
_$SpotubeFullArtistObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'externalUri': instance.externalUri,
'images': instance.images.map((e) => e.toJson()).toList(),
'genres': instance.genres,
'followers': instance.followers,
};
_$SpotubeSimpleArtistObjectImpl _$$SpotubeSimpleArtistObjectImplFromJson(
Map json) =>
_$SpotubeSimpleArtistObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
externalUri: json['externalUri'] as String,
images: (json['images'] as List<dynamic>?)
?.map((e) =>
SpotubeImageObject.fromJson(Map<String, dynamic>.from(e as Map)))
.toList(),
);
Map<String, dynamic> _$$SpotubeSimpleArtistObjectImplToJson(
_$SpotubeSimpleArtistObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'externalUri': instance.externalUri,
'images': instance.images?.map((e) => e.toJson()).toList(),
};
_$SpotubeBrowseSectionObjectImpl<T>
_$$SpotubeBrowseSectionObjectImplFromJson<T>(
Map json,
T Function(Object? json) fromJsonT,
) =>
_$SpotubeBrowseSectionObjectImpl<T>(
id: json['id'] as String,
title: json['title'] as String,
externalUri: json['externalUri'] as String,
browseMore: json['browseMore'] as bool,
items: (json['items'] as List<dynamic>).map(fromJsonT).toList(),
);
Map<String, dynamic> _$$SpotubeBrowseSectionObjectImplToJson<T>(
_$SpotubeBrowseSectionObjectImpl<T> instance,
Object? Function(T value) toJsonT,
) =>
<String, dynamic>{
'id': instance.id,
'title': instance.title,
'externalUri': instance.externalUri,
'browseMore': instance.browseMore,
'items': instance.items.map(toJsonT).toList(),
};
_$MetadataFormFieldInputObjectImpl _$$MetadataFormFieldInputObjectImplFromJson(
Map json) =>
_$MetadataFormFieldInputObjectImpl(
objectType: json['objectType'] as String,
id: json['id'] as String,
variant:
$enumDecodeNullable(_$FormFieldVariantEnumMap, json['variant']) ??
FormFieldVariant.text,
placeholder: json['placeholder'] as String?,
defaultValue: json['defaultValue'] as String?,
required: json['required'] as bool?,
regex: json['regex'] as String?,
);
Map<String, dynamic> _$$MetadataFormFieldInputObjectImplToJson(
_$MetadataFormFieldInputObjectImpl instance) =>
<String, dynamic>{
'objectType': instance.objectType,
'id': instance.id,
'variant': _$FormFieldVariantEnumMap[instance.variant]!,
'placeholder': instance.placeholder,
'defaultValue': instance.defaultValue,
'required': instance.required,
'regex': instance.regex,
};
const _$FormFieldVariantEnumMap = {
FormFieldVariant.text: 'text',
FormFieldVariant.password: 'password',
FormFieldVariant.number: 'number',
};
_$MetadataFormFieldTextObjectImpl _$$MetadataFormFieldTextObjectImplFromJson(
Map json) =>
_$MetadataFormFieldTextObjectImpl(
objectType: json['objectType'] as String,
text: json['text'] as String,
);
Map<String, dynamic> _$$MetadataFormFieldTextObjectImplToJson(
_$MetadataFormFieldTextObjectImpl instance) =>
<String, dynamic>{
'objectType': instance.objectType,
'text': instance.text,
};
_$SpotubeImageObjectImpl _$$SpotubeImageObjectImplFromJson(Map json) =>
_$SpotubeImageObjectImpl(
url: json['url'] as String,
width: (json['width'] as num?)?.toInt(),
height: (json['height'] as num?)?.toInt(),
);
Map<String, dynamic> _$$SpotubeImageObjectImplToJson(
_$SpotubeImageObjectImpl instance) =>
<String, dynamic>{
'url': instance.url,
'width': instance.width,
'height': instance.height,
};
_$SpotubePaginationResponseObjectImpl<T>
_$$SpotubePaginationResponseObjectImplFromJson<T>(
Map json,
T Function(Object? json) fromJsonT,
) =>
_$SpotubePaginationResponseObjectImpl<T>(
limit: (json['limit'] as num).toInt(),
nextOffset: (json['nextOffset'] as num?)?.toInt(),
total: (json['total'] as num).toInt(),
hasMore: json['hasMore'] as bool,
items: (json['items'] as List<dynamic>).map(fromJsonT).toList(),
);
Map<String, dynamic> _$$SpotubePaginationResponseObjectImplToJson<T>(
_$SpotubePaginationResponseObjectImpl<T> instance,
Object? Function(T value) toJsonT,
) =>
<String, dynamic>{
'limit': instance.limit,
'nextOffset': instance.nextOffset,
'total': instance.total,
'hasMore': instance.hasMore,
'items': instance.items.map(toJsonT).toList(),
};
_$SpotubeFullPlaylistObjectImpl _$$SpotubeFullPlaylistObjectImplFromJson(
Map json) =>
_$SpotubeFullPlaylistObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
description: json['description'] as String,
externalUri: json['externalUri'] as String,
owner: SpotubeUserObject.fromJson(
Map<String, dynamic>.from(json['owner'] as Map)),
images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
collaborators: (json['collaborators'] as List<dynamic>?)
?.map((e) => SpotubeUserObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
collaborative: json['collaborative'] as bool? ?? false,
public: json['public'] as bool? ?? false,
);
Map<String, dynamic> _$$SpotubeFullPlaylistObjectImplToJson(
_$SpotubeFullPlaylistObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'description': instance.description,
'externalUri': instance.externalUri,
'owner': instance.owner.toJson(),
'images': instance.images.map((e) => e.toJson()).toList(),
'collaborators': instance.collaborators.map((e) => e.toJson()).toList(),
'collaborative': instance.collaborative,
'public': instance.public,
};
_$SpotubeSimplePlaylistObjectImpl _$$SpotubeSimplePlaylistObjectImplFromJson(
Map json) =>
_$SpotubeSimplePlaylistObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
description: json['description'] as String,
externalUri: json['externalUri'] as String,
owner: SpotubeUserObject.fromJson(
Map<String, dynamic>.from(json['owner'] as Map)),
images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
);
Map<String, dynamic> _$$SpotubeSimplePlaylistObjectImplToJson(
_$SpotubeSimplePlaylistObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'description': instance.description,
'externalUri': instance.externalUri,
'owner': instance.owner.toJson(),
'images': instance.images.map((e) => e.toJson()).toList(),
};
_$SpotubeSearchResponseObjectImpl _$$SpotubeSearchResponseObjectImplFromJson(
Map json) =>
_$SpotubeSearchResponseObjectImpl(
albums: (json['albums'] as List<dynamic>)
.map((e) => SpotubeSimpleAlbumObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
artists: (json['artists'] as List<dynamic>)
.map((e) => SpotubeFullArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
playlists: (json['playlists'] as List<dynamic>)
.map((e) => SpotubeSimplePlaylistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
tracks: (json['tracks'] as List<dynamic>)
.map((e) => SpotubeFullTrackObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
);
Map<String, dynamic> _$$SpotubeSearchResponseObjectImplToJson(
_$SpotubeSearchResponseObjectImpl instance) =>
<String, dynamic>{
'albums': instance.albums.map((e) => e.toJson()).toList(),
'artists': instance.artists.map((e) => e.toJson()).toList(),
'playlists': instance.playlists.map((e) => e.toJson()).toList(),
'tracks': instance.tracks.map((e) => e.toJson()).toList(),
};
_$SpotubeLocalTrackObjectImpl _$$SpotubeLocalTrackObjectImplFromJson(
Map json) =>
_$SpotubeLocalTrackObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
externalUri: json['externalUri'] as String,
artists: (json['artists'] as List<dynamic>?)
?.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
album: SpotubeSimpleAlbumObject.fromJson(
Map<String, dynamic>.from(json['album'] as Map)),
durationMs: (json['durationMs'] as num).toInt(),
path: json['path'] as String,
$type: json['runtimeType'] as String?,
);
Map<String, dynamic> _$$SpotubeLocalTrackObjectImplToJson(
_$SpotubeLocalTrackObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'externalUri': instance.externalUri,
'artists': instance.artists.map((e) => e.toJson()).toList(),
'album': instance.album.toJson(),
'durationMs': instance.durationMs,
'path': instance.path,
'runtimeType': instance.$type,
};
_$SpotubeFullTrackObjectImpl _$$SpotubeFullTrackObjectImplFromJson(Map json) =>
_$SpotubeFullTrackObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
externalUri: json['externalUri'] as String,
artists: (json['artists'] as List<dynamic>?)
?.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
album: SpotubeSimpleAlbumObject.fromJson(
Map<String, dynamic>.from(json['album'] as Map)),
durationMs: (json['durationMs'] as num).toInt(),
isrc: json['isrc'] as String,
explicit: json['explicit'] as bool,
$type: json['runtimeType'] as String?,
);
Map<String, dynamic> _$$SpotubeFullTrackObjectImplToJson(
_$SpotubeFullTrackObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'externalUri': instance.externalUri,
'artists': instance.artists.map((e) => e.toJson()).toList(),
'album': instance.album.toJson(),
'durationMs': instance.durationMs,
'isrc': instance.isrc,
'explicit': instance.explicit,
'runtimeType': instance.$type,
};
_$SpotubeUserObjectImpl _$$SpotubeUserObjectImplFromJson(Map json) =>
_$SpotubeUserObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
externalUri: json['externalUri'] as String,
);
Map<String, dynamic> _$$SpotubeUserObjectImplToJson(
_$SpotubeUserObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'images': instance.images.map((e) => e.toJson()).toList(),
'externalUri': instance.externalUri,
};
_$PluginConfigurationImpl _$$PluginConfigurationImplFromJson(Map json) =>
_$PluginConfigurationImpl(
type: $enumDecode(_$PluginTypeEnumMap, json['type']),
name: json['name'] as String,
description: json['description'] as String,
version: json['version'] as String,
author: json['author'] as String,
entryPoint: json['entryPoint'] as String,
pluginApiVersion: json['pluginApiVersion'] as String,
apis: (json['apis'] as List<dynamic>?)
?.map((e) => $enumDecode(_$PluginApisEnumMap, e))
.toList() ??
const [],
abilities: (json['abilities'] as List<dynamic>?)
?.map((e) => $enumDecode(_$PluginAbilitiesEnumMap, e))
.toList() ??
const [],
repository: json['repository'] as String?,
);
Map<String, dynamic> _$$PluginConfigurationImplToJson(
_$PluginConfigurationImpl instance) =>
<String, dynamic>{
'type': _$PluginTypeEnumMap[instance.type]!,
'name': instance.name,
'description': instance.description,
'version': instance.version,
'author': instance.author,
'entryPoint': instance.entryPoint,
'pluginApiVersion': instance.pluginApiVersion,
'apis': instance.apis.map((e) => _$PluginApisEnumMap[e]!).toList(),
'abilities':
instance.abilities.map((e) => _$PluginAbilitiesEnumMap[e]!).toList(),
'repository': instance.repository,
};
const _$PluginTypeEnumMap = {
PluginType.metadata: 'metadata',
};
const _$PluginApisEnumMap = {
PluginApis.webview: 'webview',
PluginApis.localstorage: 'localstorage',
PluginApis.timezone: 'timezone',
};
const _$PluginAbilitiesEnumMap = {
PluginAbilities.authentication: 'authentication',
PluginAbilities.scrobbling: 'scrobbling',
};
_$PluginUpdateAvailableImpl _$$PluginUpdateAvailableImplFromJson(Map json) =>
_$PluginUpdateAvailableImpl(
downloadUrl: json['downloadUrl'] as String,
version: json['version'] as String,
changelog: json['changelog'] as String?,
);
Map<String, dynamic> _$$PluginUpdateAvailableImplToJson(
_$PluginUpdateAvailableImpl instance) =>
<String, dynamic>{
'downloadUrl': instance.downloadUrl,
'version': instance.version,
'changelog': instance.changelog,
};
_$MetadataPluginRepositoryImpl _$$MetadataPluginRepositoryImplFromJson(
Map json) =>
_$MetadataPluginRepositoryImpl(
name: json['name'] as String,
owner: json['owner'] as String,
description: json['description'] as String,
repoUrl: json['repoUrl'] as String,
);
Map<String, dynamic> _$$MetadataPluginRepositoryImplToJson(
_$MetadataPluginRepositoryImpl instance) =>
<String, dynamic>{
'name': instance.name,
'owner': instance.owner,
'description': instance.description,
'repoUrl': instance.repoUrl,
};

Some files were not shown because too many files have changed in this diff Show More