diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 6b684d48..8257eac9 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -295,5 +295,23 @@ "delete_playlist": "Delete Playlist", "delete_playlist_confirmation": "Are you sure you want to delete this playlist?", "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" } \ No newline at end of file diff --git a/lib/pages/getting_started/getting_started.dart b/lib/pages/getting_started/getting_started.dart index 47cfda03..724fb346 100644 --- a/lib/pages/getting_started/getting_started.dart +++ b/lib/pages/getting_started/getting_started.dart @@ -3,6 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/collections/assets.gen.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/playback.dart'; import 'package:spotube/pages/getting_started/sections/region.dart'; @@ -51,7 +52,7 @@ class GettingStarting extends HookConsumerWidget { ); }, child: Text( - "Skip this nonsense", + context.l10n.skip_this_nonsense, style: TextStyle( decoration: TextDecoration.underline, decorationColor: colorScheme.primary, diff --git a/lib/pages/getting_started/sections/greeting.dart b/lib/pages/getting_started/sections/greeting.dart index 459500e3..563e43de 100644 --- a/lib/pages/getting_started/sections/greeting.dart +++ b/lib/pages/getting_started/sections/greeting.dart @@ -1,11 +1,10 @@ -import 'dart:ui'; - import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/getting_started/blur_card.dart'; +import 'package:spotube/extensions/context.dart'; import 'package:spotube/utils/platform.dart'; class GettingStartedPageGreetingSection extends HookConsumerWidget { @@ -30,7 +29,9 @@ class GettingStartedPageGreetingSection extends HookConsumerWidget { ), const Gap(4), 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, style: textTheme.titleMedium?.copyWith( fontWeight: FontWeight.w300, @@ -43,7 +44,7 @@ class GettingStartedPageGreetingSection extends HookConsumerWidget { child: FilledButton.icon( onPressed: onNext, icon: const Icon(SpotubeIcons.angleRight), - label: const Text("Let's get started"), + label: Text(context.l10n.get_started), ), ), ], diff --git a/lib/pages/getting_started/sections/playback.dart b/lib/pages/getting_started/sections/playback.dart index 03d11f9b..e94a06cc 100644 --- a/lib/pages/getting_started/sections/playback.dart +++ b/lib/pages/getting_started/sections/playback.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/collections/assets.gen.dart'; @@ -18,14 +19,6 @@ final audioSourceToIconMap = { 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 { final VoidCallback onNext; final VoidCallback onPrevious; @@ -43,6 +36,17 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget { final preferences = ref.watch(userPreferencesProvider); 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( child: BlurCard( child: Column( @@ -57,7 +61,10 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget { ), const Gap(16), ListTile( - title: Text("Select Audio Source", style: textTheme.titleMedium), + title: Text( + context.l10n.select_audio_source, + style: textTheme.titleMedium, + ), ), const Gap(16), ToggleButtons( @@ -111,7 +118,7 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget { ListTile( title: Text(context.l10n.endless_playback), subtitle: Text( - "Automatically append new songs\nto the end of the queue", + context.l10n.endless_playback_description, style: textTheme.bodySmall?.copyWith( color: dividerColor, ), diff --git a/lib/pages/getting_started/sections/region.dart b/lib/pages/getting_started/sections/region.dart index 23885d50..9303392c 100644 --- a/lib/pages/getting_started/sections/region.dart +++ b/lib/pages/getting_started/sections/region.dart @@ -33,7 +33,7 @@ class GettingStartedPageLanguageRegionSection extends HookConsumerWidget { ), const SizedBox(width: 8), Text( - "Language and Region", + context.l10n.language_region, style: textTheme.titleMedium, ), ], @@ -44,11 +44,11 @@ class GettingStartedPageLanguageRegionSection extends HookConsumerWidget { mainAxisSize: MainAxisSize.min, children: [ Text( - "Choose your region", + context.l10n.choose_your_region, style: textTheme.titleSmall, ), Text( - "This will help us show you the right content\nfor your location.", + context.l10n.choose_your_region_description, style: textTheme.bodySmall?.copyWith( color: dividerColor, ), @@ -76,7 +76,7 @@ class GettingStartedPageLanguageRegionSection extends HookConsumerWidget { ), const Gap(36), Text( - "Choose your language", + context.l10n.choose_your_language, style: textTheme.titleSmall, ), const Gap(16), diff --git a/lib/pages/getting_started/sections/support.dart b/lib/pages/getting_started/sections/support.dart index 9b798f56..1be7ca34 100644 --- a/lib/pages/getting_started/sections/support.dart +++ b/lib/pages/getting_started/sections/support.dart @@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/collections/spotube_icons.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:url_launcher/url_launcher_string.dart'; @@ -28,16 +29,14 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget { const Icon(SpotubeIcons.heartFilled, color: Colors.pink), const SizedBox(width: 8), Text( - "Help this project grow", + context.l10n.help_project_grow, style: textTheme.titleMedium?.copyWith(color: Colors.pink), ), ], ), const Gap(16), - const Text( - "Spotube is an open-source project. You can help this project grow by contributing to the project, reporting bugs, or suggesting new features.", - ), + Text(context.l10n.help_project_grow_description), const Gap(16), Column( mainAxisSize: MainAxisSize.min, @@ -45,7 +44,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget { children: [ FilledButton.icon( icon: const Icon(SpotubeIcons.github), - label: const Text("Contribute on GitHub"), + label: Text(context.l10n.contribute_on_github), style: FilledButton.styleFrom( backgroundColor: Colors.black, foregroundColor: Colors.white, @@ -63,7 +62,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget { const Gap(16), FilledButton.icon( icon: const Icon(SpotubeIcons.openCollective), - label: const Text("Donate on Open Collective"), + label: Text(context.l10n.donate_on_open_collective), style: FilledButton.styleFrom( backgroundColor: const Color(0xff4cb7f6), foregroundColor: Colors.white, @@ -98,7 +97,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget { ), child: TextButton.icon( icon: const Icon(SpotubeIcons.anonymous), - label: const Text("Browse anonymously"), + label: Text(context.l10n.browse_anonymously), style: TextButton.styleFrom( foregroundColor: Colors.white, ), @@ -111,7 +110,7 @@ class GettingStartedScreenSupportSection extends HookConsumerWidget { const Gap(16), FilledButton.icon( icon: const Icon(SpotubeIcons.spotify), - label: const Text("Connect Spotify Account"), + label: Text(context.l10n.connect_with_spotify), style: FilledButton.styleFrom( backgroundColor: const Color(0xff1db954), foregroundColor: Colors.white, diff --git a/untranslated_messages.json b/untranslated_messages.json index cc14528c..3ff7a2f1 100644 --- a/untranslated_messages.json +++ b/untranslated_messages.json @@ -8,7 +8,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -20,7 +38,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -32,7 +68,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -44,7 +98,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -56,7 +128,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -68,7 +158,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -80,7 +188,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -92,7 +218,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -104,7 +248,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -116,7 +278,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -128,7 +308,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -141,7 +339,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -153,7 +369,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -165,7 +399,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -177,7 +429,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -189,7 +459,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -201,7 +489,25 @@ "delete_playlist", "delete_playlist_confirmation", "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": [ @@ -213,6 +519,24 @@ "delete_playlist", "delete_playlist_confirmation", "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" ] }