Skip to content

Commit

Permalink
feat(locale): localize search, library, lyrics, artist with both Beng…
Browse files Browse the repository at this point in the history
…ali and English
  • Loading branch information
Kingkor Roy Tirtho committed Apr 29, 2023
1 parent a1cdbad commit 11fe9ec
Show file tree
Hide file tree
Showing 13 changed files with 172 additions and 69 deletions.
7 changes: 4 additions & 3 deletions lib/components/artist/artist_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';

import 'package:spotify/spotify.dart';
import 'package:spotube/components/shared/image/universal_image.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/hooks/use_breakpoint_value.dart';
import 'package:spotube/hooks/use_brightness_value.dart';
import 'package:spotube/provider/blacklist_provider.dart';
Expand Down Expand Up @@ -89,9 +90,9 @@ class ArtistCard extends HookConsumerWidget {
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(50)),
child: const Text(
"Artist",
style: TextStyle(
child: Text(
context.l10n.artist,
style: const TextStyle(
color: Colors.white,
fontSize: 12,
fontWeight: FontWeight.bold,
Expand Down
7 changes: 4 additions & 3 deletions lib/components/library/user_albums.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/album/album_card.dart';
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/hooks/use_breakpoint_value.dart';
import 'package:spotube/provider/authentication_provider.dart';
import 'package:spotube/services/queries/queries.dart';
Expand Down Expand Up @@ -71,9 +72,9 @@ class UserAlbums extends HookConsumerWidget {
children: [
TextField(
onChanged: (value) => searchText.value = value,
decoration: const InputDecoration(
prefixIcon: Icon(SpotubeIcons.filter),
hintText: 'Filter albums...',
decoration: InputDecoration(
prefixIcon: const Icon(SpotubeIcons.filter),
hintText: context.l10n.filter_albums,
),
),
const SizedBox(height: 20),
Expand Down
15 changes: 8 additions & 7 deletions lib/components/library/user_artists.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
import 'package:spotube/components/shared/waypoint.dart';
import 'package:spotube/components/artist/artist_card.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/provider/authentication_provider.dart';
import 'package:spotube/services/queries/queries.dart';
import 'package:tuple/tuple.dart';
Expand Down Expand Up @@ -62,9 +63,9 @@ class UserArtists extends HookConsumerWidget {
color: theme.scaffoldBackgroundColor,
child: TextField(
onChanged: (value) => searchText.value = value,
decoration: const InputDecoration(
prefixIcon: Icon(SpotubeIcons.filter),
hintText: 'Filter artists...',
decoration: InputDecoration(
prefixIcon: const Icon(SpotubeIcons.filter),
hintText: context.l10n.filter_artist,
),
),
),
Expand All @@ -76,10 +77,10 @@ class UserArtists extends HookConsumerWidget {
padding: const EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
CircularProgressIndicator(),
SizedBox(width: 10),
Text("Loading..."),
children: [
const CircularProgressIndicator(),
const SizedBox(width: 10),
Text(context.l10n.loading),
],
),
)
Expand Down
6 changes: 4 additions & 2 deletions lib/components/library/user_downloads.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';

import 'package:spotify/spotify.dart';
import 'package:spotube/components/shared/image/universal_image.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/provider/downloader_provider.dart';
import 'package:spotube/utils/type_conversion_utils.dart';

Expand All @@ -24,7 +25,8 @@ class UserDownloads extends HookConsumerWidget {
children: [
Expanded(
child: AutoSizeText(
"Currently downloading (${downloader.currentlyRunning})",
context.l10n
.currently_downloading(downloader.currentlyRunning),
maxLines: 1,
style: Theme.of(context).textTheme.headlineMedium,
),
Expand All @@ -38,7 +40,7 @@ class UserDownloads extends HookConsumerWidget {
onPressed: downloader.currentlyRunning > 0
? downloader.cancelAll
: null,
child: const Text("Cancel All"),
child: Text(context.l10n.cancel_all),
),
],
),
Expand Down
13 changes: 7 additions & 6 deletions lib/components/library/user_local_tracks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import 'package:spotube/components/shared/compact_search.dart';
import 'package:spotube/components/shared/shimmers/shimmer_track_tile.dart';
import 'package:spotube/components/shared/sort_tracks_dropdown.dart';
import 'package:spotube/components/shared/track_table/track_tile.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/hooks/use_async_effect.dart';
import 'package:spotube/models/local_track.dart';
import 'package:spotube/provider/playlist_queue_provider.dart';
Expand Down Expand Up @@ -175,9 +176,9 @@ class UserLocalTracks extends HookConsumerWidget {
[],
);

var searchbar = CompactSearch(
final searchbar = CompactSearch(
onChanged: (value) => searchText.value = value,
placeholder: "Search local tracks...",
placeholder: context.l10n.search_local_tracks,
);

return Column(
Expand All @@ -202,7 +203,7 @@ class UserLocalTracks extends HookConsumerWidget {
: null,
child: Row(
children: [
const Text("Play"),
Text(context.l10n.play),
Icon(
isPlaylistPlaying ? SpotubeIcons.stop : SpotubeIcons.play,
)
Expand Down Expand Up @@ -294,9 +295,9 @@ class UserLocalTracks extends HookConsumerWidget {
ref.refresh(localTracksProvider);
},
padding: EdgeInsets.zero,
child: const ListTile(
leading: Icon(SpotubeIcons.trash),
title: Text("Delete"),
child: ListTile(
leading: const Icon(SpotubeIcons.trash),
title: Text(context.l10n.delete),
),
),
];
Expand Down
13 changes: 7 additions & 6 deletions lib/components/library/user_playlists.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import 'package:spotube/components/playlist/playlist_create_dialog.dart';
import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart';
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
import 'package:spotube/components/playlist/playlist_card.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/hooks/use_breakpoint_value.dart';
import 'package:spotube/hooks/use_breakpoints.dart';
import 'package:spotube/provider/authentication_provider.dart';
Expand All @@ -33,8 +34,8 @@ class UserPlaylists extends HookConsumerWidget {

final likedTracksPlaylist = useMemoized(
() => PlaylistSimple()
..name = "Liked Tracks"
..description = "All your liked tracks"
..name = context.l10n.liked_tracks
..description = context.l10n.liked_tracks_description
..type = "playlist"
..collaborative = false
..public = false
Expand All @@ -46,7 +47,7 @@ class UserPlaylists extends HookConsumerWidget {
..url =
"https://t.scdn.co/images/3099b3803ad9496896c43f22fe9be8c4.png"
],
[]);
[context.l10n]);

final playlists = useMemoized(
() {
Expand Down Expand Up @@ -87,9 +88,9 @@ class UserPlaylists extends HookConsumerWidget {
padding: const EdgeInsets.all(10),
child: TextField(
onChanged: (value) => searchText.value = value,
decoration: const InputDecoration(
hintText: "Filter your playlists...",
prefixIcon: Icon(SpotubeIcons.filter),
decoration: InputDecoration(
hintText: context.l10n.filter_playlists,
prefixIcon: const Icon(SpotubeIcons.filter),
),
),
),
Expand Down
23 changes: 12 additions & 11 deletions lib/components/playlist/playlist_create_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/provider/spotify_provider.dart';

class PlaylistCreateDialog extends HookConsumerWidget {
Expand All @@ -18,7 +19,7 @@ class PlaylistCreateDialog extends HookConsumerWidget {
foregroundColor: Theme.of(context).colorScheme.primary,
),
icon: const Icon(SpotubeIcons.addFilled),
label: const Text("Create Playlist"),
label: Text(context.l10n.create_playlist),
onPressed: () {
showDialog(
context: context,
Expand Down Expand Up @@ -50,17 +51,17 @@ class PlaylistCreateDialog extends HookConsumerWidget {
}

return AlertDialog(
title: const Text("Create a Playlist"),
title: Text(context.l10n.create_a_playlist),
actions: [
OutlinedButton(
child: const Text("Cancel"),
child: Text(context.l10n.cancel),
onPressed: () {
Navigator.pop(context);
},
),
FilledButton(
onPressed: onCreate,
child: const Text("Create"),
child: Text(context.l10n.create),
),
],
content: Container(
Expand All @@ -71,29 +72,29 @@ class PlaylistCreateDialog extends HookConsumerWidget {
children: [
TextField(
controller: playlistName,
decoration: const InputDecoration(
hintText: "Name of the playlist",
labelText: "Playlist Name",
decoration: InputDecoration(
hintText: context.l10n.name_of_playlist,
labelText: context.l10n.name_of_playlist,
),
),
const SizedBox(height: 10),
TextField(
controller: description,
decoration: const InputDecoration(
hintText: "Description...",
decoration: InputDecoration(
hintText: context.l10n.description,
),
keyboardType: TextInputType.multiline,
maxLines: 5,
),
const SizedBox(height: 10),
CheckboxListTile(
title: const Text("Public"),
title: Text(context.l10n.public),
value: public.value,
onChanged: (val) => public.value = val ?? false,
),
const SizedBox(height: 10),
CheckboxListTile(
title: const Text("Collaborative"),
title: Text(context.l10n.collaborative),
value: collaborative.value,
onChanged: (val) => collaborative.value = val ?? false,
),
Expand Down
15 changes: 8 additions & 7 deletions lib/components/shared/sort_tracks_dropdown.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:flutter/material.dart';

import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/library/user_local_tracks.dart';
import 'package:spotube/extensions/context.dart';

class SortTracksDropdown extends StatelessWidget {
final SortBy? value;
Expand All @@ -20,37 +21,37 @@ class SortTracksDropdown extends StatelessWidget {
PopupMenuItem(
value: SortBy.none,
enabled: value != SortBy.none,
child: const Text("None"),
child: Text(context.l10n.none),
),
PopupMenuItem(
value: SortBy.ascending,
enabled: value != SortBy.ascending,
child: const Text("Sort by A-Z"),
child: Text(context.l10n.sort_a_z),
),
PopupMenuItem(
value: SortBy.descending,
enabled: value != SortBy.descending,
child: const Text("Sort by Z-A"),
child: Text(context.l10n.sort_z_a),
),
PopupMenuItem(
value: SortBy.dateAdded,
enabled: value != SortBy.dateAdded,
child: const Text("Sort by Date"),
child: Text(context.l10n.sort_date),
),
PopupMenuItem(
value: SortBy.artist,
enabled: value != SortBy.artist,
child: const Text("Sort by Artist"),
child: Text(context.l10n.sort_artist),
),
PopupMenuItem(
value: SortBy.album,
enabled: value != SortBy.album,
child: const Text("Sort by Album"),
child: Text(context.l10n.sort_album),
),
];
},
onSelected: onChanged,
tooltip: "Sort tracks",
tooltip: context.l10n.sort_tracks,
icon: const Icon(SpotubeIcons.sort),
);
}
Expand Down
43 changes: 42 additions & 1 deletion lib/l10n/app_bn.arb
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,46 @@
"load_more": "আরো লোড করুন",
"playlists": "প্লেলিস্ট",
"artists": "শিল্পী",
"albums": "অ্যালবাম"
"albums": "অ্যালবাম",
"tracks": "গানের ট্র্যাক",
"downloads": "ডাউনলোড",
"filter_playlists": "প্লেলিস্ট অনুসন্ধান করুন...",
"liked_tracks": "পছন্দের গান",
"liked_tracks_description": "আপনার পছন্দের গান সমূহ",
"create_playlist": "প্লেলিস্ট তৈরি করুন",
"create_a_playlist": "একটি প্লেলিস্ট তৈরি করুন",
"create": "তৈরি করুন",
"cancel": "বাতিল করুন",
"playlist_name": "প্লেলিস্টের নাম",
"name_of_playlist": "প্লেলিস্টের নাম",
"description": "বিবরণ",
"public": "পাবলিক",
"collaborative": "সহযোগিতামূলক",
"search_local_tracks": "ডাউনলোডকৃত গান অনুসন্ধান করুন...",
"play": "চালান",
"delete": "মুছে ফেলুন",
"none": "কোনটিই না",
"sort_a_z": "A-Z ক্রমে সাজান",
"sort_z_a": "Z-A ক্রমে সাজান",
"sort_date": "তারিখের ক্রমে সাজান",
"sort_artist": "শিল্পীর ক্রমে সাজান",
"sort_album": "অ্যালবামের ক্রমে সাজান",
"sort_tracks": "গানের ক্রম",
"currently_downloading": "ডাউনলোড করা হচ্ছে ({tracks_length})",
"cancel_all": "সব বাতিল করুন",
"filter_artist": "শিল্পীর অনুসন্ধান করুন...",
"followers": "{followers} অনুসরণকারী",
"add_artist_to_blacklist": "শিল্পীকে ব্ল্যাকলিস্টে যোগ করুন",
"top_tracks": "শীর্ষ গানের ট্র্যাক",
"fans_also_like": "অনুসরণকারীদের পছন্দ",
"loading": "লোড হচ্ছে...",
"artist": "শিল্পী",
"blacklisted": "ব্ল্যাকলিস্টে আছে",
"following": "অনুসরণ করছেন",
"follow": "অনুসরণ করুন",
"artist_url_copied": "শিল্পীর URL কপি করা হয়েছে",
"added_to_queue": "{tracks}টি গানের ট্র্যাক কিউতে যোগ করা হয়েছে",
"filter_albums": "অ্যালবাম অনুসন্ধান করুন...",
"synced": "সময়ের সাথে সুসংগত",
"plain": "অসুসংগত"
}

0 comments on commit 11fe9ec

Please sign in to comment.