chore: add translations for getting started screen

This commit is contained in:
Kingkor Roy Tirtho 2024-02-25 22:48:27 +06:00
parent 17105a640b
commit 4d6af8c0a7
7 changed files with 396 additions and 46 deletions

View File

@ -295,5 +295,23 @@
"delete_playlist": "Delete Playlist", "delete_playlist": "Delete Playlist",
"delete_playlist_confirmation": "Are you sure you want to delete this playlist?", "delete_playlist_confirmation": "Are you sure you want to delete this playlist?",
"local_tracks": "Local Tracks", "local_tracks": "Local Tracks",
"song_link": "Song Link" "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.",
"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"
} }

View File

@ -3,6 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/components/shared/page_window_title_bar.dart'; import 'package:spotube/components/shared/page_window_title_bar.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/pages/getting_started/sections/greeting.dart'; import 'package:spotube/pages/getting_started/sections/greeting.dart';
import 'package:spotube/pages/getting_started/sections/playback.dart'; import 'package:spotube/pages/getting_started/sections/playback.dart';
import 'package:spotube/pages/getting_started/sections/region.dart'; import 'package:spotube/pages/getting_started/sections/region.dart';
@ -51,7 +52,7 @@ class GettingStarting extends HookConsumerWidget {
); );
}, },
child: Text( child: Text(
"Skip this nonsense", context.l10n.skip_this_nonsense,
style: TextStyle( style: TextStyle(
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
decorationColor: colorScheme.primary, decorationColor: colorScheme.primary,

View File

@ -1,11 +1,10 @@
import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/getting_started/blur_card.dart'; import 'package:spotube/components/getting_started/blur_card.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/utils/platform.dart'; import 'package:spotube/utils/platform.dart';
class GettingStartedPageGreetingSection extends HookConsumerWidget { class GettingStartedPageGreetingSection extends HookConsumerWidget {
@ -30,7 +29,9 @@ class GettingStartedPageGreetingSection extends HookConsumerWidget {
), ),
const Gap(4), const Gap(4),
Text( Text(
"“Freedom of music${kIsMobile ? "in the palm of your hands" : ""}", kIsMobile
? context.l10n.freedom_of_music_palm
: context.l10n.freedom_of_music,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: textTheme.titleMedium?.copyWith( style: textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.w300, fontWeight: FontWeight.w300,
@ -43,7 +44,7 @@ class GettingStartedPageGreetingSection extends HookConsumerWidget {
child: FilledButton.icon( child: FilledButton.icon(
onPressed: onNext, onPressed: onNext,
icon: const Icon(SpotubeIcons.angleRight), icon: const Icon(SpotubeIcons.angleRight),
label: const Text("Let's get started"), label: Text(context.l10n.get_started),
), ),
), ),
], ],

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/collections/assets.gen.dart';
@ -18,14 +19,6 @@ final audioSourceToIconMap = {
AudioSource.jiosaavn: Assets.jiosaavn.image(width: 48, height: 48), AudioSource.jiosaavn: Assets.jiosaavn.image(width: 48, height: 48),
}; };
final audioSourceToDescription = {
AudioSource.youtube:
"Recommended and works best.\nHighest quality: 148kbps mp4, 128kbps opus",
AudioSource.piped: "Feeling free? Same as YouTube but a lot free",
AudioSource.jiosaavn:
"Best for South Asian region.\nHighest quality: 320kbps mp4",
};
class GettingStartedPagePlaybackSection extends HookConsumerWidget { class GettingStartedPagePlaybackSection extends HookConsumerWidget {
final VoidCallback onNext; final VoidCallback onNext;
final VoidCallback onPrevious; final VoidCallback onPrevious;
@ -43,6 +36,17 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget {
final preferences = ref.watch(userPreferencesProvider); final preferences = ref.watch(userPreferencesProvider);
final preferencesNotifier = ref.read(userPreferencesProvider.notifier); final preferencesNotifier = ref.read(userPreferencesProvider.notifier);
final audioSourceToDescription = useMemoized(
() => {
AudioSource.youtube: "${context.l10n.youtube_source_description}\n"
"${context.l10n.highest_quality("148kbps mp4, 128kbps opus")}",
AudioSource.piped: context.l10n.piped_source_description,
AudioSource.jiosaavn:
"${context.l10n.jiosaavn_source_description}\n"
"${context.l10n.highest_quality("320kbps mp")}",
},
[]);
return Center( return Center(
child: BlurCard( child: BlurCard(
child: Column( child: Column(
@ -57,7 +61,10 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget {
), ),
const Gap(16), const Gap(16),
ListTile( ListTile(
title: Text("Select Audio Source", style: textTheme.titleMedium), title: Text(
context.l10n.select_audio_source,
style: textTheme.titleMedium,
),
), ),
const Gap(16), const Gap(16),
ToggleButtons( ToggleButtons(
@ -111,7 +118,7 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget {
ListTile( ListTile(
title: Text(context.l10n.endless_playback), title: Text(context.l10n.endless_playback),
subtitle: Text( subtitle: Text(
"Automatically append new songs\nto the end of the queue", context.l10n.endless_playback_description,
style: textTheme.bodySmall?.copyWith( style: textTheme.bodySmall?.copyWith(
color: dividerColor, color: dividerColor,
), ),

View File

@ -33,7 +33,7 @@ class GettingStartedPageLanguageRegionSection extends HookConsumerWidget {
), ),
const SizedBox(width: 8), const SizedBox(width: 8),
Text( Text(
"Language and Region", context.l10n.language_region,
style: textTheme.titleMedium, style: textTheme.titleMedium,
), ),
], ],
@ -44,11 +44,11 @@ class GettingStartedPageLanguageRegionSection extends HookConsumerWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
"Choose your region", context.l10n.choose_your_region,
style: textTheme.titleSmall, style: textTheme.titleSmall,
), ),
Text( Text(
"This will help us show you the right content\nfor your location.", context.l10n.choose_your_region_description,
style: textTheme.bodySmall?.copyWith( style: textTheme.bodySmall?.copyWith(
color: dividerColor, color: dividerColor,
), ),
@ -76,7 +76,7 @@ class GettingStartedPageLanguageRegionSection extends HookConsumerWidget {
), ),
const Gap(36), const Gap(36),
Text( Text(
"Choose your language", context.l10n.choose_your_language,
style: textTheme.titleSmall, style: textTheme.titleSmall,
), ),
const Gap(16), const Gap(16),

View File

@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/getting_started/blur_card.dart'; import 'package:spotube/components/getting_started/blur_card.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/services/kv_store/kv_store.dart'; import 'package:spotube/services/kv_store/kv_store.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
@ -28,16 +29,14 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget {
const Icon(SpotubeIcons.heartFilled, color: Colors.pink), const Icon(SpotubeIcons.heartFilled, color: Colors.pink),
const SizedBox(width: 8), const SizedBox(width: 8),
Text( Text(
"Help this project grow", context.l10n.help_project_grow,
style: style:
textTheme.titleMedium?.copyWith(color: Colors.pink), textTheme.titleMedium?.copyWith(color: Colors.pink),
), ),
], ],
), ),
const Gap(16), const Gap(16),
const Text( Text(context.l10n.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.",
),
const Gap(16), const Gap(16),
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -45,7 +44,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget {
children: [ children: [
FilledButton.icon( FilledButton.icon(
icon: const Icon(SpotubeIcons.github), icon: const Icon(SpotubeIcons.github),
label: const Text("Contribute on GitHub"), label: Text(context.l10n.contribute_on_github),
style: FilledButton.styleFrom( style: FilledButton.styleFrom(
backgroundColor: Colors.black, backgroundColor: Colors.black,
foregroundColor: Colors.white, foregroundColor: Colors.white,
@ -63,7 +62,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget {
const Gap(16), const Gap(16),
FilledButton.icon( FilledButton.icon(
icon: const Icon(SpotubeIcons.openCollective), icon: const Icon(SpotubeIcons.openCollective),
label: const Text("Donate on Open Collective"), label: Text(context.l10n.donate_on_open_collective),
style: FilledButton.styleFrom( style: FilledButton.styleFrom(
backgroundColor: const Color(0xff4cb7f6), backgroundColor: const Color(0xff4cb7f6),
foregroundColor: Colors.white, foregroundColor: Colors.white,
@ -98,7 +97,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget {
), ),
child: TextButton.icon( child: TextButton.icon(
icon: const Icon(SpotubeIcons.anonymous), icon: const Icon(SpotubeIcons.anonymous),
label: const Text("Browse anonymously"), label: Text(context.l10n.browse_anonymously),
style: TextButton.styleFrom( style: TextButton.styleFrom(
foregroundColor: Colors.white, foregroundColor: Colors.white,
), ),
@ -111,7 +110,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget {
const Gap(16), const Gap(16),
FilledButton.icon( FilledButton.icon(
icon: const Icon(SpotubeIcons.spotify), icon: const Icon(SpotubeIcons.spotify),
label: const Text("Connect Spotify Account"), label: Text(context.l10n.connect_with_spotify),
style: FilledButton.styleFrom( style: FilledButton.styleFrom(
backgroundColor: const Color(0xff1db954), backgroundColor: const Color(0xff1db954),
foregroundColor: Colors.white, foregroundColor: Colors.white,

View File

@ -8,7 +8,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"bn": [ "bn": [
@ -20,7 +38,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"ca": [ "ca": [
@ -32,7 +68,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"de": [ "de": [
@ -44,7 +98,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"es": [ "es": [
@ -56,7 +128,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"fa": [ "fa": [
@ -68,7 +158,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"fr": [ "fr": [
@ -80,7 +188,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"hi": [ "hi": [
@ -92,7 +218,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"it": [ "it": [
@ -104,7 +248,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"ja": [ "ja": [
@ -116,7 +278,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"ne": [ "ne": [
@ -128,7 +308,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"nl": [ "nl": [
@ -141,7 +339,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"pl": [ "pl": [
@ -153,7 +369,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"pt": [ "pt": [
@ -165,7 +399,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"ru": [ "ru": [
@ -177,7 +429,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"tr": [ "tr": [
@ -189,7 +459,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"uk": [ "uk": [
@ -201,7 +489,25 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
], ],
"zh": [ "zh": [
@ -213,6 +519,24 @@
"delete_playlist", "delete_playlist",
"delete_playlist_confirmation", "delete_playlist_confirmation",
"local_tracks", "local_tracks",
"song_link" "song_link",
"skip_this_nonsense",
"freedom_of_music",
"freedom_of_music_palm",
"get_started",
"youtube_source_description",
"piped_source_description",
"jiosaavn_source_description",
"highest_quality",
"select_audio_source",
"endless_playback_description",
"choose_your_region",
"choose_your_region_description",
"choose_your_language",
"help_project_grow",
"help_project_grow_description",
"contribute_on_github",
"donate_on_open_collective",
"browse_anonymously"
] ]
} }