mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-02-17 14:59:35 +00:00
中文翻译
This commit is contained in:
parent
f671b704cf
commit
e354949cc1
13 changed files with 1692 additions and 163 deletions
|
|
@ -11,6 +11,7 @@ import 'package:vaani/features/onboarding/view/user_login.dart'
|
||||||
show UserLoginWidget;
|
show UserLoginWidget;
|
||||||
import 'package:vaani/features/player/view/mini_player_bottom_padding.dart'
|
import 'package:vaani/features/player/view/mini_player_bottom_padding.dart'
|
||||||
show MiniPlayerBottomPadding;
|
show MiniPlayerBottomPadding;
|
||||||
|
import 'package:vaani/generated/l10n.dart';
|
||||||
import 'package:vaani/main.dart' show appLogger;
|
import 'package:vaani/main.dart' show appLogger;
|
||||||
import 'package:vaani/router/router.dart' show Routes;
|
import 'package:vaani/router/router.dart' show Routes;
|
||||||
import 'package:vaani/settings/api_settings_provider.dart'
|
import 'package:vaani/settings/api_settings_provider.dart'
|
||||||
|
|
@ -28,7 +29,7 @@ class ServerManagerPage extends HookConsumerWidget {
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('Manage Accounts'),
|
title: Text(S.of(context).accountManage),
|
||||||
),
|
),
|
||||||
body: Center(
|
body: Center(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
|
@ -61,8 +62,8 @@ class ServerManagerBody extends HookConsumerWidget {
|
||||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
children: [
|
children: [
|
||||||
const Text(
|
Text(
|
||||||
'Registered Servers',
|
S.of(context).accountRegisteredServers,
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
|
|
@ -73,7 +74,13 @@ class ServerManagerBody extends HookConsumerWidget {
|
||||||
return ExpansionTile(
|
return ExpansionTile(
|
||||||
title: Text(registeredServer.serverUrl.toString()),
|
title: Text(registeredServer.serverUrl.toString()),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
'Users: ${availableUsers.where((element) => element.server == registeredServer).length}',
|
S.of(context).accountUsersCount(
|
||||||
|
availableUsers
|
||||||
|
.where(
|
||||||
|
(element) => element.server == registeredServer)
|
||||||
|
.length,
|
||||||
|
),
|
||||||
|
// 'Users: ${availableUsers.where((element) => element.server == registeredServer).length}',
|
||||||
),
|
),
|
||||||
// children are list of users of this server
|
// children are list of users of this server
|
||||||
children: availableUsers
|
children: availableUsers
|
||||||
|
|
@ -96,9 +103,9 @@ class ServerManagerBody extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
const Padding(
|
Padding(
|
||||||
padding: EdgeInsets.all(8.0),
|
padding: EdgeInsets.all(8.0),
|
||||||
child: Text('Add New Server'),
|
child: Text(S.of(context).accountAddNewServer),
|
||||||
),
|
),
|
||||||
Form(
|
Form(
|
||||||
key: formKey,
|
key: formKey,
|
||||||
|
|
@ -129,8 +136,8 @@ class ServerManagerBody extends HookConsumerWidget {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(
|
SnackBar(
|
||||||
content: Text('Invalid URL'),
|
content: Text(S.of(context).accountInvalidURL),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -155,20 +162,20 @@ class DeleteServerTile extends HookConsumerWidget {
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: const Icon(Icons.delete),
|
leading: const Icon(Icons.delete),
|
||||||
title: const Text('Delete Server'),
|
title: Text(S.of(context).accountDeleteServer),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Remove Server and Users'),
|
title: Text(S.of(context).accountRemoveServerAndUsers),
|
||||||
// Make content scrollable in case of smaller screens/keyboard
|
// Make content scrollable in case of smaller screens/keyboard
|
||||||
content: SingleChildScrollView(
|
content: SingleChildScrollView(
|
||||||
child: Text.rich(
|
child: Text.rich(
|
||||||
TextSpan(
|
TextSpan(
|
||||||
children: [
|
children: [
|
||||||
const TextSpan(
|
TextSpan(
|
||||||
text: 'This will remove the server ',
|
text: S.of(context).accountRemoveServerAndUsersHead,
|
||||||
),
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: server.serverUrl.host,
|
text: server.serverUrl.host,
|
||||||
|
|
@ -177,8 +184,8 @@ class DeleteServerTile extends HookConsumerWidget {
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const TextSpan(
|
TextSpan(
|
||||||
text: ' and all its users\' login info from this app.',
|
text: S.of(context).accountRemoveServerAndUsersTail,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
@ -189,7 +196,7 @@ class DeleteServerTile extends HookConsumerWidget {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
child: const Text('Cancel'),
|
child: Text(S.of(context).cancel),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
|
@ -203,7 +210,7 @@ class DeleteServerTile extends HookConsumerWidget {
|
||||||
);
|
);
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
child: const Text('Delete'),
|
child: Text(S.of(context).delete),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
@ -226,7 +233,7 @@ class AddUserTile extends HookConsumerWidget {
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: const Icon(Icons.person_add),
|
leading: const Icon(Icons.person_add),
|
||||||
title: const Text('Add User'),
|
title: Text(S.of(context).accountAddUser),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
await showDialog(
|
await showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
|
|
@ -234,7 +241,9 @@ class AddUserTile extends HookConsumerWidget {
|
||||||
builder: (dialogContext) {
|
builder: (dialogContext) {
|
||||||
// Use a different context name to avoid conflicts
|
// Use a different context name to avoid conflicts
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: Text('Add User to ${server.serverUrl.host}'),
|
title: Text(
|
||||||
|
S.of(context).accountAddUserDialog(server.serverUrl.host),
|
||||||
|
),
|
||||||
// Make content scrollable in case of smaller screens/keyboard
|
// Make content scrollable in case of smaller screens/keyboard
|
||||||
content: SingleChildScrollView(
|
content: SingleChildScrollView(
|
||||||
child: UserLoginWidget(
|
child: UserLoginWidget(
|
||||||
|
|
@ -247,7 +256,8 @@ class AddUserTile extends HookConsumerWidget {
|
||||||
// Optional: Show a confirmation SnackBar
|
// Optional: Show a confirmation SnackBar
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text('User added successfully! Switch?'),
|
content:
|
||||||
|
Text(S.of(context).accountAddUserSuccessDialog),
|
||||||
action: SnackBarAction(
|
action: SnackBarAction(
|
||||||
label: 'Switch',
|
label: 'Switch',
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
|
@ -270,7 +280,7 @@ class AddUserTile extends HookConsumerWidget {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(dialogContext).pop(); // Close the dialog
|
Navigator.of(dialogContext).pop(); // Close the dialog
|
||||||
},
|
},
|
||||||
child: const Text('Cancel'),
|
child: Text(S.of(context).cancel),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
@ -299,7 +309,7 @@ class AvailableUserTile extends HookConsumerWidget {
|
||||||
leading: apiSettings.activeUser == user
|
leading: apiSettings.activeUser == user
|
||||||
? const Icon(Icons.person)
|
? const Icon(Icons.person)
|
||||||
: const Icon(Icons.person_off_outlined),
|
: const Icon(Icons.person_off_outlined),
|
||||||
title: Text(user.username ?? 'Anonymous'),
|
title: Text(user.username ?? S.of(context).accountAnonymous),
|
||||||
onTap: apiSettings.activeUser == user
|
onTap: apiSettings.activeUser == user
|
||||||
? null
|
? null
|
||||||
: () {
|
: () {
|
||||||
|
|
@ -323,22 +333,22 @@ class AvailableUserTile extends HookConsumerWidget {
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Remove User Login'),
|
title: Text(S.of(context).accountRemoveUserLogin),
|
||||||
content: Text.rich(
|
content: Text.rich(
|
||||||
TextSpan(
|
TextSpan(
|
||||||
children: [
|
children: [
|
||||||
const TextSpan(
|
TextSpan(
|
||||||
text: 'This will remove login details of the user ',
|
text: S.of(context).accountRemoveUserLoginHead,
|
||||||
),
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: user.username ?? 'Anonymous',
|
text: user.username ?? S.of(context).accountAnonymous,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const TextSpan(
|
TextSpan(
|
||||||
text: ' from this app.',
|
text: S.of(context).accountRemoveUserLoginTail,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
@ -348,7 +358,7 @@ class AvailableUserTile extends HookConsumerWidget {
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
child: const Text('Cancel'),
|
child: Text(S.of(context).cancel),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
|
@ -359,7 +369,7 @@ class AvailableUserTile extends HookConsumerWidget {
|
||||||
.removeUser(user);
|
.removeUser(user);
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
child: const Text('Delete'),
|
child: Text(S.of(context).delete),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -20,21 +20,93 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
||||||
class MessageLookup extends MessageLookupByLibrary {
|
class MessageLookup extends MessageLookupByLibrary {
|
||||||
String get localeName => 'en';
|
String get localeName => 'en';
|
||||||
|
|
||||||
static String m0(item) => "Are you sure you want to delete ${item}?";
|
static String m0(host) => "Add User to ${host}";
|
||||||
|
|
||||||
static String m1(item) => "Deleted ${item}";
|
static String m1(user) => "Users: ${user}";
|
||||||
|
|
||||||
static String m2(error) => "Error loading libraries: ${error}";
|
static String m2(item) => "Are you sure you want to delete ${item}?";
|
||||||
|
|
||||||
|
static String m3(item) => "Deleted ${item}";
|
||||||
|
|
||||||
|
static String m4(error) => "Error loading libraries: ${error}";
|
||||||
|
|
||||||
|
static String m5(second) => "${second} seconds";
|
||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||||
"account": MessageLookupByLibrary.simpleMessage("Account"),
|
"account": MessageLookupByLibrary.simpleMessage("Account"),
|
||||||
|
"accountAddNewServer": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Add New Server",
|
||||||
|
),
|
||||||
|
"accountAddUser": MessageLookupByLibrary.simpleMessage("Add User"),
|
||||||
|
"accountAddUserDialog": m0,
|
||||||
|
"accountAddUserSuccessDialog": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"User added successfully! Switch?",
|
||||||
|
),
|
||||||
|
"accountAddUserTooltip": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Add new server",
|
||||||
|
),
|
||||||
|
"accountAnonymous": MessageLookupByLibrary.simpleMessage("Anonymous"),
|
||||||
|
"accountDeleteServer": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Delete Server",
|
||||||
|
),
|
||||||
|
"accountInvalidURL":
|
||||||
|
MessageLookupByLibrary.simpleMessage("Invalid URL"),
|
||||||
|
"accountManage":
|
||||||
|
MessageLookupByLibrary.simpleMessage("Manage Accounts"),
|
||||||
|
"accountRegisteredServers": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Registered Servers",
|
||||||
|
),
|
||||||
|
"accountRemoveServerAndUsers": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Remove Server and Users",
|
||||||
|
),
|
||||||
|
"accountRemoveServerAndUsersHead": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"This will remove the server ",
|
||||||
|
),
|
||||||
|
"accountRemoveServerAndUsersTail": MessageLookupByLibrary.simpleMessage(
|
||||||
|
" and all its users\' login info from this app.",
|
||||||
|
),
|
||||||
|
"accountRemoveUserLogin": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Remove User Login",
|
||||||
|
),
|
||||||
|
"accountRemoveUserLoginHead": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"This will remove login details of the user ",
|
||||||
|
),
|
||||||
|
"accountRemoveUserLoginTail": MessageLookupByLibrary.simpleMessage(
|
||||||
|
" from this app.",
|
||||||
|
),
|
||||||
|
"accountServerURI": MessageLookupByLibrary.simpleMessage("Server URI"),
|
||||||
"accountSwitch": MessageLookupByLibrary.simpleMessage("Switch Account"),
|
"accountSwitch": MessageLookupByLibrary.simpleMessage("Switch Account"),
|
||||||
|
"accountUsersCount": m1,
|
||||||
"appSettings": MessageLookupByLibrary.simpleMessage("App Settings"),
|
"appSettings": MessageLookupByLibrary.simpleMessage("App Settings"),
|
||||||
"appearance": MessageLookupByLibrary.simpleMessage("Appearance"),
|
"appearance": MessageLookupByLibrary.simpleMessage("Appearance"),
|
||||||
|
"autoSleepTimerSettings": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Auto Sleep Timer Settings",
|
||||||
|
),
|
||||||
"autoTurnOnSleepTimer": MessageLookupByLibrary.simpleMessage(
|
"autoTurnOnSleepTimer": MessageLookupByLibrary.simpleMessage(
|
||||||
"Auto Turn On Sleep Timer",
|
"Auto Turn On Sleep Timer",
|
||||||
),
|
),
|
||||||
|
"autoTurnOnTimer": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Auto Turn On Timer",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerAlways": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Always Auto Turn On Timer",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerAlwaysDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Always turn on the sleep timer, no matter what",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Automatically turn on the sleep timer based on the time of day",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerFrom": MessageLookupByLibrary.simpleMessage("From"),
|
||||||
|
"autoTurnOnTimerFromDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Turn on the sleep timer at the specified time",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerUntil": MessageLookupByLibrary.simpleMessage("Until"),
|
||||||
|
"autoTurnOnTimerUntilDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Turn off the sleep timer at the specified time",
|
||||||
|
),
|
||||||
"automaticallyDescription": MessageLookupByLibrary.simpleMessage(
|
"automaticallyDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"Automatically turn on the sleep timer based on the time of day",
|
"Automatically turn on the sleep timer based on the time of day",
|
||||||
),
|
),
|
||||||
|
|
@ -73,8 +145,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"Settings copied to clipboard",
|
"Settings copied to clipboard",
|
||||||
),
|
),
|
||||||
"delete": MessageLookupByLibrary.simpleMessage("Delete"),
|
"delete": MessageLookupByLibrary.simpleMessage("Delete"),
|
||||||
"deleteDialog": m0,
|
"deleteDialog": m2,
|
||||||
"deleted": m1,
|
"deleted": m3,
|
||||||
"explore": MessageLookupByLibrary.simpleMessage("explore"),
|
"explore": MessageLookupByLibrary.simpleMessage("explore"),
|
||||||
"exploreHint": MessageLookupByLibrary.simpleMessage(
|
"exploreHint": MessageLookupByLibrary.simpleMessage(
|
||||||
"Seek and you shall discover...",
|
"Seek and you shall discover...",
|
||||||
|
|
@ -88,12 +160,23 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"homeBookContinueListening": MessageLookupByLibrary.simpleMessage(
|
"homeBookContinueListening": MessageLookupByLibrary.simpleMessage(
|
||||||
"Continue Listening",
|
"Continue Listening",
|
||||||
),
|
),
|
||||||
|
"homeBookContinueListeningDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show play button for books in currently listening shelf",
|
||||||
|
),
|
||||||
"homeBookContinueSeries": MessageLookupByLibrary.simpleMessage(
|
"homeBookContinueSeries": MessageLookupByLibrary.simpleMessage(
|
||||||
"Continue Series",
|
"Continue Series",
|
||||||
),
|
),
|
||||||
|
"homeBookContinueSeriesDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show play button for books in continue series shelf",
|
||||||
|
),
|
||||||
"homeBookDiscover": MessageLookupByLibrary.simpleMessage("Discover"),
|
"homeBookDiscover": MessageLookupByLibrary.simpleMessage("Discover"),
|
||||||
"homeBookListenAgain":
|
"homeBookListenAgain":
|
||||||
MessageLookupByLibrary.simpleMessage("Listen Again"),
|
MessageLookupByLibrary.simpleMessage("Listen Again"),
|
||||||
|
"homeBookListenAgainDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show play button for all books in listen again shelf",
|
||||||
|
),
|
||||||
"homeBookNewestAuthors": MessageLookupByLibrary.simpleMessage(
|
"homeBookNewestAuthors": MessageLookupByLibrary.simpleMessage(
|
||||||
"Newest Authors",
|
"Newest Authors",
|
||||||
),
|
),
|
||||||
|
|
@ -112,6 +195,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"homePageSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
"homePageSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"Customize the home page",
|
"Customize the home page",
|
||||||
),
|
),
|
||||||
|
"homePageSettingsOtherShelves": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Other shelves",
|
||||||
|
),
|
||||||
|
"homePageSettingsOtherShelvesDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show play button for all books in all remaining shelves",
|
||||||
|
),
|
||||||
|
"homePageSettingsQuickPlay": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Quick Play",
|
||||||
|
),
|
||||||
"homeStartListening": MessageLookupByLibrary.simpleMessage(
|
"homeStartListening": MessageLookupByLibrary.simpleMessage(
|
||||||
"Start Listening",
|
"Start Listening",
|
||||||
),
|
),
|
||||||
|
|
@ -124,7 +217,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"libraryEmpty": MessageLookupByLibrary.simpleMessage(
|
"libraryEmpty": MessageLookupByLibrary.simpleMessage(
|
||||||
"No libraries available.",
|
"No libraries available.",
|
||||||
),
|
),
|
||||||
"libraryLoadError": m2,
|
"libraryLoadError": m4,
|
||||||
"librarySelect": MessageLookupByLibrary.simpleMessage("Select Library"),
|
"librarySelect": MessageLookupByLibrary.simpleMessage("Select Library"),
|
||||||
"librarySwitchTooltip": MessageLookupByLibrary.simpleMessage(
|
"librarySwitchTooltip": MessageLookupByLibrary.simpleMessage(
|
||||||
"Switch Library",
|
"Switch Library",
|
||||||
|
|
@ -134,6 +227,40 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
),
|
),
|
||||||
"loading": MessageLookupByLibrary.simpleMessage("Loading..."),
|
"loading": MessageLookupByLibrary.simpleMessage("Loading..."),
|
||||||
"logs": MessageLookupByLibrary.simpleMessage("Logs"),
|
"logs": MessageLookupByLibrary.simpleMessage("Logs"),
|
||||||
|
"nmpSettingsBackward": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Backward Interval",
|
||||||
|
),
|
||||||
|
"nmpSettingsForward": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Forward Interval",
|
||||||
|
),
|
||||||
|
"nmpSettingsMediaControls": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Media Controls",
|
||||||
|
),
|
||||||
|
"nmpSettingsMediaControlsDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Select the media controls to display",
|
||||||
|
),
|
||||||
|
"nmpSettingsSelectOne": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Select a field below to insert it",
|
||||||
|
),
|
||||||
|
"nmpSettingsShowChapterProgress": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show Chapter Progress",
|
||||||
|
),
|
||||||
|
"nmpSettingsShowChapterProgressDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Instead of the overall progress of the book",
|
||||||
|
),
|
||||||
|
"nmpSettingsSubTitle": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Secondary Title",
|
||||||
|
),
|
||||||
|
"nmpSettingsSubTitleDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"The subtitle of the notification\n",
|
||||||
|
),
|
||||||
|
"nmpSettingsTitle":
|
||||||
|
MessageLookupByLibrary.simpleMessage("Primary Title"),
|
||||||
|
"nmpSettingsTitleDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"The title of the notification\n",
|
||||||
|
),
|
||||||
"no": MessageLookupByLibrary.simpleMessage("No"),
|
"no": MessageLookupByLibrary.simpleMessage("No"),
|
||||||
"notImplemented":
|
"notImplemented":
|
||||||
MessageLookupByLibrary.simpleMessage("Not implemented"),
|
MessageLookupByLibrary.simpleMessage("Not implemented"),
|
||||||
|
|
@ -149,9 +276,41 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"play": MessageLookupByLibrary.simpleMessage("Play"),
|
"play": MessageLookupByLibrary.simpleMessage("Play"),
|
||||||
"playerSettings":
|
"playerSettings":
|
||||||
MessageLookupByLibrary.simpleMessage("Player Settings"),
|
MessageLookupByLibrary.simpleMessage("Player Settings"),
|
||||||
|
"playerSettingsCompleteTime": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Mark Complete When Time Left",
|
||||||
|
),
|
||||||
|
"playerSettingsCompleteTimeDescriptionHead":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Mark complete when less than "),
|
||||||
|
"playerSettingsCompleteTimeDescriptionTail":
|
||||||
|
MessageLookupByLibrary.simpleMessage(" left in the book"),
|
||||||
"playerSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"Customize the player settings",
|
"Customize the player settings",
|
||||||
),
|
),
|
||||||
|
"playerSettingsDisplay": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Display Settings",
|
||||||
|
),
|
||||||
|
"playerSettingsDisplayChapterProgress":
|
||||||
|
MessageLookupByLibrary.simpleMessage("Show Chapter Progress"),
|
||||||
|
"playerSettingsDisplayChapterProgressDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show the progress of the current chapter in the player",
|
||||||
|
),
|
||||||
|
"playerSettingsDisplayTotalProgress":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show Total Progress",
|
||||||
|
),
|
||||||
|
"playerSettingsDisplayTotalProgressDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Show the total progress of the book in the player",
|
||||||
|
),
|
||||||
|
"playerSettingsPlaybackInterval": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Playback Report Interval",
|
||||||
|
),
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionHead":
|
||||||
|
MessageLookupByLibrary.simpleMessage("Report progress every "),
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionTail":
|
||||||
|
MessageLookupByLibrary.simpleMessage(" to the server"),
|
||||||
"playerSettingsPlaybackReporting": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsPlaybackReporting": MessageLookupByLibrary.simpleMessage(
|
||||||
"Playback Reporting",
|
"Playback Reporting",
|
||||||
),
|
),
|
||||||
|
|
@ -175,12 +334,30 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
MessageLookupByLibrary.simpleMessage(
|
MessageLookupByLibrary.simpleMessage(
|
||||||
"Settings like speed, loudness, etc. will be remembered for every book",
|
"Settings like speed, loudness, etc. will be remembered for every book",
|
||||||
),
|
),
|
||||||
|
"playerSettingsSpeed": MessageLookupByLibrary.simpleMessage("Speed"),
|
||||||
"playerSettingsSpeedDefault": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsSpeedDefault": MessageLookupByLibrary.simpleMessage(
|
||||||
"Default Speed",
|
"Default Speed",
|
||||||
),
|
),
|
||||||
"playerSettingsSpeedOptions": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsSpeedOptions": MessageLookupByLibrary.simpleMessage(
|
||||||
"Speed Options",
|
"Speed Options",
|
||||||
),
|
),
|
||||||
|
"playerSettingsSpeedOptionsSelect":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Select Speed Options",
|
||||||
|
),
|
||||||
|
"playerSettingsSpeedOptionsSelectAdd":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Add Speed Option",
|
||||||
|
),
|
||||||
|
"playerSettingsSpeedOptionsSelectAddHelper":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Enter a new speed option to add"),
|
||||||
|
"playerSettingsSpeedSelect": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Select Speed",
|
||||||
|
),
|
||||||
|
"playerSettingsSpeedSelectHelper": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Enter the speed you want to set when playing for the first time",
|
||||||
|
),
|
||||||
"playlistsMine": MessageLookupByLibrary.simpleMessage("My Playlists"),
|
"playlistsMine": MessageLookupByLibrary.simpleMessage("My Playlists"),
|
||||||
"readLess": MessageLookupByLibrary.simpleMessage("Read Less"),
|
"readLess": MessageLookupByLibrary.simpleMessage("Read Less"),
|
||||||
"readMore": MessageLookupByLibrary.simpleMessage("Read More"),
|
"readMore": MessageLookupByLibrary.simpleMessage("Read More"),
|
||||||
|
|
@ -215,14 +392,86 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"resume": MessageLookupByLibrary.simpleMessage("Resume"),
|
"resume": MessageLookupByLibrary.simpleMessage("Resume"),
|
||||||
"retry": MessageLookupByLibrary.simpleMessage("Retry"),
|
"retry": MessageLookupByLibrary.simpleMessage("Retry"),
|
||||||
"settings": MessageLookupByLibrary.simpleMessage("Settings"),
|
"settings": MessageLookupByLibrary.simpleMessage("Settings"),
|
||||||
|
"shakeAction": MessageLookupByLibrary.simpleMessage("Shake Action"),
|
||||||
|
"shakeActionDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"The action to perform when a shake is detected",
|
||||||
|
),
|
||||||
|
"shakeActivationThreshold": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Shake Activation Threshold",
|
||||||
|
),
|
||||||
|
"shakeActivationThresholdDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"The higher the threshold, the harder you need to shake",
|
||||||
|
),
|
||||||
"shakeDetector": MessageLookupByLibrary.simpleMessage("Shake Detector"),
|
"shakeDetector": MessageLookupByLibrary.simpleMessage("Shake Detector"),
|
||||||
"shakeDetectorDescription": MessageLookupByLibrary.simpleMessage(
|
"shakeDetectorDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"Customize the shake detector settings",
|
"Customize the shake detector settings",
|
||||||
),
|
),
|
||||||
|
"shakeDetectorEnable": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Enable Shake Detection",
|
||||||
|
),
|
||||||
|
"shakeDetectorEnableDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Enable shake detection to do various actions",
|
||||||
|
),
|
||||||
|
"shakeDetectorSettings": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Shake Detector Settings",
|
||||||
|
),
|
||||||
|
"shakeFeedback": MessageLookupByLibrary.simpleMessage("Shake Feedback"),
|
||||||
|
"shakeFeedbackDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"The feedback to give when a shake is detected",
|
||||||
|
),
|
||||||
|
"shakeSelectAction": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Select Shake Action",
|
||||||
|
),
|
||||||
|
"shakeSelectActivationThreshold": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Select Shake Activation Threshold",
|
||||||
|
),
|
||||||
|
"shakeSelectActivationThresholdHelper":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Enter a number to set the threshold in m/s²",
|
||||||
|
),
|
||||||
|
"shakeSelectFeedback": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Select Shake Feedback",
|
||||||
|
),
|
||||||
|
"themeMode": MessageLookupByLibrary.simpleMessage("Theme Mode"),
|
||||||
|
"themeModeDark": MessageLookupByLibrary.simpleMessage("Dark"),
|
||||||
|
"themeModeHighContrast": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"High Contrast Mode",
|
||||||
|
),
|
||||||
|
"themeModeHighContrastDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Increase the contrast between the background and the text",
|
||||||
|
),
|
||||||
|
"themeModeLight": MessageLookupByLibrary.simpleMessage("Light"),
|
||||||
|
"themeModeSystem": MessageLookupByLibrary.simpleMessage("System"),
|
||||||
"themeSettings": MessageLookupByLibrary.simpleMessage("Theme Settings"),
|
"themeSettings": MessageLookupByLibrary.simpleMessage("Theme Settings"),
|
||||||
|
"themeSettingsColors": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Material Theme from System",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsAndroid": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Use Material You",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsBook": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Adaptive Theme on Item Page",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsBookDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Get fancy with the colors on the item page at the cost of some performance",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsCurrent": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Adapt theme from currently playing item",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsCurrentDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Use the theme colors from the currently playing item for the app",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"Use the system theme colors for the app",
|
||||||
|
),
|
||||||
"themeSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
"themeSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"Customize the app theme",
|
"Customize the app theme",
|
||||||
),
|
),
|
||||||
|
"timeSecond": m5,
|
||||||
"unknown": MessageLookupByLibrary.simpleMessage("Unknown"),
|
"unknown": MessageLookupByLibrary.simpleMessage("Unknown"),
|
||||||
"webVersion": MessageLookupByLibrary.simpleMessage("Web Version"),
|
"webVersion": MessageLookupByLibrary.simpleMessage("Web Version"),
|
||||||
"yes": MessageLookupByLibrary.simpleMessage("Yes"),
|
"yes": MessageLookupByLibrary.simpleMessage("Yes"),
|
||||||
|
|
|
||||||
|
|
@ -20,20 +20,78 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
||||||
class MessageLookup extends MessageLookupByLibrary {
|
class MessageLookup extends MessageLookupByLibrary {
|
||||||
String get localeName => 'zh';
|
String get localeName => 'zh';
|
||||||
|
|
||||||
static String m0(item) => "确定要删除 ${item} 吗?";
|
static String m0(host) => "将用户添加到 ${host}";
|
||||||
|
|
||||||
static String m1(item) => "已删除 ${item}";
|
static String m1(user) => "用户数: ${user}";
|
||||||
|
|
||||||
static String m2(error) => "加载库时出错:${error}";
|
static String m2(item) => "确定要删除 ${item} 吗?";
|
||||||
|
|
||||||
|
static String m3(item) => "已删除 ${item}";
|
||||||
|
|
||||||
|
static String m4(error) => "加载库时出错:${error}";
|
||||||
|
|
||||||
|
static String m5(second) => "${second} 秒";
|
||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||||
"account": MessageLookupByLibrary.simpleMessage("账户"),
|
"account": MessageLookupByLibrary.simpleMessage("账户"),
|
||||||
|
"accountAddNewServer": MessageLookupByLibrary.simpleMessage("添加新服务器"),
|
||||||
|
"accountAddUser": MessageLookupByLibrary.simpleMessage("添加用户"),
|
||||||
|
"accountAddUserDialog": m0,
|
||||||
|
"accountAddUserSuccessDialog": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"用户添加成功!切换?",
|
||||||
|
),
|
||||||
|
"accountAddUserTooltip": MessageLookupByLibrary.simpleMessage("添加新服务器"),
|
||||||
|
"accountAnonymous": MessageLookupByLibrary.simpleMessage("匿名"),
|
||||||
|
"accountDeleteServer": MessageLookupByLibrary.simpleMessage("删除服务器"),
|
||||||
|
"accountInvalidURL": MessageLookupByLibrary.simpleMessage("无效网址"),
|
||||||
|
"accountManage": MessageLookupByLibrary.simpleMessage("帐户管理"),
|
||||||
|
"accountRegisteredServers":
|
||||||
|
MessageLookupByLibrary.simpleMessage("已注册服务器"),
|
||||||
|
"accountRemoveServerAndUsers": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"删除服务器和用户",
|
||||||
|
),
|
||||||
|
"accountRemoveServerAndUsersHead": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"这将删除服务器 ",
|
||||||
|
),
|
||||||
|
"accountRemoveServerAndUsersTail": MessageLookupByLibrary.simpleMessage(
|
||||||
|
" 以及该应用程序中所有用户的登录信息。",
|
||||||
|
),
|
||||||
|
"accountRemoveUserLogin":
|
||||||
|
MessageLookupByLibrary.simpleMessage("删除用户登录"),
|
||||||
|
"accountRemoveUserLoginHead": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"这将删除用户 ",
|
||||||
|
),
|
||||||
|
"accountRemoveUserLoginTail": MessageLookupByLibrary.simpleMessage(
|
||||||
|
" 的登录详细信息。",
|
||||||
|
),
|
||||||
|
"accountServerURI": MessageLookupByLibrary.simpleMessage("服务器地址"),
|
||||||
"accountSwitch": MessageLookupByLibrary.simpleMessage("切换账户"),
|
"accountSwitch": MessageLookupByLibrary.simpleMessage("切换账户"),
|
||||||
|
"accountUsersCount": m1,
|
||||||
"appSettings": MessageLookupByLibrary.simpleMessage("应用设置"),
|
"appSettings": MessageLookupByLibrary.simpleMessage("应用设置"),
|
||||||
"appearance": MessageLookupByLibrary.simpleMessage("外观"),
|
"appearance": MessageLookupByLibrary.simpleMessage("外观"),
|
||||||
|
"autoSleepTimerSettings":
|
||||||
|
MessageLookupByLibrary.simpleMessage("自动睡眠定时器设置"),
|
||||||
"autoTurnOnSleepTimer":
|
"autoTurnOnSleepTimer":
|
||||||
MessageLookupByLibrary.simpleMessage("自动开启睡眠定时器"),
|
MessageLookupByLibrary.simpleMessage("自动开启睡眠定时器"),
|
||||||
|
"autoTurnOnTimer": MessageLookupByLibrary.simpleMessage("自动开启定时器"),
|
||||||
|
"autoTurnOnTimerAlways":
|
||||||
|
MessageLookupByLibrary.simpleMessage("始终自动开启定时器"),
|
||||||
|
"autoTurnOnTimerAlwaysDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"总是打开睡眠定时器",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"根据一天中的时间自动打开睡眠定时器",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerFrom": MessageLookupByLibrary.simpleMessage("从"),
|
||||||
|
"autoTurnOnTimerFromDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"在指定时间打开睡眠定时器",
|
||||||
|
),
|
||||||
|
"autoTurnOnTimerUntil": MessageLookupByLibrary.simpleMessage("直到"),
|
||||||
|
"autoTurnOnTimerUntilDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"在指定时间关闭睡眠定时器",
|
||||||
|
),
|
||||||
"automaticallyDescription": MessageLookupByLibrary.simpleMessage(
|
"automaticallyDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"根据一天中的时间自动打开睡眠定时器",
|
"根据一天中的时间自动打开睡眠定时器",
|
||||||
),
|
),
|
||||||
|
|
@ -59,8 +117,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"copyToClipboardToast":
|
"copyToClipboardToast":
|
||||||
MessageLookupByLibrary.simpleMessage("设置已复制到剪贴板"),
|
MessageLookupByLibrary.simpleMessage("设置已复制到剪贴板"),
|
||||||
"delete": MessageLookupByLibrary.simpleMessage("删除"),
|
"delete": MessageLookupByLibrary.simpleMessage("删除"),
|
||||||
"deleteDialog": m0,
|
"deleteDialog": m2,
|
||||||
"deleted": m1,
|
"deleted": m3,
|
||||||
"explore": MessageLookupByLibrary.simpleMessage("探索"),
|
"explore": MessageLookupByLibrary.simpleMessage("探索"),
|
||||||
"exploreHint": MessageLookupByLibrary.simpleMessage("搜索与探索..."),
|
"exploreHint": MessageLookupByLibrary.simpleMessage("搜索与探索..."),
|
||||||
"exploreTooltip": MessageLookupByLibrary.simpleMessage("搜索和探索"),
|
"exploreTooltip": MessageLookupByLibrary.simpleMessage("搜索和探索"),
|
||||||
|
|
@ -69,9 +127,18 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"home": MessageLookupByLibrary.simpleMessage("首页"),
|
"home": MessageLookupByLibrary.simpleMessage("首页"),
|
||||||
"homeBookContinueListening":
|
"homeBookContinueListening":
|
||||||
MessageLookupByLibrary.simpleMessage("继续收听"),
|
MessageLookupByLibrary.simpleMessage("继续收听"),
|
||||||
|
"homeBookContinueListeningDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage("继续收听书架上显示播放按钮"),
|
||||||
"homeBookContinueSeries": MessageLookupByLibrary.simpleMessage("继续系列"),
|
"homeBookContinueSeries": MessageLookupByLibrary.simpleMessage("继续系列"),
|
||||||
|
"homeBookContinueSeriesDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"继续系列书架上显示播放按钮",
|
||||||
|
),
|
||||||
"homeBookDiscover": MessageLookupByLibrary.simpleMessage("发现"),
|
"homeBookDiscover": MessageLookupByLibrary.simpleMessage("发现"),
|
||||||
"homeBookListenAgain": MessageLookupByLibrary.simpleMessage("再听一遍"),
|
"homeBookListenAgain": MessageLookupByLibrary.simpleMessage("再听一遍"),
|
||||||
|
"homeBookListenAgainDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"再听一遍书架上显示播放按钮",
|
||||||
|
),
|
||||||
"homeBookNewestAuthors": MessageLookupByLibrary.simpleMessage("最新作者"),
|
"homeBookNewestAuthors": MessageLookupByLibrary.simpleMessage("最新作者"),
|
||||||
"homeBookRecentlyAdded": MessageLookupByLibrary.simpleMessage("最近添加"),
|
"homeBookRecentlyAdded": MessageLookupByLibrary.simpleMessage("最近添加"),
|
||||||
"homeBookRecommended": MessageLookupByLibrary.simpleMessage("推荐"),
|
"homeBookRecommended": MessageLookupByLibrary.simpleMessage("推荐"),
|
||||||
|
|
@ -81,18 +148,49 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"homePageSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
"homePageSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"自定义主页",
|
"自定义主页",
|
||||||
),
|
),
|
||||||
|
"homePageSettingsOtherShelves": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"其他书架",
|
||||||
|
),
|
||||||
|
"homePageSettingsOtherShelvesDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage("显示所有剩余书架上所有书籍的播放按钮"),
|
||||||
|
"homePageSettingsQuickPlay":
|
||||||
|
MessageLookupByLibrary.simpleMessage("继续播放"),
|
||||||
"homeStartListening": MessageLookupByLibrary.simpleMessage("开始收听"),
|
"homeStartListening": MessageLookupByLibrary.simpleMessage("开始收听"),
|
||||||
"language": MessageLookupByLibrary.simpleMessage("语言"),
|
"language": MessageLookupByLibrary.simpleMessage("语言"),
|
||||||
"languageDescription": MessageLookupByLibrary.simpleMessage("语言切换"),
|
"languageDescription": MessageLookupByLibrary.simpleMessage("语言切换"),
|
||||||
"library": MessageLookupByLibrary.simpleMessage("媒体库"),
|
"library": MessageLookupByLibrary.simpleMessage("媒体库"),
|
||||||
"libraryChange": MessageLookupByLibrary.simpleMessage("更改媒体库"),
|
"libraryChange": MessageLookupByLibrary.simpleMessage("更改媒体库"),
|
||||||
"libraryEmpty": MessageLookupByLibrary.simpleMessage("没有可用的库。"),
|
"libraryEmpty": MessageLookupByLibrary.simpleMessage("没有可用的库。"),
|
||||||
"libraryLoadError": m2,
|
"libraryLoadError": m4,
|
||||||
"librarySelect": MessageLookupByLibrary.simpleMessage("选择媒体库"),
|
"librarySelect": MessageLookupByLibrary.simpleMessage("选择媒体库"),
|
||||||
"librarySwitchTooltip": MessageLookupByLibrary.simpleMessage("切换媒体库"),
|
"librarySwitchTooltip": MessageLookupByLibrary.simpleMessage("切换媒体库"),
|
||||||
"libraryTooltip": MessageLookupByLibrary.simpleMessage("浏览您的媒体库"),
|
"libraryTooltip": MessageLookupByLibrary.simpleMessage("浏览您的媒体库"),
|
||||||
"loading": MessageLookupByLibrary.simpleMessage("加载中..."),
|
"loading": MessageLookupByLibrary.simpleMessage("加载中..."),
|
||||||
"logs": MessageLookupByLibrary.simpleMessage("日志"),
|
"logs": MessageLookupByLibrary.simpleMessage("日志"),
|
||||||
|
"nmpSettingsBackward": MessageLookupByLibrary.simpleMessage("快退间隔"),
|
||||||
|
"nmpSettingsForward": MessageLookupByLibrary.simpleMessage("快进间隔"),
|
||||||
|
"nmpSettingsMediaControls":
|
||||||
|
MessageLookupByLibrary.simpleMessage("媒体控制"),
|
||||||
|
"nmpSettingsMediaControlsDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"选择要显示的媒体控件",
|
||||||
|
),
|
||||||
|
"nmpSettingsSelectOne": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"在下面选择一个字段进行插入",
|
||||||
|
),
|
||||||
|
"nmpSettingsShowChapterProgress": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"显示章节进度",
|
||||||
|
),
|
||||||
|
"nmpSettingsShowChapterProgressDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage("而不是本书的整体进展"),
|
||||||
|
"nmpSettingsSubTitle": MessageLookupByLibrary.simpleMessage("副标题"),
|
||||||
|
"nmpSettingsSubTitleDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"通知的副标题\n",
|
||||||
|
),
|
||||||
|
"nmpSettingsTitle": MessageLookupByLibrary.simpleMessage("主标题"),
|
||||||
|
"nmpSettingsTitleDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"通知的标题\n",
|
||||||
|
),
|
||||||
"no": MessageLookupByLibrary.simpleMessage("否"),
|
"no": MessageLookupByLibrary.simpleMessage("否"),
|
||||||
"notImplemented": MessageLookupByLibrary.simpleMessage("未实现"),
|
"notImplemented": MessageLookupByLibrary.simpleMessage("未实现"),
|
||||||
"notificationMediaPlayer":
|
"notificationMediaPlayer":
|
||||||
|
|
@ -105,9 +203,34 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"pause": MessageLookupByLibrary.simpleMessage("暂停"),
|
"pause": MessageLookupByLibrary.simpleMessage("暂停"),
|
||||||
"play": MessageLookupByLibrary.simpleMessage("播放"),
|
"play": MessageLookupByLibrary.simpleMessage("播放"),
|
||||||
"playerSettings": MessageLookupByLibrary.simpleMessage("播放器设置"),
|
"playerSettings": MessageLookupByLibrary.simpleMessage("播放器设置"),
|
||||||
|
"playerSettingsCompleteTime": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"剩余时间标记完成",
|
||||||
|
),
|
||||||
|
"playerSettingsCompleteTimeDescriptionHead":
|
||||||
|
MessageLookupByLibrary.simpleMessage("当书中剩余时间少于 "),
|
||||||
|
"playerSettingsCompleteTimeDescriptionTail":
|
||||||
|
MessageLookupByLibrary.simpleMessage(" 时,标记完成"),
|
||||||
"playerSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"自定义播放器设置",
|
"自定义播放器设置",
|
||||||
),
|
),
|
||||||
|
"playerSettingsDisplay": MessageLookupByLibrary.simpleMessage("显示设置"),
|
||||||
|
"playerSettingsDisplayChapterProgress":
|
||||||
|
MessageLookupByLibrary.simpleMessage("显示章节进度"),
|
||||||
|
"playerSettingsDisplayChapterProgressDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage("在播放器中显示当前章节的进度"),
|
||||||
|
"playerSettingsDisplayTotalProgress":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"显示总进度",
|
||||||
|
),
|
||||||
|
"playerSettingsDisplayTotalProgressDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage("在播放器中显示当前书籍的总进度"),
|
||||||
|
"playerSettingsPlaybackInterval": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"播放报告间隔",
|
||||||
|
),
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionHead":
|
||||||
|
MessageLookupByLibrary.simpleMessage("每 "),
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionTail":
|
||||||
|
MessageLookupByLibrary.simpleMessage(" 向服务器报告一次进度"),
|
||||||
"playerSettingsPlaybackReporting": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsPlaybackReporting": MessageLookupByLibrary.simpleMessage(
|
||||||
"回放报告",
|
"回放报告",
|
||||||
),
|
),
|
||||||
|
|
@ -125,12 +248,28 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
),
|
),
|
||||||
"playerSettingsRememberForEveryBookDescription":
|
"playerSettingsRememberForEveryBookDescription":
|
||||||
MessageLookupByLibrary.simpleMessage("每本书都会记住播放速度、音量等设置"),
|
MessageLookupByLibrary.simpleMessage("每本书都会记住播放速度、音量等设置"),
|
||||||
|
"playerSettingsSpeed": MessageLookupByLibrary.simpleMessage("播放速度"),
|
||||||
"playerSettingsSpeedDefault": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsSpeedDefault": MessageLookupByLibrary.simpleMessage(
|
||||||
"默认播放速度",
|
"默认播放速度",
|
||||||
),
|
),
|
||||||
"playerSettingsSpeedOptions": MessageLookupByLibrary.simpleMessage(
|
"playerSettingsSpeedOptions": MessageLookupByLibrary.simpleMessage(
|
||||||
"播放速度选项",
|
"播放速度选项",
|
||||||
),
|
),
|
||||||
|
"playerSettingsSpeedOptionsSelect":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"播放速度选项",
|
||||||
|
),
|
||||||
|
"playerSettingsSpeedOptionsSelectAdd":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"添加一个速度选项",
|
||||||
|
),
|
||||||
|
"playerSettingsSpeedOptionsSelectAddHelper":
|
||||||
|
MessageLookupByLibrary.simpleMessage("输入一个新的速度选项"),
|
||||||
|
"playerSettingsSpeedSelect":
|
||||||
|
MessageLookupByLibrary.simpleMessage("选择播放速度"),
|
||||||
|
"playerSettingsSpeedSelectHelper": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"输入默认的播放速度",
|
||||||
|
),
|
||||||
"playlistsMine": MessageLookupByLibrary.simpleMessage("播放列表"),
|
"playlistsMine": MessageLookupByLibrary.simpleMessage("播放列表"),
|
||||||
"readLess": MessageLookupByLibrary.simpleMessage("折叠"),
|
"readLess": MessageLookupByLibrary.simpleMessage("折叠"),
|
||||||
"readMore": MessageLookupByLibrary.simpleMessage("展开"),
|
"readMore": MessageLookupByLibrary.simpleMessage("展开"),
|
||||||
|
|
@ -155,13 +294,68 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"resume": MessageLookupByLibrary.simpleMessage("继续"),
|
"resume": MessageLookupByLibrary.simpleMessage("继续"),
|
||||||
"retry": MessageLookupByLibrary.simpleMessage("重试"),
|
"retry": MessageLookupByLibrary.simpleMessage("重试"),
|
||||||
"settings": MessageLookupByLibrary.simpleMessage("设置"),
|
"settings": MessageLookupByLibrary.simpleMessage("设置"),
|
||||||
|
"shakeAction": MessageLookupByLibrary.simpleMessage("抖动操作"),
|
||||||
|
"shakeActionDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"检测到抖动时要执行的操作",
|
||||||
|
),
|
||||||
|
"shakeActivationThreshold":
|
||||||
|
MessageLookupByLibrary.simpleMessage("抖动激活阈值"),
|
||||||
|
"shakeActivationThresholdDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"门槛越高,你就越难摇晃",
|
||||||
|
),
|
||||||
"shakeDetector": MessageLookupByLibrary.simpleMessage("抖动检测器"),
|
"shakeDetector": MessageLookupByLibrary.simpleMessage("抖动检测器"),
|
||||||
"shakeDetectorDescription": MessageLookupByLibrary.simpleMessage(
|
"shakeDetectorDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
"自定义抖动检测器设置",
|
"自定义抖动检测器设置",
|
||||||
),
|
),
|
||||||
|
"shakeDetectorEnable": MessageLookupByLibrary.simpleMessage("启用抖动检测"),
|
||||||
|
"shakeDetectorEnableDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"启用抖动检测以执行各种操作",
|
||||||
|
),
|
||||||
|
"shakeDetectorSettings":
|
||||||
|
MessageLookupByLibrary.simpleMessage("抖动检测器设置"),
|
||||||
|
"shakeFeedback": MessageLookupByLibrary.simpleMessage("抖动反馈"),
|
||||||
|
"shakeFeedbackDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"检测到抖动时给出的反馈",
|
||||||
|
),
|
||||||
|
"shakeSelectAction": MessageLookupByLibrary.simpleMessage("选择抖动动作"),
|
||||||
|
"shakeSelectActivationThreshold": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"选择抖动激活阈值",
|
||||||
|
),
|
||||||
|
"shakeSelectActivationThresholdHelper":
|
||||||
|
MessageLookupByLibrary.simpleMessage("输入一个数字以m/s²为单位设置阈值"),
|
||||||
|
"shakeSelectFeedback": MessageLookupByLibrary.simpleMessage("选择抖动反馈"),
|
||||||
|
"themeMode": MessageLookupByLibrary.simpleMessage("主题模式"),
|
||||||
|
"themeModeDark": MessageLookupByLibrary.simpleMessage("深色"),
|
||||||
|
"themeModeHighContrast": MessageLookupByLibrary.simpleMessage("高对比度模式"),
|
||||||
|
"themeModeHighContrastDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"增加背景和文本之间的对比度",
|
||||||
|
),
|
||||||
|
"themeModeLight": MessageLookupByLibrary.simpleMessage("浅色"),
|
||||||
|
"themeModeSystem": MessageLookupByLibrary.simpleMessage("跟随系统"),
|
||||||
"themeSettings": MessageLookupByLibrary.simpleMessage("主题设置"),
|
"themeSettings": MessageLookupByLibrary.simpleMessage("主题设置"),
|
||||||
|
"themeSettingsColors": MessageLookupByLibrary.simpleMessage("主题色"),
|
||||||
|
"themeSettingsColorsAndroid":
|
||||||
|
MessageLookupByLibrary.simpleMessage("主题色"),
|
||||||
|
"themeSettingsColorsBook": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"书籍详情页自适应主题",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsBookDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage(
|
||||||
|
"以牺牲一些性能为代价,对书籍详情页的颜色进行美化",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsCurrent": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"根据当前播放的书籍调整主题",
|
||||||
|
),
|
||||||
|
"themeSettingsColorsCurrentDescription":
|
||||||
|
MessageLookupByLibrary.simpleMessage("使用当前播放书籍的主题颜色"),
|
||||||
|
"themeSettingsColorsDescription": MessageLookupByLibrary.simpleMessage(
|
||||||
|
"使用应用程序的系统主题色",
|
||||||
|
),
|
||||||
"themeSettingsDescription":
|
"themeSettingsDescription":
|
||||||
MessageLookupByLibrary.simpleMessage("自定义应用主题"),
|
MessageLookupByLibrary.simpleMessage("自定义应用主题"),
|
||||||
|
"timeSecond": m5,
|
||||||
"unknown": MessageLookupByLibrary.simpleMessage("未知"),
|
"unknown": MessageLookupByLibrary.simpleMessage("未知"),
|
||||||
"webVersion": MessageLookupByLibrary.simpleMessage("Web版本"),
|
"webVersion": MessageLookupByLibrary.simpleMessage("Web版本"),
|
||||||
"yes": MessageLookupByLibrary.simpleMessage("是"),
|
"yes": MessageLookupByLibrary.simpleMessage("是"),
|
||||||
|
|
|
||||||
|
|
@ -199,6 +199,16 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Show play button for books in currently listening shelf`
|
||||||
|
String get homeBookContinueListeningDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Show play button for books in currently listening shelf',
|
||||||
|
name: 'homeBookContinueListeningDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Continue Series`
|
/// `Continue Series`
|
||||||
String get homeBookContinueSeries {
|
String get homeBookContinueSeries {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -209,6 +219,16 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Show play button for books in continue series shelf`
|
||||||
|
String get homeBookContinueSeriesDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Show play button for books in continue series shelf',
|
||||||
|
name: 'homeBookContinueSeriesDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Recently Added`
|
/// `Recently Added`
|
||||||
String get homeBookRecentlyAdded {
|
String get homeBookRecentlyAdded {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -249,6 +269,16 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Show play button for all books in listen again shelf`
|
||||||
|
String get homeBookListenAgainDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Show play button for all books in listen again shelf',
|
||||||
|
name: 'homeBookListenAgainDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Newest Authors`
|
/// `Newest Authors`
|
||||||
String get homeBookNewestAuthors {
|
String get homeBookNewestAuthors {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -484,6 +514,181 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Manage Accounts`
|
||||||
|
String get accountManage {
|
||||||
|
return Intl.message(
|
||||||
|
'Manage Accounts',
|
||||||
|
name: 'accountManage',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Registered Servers`
|
||||||
|
String get accountRegisteredServers {
|
||||||
|
return Intl.message(
|
||||||
|
'Registered Servers',
|
||||||
|
name: 'accountRegisteredServers',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Users: {user}`
|
||||||
|
String accountUsersCount(Object user) {
|
||||||
|
return Intl.message(
|
||||||
|
'Users: $user',
|
||||||
|
name: 'accountUsersCount',
|
||||||
|
desc: '',
|
||||||
|
args: [user],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Add New Server`
|
||||||
|
String get accountAddNewServer {
|
||||||
|
return Intl.message(
|
||||||
|
'Add New Server',
|
||||||
|
name: 'accountAddNewServer',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Invalid URL`
|
||||||
|
String get accountInvalidURL {
|
||||||
|
return Intl.message(
|
||||||
|
'Invalid URL',
|
||||||
|
name: 'accountInvalidURL',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Delete Server`
|
||||||
|
String get accountDeleteServer {
|
||||||
|
return Intl.message(
|
||||||
|
'Delete Server',
|
||||||
|
name: 'accountDeleteServer',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Remove Server and Users`
|
||||||
|
String get accountRemoveServerAndUsers {
|
||||||
|
return Intl.message(
|
||||||
|
'Remove Server and Users',
|
||||||
|
name: 'accountRemoveServerAndUsers',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `This will remove the server `
|
||||||
|
String get accountRemoveServerAndUsersHead {
|
||||||
|
return Intl.message(
|
||||||
|
'This will remove the server ',
|
||||||
|
name: 'accountRemoveServerAndUsersHead',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ` and all its users' login info from this app.`
|
||||||
|
String get accountRemoveServerAndUsersTail {
|
||||||
|
return Intl.message(
|
||||||
|
' and all its users\' login info from this app.',
|
||||||
|
name: 'accountRemoveServerAndUsersTail',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Add User`
|
||||||
|
String get accountAddUser {
|
||||||
|
return Intl.message('Add User', name: 'accountAddUser', desc: '', args: []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Add new server`
|
||||||
|
String get accountAddUserTooltip {
|
||||||
|
return Intl.message(
|
||||||
|
'Add new server',
|
||||||
|
name: 'accountAddUserTooltip',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Add User to {host}`
|
||||||
|
String accountAddUserDialog(String host) {
|
||||||
|
return Intl.message(
|
||||||
|
'Add User to $host',
|
||||||
|
name: 'accountAddUserDialog',
|
||||||
|
desc: '',
|
||||||
|
args: [host],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `User added successfully! Switch?`
|
||||||
|
String get accountAddUserSuccessDialog {
|
||||||
|
return Intl.message(
|
||||||
|
'User added successfully! Switch?',
|
||||||
|
name: 'accountAddUserSuccessDialog',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Anonymous`
|
||||||
|
String get accountAnonymous {
|
||||||
|
return Intl.message(
|
||||||
|
'Anonymous',
|
||||||
|
name: 'accountAnonymous',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Remove User Login`
|
||||||
|
String get accountRemoveUserLogin {
|
||||||
|
return Intl.message(
|
||||||
|
'Remove User Login',
|
||||||
|
name: 'accountRemoveUserLogin',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `This will remove login details of the user `
|
||||||
|
String get accountRemoveUserLoginHead {
|
||||||
|
return Intl.message(
|
||||||
|
'This will remove login details of the user ',
|
||||||
|
name: 'accountRemoveUserLoginHead',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ` from this app.`
|
||||||
|
String get accountRemoveUserLoginTail {
|
||||||
|
return Intl.message(
|
||||||
|
' from this app.',
|
||||||
|
name: 'accountRemoveUserLoginTail',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Server URI`
|
||||||
|
String get accountServerURI {
|
||||||
|
return Intl.message(
|
||||||
|
'Server URI',
|
||||||
|
name: 'accountServerURI',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `My Playlists`
|
/// `My Playlists`
|
||||||
String get playlistsMine {
|
String get playlistsMine {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -499,6 +704,16 @@ class S {
|
||||||
return Intl.message('Web Version', name: 'webVersion', desc: '', args: []);
|
return Intl.message('Web Version', name: 'webVersion', desc: '', args: []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `{second} seconds`
|
||||||
|
String timeSecond(int second) {
|
||||||
|
return Intl.message(
|
||||||
|
'$second seconds',
|
||||||
|
name: 'timeSecond',
|
||||||
|
desc: '',
|
||||||
|
args: [second],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `App Settings`
|
/// `App Settings`
|
||||||
String get appSettings {
|
String get appSettings {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -589,6 +804,66 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Select Speed Options`
|
||||||
|
String get playerSettingsSpeedOptionsSelect {
|
||||||
|
return Intl.message(
|
||||||
|
'Select Speed Options',
|
||||||
|
name: 'playerSettingsSpeedOptionsSelect',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Add Speed Option`
|
||||||
|
String get playerSettingsSpeedOptionsSelectAdd {
|
||||||
|
return Intl.message(
|
||||||
|
'Add Speed Option',
|
||||||
|
name: 'playerSettingsSpeedOptionsSelectAdd',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Enter a new speed option to add`
|
||||||
|
String get playerSettingsSpeedOptionsSelectAddHelper {
|
||||||
|
return Intl.message(
|
||||||
|
'Enter a new speed option to add',
|
||||||
|
name: 'playerSettingsSpeedOptionsSelectAddHelper',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Speed`
|
||||||
|
String get playerSettingsSpeed {
|
||||||
|
return Intl.message(
|
||||||
|
'Speed',
|
||||||
|
name: 'playerSettingsSpeed',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Select Speed`
|
||||||
|
String get playerSettingsSpeedSelect {
|
||||||
|
return Intl.message(
|
||||||
|
'Select Speed',
|
||||||
|
name: 'playerSettingsSpeedSelect',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Enter the speed you want to set when playing for the first time`
|
||||||
|
String get playerSettingsSpeedSelectHelper {
|
||||||
|
return Intl.message(
|
||||||
|
'Enter the speed you want to set when playing for the first time',
|
||||||
|
name: 'playerSettingsSpeedSelectHelper',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Playback Reporting`
|
/// `Playback Reporting`
|
||||||
String get playerSettingsPlaybackReporting {
|
String get playerSettingsPlaybackReporting {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -639,6 +914,116 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Mark Complete When Time Left`
|
||||||
|
String get playerSettingsCompleteTime {
|
||||||
|
return Intl.message(
|
||||||
|
'Mark Complete When Time Left',
|
||||||
|
name: 'playerSettingsCompleteTime',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Mark complete when less than `
|
||||||
|
String get playerSettingsCompleteTimeDescriptionHead {
|
||||||
|
return Intl.message(
|
||||||
|
'Mark complete when less than ',
|
||||||
|
name: 'playerSettingsCompleteTimeDescriptionHead',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ` left in the book`
|
||||||
|
String get playerSettingsCompleteTimeDescriptionTail {
|
||||||
|
return Intl.message(
|
||||||
|
' left in the book',
|
||||||
|
name: 'playerSettingsCompleteTimeDescriptionTail',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Playback Report Interval`
|
||||||
|
String get playerSettingsPlaybackInterval {
|
||||||
|
return Intl.message(
|
||||||
|
'Playback Report Interval',
|
||||||
|
name: 'playerSettingsPlaybackInterval',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Report progress every `
|
||||||
|
String get playerSettingsPlaybackIntervalDescriptionHead {
|
||||||
|
return Intl.message(
|
||||||
|
'Report progress every ',
|
||||||
|
name: 'playerSettingsPlaybackIntervalDescriptionHead',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ` to the server`
|
||||||
|
String get playerSettingsPlaybackIntervalDescriptionTail {
|
||||||
|
return Intl.message(
|
||||||
|
' to the server',
|
||||||
|
name: 'playerSettingsPlaybackIntervalDescriptionTail',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Display Settings`
|
||||||
|
String get playerSettingsDisplay {
|
||||||
|
return Intl.message(
|
||||||
|
'Display Settings',
|
||||||
|
name: 'playerSettingsDisplay',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Show Total Progress`
|
||||||
|
String get playerSettingsDisplayTotalProgress {
|
||||||
|
return Intl.message(
|
||||||
|
'Show Total Progress',
|
||||||
|
name: 'playerSettingsDisplayTotalProgress',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Show the total progress of the book in the player`
|
||||||
|
String get playerSettingsDisplayTotalProgressDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Show the total progress of the book in the player',
|
||||||
|
name: 'playerSettingsDisplayTotalProgressDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Show Chapter Progress`
|
||||||
|
String get playerSettingsDisplayChapterProgress {
|
||||||
|
return Intl.message(
|
||||||
|
'Show Chapter Progress',
|
||||||
|
name: 'playerSettingsDisplayChapterProgress',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Show the progress of the current chapter in the player`
|
||||||
|
String get playerSettingsDisplayChapterProgressDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Show the progress of the current chapter in the player',
|
||||||
|
name: 'playerSettingsDisplayChapterProgressDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Auto Turn On Sleep Timer`
|
/// `Auto Turn On Sleep Timer`
|
||||||
String get autoTurnOnSleepTimer {
|
String get autoTurnOnSleepTimer {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -659,6 +1044,96 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Auto Sleep Timer Settings`
|
||||||
|
String get autoSleepTimerSettings {
|
||||||
|
return Intl.message(
|
||||||
|
'Auto Sleep Timer Settings',
|
||||||
|
name: 'autoSleepTimerSettings',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Auto Turn On Timer`
|
||||||
|
String get autoTurnOnTimer {
|
||||||
|
return Intl.message(
|
||||||
|
'Auto Turn On Timer',
|
||||||
|
name: 'autoTurnOnTimer',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Automatically turn on the sleep timer based on the time of day`
|
||||||
|
String get autoTurnOnTimerDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Automatically turn on the sleep timer based on the time of day',
|
||||||
|
name: 'autoTurnOnTimerDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `From`
|
||||||
|
String get autoTurnOnTimerFrom {
|
||||||
|
return Intl.message(
|
||||||
|
'From',
|
||||||
|
name: 'autoTurnOnTimerFrom',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Turn on the sleep timer at the specified time`
|
||||||
|
String get autoTurnOnTimerFromDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Turn on the sleep timer at the specified time',
|
||||||
|
name: 'autoTurnOnTimerFromDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Until`
|
||||||
|
String get autoTurnOnTimerUntil {
|
||||||
|
return Intl.message(
|
||||||
|
'Until',
|
||||||
|
name: 'autoTurnOnTimerUntil',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Turn off the sleep timer at the specified time`
|
||||||
|
String get autoTurnOnTimerUntilDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Turn off the sleep timer at the specified time',
|
||||||
|
name: 'autoTurnOnTimerUntilDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Always Auto Turn On Timer`
|
||||||
|
String get autoTurnOnTimerAlways {
|
||||||
|
return Intl.message(
|
||||||
|
'Always Auto Turn On Timer',
|
||||||
|
name: 'autoTurnOnTimerAlways',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Always turn on the sleep timer, no matter what`
|
||||||
|
String get autoTurnOnTimerAlwaysDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Always turn on the sleep timer, no matter what',
|
||||||
|
name: 'autoTurnOnTimerAlwaysDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Shake Detector`
|
/// `Shake Detector`
|
||||||
String get shakeDetector {
|
String get shakeDetector {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -679,6 +1154,136 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Shake Detector Settings`
|
||||||
|
String get shakeDetectorSettings {
|
||||||
|
return Intl.message(
|
||||||
|
'Shake Detector Settings',
|
||||||
|
name: 'shakeDetectorSettings',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Enable Shake Detection`
|
||||||
|
String get shakeDetectorEnable {
|
||||||
|
return Intl.message(
|
||||||
|
'Enable Shake Detection',
|
||||||
|
name: 'shakeDetectorEnable',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Enable shake detection to do various actions`
|
||||||
|
String get shakeDetectorEnableDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Enable shake detection to do various actions',
|
||||||
|
name: 'shakeDetectorEnableDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Shake Activation Threshold`
|
||||||
|
String get shakeActivationThreshold {
|
||||||
|
return Intl.message(
|
||||||
|
'Shake Activation Threshold',
|
||||||
|
name: 'shakeActivationThreshold',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `The higher the threshold, the harder you need to shake`
|
||||||
|
String get shakeActivationThresholdDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'The higher the threshold, the harder you need to shake',
|
||||||
|
name: 'shakeActivationThresholdDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Select Shake Feedback`
|
||||||
|
String get shakeSelectFeedback {
|
||||||
|
return Intl.message(
|
||||||
|
'Select Shake Feedback',
|
||||||
|
name: 'shakeSelectFeedback',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Select Shake Action`
|
||||||
|
String get shakeSelectAction {
|
||||||
|
return Intl.message(
|
||||||
|
'Select Shake Action',
|
||||||
|
name: 'shakeSelectAction',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Select Shake Activation Threshold`
|
||||||
|
String get shakeSelectActivationThreshold {
|
||||||
|
return Intl.message(
|
||||||
|
'Select Shake Activation Threshold',
|
||||||
|
name: 'shakeSelectActivationThreshold',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Enter a number to set the threshold in m/s²`
|
||||||
|
String get shakeSelectActivationThresholdHelper {
|
||||||
|
return Intl.message(
|
||||||
|
'Enter a number to set the threshold in m/s²',
|
||||||
|
name: 'shakeSelectActivationThresholdHelper',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Shake Action`
|
||||||
|
String get shakeAction {
|
||||||
|
return Intl.message(
|
||||||
|
'Shake Action',
|
||||||
|
name: 'shakeAction',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `The action to perform when a shake is detected`
|
||||||
|
String get shakeActionDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'The action to perform when a shake is detected',
|
||||||
|
name: 'shakeActionDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Shake Feedback`
|
||||||
|
String get shakeFeedback {
|
||||||
|
return Intl.message(
|
||||||
|
'Shake Feedback',
|
||||||
|
name: 'shakeFeedback',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `The feedback to give when a shake is detected`
|
||||||
|
String get shakeFeedbackDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'The feedback to give when a shake is detected',
|
||||||
|
name: 'shakeFeedbackDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Appearance`
|
/// `Appearance`
|
||||||
String get appearance {
|
String get appearance {
|
||||||
return Intl.message('Appearance', name: 'appearance', desc: '', args: []);
|
return Intl.message('Appearance', name: 'appearance', desc: '', args: []);
|
||||||
|
|
@ -704,6 +1309,116 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Theme Mode`
|
||||||
|
String get themeMode {
|
||||||
|
return Intl.message('Theme Mode', name: 'themeMode', desc: '', args: []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Light`
|
||||||
|
String get themeModeLight {
|
||||||
|
return Intl.message('Light', name: 'themeModeLight', desc: '', args: []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `System`
|
||||||
|
String get themeModeSystem {
|
||||||
|
return Intl.message('System', name: 'themeModeSystem', desc: '', args: []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Dark`
|
||||||
|
String get themeModeDark {
|
||||||
|
return Intl.message('Dark', name: 'themeModeDark', desc: '', args: []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `High Contrast Mode`
|
||||||
|
String get themeModeHighContrast {
|
||||||
|
return Intl.message(
|
||||||
|
'High Contrast Mode',
|
||||||
|
name: 'themeModeHighContrast',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Increase the contrast between the background and the text`
|
||||||
|
String get themeModeHighContrastDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Increase the contrast between the background and the text',
|
||||||
|
name: 'themeModeHighContrastDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Use Material You`
|
||||||
|
String get themeSettingsColorsAndroid {
|
||||||
|
return Intl.message(
|
||||||
|
'Use Material You',
|
||||||
|
name: 'themeSettingsColorsAndroid',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Material Theme from System`
|
||||||
|
String get themeSettingsColors {
|
||||||
|
return Intl.message(
|
||||||
|
'Material Theme from System',
|
||||||
|
name: 'themeSettingsColors',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Use the system theme colors for the app`
|
||||||
|
String get themeSettingsColorsDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Use the system theme colors for the app',
|
||||||
|
name: 'themeSettingsColorsDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Adapt theme from currently playing item`
|
||||||
|
String get themeSettingsColorsCurrent {
|
||||||
|
return Intl.message(
|
||||||
|
'Adapt theme from currently playing item',
|
||||||
|
name: 'themeSettingsColorsCurrent',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Use the theme colors from the currently playing item for the app`
|
||||||
|
String get themeSettingsColorsCurrentDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Use the theme colors from the currently playing item for the app',
|
||||||
|
name: 'themeSettingsColorsCurrentDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Adaptive Theme on Item Page`
|
||||||
|
String get themeSettingsColorsBook {
|
||||||
|
return Intl.message(
|
||||||
|
'Adaptive Theme on Item Page',
|
||||||
|
name: 'themeSettingsColorsBook',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Get fancy with the colors on the item page at the cost of some performance`
|
||||||
|
String get themeSettingsColorsBookDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Get fancy with the colors on the item page at the cost of some performance',
|
||||||
|
name: 'themeSettingsColorsBookDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Notification Media Player`
|
/// `Notification Media Player`
|
||||||
String get notificationMediaPlayer {
|
String get notificationMediaPlayer {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -724,6 +1439,116 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Primary Title`
|
||||||
|
String get nmpSettingsTitle {
|
||||||
|
return Intl.message(
|
||||||
|
'Primary Title',
|
||||||
|
name: 'nmpSettingsTitle',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `The title of the notification\n`
|
||||||
|
String get nmpSettingsTitleDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'The title of the notification\n',
|
||||||
|
name: 'nmpSettingsTitleDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Secondary Title`
|
||||||
|
String get nmpSettingsSubTitle {
|
||||||
|
return Intl.message(
|
||||||
|
'Secondary Title',
|
||||||
|
name: 'nmpSettingsSubTitle',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `The subtitle of the notification\n`
|
||||||
|
String get nmpSettingsSubTitleDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'The subtitle of the notification\n',
|
||||||
|
name: 'nmpSettingsSubTitleDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Forward Interval`
|
||||||
|
String get nmpSettingsForward {
|
||||||
|
return Intl.message(
|
||||||
|
'Forward Interval',
|
||||||
|
name: 'nmpSettingsForward',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Backward Interval`
|
||||||
|
String get nmpSettingsBackward {
|
||||||
|
return Intl.message(
|
||||||
|
'Backward Interval',
|
||||||
|
name: 'nmpSettingsBackward',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Media Controls`
|
||||||
|
String get nmpSettingsMediaControls {
|
||||||
|
return Intl.message(
|
||||||
|
'Media Controls',
|
||||||
|
name: 'nmpSettingsMediaControls',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Select the media controls to display`
|
||||||
|
String get nmpSettingsMediaControlsDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Select the media controls to display',
|
||||||
|
name: 'nmpSettingsMediaControlsDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Show Chapter Progress`
|
||||||
|
String get nmpSettingsShowChapterProgress {
|
||||||
|
return Intl.message(
|
||||||
|
'Show Chapter Progress',
|
||||||
|
name: 'nmpSettingsShowChapterProgress',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Instead of the overall progress of the book`
|
||||||
|
String get nmpSettingsShowChapterProgressDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Instead of the overall progress of the book',
|
||||||
|
name: 'nmpSettingsShowChapterProgressDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Select a field below to insert it`
|
||||||
|
String get nmpSettingsSelectOne {
|
||||||
|
return Intl.message(
|
||||||
|
'Select a field below to insert it',
|
||||||
|
name: 'nmpSettingsSelectOne',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Home Page Settings`
|
/// `Home Page Settings`
|
||||||
String get homePageSettings {
|
String get homePageSettings {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
@ -744,6 +1569,36 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Quick Play`
|
||||||
|
String get homePageSettingsQuickPlay {
|
||||||
|
return Intl.message(
|
||||||
|
'Quick Play',
|
||||||
|
name: 'homePageSettingsQuickPlay',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Other shelves`
|
||||||
|
String get homePageSettingsOtherShelves {
|
||||||
|
return Intl.message(
|
||||||
|
'Other shelves',
|
||||||
|
name: 'homePageSettingsOtherShelves',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Show play button for all books in all remaining shelves`
|
||||||
|
String get homePageSettingsOtherShelvesDescription {
|
||||||
|
return Intl.message(
|
||||||
|
'Show play button for all books in all remaining shelves',
|
||||||
|
name: 'homePageSettingsOtherShelvesDescription',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Backup and Restore`
|
/// `Backup and Restore`
|
||||||
String get backupAndRestore {
|
String get backupAndRestore {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,14 @@
|
||||||
"homeContinueListening": "Continue Listening",
|
"homeContinueListening": "Continue Listening",
|
||||||
"homeStartListening": "Start Listening",
|
"homeStartListening": "Start Listening",
|
||||||
"homeBookContinueListening": "Continue Listening",
|
"homeBookContinueListening": "Continue Listening",
|
||||||
|
"homeBookContinueListeningDescription": "Show play button for books in currently listening shelf",
|
||||||
"homeBookContinueSeries": "Continue Series",
|
"homeBookContinueSeries": "Continue Series",
|
||||||
|
"homeBookContinueSeriesDescription": "Show play button for books in continue series shelf",
|
||||||
"homeBookRecentlyAdded": "Recently Added",
|
"homeBookRecentlyAdded": "Recently Added",
|
||||||
"homeBookRecommended": "Recommended",
|
"homeBookRecommended": "Recommended",
|
||||||
"homeBookDiscover": "Discover",
|
"homeBookDiscover": "Discover",
|
||||||
"homeBookListenAgain": "Listen Again",
|
"homeBookListenAgain": "Listen Again",
|
||||||
|
"homeBookListenAgainDescription": "Show play button for all books in listen again shelf",
|
||||||
"homeBookNewestAuthors": "Newest Authors",
|
"homeBookNewestAuthors": "Newest Authors",
|
||||||
"bookAbout": "About the Book",
|
"bookAbout": "About the Book",
|
||||||
"bookAboutDefault": "Sorry, no description found",
|
"bookAboutDefault": "Sorry, no description found",
|
||||||
|
|
@ -83,9 +86,49 @@
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
"account": "Account",
|
"account": "Account",
|
||||||
"accountSwitch": "Switch Account",
|
"accountSwitch": "Switch Account",
|
||||||
|
"accountManage": "Manage Accounts",
|
||||||
|
"accountRegisteredServers": "Registered Servers",
|
||||||
|
"accountUsersCount": "Users: {user}",
|
||||||
|
"@accountUsers": {
|
||||||
|
"placeholders": {
|
||||||
|
"user": {
|
||||||
|
"type": "int"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accountAddNewServer": "Add New Server",
|
||||||
|
"accountInvalidURL": "Invalid URL",
|
||||||
|
"accountDeleteServer": "Delete Server",
|
||||||
|
"accountRemoveServerAndUsers": "Remove Server and Users",
|
||||||
|
"accountRemoveServerAndUsersHead": "This will remove the server ",
|
||||||
|
"accountRemoveServerAndUsersTail": " and all its users' login info from this app.",
|
||||||
|
"accountAddUser": "Add User",
|
||||||
|
"accountAddUserTooltip": "Add new server",
|
||||||
|
"accountAddUserDialog": "Add User to {host}",
|
||||||
|
"@accountAddUserDialog": {
|
||||||
|
"placeholders": {
|
||||||
|
"host": {
|
||||||
|
"type": "String"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accountAddUserSuccessDialog": "User added successfully! Switch?",
|
||||||
|
"accountAnonymous": "Anonymous",
|
||||||
|
"accountRemoveUserLogin": "Remove User Login",
|
||||||
|
"accountRemoveUserLoginHead": "This will remove login details of the user ",
|
||||||
|
"accountRemoveUserLoginTail": " from this app.",
|
||||||
|
"accountServerURI": "Server URI",
|
||||||
"playlistsMine": "My Playlists",
|
"playlistsMine": "My Playlists",
|
||||||
"webVersion": "Web Version",
|
"webVersion": "Web Version",
|
||||||
|
|
||||||
|
"timeSecond": "{second} seconds",
|
||||||
|
"@timeSecond": {
|
||||||
|
"placeholders": {
|
||||||
|
"second": {
|
||||||
|
"type": "int"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"appSettings": "App Settings",
|
"appSettings": "App Settings",
|
||||||
"general": "General",
|
"general": "General",
|
||||||
"language": "Language",
|
"language": "Language",
|
||||||
|
|
@ -96,22 +139,88 @@
|
||||||
"playerSettingsRememberForEveryBookDescription": "Settings like speed, loudness, etc. will be remembered for every book",
|
"playerSettingsRememberForEveryBookDescription": "Settings like speed, loudness, etc. will be remembered for every book",
|
||||||
"playerSettingsSpeedDefault": "Default Speed",
|
"playerSettingsSpeedDefault": "Default Speed",
|
||||||
"playerSettingsSpeedOptions": "Speed Options",
|
"playerSettingsSpeedOptions": "Speed Options",
|
||||||
|
"playerSettingsSpeedOptionsSelect": "Select Speed Options",
|
||||||
|
"playerSettingsSpeedOptionsSelectAdd": "Add Speed Option",
|
||||||
|
"playerSettingsSpeedOptionsSelectAddHelper": "Enter a new speed option to add",
|
||||||
|
"playerSettingsSpeed": "Speed",
|
||||||
|
"playerSettingsSpeedSelect": "Select Speed",
|
||||||
|
"playerSettingsSpeedSelectHelper": "Enter the speed you want to set when playing for the first time",
|
||||||
"playerSettingsPlaybackReporting": "Playback Reporting",
|
"playerSettingsPlaybackReporting": "Playback Reporting",
|
||||||
"playerSettingsPlaybackReportingMinimum": "Minimum Position to Report",
|
"playerSettingsPlaybackReportingMinimum": "Minimum Position to Report",
|
||||||
"playerSettingsPlaybackReportingMinimumDescriptionHead": "Do not report playback for the first ",
|
"playerSettingsPlaybackReportingMinimumDescriptionHead": "Do not report playback for the first ",
|
||||||
"playerSettingsPlaybackReportingMinimumDescriptionTail": "of the book",
|
"playerSettingsPlaybackReportingMinimumDescriptionTail": "of the book",
|
||||||
"playerSettingsPlaybackReportingIgnore": "Ignore Playback Position Less Than",
|
"playerSettingsPlaybackReportingIgnore": "Ignore Playback Position Less Than",
|
||||||
|
"playerSettingsCompleteTime": "Mark Complete When Time Left",
|
||||||
|
"playerSettingsCompleteTimeDescriptionHead": "Mark complete when less than ",
|
||||||
|
"playerSettingsCompleteTimeDescriptionTail": " left in the book",
|
||||||
|
"playerSettingsPlaybackInterval": "Playback Report Interval",
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionHead": "Report progress every ",
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionTail": " to the server",
|
||||||
|
"playerSettingsDisplay": "Display Settings",
|
||||||
|
"playerSettingsDisplayTotalProgress": "Show Total Progress",
|
||||||
|
"playerSettingsDisplayTotalProgressDescription": "Show the total progress of the book in the player",
|
||||||
|
"playerSettingsDisplayChapterProgress": "Show Chapter Progress",
|
||||||
|
"playerSettingsDisplayChapterProgressDescription": "Show the progress of the current chapter in the player",
|
||||||
"autoTurnOnSleepTimer": "Auto Turn On Sleep Timer",
|
"autoTurnOnSleepTimer": "Auto Turn On Sleep Timer",
|
||||||
"automaticallyDescription": "Automatically turn on the sleep timer based on the time of day",
|
"automaticallyDescription": "Automatically turn on the sleep timer based on the time of day",
|
||||||
|
"autoSleepTimerSettings": "Auto Sleep Timer Settings",
|
||||||
|
"autoTurnOnTimer": "Auto Turn On Timer",
|
||||||
|
"autoTurnOnTimerDescription": "Automatically turn on the sleep timer based on the time of day",
|
||||||
|
"autoTurnOnTimerFrom": "From",
|
||||||
|
"autoTurnOnTimerFromDescription": "Turn on the sleep timer at the specified time",
|
||||||
|
"autoTurnOnTimerUntil": "Until",
|
||||||
|
"autoTurnOnTimerUntilDescription": "Turn off the sleep timer at the specified time",
|
||||||
|
"autoTurnOnTimerAlways": "Always Auto Turn On Timer",
|
||||||
|
"autoTurnOnTimerAlwaysDescription": "Always turn on the sleep timer, no matter what",
|
||||||
"shakeDetector": "Shake Detector",
|
"shakeDetector": "Shake Detector",
|
||||||
"shakeDetectorDescription": "Customize the shake detector settings",
|
"shakeDetectorDescription": "Customize the shake detector settings",
|
||||||
|
"shakeDetectorSettings": "Shake Detector Settings",
|
||||||
|
"shakeDetectorEnable": "Enable Shake Detection",
|
||||||
|
"shakeDetectorEnableDescription": "Enable shake detection to do various actions",
|
||||||
|
"shakeActivationThreshold": "Shake Activation Threshold",
|
||||||
|
"shakeActivationThresholdDescription": "The higher the threshold, the harder you need to shake",
|
||||||
|
"shakeSelectFeedback": "Select Shake Feedback",
|
||||||
|
"shakeSelectAction": "Select Shake Action",
|
||||||
|
"shakeSelectActivationThreshold": "Select Shake Activation Threshold",
|
||||||
|
"shakeSelectActivationThresholdHelper": "Enter a number to set the threshold in m/s²",
|
||||||
|
"shakeAction": "Shake Action",
|
||||||
|
"shakeActionDescription": "The action to perform when a shake is detected",
|
||||||
|
"shakeFeedback": "Shake Feedback",
|
||||||
|
"shakeFeedbackDescription": "The feedback to give when a shake is detected",
|
||||||
"appearance": "Appearance",
|
"appearance": "Appearance",
|
||||||
"themeSettings": "Theme Settings",
|
"themeSettings": "Theme Settings",
|
||||||
"themeSettingsDescription": "Customize the app theme",
|
"themeSettingsDescription": "Customize the app theme",
|
||||||
|
"themeMode": "Theme Mode",
|
||||||
|
"themeModeLight": "Light",
|
||||||
|
"themeModeSystem": "System",
|
||||||
|
"themeModeDark": "Dark",
|
||||||
|
"themeModeHighContrast": "High Contrast Mode",
|
||||||
|
"themeModeHighContrastDescription": "Increase the contrast between the background and the text",
|
||||||
|
"themeSettingsColorsAndroid": "Use Material You",
|
||||||
|
"themeSettingsColors": "Material Theme from System",
|
||||||
|
"themeSettingsColorsDescription": "Use the system theme colors for the app",
|
||||||
|
"themeSettingsColorsCurrent": "Adapt theme from currently playing item",
|
||||||
|
"themeSettingsColorsCurrentDescription": "Use the theme colors from the currently playing item for the app",
|
||||||
|
"themeSettingsColorsBook": "Adaptive Theme on Item Page",
|
||||||
|
"themeSettingsColorsBookDescription": "Get fancy with the colors on the item page at the cost of some performance",
|
||||||
"notificationMediaPlayer": "Notification Media Player",
|
"notificationMediaPlayer": "Notification Media Player",
|
||||||
"notificationMediaPlayerDescription": "Customize the media player in notifications",
|
"notificationMediaPlayerDescription": "Customize the media player in notifications",
|
||||||
|
"nmpSettingsTitle": "Primary Title",
|
||||||
|
"nmpSettingsTitleDescription": "The title of the notification\n",
|
||||||
|
"nmpSettingsSubTitle": "Secondary Title",
|
||||||
|
"nmpSettingsSubTitleDescription": "The subtitle of the notification\n",
|
||||||
|
"nmpSettingsForward": "Forward Interval",
|
||||||
|
"nmpSettingsBackward": "Backward Interval",
|
||||||
|
"nmpSettingsMediaControls": "Media Controls",
|
||||||
|
"nmpSettingsMediaControlsDescription": "Select the media controls to display",
|
||||||
|
"nmpSettingsShowChapterProgress": "Show Chapter Progress",
|
||||||
|
"nmpSettingsShowChapterProgressDescription": "Instead of the overall progress of the book",
|
||||||
|
"nmpSettingsSelectOne": "Select a field below to insert it",
|
||||||
"homePageSettings": "Home Page Settings",
|
"homePageSettings": "Home Page Settings",
|
||||||
"homePageSettingsDescription": "Customize the home page",
|
"homePageSettingsDescription": "Customize the home page",
|
||||||
|
"homePageSettingsQuickPlay": "Quick Play",
|
||||||
|
"homePageSettingsOtherShelves": "Other shelves",
|
||||||
|
"homePageSettingsOtherShelvesDescription": "Show play button for all books in all remaining shelves",
|
||||||
"backupAndRestore": "Backup and Restore",
|
"backupAndRestore": "Backup and Restore",
|
||||||
"copyToClipboard": "Copy to Clipboard",
|
"copyToClipboard": "Copy to Clipboard",
|
||||||
"copyToClipboardDescription": "Copy the app settings to the clipboard",
|
"copyToClipboardDescription": "Copy the app settings to the clipboard",
|
||||||
|
|
@ -129,9 +238,6 @@
|
||||||
"resetAppSettingsDescription": "Reset the app settings to the default values",
|
"resetAppSettingsDescription": "Reset the app settings to the default values",
|
||||||
"resetAppSettingsDialog": "Are you sure you want to reset the app settings?",
|
"resetAppSettingsDialog": "Are you sure you want to reset the app settings?",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"logs": "Logs",
|
"logs": "Logs",
|
||||||
"notImplemented": "Not implemented"
|
"notImplemented": "Not implemented"
|
||||||
}
|
}
|
||||||
|
|
@ -41,11 +41,14 @@
|
||||||
"homeContinueListening": "继续收听",
|
"homeContinueListening": "继续收听",
|
||||||
"homeStartListening": "开始收听",
|
"homeStartListening": "开始收听",
|
||||||
"homeBookContinueListening": "继续收听",
|
"homeBookContinueListening": "继续收听",
|
||||||
|
"homeBookContinueListeningDescription": "继续收听书架上显示播放按钮",
|
||||||
"homeBookContinueSeries": "继续系列",
|
"homeBookContinueSeries": "继续系列",
|
||||||
|
"homeBookContinueSeriesDescription": "继续系列书架上显示播放按钮",
|
||||||
"homeBookRecentlyAdded": "最近添加",
|
"homeBookRecentlyAdded": "最近添加",
|
||||||
"homeBookRecommended": "推荐",
|
"homeBookRecommended": "推荐",
|
||||||
"homeBookDiscover": "发现",
|
"homeBookDiscover": "发现",
|
||||||
"homeBookListenAgain": "再听一遍",
|
"homeBookListenAgain": "再听一遍",
|
||||||
|
"homeBookListenAgainDescription": "再听一遍书架上显示播放按钮",
|
||||||
"homeBookNewestAuthors": "最新作者",
|
"homeBookNewestAuthors": "最新作者",
|
||||||
"bookAbout": "关于本书",
|
"bookAbout": "关于本书",
|
||||||
"bookAboutDefault": "抱歉,找不到描述",
|
"bookAboutDefault": "抱歉,找不到描述",
|
||||||
|
|
@ -83,9 +86,49 @@
|
||||||
"settings": "设置",
|
"settings": "设置",
|
||||||
"account": "账户",
|
"account": "账户",
|
||||||
"accountSwitch": "切换账户",
|
"accountSwitch": "切换账户",
|
||||||
|
"accountManage": "帐户管理",
|
||||||
|
"accountRegisteredServers": "已注册服务器",
|
||||||
|
"accountUsersCount": "用户数: {user}",
|
||||||
|
"@accountUsers": {
|
||||||
|
"placeholders": {
|
||||||
|
"user": {
|
||||||
|
"type": "int"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accountAddNewServer": "添加新服务器",
|
||||||
|
"accountInvalidURL": "无效网址",
|
||||||
|
"accountDeleteServer": "删除服务器",
|
||||||
|
"accountRemoveServerAndUsers": "删除服务器和用户",
|
||||||
|
"accountRemoveServerAndUsersHead": "这将删除服务器 ",
|
||||||
|
"accountRemoveServerAndUsersTail": " 以及该应用程序中所有用户的登录信息。",
|
||||||
|
"accountAddUser": "添加用户",
|
||||||
|
"accountAddUserTooltip": "添加新服务器",
|
||||||
|
"accountAddUserDialog": "将用户添加到 {host}",
|
||||||
|
"@accountAddUserDialog": {
|
||||||
|
"placeholders": {
|
||||||
|
"host": {
|
||||||
|
"type": "String"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accountAddUserSuccessDialog": "用户添加成功!切换?",
|
||||||
|
"accountAnonymous": "匿名",
|
||||||
|
"accountRemoveUserLogin": "删除用户登录",
|
||||||
|
"accountRemoveUserLoginHead": "这将删除用户 ",
|
||||||
|
"accountRemoveUserLoginTail": " 的登录详细信息。",
|
||||||
|
"accountServerURI": "服务器地址",
|
||||||
"playlistsMine": "播放列表",
|
"playlistsMine": "播放列表",
|
||||||
"webVersion": "Web版本",
|
"webVersion": "Web版本",
|
||||||
|
|
||||||
|
"timeSecond": "{second} 秒",
|
||||||
|
"@timeSecond": {
|
||||||
|
"placeholders": {
|
||||||
|
"second": {
|
||||||
|
"type": "int"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"appSettings": "应用设置",
|
"appSettings": "应用设置",
|
||||||
"general": "通用",
|
"general": "通用",
|
||||||
"language": "语言",
|
"language": "语言",
|
||||||
|
|
@ -96,22 +139,88 @@
|
||||||
"playerSettingsRememberForEveryBookDescription": "每本书都会记住播放速度、音量等设置",
|
"playerSettingsRememberForEveryBookDescription": "每本书都会记住播放速度、音量等设置",
|
||||||
"playerSettingsSpeedDefault": "默认播放速度",
|
"playerSettingsSpeedDefault": "默认播放速度",
|
||||||
"playerSettingsSpeedOptions": "播放速度选项",
|
"playerSettingsSpeedOptions": "播放速度选项",
|
||||||
|
"playerSettingsSpeedOptionsSelect": "播放速度选项",
|
||||||
|
"playerSettingsSpeedOptionsSelectAdd": "添加一个速度选项",
|
||||||
|
"playerSettingsSpeedOptionsSelectAddHelper": "输入一个新的速度选项",
|
||||||
|
"playerSettingsSpeed": "播放速度",
|
||||||
|
"playerSettingsSpeedSelect": "选择播放速度",
|
||||||
|
"playerSettingsSpeedSelectHelper": "输入默认的播放速度",
|
||||||
"playerSettingsPlaybackReporting": "回放报告",
|
"playerSettingsPlaybackReporting": "回放报告",
|
||||||
"playerSettingsPlaybackReportingMinimum": "回放报告最小位置",
|
"playerSettingsPlaybackReportingMinimum": "回放报告最小位置",
|
||||||
"playerSettingsPlaybackReportingMinimumDescriptionHead": "不要报告本书前 ",
|
"playerSettingsPlaybackReportingMinimumDescriptionHead": "不要报告本书前 ",
|
||||||
"playerSettingsPlaybackReportingMinimumDescriptionTail": " 的播放",
|
"playerSettingsPlaybackReportingMinimumDescriptionTail": " 的播放",
|
||||||
"playerSettingsPlaybackReportingIgnore": "忽略播放位置小于",
|
"playerSettingsPlaybackReportingIgnore": "忽略播放位置小于",
|
||||||
|
"playerSettingsCompleteTime": "剩余时间标记完成",
|
||||||
|
"playerSettingsCompleteTimeDescriptionHead": "当书中剩余时间少于 ",
|
||||||
|
"playerSettingsCompleteTimeDescriptionTail": " 时,标记完成",
|
||||||
|
"playerSettingsPlaybackInterval": "播放报告间隔",
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionHead": "每 ",
|
||||||
|
"playerSettingsPlaybackIntervalDescriptionTail": " 向服务器报告一次进度",
|
||||||
|
"playerSettingsDisplay": "显示设置",
|
||||||
|
"playerSettingsDisplayTotalProgress": "显示总进度",
|
||||||
|
"playerSettingsDisplayTotalProgressDescription": "在播放器中显示当前书籍的总进度",
|
||||||
|
"playerSettingsDisplayChapterProgress": "显示章节进度",
|
||||||
|
"playerSettingsDisplayChapterProgressDescription": "在播放器中显示当前章节的进度",
|
||||||
"autoTurnOnSleepTimer": "自动开启睡眠定时器",
|
"autoTurnOnSleepTimer": "自动开启睡眠定时器",
|
||||||
"automaticallyDescription": "根据一天中的时间自动打开睡眠定时器",
|
"automaticallyDescription": "根据一天中的时间自动打开睡眠定时器",
|
||||||
|
"autoSleepTimerSettings": "自动睡眠定时器设置",
|
||||||
|
"autoTurnOnTimer": "自动开启定时器",
|
||||||
|
"autoTurnOnTimerDescription": "根据一天中的时间自动打开睡眠定时器",
|
||||||
|
"autoTurnOnTimerFrom": "从",
|
||||||
|
"autoTurnOnTimerFromDescription": "在指定时间打开睡眠定时器",
|
||||||
|
"autoTurnOnTimerUntil": "直到",
|
||||||
|
"autoTurnOnTimerUntilDescription": "在指定时间关闭睡眠定时器",
|
||||||
|
"autoTurnOnTimerAlways": "始终自动开启定时器",
|
||||||
|
"autoTurnOnTimerAlwaysDescription": "总是打开睡眠定时器",
|
||||||
"shakeDetector": "抖动检测器",
|
"shakeDetector": "抖动检测器",
|
||||||
"shakeDetectorDescription": "自定义抖动检测器设置",
|
"shakeDetectorDescription": "自定义抖动检测器设置",
|
||||||
|
"shakeDetectorSettings": "抖动检测器设置",
|
||||||
|
"shakeDetectorEnable": "启用抖动检测",
|
||||||
|
"shakeDetectorEnableDescription": "启用抖动检测以执行各种操作",
|
||||||
|
"shakeActivationThreshold": "抖动激活阈值",
|
||||||
|
"shakeActivationThresholdDescription": "门槛越高,你就越难摇晃",
|
||||||
|
"shakeSelectFeedback": "选择抖动反馈",
|
||||||
|
"shakeSelectAction": "选择抖动动作",
|
||||||
|
"shakeSelectActivationThreshold": "选择抖动激活阈值",
|
||||||
|
"shakeSelectActivationThresholdHelper": "输入一个数字以m/s²为单位设置阈值",
|
||||||
|
"shakeAction": "抖动操作",
|
||||||
|
"shakeActionDescription": "检测到抖动时要执行的操作",
|
||||||
|
"shakeFeedback": "抖动反馈",
|
||||||
|
"shakeFeedbackDescription": "检测到抖动时给出的反馈",
|
||||||
"appearance": "外观",
|
"appearance": "外观",
|
||||||
"themeSettings": "主题设置",
|
"themeSettings": "主题设置",
|
||||||
"themeSettingsDescription": "自定义应用主题",
|
"themeSettingsDescription": "自定义应用主题",
|
||||||
|
"themeMode": "主题模式",
|
||||||
|
"themeModeLight": "浅色",
|
||||||
|
"themeModeSystem": "跟随系统",
|
||||||
|
"themeModeDark": "深色",
|
||||||
|
"themeModeHighContrast": "高对比度模式",
|
||||||
|
"themeModeHighContrastDescription": "增加背景和文本之间的对比度",
|
||||||
|
"themeSettingsColorsAndroid": "主题色",
|
||||||
|
"themeSettingsColors": "主题色",
|
||||||
|
"themeSettingsColorsDescription": "使用应用程序的系统主题色",
|
||||||
|
"themeSettingsColorsCurrent": "根据当前播放的书籍调整主题",
|
||||||
|
"themeSettingsColorsCurrentDescription": "使用当前播放书籍的主题颜色",
|
||||||
|
"themeSettingsColorsBook": "书籍详情页自适应主题",
|
||||||
|
"themeSettingsColorsBookDescription": "以牺牲一些性能为代价,对书籍详情页的颜色进行美化",
|
||||||
"notificationMediaPlayer": "通知媒体播放器",
|
"notificationMediaPlayer": "通知媒体播放器",
|
||||||
"notificationMediaPlayerDescription": "在通知中自定义媒体播放器",
|
"notificationMediaPlayerDescription": "在通知中自定义媒体播放器",
|
||||||
|
"nmpSettingsTitle": "主标题",
|
||||||
|
"nmpSettingsTitleDescription": "通知的标题\n",
|
||||||
|
"nmpSettingsSubTitle": "副标题",
|
||||||
|
"nmpSettingsSubTitleDescription": "通知的副标题\n",
|
||||||
|
"nmpSettingsForward": "快进间隔",
|
||||||
|
"nmpSettingsBackward": "快退间隔",
|
||||||
|
"nmpSettingsMediaControls": "媒体控制",
|
||||||
|
"nmpSettingsMediaControlsDescription": "选择要显示的媒体控件",
|
||||||
|
"nmpSettingsShowChapterProgress": "显示章节进度",
|
||||||
|
"nmpSettingsShowChapterProgressDescription": "而不是本书的整体进展",
|
||||||
|
"nmpSettingsSelectOne": "在下面选择一个字段进行插入",
|
||||||
"homePageSettings": "主页设置",
|
"homePageSettings": "主页设置",
|
||||||
"homePageSettingsDescription": "自定义主页",
|
"homePageSettingsDescription": "自定义主页",
|
||||||
|
"homePageSettingsQuickPlay": "继续播放",
|
||||||
|
"homePageSettingsOtherShelves": "其他书架",
|
||||||
|
"homePageSettingsOtherShelvesDescription": "显示所有剩余书架上所有书籍的播放按钮",
|
||||||
"backupAndRestore": "备份与恢复",
|
"backupAndRestore": "备份与恢复",
|
||||||
"copyToClipboard": "复制到剪贴板",
|
"copyToClipboard": "复制到剪贴板",
|
||||||
"copyToClipboardDescription": "将应用程序设置复制到剪贴板",
|
"copyToClipboardDescription": "将应用程序设置复制到剪贴板",
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:material_symbols_icons/symbols.dart';
|
import 'package:material_symbols_icons/symbols.dart';
|
||||||
|
import 'package:vaani/generated/l10n.dart';
|
||||||
import 'package:vaani/settings/app_settings_provider.dart';
|
import 'package:vaani/settings/app_settings_provider.dart';
|
||||||
import 'package:vaani/settings/view/simple_settings_page.dart';
|
import 'package:vaani/settings/view/simple_settings_page.dart';
|
||||||
import 'package:vaani/shared/extensions/time_of_day.dart';
|
import 'package:vaani/shared/extensions/time_of_day.dart';
|
||||||
|
|
@ -22,7 +23,7 @@ class AutoSleepTimerSettingsPage extends HookConsumerWidget {
|
||||||
? Theme.of(context).colorScheme.primary
|
? Theme.of(context).colorScheme.primary
|
||||||
: Theme.of(context).disabledColor;
|
: Theme.of(context).disabledColor;
|
||||||
return SimpleSettingsPage(
|
return SimpleSettingsPage(
|
||||||
title: const Text('Auto Sleep Timer Settings'),
|
title: Text(S.of(context).autoSleepTimerSettings),
|
||||||
sections: [
|
sections: [
|
||||||
SettingsSection(
|
SettingsSection(
|
||||||
margin: const EdgeInsetsDirectional.symmetric(
|
margin: const EdgeInsetsDirectional.symmetric(
|
||||||
|
|
@ -32,9 +33,9 @@ class AutoSleepTimerSettingsPage extends HookConsumerWidget {
|
||||||
tiles: [
|
tiles: [
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
// initialValue: sleepTimerSettings.autoTurnOnTimer,
|
// initialValue: sleepTimerSettings.autoTurnOnTimer,
|
||||||
title: const Text('Auto Turn On Timer'),
|
title: Text(S.of(context).autoTurnOnTimer),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Automatically turn on the sleep timer based on the time of day',
|
S.of(context).autoTurnOnTimerDescription,
|
||||||
),
|
),
|
||||||
leading: sleepTimerSettings.autoTurnOnTimer
|
leading: sleepTimerSettings.autoTurnOnTimer
|
||||||
? const Icon(Symbols.time_auto)
|
? const Icon(Symbols.time_auto)
|
||||||
|
|
@ -52,9 +53,9 @@ class AutoSleepTimerSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile.navigation(
|
SettingsTile.navigation(
|
||||||
enabled: enabled,
|
enabled: enabled,
|
||||||
leading: const Icon(Symbols.timer_play),
|
leading: const Icon(Symbols.timer_play),
|
||||||
title: const Text('From'),
|
title: Text(S.of(context).autoTurnOnTimerFrom),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Turn on the sleep timer at the specified time',
|
S.of(context).autoTurnOnTimerFromDescription,
|
||||||
),
|
),
|
||||||
onPressed: (context) async {
|
onPressed: (context) async {
|
||||||
// navigate to the time picker
|
// navigate to the time picker
|
||||||
|
|
@ -78,9 +79,9 @@ class AutoSleepTimerSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile.navigation(
|
SettingsTile.navigation(
|
||||||
enabled: enabled,
|
enabled: enabled,
|
||||||
leading: const Icon(Symbols.timer_pause),
|
leading: const Icon(Symbols.timer_pause),
|
||||||
title: const Text('Until'),
|
title: Text(S.of(context).autoTurnOnTimerUntil),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Turn off the sleep timer at the specified time',
|
S.of(context).autoTurnOnTimerUntilDescription,
|
||||||
),
|
),
|
||||||
onPressed: (context) async {
|
onPressed: (context) async {
|
||||||
// navigate to the time picker
|
// navigate to the time picker
|
||||||
|
|
@ -107,9 +108,9 @@ class AutoSleepTimerSettingsPage extends HookConsumerWidget {
|
||||||
// switch tile for always auto turn on timer no matter what
|
// switch tile for always auto turn on timer no matter what
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
leading: const Icon(Symbols.all_inclusive),
|
leading: const Icon(Symbols.all_inclusive),
|
||||||
title: const Text('Always Auto Turn On Timer'),
|
title: Text(S.of(context).autoTurnOnTimerAlways),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Always turn on the sleep timer, no matter what',
|
S.of(context).autoTurnOnTimerAlwaysDescription,
|
||||||
),
|
),
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
ref.read(appSettingsProvider.notifier).update(
|
ref.read(appSettingsProvider.notifier).update(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
||||||
|
import 'package:vaani/generated/l10n.dart';
|
||||||
import 'package:vaani/settings/app_settings_provider.dart';
|
import 'package:vaani/settings/app_settings_provider.dart';
|
||||||
import 'package:vaani/settings/view/simple_settings_page.dart'
|
import 'package:vaani/settings/view/simple_settings_page.dart'
|
||||||
show SimpleSettingsPage;
|
show SimpleSettingsPage;
|
||||||
|
|
@ -14,10 +15,10 @@ class HomePageSettingsPage extends HookConsumerWidget {
|
||||||
final appSettingsNotifier = ref.read(appSettingsProvider.notifier);
|
final appSettingsNotifier = ref.read(appSettingsProvider.notifier);
|
||||||
|
|
||||||
return SimpleSettingsPage(
|
return SimpleSettingsPage(
|
||||||
title: Text('Home Page Settings'),
|
title: Text(S.of(context).homePageSettings),
|
||||||
sections: [
|
sections: [
|
||||||
SettingsSection(
|
SettingsSection(
|
||||||
title: const Text('Quick Play'),
|
title: Text(S.of(context).homePageSettingsQuickPlay),
|
||||||
margin: const EdgeInsetsDirectional.symmetric(
|
margin: const EdgeInsetsDirectional.symmetric(
|
||||||
horizontal: 16.0,
|
horizontal: 16.0,
|
||||||
vertical: 8.0,
|
vertical: 8.0,
|
||||||
|
|
@ -26,11 +27,10 @@ class HomePageSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
initialValue: appSettings
|
initialValue: appSettings
|
||||||
.homePageSettings.showPlayButtonOnContinueListeningShelf,
|
.homePageSettings.showPlayButtonOnContinueListeningShelf,
|
||||||
title: const Text('Continue Listening'),
|
title: Text(S.of(context).homeContinueListening),
|
||||||
leading: const Icon(Icons.play_arrow),
|
leading: const Icon(Icons.play_arrow),
|
||||||
description: const Text(
|
description:
|
||||||
'Show play button for books in currently listening shelf',
|
Text(S.of(context).homeBookContinueListeningDescription),
|
||||||
),
|
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
appSettingsNotifier.update(
|
appSettingsNotifier.update(
|
||||||
appSettings.copyWith(
|
appSettings.copyWith(
|
||||||
|
|
@ -42,11 +42,10 @@ class HomePageSettingsPage extends HookConsumerWidget {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
title: const Text('Continue Series'),
|
title: Text(S.of(context).homeBookContinueSeries),
|
||||||
leading: const Icon(Icons.play_arrow),
|
leading: const Icon(Icons.play_arrow),
|
||||||
description: const Text(
|
description:
|
||||||
'Show play button for books in continue series shelf',
|
Text(S.of(context).homeBookContinueSeriesDescription),
|
||||||
),
|
|
||||||
initialValue: appSettings
|
initialValue: appSettings
|
||||||
.homePageSettings.showPlayButtonOnContinueSeriesShelf,
|
.homePageSettings.showPlayButtonOnContinueSeriesShelf,
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
|
|
@ -60,11 +59,10 @@ class HomePageSettingsPage extends HookConsumerWidget {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
title: const Text('Other shelves'),
|
title: Text(S.of(context).homePageSettingsOtherShelves),
|
||||||
leading: const Icon(Icons.all_inclusive),
|
leading: const Icon(Icons.all_inclusive),
|
||||||
description: const Text(
|
description:
|
||||||
'Show play button for all books in all remaining shelves',
|
Text(S.of(context).homePageSettingsOtherShelvesDescription),
|
||||||
),
|
|
||||||
initialValue: appSettings
|
initialValue: appSettings
|
||||||
.homePageSettings.showPlayButtonOnAllRemainingShelves,
|
.homePageSettings.showPlayButtonOnAllRemainingShelves,
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
|
|
@ -78,11 +76,9 @@ class HomePageSettingsPage extends HookConsumerWidget {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
title: const Text('Listen Again'),
|
title: Text(S.of(context).homeBookListenAgain),
|
||||||
leading: const Icon(Icons.replay),
|
leading: const Icon(Icons.replay),
|
||||||
description: const Text(
|
description: Text(S.of(context).homeBookListenAgainDescription),
|
||||||
'Show play button for all books in listen again shelf',
|
|
||||||
),
|
|
||||||
initialValue:
|
initialValue:
|
||||||
appSettings.homePageSettings.showPlayButtonOnListenAgainShelf,
|
appSettings.homePageSettings.showPlayButtonOnListenAgainShelf,
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:vaani/generated/l10n.dart';
|
||||||
import 'package:vaani/settings/app_settings_provider.dart';
|
import 'package:vaani/settings/app_settings_provider.dart';
|
||||||
import 'package:vaani/settings/models/app_settings.dart';
|
import 'package:vaani/settings/models/app_settings.dart';
|
||||||
import 'package:vaani/settings/view/buttons.dart';
|
import 'package:vaani/settings/view/buttons.dart';
|
||||||
|
|
@ -19,7 +20,7 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
final notificationSettings = appSettings.notificationSettings;
|
final notificationSettings = appSettings.notificationSettings;
|
||||||
final primaryColor = Theme.of(context).colorScheme.primary;
|
final primaryColor = Theme.of(context).colorScheme.primary;
|
||||||
return SimpleSettingsPage(
|
return SimpleSettingsPage(
|
||||||
title: const Text('Notification Settings'),
|
title: Text(S.of(context).notificationMediaPlayer),
|
||||||
sections: [
|
sections: [
|
||||||
SettingsSection(
|
SettingsSection(
|
||||||
margin: const EdgeInsetsDirectional.only(
|
margin: const EdgeInsetsDirectional.only(
|
||||||
|
|
@ -31,10 +32,10 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
tiles: [
|
tiles: [
|
||||||
// set the primary and secondary titles
|
// set the primary and secondary titles
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Primary Title'),
|
title: Text(S.of(context).nmpSettingsTitle),
|
||||||
description: Text.rich(
|
description: Text.rich(
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'The title of the notification\n',
|
text: S.of(context).nmpSettingsTitleDescription,
|
||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: notificationSettings.primaryTitle,
|
text: notificationSettings.primaryTitle,
|
||||||
|
|
@ -54,7 +55,7 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return NotificationTitlePicker(
|
return NotificationTitlePicker(
|
||||||
initialValue: notificationSettings.primaryTitle,
|
initialValue: notificationSettings.primaryTitle,
|
||||||
title: 'Primary Title',
|
title: S.of(context).nmpSettingsTitle,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -69,10 +70,10 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
|
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Secondary Title'),
|
title: Text(S.of(context).nmpSettingsSubTitle),
|
||||||
description: Text.rich(
|
description: Text.rich(
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'The subtitle of the notification\n',
|
text: S.of(context).nmpSettingsSubTitleDescription,
|
||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: notificationSettings.secondaryTitle,
|
text: notificationSettings.secondaryTitle,
|
||||||
|
|
@ -92,7 +93,7 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return NotificationTitlePicker(
|
return NotificationTitlePicker(
|
||||||
initialValue: notificationSettings.secondaryTitle,
|
initialValue: notificationSettings.secondaryTitle,
|
||||||
title: 'Secondary Title',
|
title: S.of(context).nmpSettingsSubTitle,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -108,11 +109,13 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
|
|
||||||
// set forward and backward intervals
|
// set forward and backward intervals
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Forward Interval'),
|
title: Text(S.of(context).nmpSettingsForward),
|
||||||
description: Row(
|
description: Row(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'${notificationSettings.fastForwardInterval.inSeconds} seconds',
|
S.of(context).timeSecond(
|
||||||
|
notificationSettings.fastForwardInterval.inSeconds,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: TimeIntervalSlider(
|
child: TimeIntervalSlider(
|
||||||
|
|
@ -131,11 +134,13 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
leading: const Icon(Icons.fast_forward),
|
leading: const Icon(Icons.fast_forward),
|
||||||
),
|
),
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Backward Interval'),
|
title: Text(S.of(context).nmpSettingsBackward),
|
||||||
description: Row(
|
description: Row(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'${notificationSettings.rewindInterval.inSeconds} seconds',
|
S.of(context).timeSecond(
|
||||||
|
notificationSettings.rewindInterval.inSeconds,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: TimeIntervalSlider(
|
child: TimeIntervalSlider(
|
||||||
|
|
@ -155,10 +160,11 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
// set the media controls
|
// set the media controls
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Media Controls'),
|
title: Text(S.of(context).nmpSettingsMediaControls),
|
||||||
leading: const Icon(Icons.control_camera),
|
leading: const Icon(Icons.control_camera),
|
||||||
// description: const Text('Select the media controls to display'),
|
// description: const Text('Select the media controls to display'),
|
||||||
description: const Text('Select the media controls to display'),
|
description:
|
||||||
|
Text(S.of(context).nmpSettingsMediaControlsDescription),
|
||||||
trailing: Wrap(
|
trailing: Wrap(
|
||||||
spacing: 8.0,
|
spacing: 8.0,
|
||||||
children: notificationSettings.mediaControls
|
children: notificationSettings.mediaControls
|
||||||
|
|
@ -192,10 +198,10 @@ class NotificationSettingsPage extends HookConsumerWidget {
|
||||||
|
|
||||||
// set the progress bar to show chapter progress
|
// set the progress bar to show chapter progress
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
title: const Text('Show Chapter Progress'),
|
title: Text(S.of(context).nmpSettingsShowChapterProgress),
|
||||||
leading: const Icon(Icons.book),
|
leading: const Icon(Icons.book),
|
||||||
description:
|
description:
|
||||||
const Text('instead of the overall progress of the book'),
|
Text(S.of(context).nmpSettingsShowChapterProgressDescription),
|
||||||
initialValue: notificationSettings.progressBarIsChapterProgress,
|
initialValue: notificationSettings.progressBarIsChapterProgress,
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
ref.read(appSettingsProvider.notifier).update(
|
ref.read(appSettingsProvider.notifier).update(
|
||||||
|
|
@ -224,7 +230,7 @@ class MediaControlsPicker extends HookConsumerWidget {
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final selectedMediaControls = useState(selectedControls);
|
final selectedMediaControls = useState(selectedControls);
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Media Controls'),
|
title: Text(S.of(context).nmpSettingsMediaControls),
|
||||||
actions: [
|
actions: [
|
||||||
const CancelButton(),
|
const CancelButton(),
|
||||||
OkButton(
|
OkButton(
|
||||||
|
|
@ -296,7 +302,7 @@ class TimeIntervalSlider extends HookConsumerWidget {
|
||||||
min: min.inSeconds.toDouble(),
|
min: min.inSeconds.toDouble(),
|
||||||
max: max.inSeconds.toDouble(),
|
max: max.inSeconds.toDouble(),
|
||||||
divisions: ((max.inSeconds - min.inSeconds) ~/ step.inSeconds),
|
divisions: ((max.inSeconds - min.inSeconds) ~/ step.inSeconds),
|
||||||
label: '${selectedInterval.value.inSeconds} seconds',
|
label: S.of(context).timeSecond(selectedInterval.value.inSeconds),
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
selectedInterval.value = Duration(seconds: value.toInt());
|
selectedInterval.value = Duration(seconds: value.toInt());
|
||||||
onChanged?.call(selectedInterval.value);
|
onChanged?.call(selectedInterval.value);
|
||||||
|
|
@ -345,7 +351,7 @@ class NotificationTitlePicker extends HookConsumerWidget {
|
||||||
selectedTitle.value = value;
|
selectedTitle.value = value;
|
||||||
},
|
},
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
helper: const Text('Select a field below to insert it'),
|
helper: Text(S.of(context).nmpSettingsSelectOne),
|
||||||
suffix: IconButton(
|
suffix: IconButton(
|
||||||
icon: const Icon(Icons.clear),
|
icon: const Icon(Icons.clear),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
|
|
||||||
|
|
@ -150,10 +150,10 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
// when to mark complete
|
// when to mark complete
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Mark Complete When Time Left'),
|
title: Text(S.of(context).playerSettingsCompleteTime),
|
||||||
description: Text.rich(
|
description: Text.rich(
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Mark complete when less than ',
|
text: S.of(context).playerSettingsCompleteTimeDescriptionHead,
|
||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: playerSettings
|
text: playerSettings
|
||||||
|
|
@ -163,7 +163,10 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
color: primaryColor,
|
color: primaryColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const TextSpan(text: ' left in the book'),
|
TextSpan(
|
||||||
|
text: S
|
||||||
|
.of(context)
|
||||||
|
.playerSettingsCompleteTimeDescriptionTail),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -173,7 +176,7 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return TimeDurationSelector(
|
return TimeDurationSelector(
|
||||||
title: const Text('Mark Complete When Time Left'),
|
title: Text(S.of(context).playerSettingsCompleteTime),
|
||||||
baseUnit: BaseUnit.second,
|
baseUnit: BaseUnit.second,
|
||||||
initialValue: playerSettings.markCompleteWhenTimeLeft,
|
initialValue: playerSettings.markCompleteWhenTimeLeft,
|
||||||
);
|
);
|
||||||
|
|
@ -190,10 +193,12 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
// playback report interval
|
// playback report interval
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Playback Report Interval'),
|
title: Text(S.of(context).playerSettingsPlaybackInterval),
|
||||||
description: Text.rich(
|
description: Text.rich(
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: 'Report progress every ',
|
text: S
|
||||||
|
.of(context)
|
||||||
|
.playerSettingsPlaybackIntervalDescriptionHead,
|
||||||
children: [
|
children: [
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: playerSettings
|
text: playerSettings
|
||||||
|
|
@ -203,7 +208,10 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
color: primaryColor,
|
color: primaryColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const TextSpan(text: ' to the server'),
|
TextSpan(
|
||||||
|
text: S
|
||||||
|
.of(context)
|
||||||
|
.playerSettingsPlaybackIntervalDescriptionTail),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -213,7 +221,7 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return TimeDurationSelector(
|
return TimeDurationSelector(
|
||||||
title: const Text('Playback Report Interval'),
|
title: Text(S.of(context).playerSettingsPlaybackInterval),
|
||||||
baseUnit: BaseUnit.second,
|
baseUnit: BaseUnit.second,
|
||||||
initialValue: playerSettings.playbackReportInterval,
|
initialValue: playerSettings.playbackReportInterval,
|
||||||
);
|
);
|
||||||
|
|
@ -232,14 +240,14 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
// Display Settings
|
// Display Settings
|
||||||
SettingsSection(
|
SettingsSection(
|
||||||
title: const Text('Display Settings'),
|
title: Text(S.of(context).playerSettingsDisplay),
|
||||||
tiles: [
|
tiles: [
|
||||||
// show total progress
|
// show total progress
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
title: const Text('Show Total Progress'),
|
title: Text(S.of(context).playerSettingsDisplayTotalProgress),
|
||||||
leading: const Icon(Icons.show_chart),
|
leading: const Icon(Icons.show_chart),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Show the total progress of the book in the player',
|
S.of(context).playerSettingsDisplayTotalProgressDescription,
|
||||||
),
|
),
|
||||||
initialValue:
|
initialValue:
|
||||||
playerSettings.expandedPlayerSettings.showTotalProgress,
|
playerSettings.expandedPlayerSettings.showTotalProgress,
|
||||||
|
|
@ -252,10 +260,10 @@ class PlayerSettingsPage extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
// show chapter progress
|
// show chapter progress
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
title: const Text('Show Chapter Progress'),
|
title: Text(S.of(context).playerSettingsDisplayChapterProgress),
|
||||||
leading: const Icon(Icons.show_chart),
|
leading: const Icon(Icons.show_chart),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Show the progress of the current chapter in the player',
|
S.of(context).playerSettingsDisplayChapterProgressDescription,
|
||||||
),
|
),
|
||||||
initialValue:
|
initialValue:
|
||||||
playerSettings.expandedPlayerSettings.showChapterProgress,
|
playerSettings.expandedPlayerSettings.showChapterProgress,
|
||||||
|
|
@ -326,7 +334,7 @@ class SpeedPicker extends HookConsumerWidget {
|
||||||
useTextEditingController(text: initialValue.toString());
|
useTextEditingController(text: initialValue.toString());
|
||||||
final speed = useState<double?>(initialValue);
|
final speed = useState<double?>(initialValue);
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Select Speed'),
|
title: Text(S.of(context).playerSettingsSpeedSelect),
|
||||||
content: TextField(
|
content: TextField(
|
||||||
controller: speedController,
|
controller: speedController,
|
||||||
onChanged: (value) => speed.value = double.tryParse(value),
|
onChanged: (value) => speed.value = double.tryParse(value),
|
||||||
|
|
@ -335,11 +343,9 @@ class SpeedPicker extends HookConsumerWidget {
|
||||||
},
|
},
|
||||||
autofocus: true,
|
autofocus: true,
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Speed',
|
labelText: S.of(context).playerSettingsSpeed,
|
||||||
helper: Text(
|
helper: Text(S.of(context).playerSettingsSpeedSelectHelper),
|
||||||
'Enter the speed you want to set when playing for the first time',
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
|
|
@ -368,7 +374,7 @@ class SpeedOptionsPicker extends HookConsumerWidget {
|
||||||
final speedOptions = useState<List<double>>(initialValue);
|
final speedOptions = useState<List<double>>(initialValue);
|
||||||
final focusNode = useFocusNode();
|
final focusNode = useFocusNode();
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Select Speed Options'),
|
title: Text(S.of(context).playerSettingsSpeedOptionsSelect),
|
||||||
content: Column(
|
content: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
|
|
@ -413,9 +419,10 @@ class SpeedOptionsPicker extends HookConsumerWidget {
|
||||||
focusNode.requestFocus();
|
focusNode.requestFocus();
|
||||||
},
|
},
|
||||||
keyboardType: TextInputType.number,
|
keyboardType: TextInputType.number,
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Add Speed Option',
|
labelText: S.of(context).playerSettingsSpeedOptionsSelectAdd,
|
||||||
helper: Text('Enter a new speed option to add'),
|
helper:
|
||||||
|
Text(S.of(context).playerSettingsSpeedOptionsSelectAddHelper),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:vaani/generated/l10n.dart';
|
||||||
import 'package:vaani/settings/app_settings_provider.dart';
|
import 'package:vaani/settings/app_settings_provider.dart';
|
||||||
import 'package:vaani/settings/models/app_settings.dart';
|
import 'package:vaani/settings/models/app_settings.dart';
|
||||||
import 'package:vaani/settings/view/buttons.dart';
|
import 'package:vaani/settings/view/buttons.dart';
|
||||||
|
|
@ -23,7 +24,7 @@ class ShakeDetectorSettingsPage extends HookConsumerWidget {
|
||||||
: Theme.of(context).disabledColor;
|
: Theme.of(context).disabledColor;
|
||||||
|
|
||||||
return SimpleSettingsPage(
|
return SimpleSettingsPage(
|
||||||
title: const Text('Shake Detector Settings'),
|
title: Text(S.of(context).shakeDetectorSettings),
|
||||||
sections: [
|
sections: [
|
||||||
SettingsSection(
|
SettingsSection(
|
||||||
margin: const EdgeInsetsDirectional.symmetric(
|
margin: const EdgeInsetsDirectional.symmetric(
|
||||||
|
|
@ -35,9 +36,9 @@ class ShakeDetectorSettingsPage extends HookConsumerWidget {
|
||||||
leading: shakeDetectionSettings.isEnabled
|
leading: shakeDetectionSettings.isEnabled
|
||||||
? const Icon(Icons.vibration)
|
? const Icon(Icons.vibration)
|
||||||
: const Icon(Icons.not_interested),
|
: const Icon(Icons.not_interested),
|
||||||
title: const Text('Enable Shake Detection'),
|
title: Text(S.of(context).shakeDetectorEnable),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Enable shake detection to do various actions',
|
S.of(context).shakeDetectorEnableDescription,
|
||||||
),
|
),
|
||||||
initialValue: shakeDetectionSettings.isEnabled,
|
initialValue: shakeDetectionSettings.isEnabled,
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
|
|
@ -57,9 +58,9 @@ class ShakeDetectorSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
enabled: isShakeDetectionEnabled,
|
enabled: isShakeDetectionEnabled,
|
||||||
leading: const Icon(Icons.flag_circle),
|
leading: const Icon(Icons.flag_circle),
|
||||||
title: const Text('Shake Activation Threshold'),
|
title: Text(S.of(context).shakeActivationThreshold),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'The higher the threshold, the harder you need to shake',
|
S.of(context).shakeActivationThresholdDescription,
|
||||||
),
|
),
|
||||||
trailing: Text(
|
trailing: Text(
|
||||||
'${shakeDetectionSettings.threshold} m/s²',
|
'${shakeDetectionSettings.threshold} m/s²',
|
||||||
|
|
@ -90,9 +91,9 @@ class ShakeDetectorSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
enabled: isShakeDetectionEnabled,
|
enabled: isShakeDetectionEnabled,
|
||||||
leading: const Icon(Icons.directions_run),
|
leading: const Icon(Icons.directions_run),
|
||||||
title: const Text('Shake Action'),
|
title: Text(S.of(context).shakeAction),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'The action to perform when a shake is detected',
|
S.of(context).shakeActionDescription,
|
||||||
),
|
),
|
||||||
trailing: Icon(
|
trailing: Icon(
|
||||||
shakeDetectionSettings.shakeAction.icon,
|
shakeDetectionSettings.shakeAction.icon,
|
||||||
|
|
@ -120,9 +121,9 @@ class ShakeDetectorSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
enabled: isShakeDetectionEnabled,
|
enabled: isShakeDetectionEnabled,
|
||||||
leading: const Icon(Icons.feedback),
|
leading: const Icon(Icons.feedback),
|
||||||
title: const Text('Shake Feedback'),
|
title: Text(S.of(context).shakeFeedback),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'The feedback to give when a shake is detected',
|
S.of(context).shakeFeedbackDescription,
|
||||||
),
|
),
|
||||||
trailing: shakeDetectionSettings.feedback.isEmpty
|
trailing: shakeDetectionSettings.feedback.isEmpty
|
||||||
? Icon(
|
? Icon(
|
||||||
|
|
@ -177,7 +178,7 @@ class ShakeFeedbackSelector extends HookConsumerWidget {
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final feedback = useState(initialValue);
|
final feedback = useState(initialValue);
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Select Shake Feedback'),
|
title: Text(S.of(context).shakeSelectFeedback),
|
||||||
content: Wrap(
|
content: Wrap(
|
||||||
spacing: 8.0,
|
spacing: 8.0,
|
||||||
runSpacing: 8.0,
|
runSpacing: 8.0,
|
||||||
|
|
@ -225,7 +226,7 @@ class ShakeActionSelector extends HookConsumerWidget {
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final shakeAction = useState(initialValue);
|
final shakeAction = useState(initialValue);
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Select Shake Action'),
|
title: Text(S.of(context).shakeSelectAction),
|
||||||
content: Wrap(
|
content: Wrap(
|
||||||
spacing: 8.0,
|
spacing: 8.0,
|
||||||
runSpacing: 8.0,
|
runSpacing: 8.0,
|
||||||
|
|
@ -268,7 +269,7 @@ class ShakeForceSelector extends HookConsumerWidget {
|
||||||
final shakeForce = useState(initialValue);
|
final shakeForce = useState(initialValue);
|
||||||
final controller = useTextEditingController(text: initialValue.toString());
|
final controller = useTextEditingController(text: initialValue.toString());
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: const Text('Select Shake Activation Threshold'),
|
title: Text(S.of(context).shakeSelectActivationThreshold),
|
||||||
content: Column(
|
content: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
|
|
@ -291,8 +292,8 @@ class ShakeForceSelector extends HookConsumerWidget {
|
||||||
shakeForce.value = 0;
|
shakeForce.value = 0;
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
helper: const Text(
|
helper: Text(
|
||||||
'Enter a number to set the threshold in m/s²',
|
S.of(context).shakeSelectActivationThresholdHelper,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,11 @@
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
|
||||||
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:vaani/generated/l10n.dart';
|
||||||
import 'package:vaani/settings/app_settings_provider.dart';
|
import 'package:vaani/settings/app_settings_provider.dart';
|
||||||
import 'package:vaani/settings/view/buttons.dart';
|
|
||||||
import 'package:vaani/settings/view/simple_settings_page.dart';
|
import 'package:vaani/settings/view/simple_settings_page.dart';
|
||||||
import 'package:vaani/shared/extensions/enum.dart';
|
|
||||||
|
|
||||||
class ThemeSettingsPage extends HookConsumerWidget {
|
class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
const ThemeSettingsPage({
|
const ThemeSettingsPage({
|
||||||
|
|
@ -18,10 +16,10 @@ class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final appSettings = ref.watch(appSettingsProvider);
|
final appSettings = ref.watch(appSettingsProvider);
|
||||||
final themeSettings = appSettings.themeSettings;
|
final themeSettings = appSettings.themeSettings;
|
||||||
final primaryColor = Theme.of(context).colorScheme.primary;
|
// final primaryColor = Theme.of(context).colorScheme.primary;
|
||||||
|
|
||||||
return SimpleSettingsPage(
|
return SimpleSettingsPage(
|
||||||
title: const Text('Theme Settings'),
|
title: Text(S.of(context).themeSettings),
|
||||||
sections: [
|
sections: [
|
||||||
SettingsSection(
|
SettingsSection(
|
||||||
margin: const EdgeInsetsDirectional.symmetric(
|
margin: const EdgeInsetsDirectional.symmetric(
|
||||||
|
|
@ -31,7 +29,7 @@ class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
tiles: [
|
tiles: [
|
||||||
// choose system , light or dark theme
|
// choose system , light or dark theme
|
||||||
SettingsTile(
|
SettingsTile(
|
||||||
title: const Text('Theme Mode'),
|
title: Text(S.of(context).themeMode),
|
||||||
description: SegmentedButton(
|
description: SegmentedButton(
|
||||||
expandedInsets: const EdgeInsets.only(top: 8.0),
|
expandedInsets: const EdgeInsets.only(top: 8.0),
|
||||||
showSelectedIcon: true,
|
showSelectedIcon: true,
|
||||||
|
|
@ -48,17 +46,17 @@ class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
ButtonSegment(
|
ButtonSegment(
|
||||||
value: ThemeMode.light,
|
value: ThemeMode.light,
|
||||||
icon: Icon(Icons.light_mode),
|
icon: Icon(Icons.light_mode),
|
||||||
label: const Text('Light'),
|
label: Text(S.of(context).themeModeLight),
|
||||||
),
|
),
|
||||||
ButtonSegment(
|
ButtonSegment(
|
||||||
value: ThemeMode.system,
|
value: ThemeMode.system,
|
||||||
icon: Icon(Icons.auto_awesome),
|
icon: Icon(Icons.auto_awesome),
|
||||||
label: const Text('System'),
|
label: Text(S.of(context).themeModeSystem),
|
||||||
),
|
),
|
||||||
ButtonSegment(
|
ButtonSegment(
|
||||||
value: ThemeMode.dark,
|
value: ThemeMode.dark,
|
||||||
icon: Icon(Icons.dark_mode),
|
icon: Icon(Icons.dark_mode),
|
||||||
label: const Text('Dark'),
|
label: Text(S.of(context).themeModeDark),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
@ -77,9 +75,9 @@ class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
? const Icon(Icons.accessibility)
|
? const Icon(Icons.accessibility)
|
||||||
: const Icon(Icons.accessibility_new_outlined),
|
: const Icon(Icons.accessibility_new_outlined),
|
||||||
initialValue: themeSettings.highContrast,
|
initialValue: themeSettings.highContrast,
|
||||||
title: const Text('High Contrast Mode'),
|
title: Text(S.of(context).themeModeHighContrast),
|
||||||
description: const Text(
|
description: Text(
|
||||||
'Increase the contrast between the background and the text',
|
S.of(context).themeModeHighContrastDescription,
|
||||||
),
|
),
|
||||||
onToggle: (value) {
|
onToggle: (value) {
|
||||||
ref.read(appSettingsProvider.notifier).update(
|
ref.read(appSettingsProvider.notifier).update(
|
||||||
|
|
@ -94,11 +92,9 @@ class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
initialValue: themeSettings.useMaterialThemeFromSystem,
|
initialValue: themeSettings.useMaterialThemeFromSystem,
|
||||||
title: Platform.isAndroid
|
title: Platform.isAndroid
|
||||||
? const Text('Use Material You')
|
? Text(S.of(context).themeSettingsColorsAndroid)
|
||||||
: const Text('Material Theme from System'),
|
: Text(S.of(context).themeSettingsColors),
|
||||||
description: const Text(
|
description: Text(S.of(context).themeSettingsColorsDescription),
|
||||||
'Use the system theme colors for the app',
|
|
||||||
),
|
|
||||||
leading: themeSettings.useMaterialThemeFromSystem
|
leading: themeSettings.useMaterialThemeFromSystem
|
||||||
? const Icon(Icons.auto_awesome)
|
? const Icon(Icons.auto_awesome)
|
||||||
: const Icon(Icons.auto_fix_off),
|
: const Icon(Icons.auto_fix_off),
|
||||||
|
|
@ -156,10 +152,9 @@ class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
// use theme throughout the app when playing item
|
// use theme throughout the app when playing item
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
initialValue: themeSettings.useCurrentPlayerThemeThroughoutApp,
|
initialValue: themeSettings.useCurrentPlayerThemeThroughoutApp,
|
||||||
title: const Text('Adapt theme from currently playing item'),
|
title: Text(S.of(context).themeSettingsColorsCurrent),
|
||||||
description: const Text(
|
description:
|
||||||
'Use the theme colors from the currently playing item for the app',
|
Text(S.of(context).themeSettingsColorsCurrentDescription),
|
||||||
),
|
|
||||||
leading: themeSettings.useCurrentPlayerThemeThroughoutApp
|
leading: themeSettings.useCurrentPlayerThemeThroughoutApp
|
||||||
? const Icon(Icons.auto_fix_high)
|
? const Icon(Icons.auto_fix_high)
|
||||||
: const Icon(Icons.auto_fix_off),
|
: const Icon(Icons.auto_fix_off),
|
||||||
|
|
@ -174,10 +169,9 @@ class ThemeSettingsPage extends HookConsumerWidget {
|
||||||
|
|
||||||
SettingsTile.switchTile(
|
SettingsTile.switchTile(
|
||||||
initialValue: themeSettings.useMaterialThemeOnItemPage,
|
initialValue: themeSettings.useMaterialThemeOnItemPage,
|
||||||
title: const Text('Adaptive Theme on Item Page'),
|
title: Text(S.of(context).themeSettingsColorsBook),
|
||||||
description: const Text(
|
description:
|
||||||
'get fancy with the colors on the item page at the cost of some performance',
|
Text(S.of(context).themeSettingsColorsBookDescription),
|
||||||
),
|
|
||||||
leading: themeSettings.useMaterialThemeOnItemPage
|
leading: themeSettings.useMaterialThemeOnItemPage
|
||||||
? const Icon(Icons.auto_fix_high)
|
? const Icon(Icons.auto_fix_high)
|
||||||
: const Icon(Icons.auto_fix_off),
|
: const Icon(Icons.auto_fix_off),
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:vaani/api/api_provider.dart';
|
import 'package:vaani/api/api_provider.dart';
|
||||||
|
import 'package:vaani/generated/l10n.dart';
|
||||||
import 'package:vaani/main.dart';
|
import 'package:vaani/main.dart';
|
||||||
|
|
||||||
final httpUrlRegExp = RegExp('https?://');
|
final httpUrlRegExp = RegExp('https?://');
|
||||||
|
|
@ -66,7 +67,7 @@ class AddNewServer extends HookConsumerWidget {
|
||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Server URI',
|
labelText: S.of(context).accountServerURI,
|
||||||
labelStyle: TextStyle(
|
labelStyle: TextStyle(
|
||||||
color: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.8),
|
color: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.8),
|
||||||
),
|
),
|
||||||
|
|
@ -82,7 +83,7 @@ class AddNewServer extends HookConsumerWidget {
|
||||||
margin: const EdgeInsets.only(left: 8, right: 8),
|
margin: const EdgeInsets.only(left: 8, right: 8),
|
||||||
child: IconButton.filled(
|
child: IconButton.filled(
|
||||||
icon: const Icon(Icons.add),
|
icon: const Icon(Icons.add),
|
||||||
tooltip: 'Add new server',
|
tooltip: S.of(context).accountAddUserTooltip,
|
||||||
color: Theme.of(context).colorScheme.inversePrimary,
|
color: Theme.of(context).colorScheme.inversePrimary,
|
||||||
focusColor: Theme.of(context).colorScheme.onSurface,
|
focusColor: Theme.of(context).colorScheme.onSurface,
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue