feat: Add new translations, add list of existing accounts to login page

This commit is contained in:
Anton Stubenbord
2023-05-30 01:19:27 +02:00
parent cd56f5fdb8
commit 1dc7d22d3a
19 changed files with 694 additions and 381 deletions

View File

@@ -5,6 +5,3 @@ files: [
"type" : "arb", "type" : "arb",
} }
] ]
# Add your credentials here
"project_id": "568557"
"api_token_env": "CROWDIN_PAPERLESS_MOBILE_API_TOKEN"

View File

@@ -47,9 +47,9 @@ class _SelectFileTypeDialogState extends State<SelectFileTypeDialog> {
value: _rememberSelection, value: _rememberSelection,
onChanged: (value) => setState(() => _rememberSelection = value ?? false), onChanged: (value) => setState(() => _rememberSelection = value ?? false),
title: Text( title: Text(
"Remember my decision", S.of(context)!.rememberDecision,
style: Theme.of(context).textTheme.labelMedium, style: Theme.of(context).textTheme.labelMedium,
), //TODO: INTL ),
), ),
], ],
), ),

View File

@@ -316,7 +316,7 @@ class _DocumentDetailsPageState extends State<DocumentDetailsPage> {
).paddedOnly(right: 4.0), ).paddedOnly(right: 4.0),
DocumentShareButton(document: state.document), DocumentShareButton(document: state.document),
IconButton( IconButton(
tooltip: "Print", //TODO: INTL tooltip: S.of(context)!.print, //TODO: INTL
onPressed: () => context.read<DocumentDetailsCubit>().printDocument(), onPressed: () => context.read<DocumentDetailsCubit>().printDocument(),
icon: const Icon(Icons.print), icon: const Icon(Icons.print),
), ),

View File

@@ -115,10 +115,7 @@ class _DocumentSearchBarState extends State<DocumentSearchBar> {
valueListenable: Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount).listenable(), valueListenable: Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount).listenable(),
builder: (context, box, _) { builder: (context, box, _) {
final account = box.get(settings.currentLoggedInUser!)!; final account = box.get(settings.currentLoggedInUser!)!;
return UserAvatar( return UserAvatar(account: account);
userId: settings.currentLoggedInUser!,
account: account,
);
}, },
); );
}, },

View File

@@ -140,20 +140,14 @@ class AuthenticationCubit extends Cubit<AuthenticationState> {
} }
Future<void> removeAccount(String userId) async { Future<void> removeAccount(String userId) async {
final globalSettings = Hive.box<GlobalSettings>(HiveBoxes.globalSettings).getValue()!;
final userAccountBox = Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount); final userAccountBox = Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount);
final userAppStateBox = Hive.box<LocalUserAppState>(HiveBoxes.localUserAppState); final userAppStateBox = Hive.box<LocalUserAppState>(HiveBoxes.localUserAppState);
final currentUser = globalSettings.currentLoggedInUser;
await userAccountBox.delete(userId); await userAccountBox.delete(userId);
await userAppStateBox.delete(userId); await userAppStateBox.delete(userId);
await withEncryptedBox(HiveBoxes.localUserCredentials, (box) { await withEncryptedBox<UserCredentials, void>(HiveBoxes.localUserCredentials, (box) {
box.delete(userId); box.delete(userId);
}); });
if (currentUser == userId) {
return logout();
}
} }
/// ///
@@ -209,10 +203,10 @@ class AuthenticationCubit extends Cubit<AuthenticationState> {
Future<void> logout() async { Future<void> logout() async {
await _resetExternalState(); await _resetExternalState();
final globalSettings = Hive.box<GlobalSettings>(HiveBoxes.globalSettings).getValue()!; final globalSettings = Hive.box<GlobalSettings>(HiveBoxes.globalSettings).getValue()!;
emit(const AuthenticationState.unauthenticated());
globalSettings globalSettings
..currentLoggedInUser = null ..currentLoggedInUser = null
..save(); ..save();
emit(const AuthenticationState.unauthenticated());
} }
Future<void> _resetExternalState() async { Future<void> _resetExternalState() async {

View File

@@ -1,5 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:hive_flutter/adapters.dart';
import 'package:paperless_mobile/core/config/hive/hive_config.dart';
import 'package:paperless_mobile/core/database/tables/local_user_account.dart';
import 'package:paperless_mobile/features/login/cubit/authentication_cubit.dart';
import 'package:paperless_mobile/features/login/model/client_certificate.dart'; import 'package:paperless_mobile/features/login/model/client_certificate.dart';
import 'package:paperless_mobile/features/login/model/client_certificate_form_model.dart'; import 'package:paperless_mobile/features/login/model/client_certificate_form_model.dart';
import 'package:paperless_mobile/features/login/model/login_form_credentials.dart'; import 'package:paperless_mobile/features/login/model/login_form_credentials.dart';
@@ -7,6 +12,8 @@ import 'package:paperless_mobile/features/login/view/widgets/form_fields/client_
import 'package:paperless_mobile/features/login/view/widgets/form_fields/server_address_form_field.dart'; import 'package:paperless_mobile/features/login/view/widgets/form_fields/server_address_form_field.dart';
import 'package:paperless_mobile/features/login/view/widgets/form_fields/user_credentials_form_field.dart'; import 'package:paperless_mobile/features/login/view/widgets/form_fields/user_credentials_form_field.dart';
import 'package:paperless_mobile/features/login/view/widgets/login_pages/server_connection_page.dart'; import 'package:paperless_mobile/features/login/view/widgets/login_pages/server_connection_page.dart';
import 'package:paperless_mobile/features/users/view/widgets/user_account_list_tile.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
import 'widgets/login_pages/server_login_page.dart'; import 'widgets/login_pages/server_login_page.dart';
import 'widgets/never_scrollable_scroll_behavior.dart'; import 'widgets/never_scrollable_scroll_behavior.dart';
@@ -23,11 +30,14 @@ class LoginPage extends StatefulWidget {
final String submitText; final String submitText;
final String titleString; final String titleString;
final bool showLocalAccounts;
const LoginPage({ const LoginPage({
Key? key, Key? key,
required this.onSubmit, required this.onSubmit,
required this.submitText, required this.submitText,
required this.titleString, required this.titleString,
this.showLocalAccounts = false,
}) : super(key: key); }) : super(key: key);
@override @override
@@ -41,6 +51,7 @@ class _LoginPageState extends State<LoginPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final localAccounts = Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount);
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
body: FormBuilder( body: FormBuilder(
@@ -49,6 +60,42 @@ class _LoginPageState extends State<LoginPage> {
controller: _pageController, controller: _pageController,
scrollBehavior: NeverScrollableScrollBehavior(), scrollBehavior: NeverScrollableScrollBehavior(),
children: [ children: [
if (widget.showLocalAccounts && localAccounts.isNotEmpty)
Scaffold(
appBar: AppBar(
title: Text(S.of(context)!.logInToExistingAccount),
),
bottomNavigationBar: BottomAppBar(
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FilledButton(
child: Text(S.of(context)!.goToLogin),
onPressed: () {
_pageController.nextPage(
duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
},
),
],
),
),
body: ListView.builder(
itemBuilder: (context, index) {
final account = localAccounts.values.elementAt(index);
return Card(
child: UserAccountListTile(
account: account,
onTap: () {
context.read<AuthenticationCubit>().switchAccount(account.id);
},
),
);
},
itemCount: localAccounts.length,
),
),
ServerConnectionPage( ServerConnectionPage(
titleString: widget.titleString, titleString: widget.titleString,
formBuilderKey: _formKey, formBuilderKey: _formKey,

View File

@@ -12,6 +12,7 @@ import 'package:paperless_mobile/features/settings/view/dialogs/switch_account_d
import 'package:paperless_mobile/features/settings/view/pages/switching_accounts_page.dart'; import 'package:paperless_mobile/features/settings/view/pages/switching_accounts_page.dart';
import 'package:paperless_mobile/features/settings/view/widgets/global_settings_builder.dart'; import 'package:paperless_mobile/features/settings/view/widgets/global_settings_builder.dart';
import 'package:paperless_mobile/features/settings/view/widgets/user_avatar.dart'; import 'package:paperless_mobile/features/settings/view/widgets/user_avatar.dart';
import 'package:paperless_mobile/features/users/view/widgets/user_account_list_tile.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -22,6 +23,11 @@ class ManageAccountsPage extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GlobalSettingsBuilder( return GlobalSettingsBuilder(
builder: (context, globalSettings) { builder: (context, globalSettings) {
// This is one of the few places where the currentLoggedInUser can be null
// (exactly after loggin out as the current user to be precise).
if (globalSettings.currentLoggedInUser == null) {
return SizedBox.shrink();
}
return ValueListenableBuilder( return ValueListenableBuilder(
valueListenable: Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount).listenable(), valueListenable: Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount).listenable(),
builder: (context, box, _) { builder: (context, box, _) {
@@ -46,16 +52,78 @@ class ManageAccountsPage extends StatelessWidget {
borderRadius: BorderRadius.circular(24), borderRadius: BorderRadius.circular(24),
), ),
children: [ children: [
_buildAccountTile(context, globalSettings.currentLoggedInUser!, Card(
box.get(globalSettings.currentLoggedInUser!)!, globalSettings), child: UserAccountListTile(
account: box.get(globalSettings.currentLoggedInUser!)!,
trailing: PopupMenuButton(
icon: const Icon(Icons.more_vert),
itemBuilder: (context) => [
PopupMenuItem(
child: ListTile(
title: Text(S.of(context)!.logout),
leading: const Icon(
Icons.person_remove,
color: Colors.red,
),
),
value: 0,
),
],
onSelected: (value) async {
if (value == 0) {
await context
.read<AuthenticationCubit>()
.removeAccount(globalSettings.currentLoggedInUser!);
Navigator.of(context).pop();
context.read<AuthenticationCubit>().logout();
}
},
),
),
),
Column( Column(
children: [ children: [
for (int index = 0; index < otherAccounts.length; index++) for (int index = 0; index < otherAccounts.length; index++)
_buildAccountTile( UserAccountListTile(
account: box.get(otherAccounts[index])!,
trailing: PopupMenuButton(
icon: const Icon(Icons.more_vert),
itemBuilder: (context) {
return [
PopupMenuItem(
child: ListTile(
title: Text(S.of(context)!.switchAccount),
leading: const Icon(Icons.switch_account_rounded),
),
value: 0,
),
PopupMenuItem(
child: ListTile(
title: Text(S.of(context)!.remove),
leading: const Icon(
Icons.person_remove,
color: Colors.red,
),
),
value: 1,
)
];
},
onSelected: (value) async {
if (value == 0) {
// Switch
_onSwitchAccount(
context, context,
globalSettings.currentLoggedInUser!,
otherAccounts[index], otherAccounts[index],
box.get(otherAccounts[index])!, );
globalSettings, } else if (value == 1) {
await context
.read<AuthenticationCubit>()
.removeAccount(otherAccounts[index]);
}
},
),
), ),
], ],
), ),
@@ -68,9 +136,9 @@ class ManageAccountsPage extends StatelessWidget {
}, },
), ),
if (context.watch<ApiVersion>().hasMultiUserSupport) if (context.watch<ApiVersion>().hasMultiUserSupport)
const ListTile( ListTile(
leading: Icon(Icons.admin_panel_settings), leading: const Icon(Icons.admin_panel_settings),
title: Text("Manage permissions"), //TODO: INTL title: Text(S.of(context)!.managePermissions),
), ),
], ],
); );
@@ -80,93 +148,6 @@ class ManageAccountsPage extends StatelessWidget {
); );
} }
Widget _buildAccountTile(
BuildContext context,
String userId,
LocalUserAccount account,
GlobalSettings settings,
) {
final isLoggedIn = userId == settings.currentLoggedInUser;
final theme = Theme.of(context);
final child = SizedBox(
width: double.maxFinite,
child: ListTile(
title: Text(account.paperlessUser.username),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (account.paperlessUser.fullName != null) Text(account.paperlessUser.fullName!),
Text(
account.serverUrl.replaceFirst(RegExp(r'https://?'), ''),
style: TextStyle(color: theme.colorScheme.primary),
),
],
),
isThreeLine: account.paperlessUser.fullName != null,
leading: UserAvatar(
account: account,
userId: userId,
),
trailing: PopupMenuButton(
icon: const Icon(Icons.more_vert),
itemBuilder: (context) {
return [
if (!isLoggedIn)
PopupMenuItem(
child: ListTile(
title: Text(S.of(context)!.switchAccount),
leading: const Icon(Icons.switch_account_rounded),
),
value: 0,
),
if (!isLoggedIn)
PopupMenuItem(
child: ListTile(
title: Text(S.of(context)!.remove),
leading: const Icon(
Icons.person_remove,
color: Colors.red,
),
),
value: 1,
)
else
PopupMenuItem(
child: ListTile(
title: Text(S.of(context)!.logout),
leading: const Icon(
Icons.person_remove,
color: Colors.red,
),
),
value: 1,
),
];
},
onSelected: (value) async {
if (value == 0) {
// Switch
_onSwitchAccount(context, settings.currentLoggedInUser!, userId);
} else if (value == 1) {
// Remove
final shouldPop = userId == settings.currentLoggedInUser;
await context.read<AuthenticationCubit>().removeAccount(userId);
if (shouldPop) {
Navigator.pop(context);
}
}
},
),
),
);
if (isLoggedIn) {
return Card(
child: child,
);
}
return child;
}
Future<void> _onAddAccount(BuildContext context, String currentUser) async { Future<void> _onAddAccount(BuildContext context, String currentUser) async {
final userId = await Navigator.push( final userId = await Navigator.push(
context, context,
@@ -202,9 +183,10 @@ class ManageAccountsPage extends StatelessWidget {
} }
} }
_onSwitchAccount(BuildContext context, String currentUser, String newUser) async { void _onSwitchAccount(BuildContext context, String currentUser, String newUser) async {
if (currentUser == newUser) return; if (currentUser == newUser) return;
Navigator.of(context).pop(); Navigator.of(context).pop();
context.read<AuthenticationCubit>().switchAccount(newUser); await context.read<AuthenticationCubit>().switchAccount(newUser);
} }
} }

View File

@@ -30,7 +30,7 @@ class SettingsPage extends StatelessWidget {
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.hasError) { if (snapshot.hasError) {
return Text( return Text(
"Something went wrong while retrieving server data.", //TODO: INTL S.of(context)!.errorRetrievingServerVersion,
style: Theme.of(context) style: Theme.of(context)
.textTheme .textTheme
.labelSmall .labelSmall
@@ -40,7 +40,7 @@ class SettingsPage extends StatelessWidget {
} }
if (!snapshot.hasData) { if (!snapshot.hasData) {
return Text( return Text(
"Loading server information...", //TODO: INTL S.of(context)!.resolvingServerVersion,
style: Theme.of(context).textTheme.labelSmall, style: Theme.of(context).textTheme.labelSmall,
textAlign: TextAlign.center, textAlign: TextAlign.center,
); );

View File

@@ -2,18 +2,16 @@ import 'package:flutter/material.dart';
import 'package:paperless_mobile/core/database/tables/local_user_account.dart'; import 'package:paperless_mobile/core/database/tables/local_user_account.dart';
class UserAvatar extends StatelessWidget { class UserAvatar extends StatelessWidget {
final String userId;
final LocalUserAccount account; final LocalUserAccount account;
const UserAvatar({ const UserAvatar({
super.key, super.key,
required this.userId,
required this.account, required this.account,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final backgroundColor = Colors.primaries[userId.hashCode % Colors.primaries.length]; final backgroundColor = Colors.primaries[account.id.hashCode % Colors.primaries.length];
final foregroundColor = backgroundColor.computeLuminance() > 0.5 ? Colors.black : Colors.white; final foregroundColor = backgroundColor.computeLuminance() > 0.5 ? Colors.black : Colors.white;
return CircleAvatar( return CircleAvatar(
child: Text((account.paperlessUser.fullName ?? account.paperlessUser.username) child: Text((account.paperlessUser.fullName ?? account.paperlessUser.username)

View File

@@ -0,0 +1,41 @@
import 'package:flutter/material.dart';
import 'package:paperless_mobile/core/database/tables/local_user_account.dart';
import 'package:paperless_mobile/features/settings/view/widgets/user_avatar.dart';
class UserAccountListTile extends StatelessWidget {
final LocalUserAccount account;
final Widget? trailing;
final VoidCallback? onTap;
const UserAccountListTile({
super.key,
required this.account,
this.trailing,
this.onTap,
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
return SizedBox(
width: double.maxFinite,
child: ListTile(
onTap: onTap,
title: Text(account.paperlessUser.username),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (account.paperlessUser.fullName != null) Text(account.paperlessUser.fullName!),
Text(
account.serverUrl.replaceFirst(RegExp(r'https://?'), ''),
style: TextStyle(color: theme.colorScheme.primary),
),
],
),
isThreeLine: account.paperlessUser.fullName != null,
leading: UserAvatar(account: account),
trailing: trailing,
),
);
}
}

View File

@@ -762,22 +762,54 @@
"@switchToNewAccount": { "@switchToNewAccount": {
"description": "Content of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not." "description": "Content of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not."
}, },
"sourceCode": "Source Code", "sourceCode": "Codi Font",
"findTheSourceCodeOn": "Find the source code on", "findTheSourceCodeOn": "Troba el codi font a",
"@findTheSourceCodeOn": { "@findTheSourceCodeOn": {
"description": "Text before link to Paperless Mobile GitHub" "description": "Text before link to Paperless Mobile GitHub"
}, },
"rememberDecision": "Remember my decision", "rememberDecision": "Recorda la selecció",
"defaultDownloadFileType": "Default Download File Type", "defaultDownloadFileType": "Tipus de Fitxer a descarregar per defecte",
"@defaultDownloadFileType": { "@defaultDownloadFileType": {
"description": "Label indicating the default filetype to download (one of archived, original and always ask)" "description": "Label indicating the default filetype to download (one of archived, original and always ask)"
}, },
"defaultShareFileType": "Default Share File Type", "defaultShareFileType": "Tipus compartició de fitxer per defecte",
"@defaultShareFileType": { "@defaultShareFileType": {
"description": "Label indicating the default filetype to share (one of archived, original and always ask)" "description": "Label indicating the default filetype to share (one of archived, original and always ask)"
}, },
"alwaysAsk": "Always ask", "alwaysAsk": "Pregunta sempre",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Do not tag documents automatically",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "None",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Log in to existing account",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Print",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Manage permissions",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "An error occurred trying to resolve the server version.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Resolving server version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Go to login",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -779,5 +779,37 @@
"alwaysAsk": "Always ask", "alwaysAsk": "Always ask",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Do not tag documents automatically",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "None",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Log in to existing account",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Print",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Manage permissions",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "An error occurred trying to resolve the server version.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Resolving server version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Go to login",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -779,5 +779,37 @@
"alwaysAsk": "Immer fragen", "alwaysAsk": "Immer fragen",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Deaktiviere automatische Zuweisung",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "Keine",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Mit bestehendem Account anmelden",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Drucken",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Berechtigungen verwalten",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "Beim Laden der Server-Version ist ein Fehler aufgetreten.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Lade Server-Version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Gehe zur Anmeldung",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -779,5 +779,37 @@
"alwaysAsk": "Always ask", "alwaysAsk": "Always ask",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Do not tag documents automatically",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "None",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Log in to existing account",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Print",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Manage permissions",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "An error occurred trying to resolve the server version.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Resolving server version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Go to login",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -678,106 +678,138 @@
"@dynamicColorScheme": {}, "@dynamicColorScheme": {},
"classicColorScheme": "Classique", "classicColorScheme": "Classique",
"@classicColorScheme": {}, "@classicColorScheme": {},
"notificationDownloadComplete": "Download complete", "notificationDownloadComplete": "Téléchargement terminé",
"@notificationDownloadComplete": { "@notificationDownloadComplete": {
"description": "Notification title when a download has been completed." "description": "Notification title when a download has been completed."
}, },
"notificationDownloadingDocument": "Downloading document", "notificationDownloadingDocument": "Téléchargement du document",
"@notificationDownloadingDocument": { "@notificationDownloadingDocument": {
"description": "Notification title shown when a document download is pending" "description": "Notification title shown when a document download is pending"
}, },
"archiveSerialNumberUpdated": "Archive Serial Number updated.", "archiveSerialNumberUpdated": "Numéro de série de larchive mis à jour.",
"@archiveSerialNumberUpdated": { "@archiveSerialNumberUpdated": {
"description": "Message shown when the ASN has been updated." "description": "Message shown when the ASN has been updated."
}, },
"donateCoffee": "Buy me a coffee", "donateCoffee": "Soutenez-moi",
"@donateCoffee": { "@donateCoffee": {
"description": "Label displayed in the app drawer" "description": "Label displayed in the app drawer"
}, },
"thisFieldIsRequired": "This field is required!", "thisFieldIsRequired": "Ce champ est obligatoire !",
"@thisFieldIsRequired": { "@thisFieldIsRequired": {
"description": "Message shown below the form field when a required field has not been filled out." "description": "Message shown below the form field when a required field has not been filled out."
}, },
"confirm": "Confirm", "confirm": "Confirmer",
"confirmAction": "Confirm action", "confirmAction": "Confirmer laction",
"@confirmAction": { "@confirmAction": {
"description": "Typically used as a title to confirm a previously selected action" "description": "Typically used as a title to confirm a previously selected action"
}, },
"areYouSureYouWantToContinue": "Are you sure you want to continue?", "areYouSureYouWantToContinue": "Etes-vous sûr(e) de vouloir continuer?",
"bulkEditTagsAddMessage": "{count, plural, one{This operation will add the tags {tags} to the selected document.} other{This operation will add the tags {tags} to {count} selected documents.}}", "bulkEditTagsAddMessage": "{count, plural, one{Cette opération va ajouter les balises {tags} au document sélectionné} other{Cette opération va ajouter les balises {tags} à {count} documents sélectionnés!}}",
"@bulkEditTagsAddMessage": { "@bulkEditTagsAddMessage": {
"description": "Message of the confirmation dialog when bulk adding tags." "description": "Message of the confirmation dialog when bulk adding tags."
}, },
"bulkEditTagsRemoveMessage": "{count, plural, one{This operation will remove the tags {tags} from the selected document.} other{This operation will remove the tags {tags} from {count} selected documents.}}", "bulkEditTagsRemoveMessage": "{count, plural, one{Cette opération supprimera les balises {tags} du document sélectionné.} other{Cette opération supprimera les balises {tags} de {count} documents sélectionnés!}}",
"@bulkEditTagsRemoveMessage": { "@bulkEditTagsRemoveMessage": {
"description": "Message of the confirmation dialog when bulk removing tags." "description": "Message of the confirmation dialog when bulk removing tags."
}, },
"bulkEditTagsModifyMessage": "{count, plural, one{This operation will add the tags {addTags} and remove the tags {removeTags} from the selected document.} other{This operation will add the tags {addTags} and remove the tags {removeTags} from {count} selected documents.}}", "bulkEditTagsModifyMessage": "{count, plural, one{Cette opération va ajouter les balises {addTags} et supprimer les balises {removeTags} du document sélectionné} other{Cette opération va ajouter les balises {addTags} et supprimer les balises {removeTags} de {count} documents sélectionnés.}}",
"@bulkEditTagsModifyMessage": { "@bulkEditTagsModifyMessage": {
"description": "Message of the confirmation dialog when both adding and removing tags." "description": "Message of the confirmation dialog when both adding and removing tags."
}, },
"bulkEditCorrespondentAssignMessage": "{count, plural, one{This operation will assign the correspondent {correspondent} to the selected document.} other{This operation will assign the correspondent {correspondent} to {count} selected documents.}}", "bulkEditCorrespondentAssignMessage": "{count, plural, one{Cette opération assignera le correspondant {correspondent} au document sélectionné} other{Cette opération va assigner le correspondant {correspondent} à {count} documents sélectionnés!}}",
"bulkEditDocumentTypeAssignMessage": "{count, plural, one{This operation will assign the document type {docType} to the selected document.} other{This operation will assign the documentType {docType} to {count} selected documents.}}", "bulkEditDocumentTypeAssignMessage": "{count, plural, one{Cette opération assignera le type de document {docType} au document sélectionné.} other{Cette opération va assigner le documentType {docType} à {count} documents sélectionnés.}}",
"bulkEditStoragePathAssignMessage": "{count, plural, one{This operation will assign the storage path {path} to the selected document.} other{This operation will assign the storage path {path} to {count} selected documents.}}", "bulkEditStoragePathAssignMessage": "{count, plural, one{Cette opération assignera le chemin de stockage {path} au document sélectionné.} other{Cette opération va assigner le chemin de stockage {path} à {count} documents sélectionnés.}}",
"bulkEditCorrespondentRemoveMessage": "{count, plural, one{This operation will remove the correspondent from the selected document.} other{This operation will remove the correspondent from {count} selected documents.}}", "bulkEditCorrespondentRemoveMessage": "{count, plural, one{Cette opération va supprimer le correspondant du document sélectionné.} other{Cette opération va supprimer le correspondant de {count} documents sélectionnés.}}",
"bulkEditDocumentTypeRemoveMessage": "{count, plural, one{This operation will remove the document type from the selected document.} other{This operation will remove the document type from {count} selected documents.}}", "bulkEditDocumentTypeRemoveMessage": "{count, plural, one{Cette opération va supprimer le type de document du document sélectionné.} other{Cette opération va supprimer le type de document de {count} documents sélectionnés.}}",
"bulkEditStoragePathRemoveMessage": "{count, plural, one{This operation will remove the storage path from the selected document.} other{This operation will remove the storage path from {count} selected documents.}}", "bulkEditStoragePathRemoveMessage": "{count, plural, one{Cette opération supprimera le chemin de stockage du document sélectionné.} other{Cette opération supprimera le chemin de stockage de {count} documents sélectionnés.}}",
"anyTag": "Any", "anyTag": "Tous",
"@anyTag": { "@anyTag": {
"description": "Label shown when any tag should be filtered" "description": "Label shown when any tag should be filtered"
}, },
"allTags": "All", "allTags": "Tous",
"@allTags": { "@allTags": {
"description": "Label shown when a document has to be assigned to all selected tags" "description": "Label shown when a document has to be assigned to all selected tags"
}, },
"switchingAccountsPleaseWait": "Switching accounts. Please wait...", "switchingAccountsPleaseWait": "Changement de compte. Veuillez patienter...",
"@switchingAccountsPleaseWait": { "@switchingAccountsPleaseWait": {
"description": "Message shown while switching accounts is in progress." "description": "Message shown while switching accounts is in progress."
}, },
"testConnection": "Test connection", "testConnection": "Vérifier la connexion",
"@testConnection": { "@testConnection": {
"description": "Button label shown on login page. Allows user to test whether the server is reachable or not." "description": "Button label shown on login page. Allows user to test whether the server is reachable or not."
}, },
"accounts": "Accounts", "accounts": "Comptes",
"@accounts": { "@accounts": {
"description": "Title of the account management dialog" "description": "Title of the account management dialog"
}, },
"addAccount": "Add account", "addAccount": "Ajouter un compte",
"@addAccount": { "@addAccount": {
"description": "Label of add account action" "description": "Label of add account action"
}, },
"switchAccount": "Switch", "switchAccount": "Basculer",
"@switchAccount": { "@switchAccount": {
"description": "Label for switch account action" "description": "Label for switch account action"
}, },
"logout": "Logout", "logout": "Déconnexion",
"@logout": { "@logout": {
"description": "Generic Logout label" "description": "Generic Logout label"
}, },
"switchAccountTitle": "Switch account", "switchAccountTitle": "Changer de compte",
"@switchAccountTitle": { "@switchAccountTitle": {
"description": "Title of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not." "description": "Title of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not."
}, },
"switchToNewAccount": "Do you want to switch to the new account? You can switch back at any time.", "switchToNewAccount": "Voulez-vous basculer vers le nouveau compte ? Vous pouvez revenir à tout moment.",
"@switchToNewAccount": { "@switchToNewAccount": {
"description": "Content of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not." "description": "Content of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not."
}, },
"sourceCode": "Source Code", "sourceCode": "Code source",
"findTheSourceCodeOn": "Find the source code on", "findTheSourceCodeOn": "Trouvez le code source sur",
"@findTheSourceCodeOn": { "@findTheSourceCodeOn": {
"description": "Text before link to Paperless Mobile GitHub" "description": "Text before link to Paperless Mobile GitHub"
}, },
"rememberDecision": "Remember my decision", "rememberDecision": "Se souvenir de mon choix",
"defaultDownloadFileType": "Default Download File Type", "defaultDownloadFileType": "Type de fichier par défaut",
"@defaultDownloadFileType": { "@defaultDownloadFileType": {
"description": "Label indicating the default filetype to download (one of archived, original and always ask)" "description": "Label indicating the default filetype to download (one of archived, original and always ask)"
}, },
"defaultShareFileType": "Default Share File Type", "defaultShareFileType": "Type de fichier par défaut de partage",
"@defaultShareFileType": { "@defaultShareFileType": {
"description": "Label indicating the default filetype to share (one of archived, original and always ask)" "description": "Label indicating the default filetype to share (one of archived, original and always ask)"
}, },
"alwaysAsk": "Always ask", "alwaysAsk": "Toujours demander",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Do not tag documents automatically",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "None",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Log in to existing account",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Print",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Manage permissions",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "An error occurred trying to resolve the server version.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Resolving server version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Go to login",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -9,7 +9,7 @@
"@addAnotherAccount": {}, "@addAnotherAccount": {},
"account": "Konto", "account": "Konto",
"@account": {}, "@account": {},
"addCorrespondent": "New Correspondent", "addCorrespondent": "Dodaj korespondenta",
"@addCorrespondent": { "@addCorrespondent": {
"description": "Title when adding a new correspondent" "description": "Title when adding a new correspondent"
}, },
@@ -17,7 +17,7 @@
"@addDocumentType": { "@addDocumentType": {
"description": "Title when adding a new document type" "description": "Title when adding a new document type"
}, },
"addStoragePath": "New Storage Path", "addStoragePath": "Dodaj ścieżkę zapisu",
"@addStoragePath": { "@addStoragePath": {
"description": "Title when adding a new storage path" "description": "Title when adding a new storage path"
}, },
@@ -43,13 +43,13 @@
"@reportABug": {}, "@reportABug": {},
"settings": "Ustawienia", "settings": "Ustawienia",
"@settings": {}, "@settings": {},
"authenticateOnAppStart": "Authenticate on app start", "authenticateOnAppStart": "Uwierzytelnij przy starcie aplikacji",
"@authenticateOnAppStart": { "@authenticateOnAppStart": {
"description": "Description of the biometric authentication settings tile" "description": "Description of the biometric authentication settings tile"
}, },
"biometricAuthentication": "Biometric authentication", "biometricAuthentication": "Uwierzytelnianie biometryczne",
"@biometricAuthentication": {}, "@biometricAuthentication": {},
"authenticateToToggleBiometricAuthentication": "{mode, select, enable{Authenticate to enable biometric authentication} disable{Authenticate to disable biometric authentication} other{}}", "authenticateToToggleBiometricAuthentication": "{mode, select, enable{Uwierzytelnij, aby włączyć uwierzytelnianie biometryczne} disable{Uwierzytelnij, aby wyłączyć uwierzytelnianie biometryczne} other{}}",
"@authenticateToToggleBiometricAuthentication": { "@authenticateToToggleBiometricAuthentication": {
"placeholders": { "placeholders": {
"mode": {} "mode": {}
@@ -59,29 +59,29 @@
"@documents": {}, "@documents": {},
"inbox": "Skrzynka odbiorcza", "inbox": "Skrzynka odbiorcza",
"@inbox": {}, "@inbox": {},
"labels": "Labels", "labels": "Etykiety",
"@labels": {}, "@labels": {},
"scanner": "Scanner", "scanner": "Skaner",
"@scanner": {}, "@scanner": {},
"startTyping": "Zacznij pisać...", "startTyping": "Zacznij pisać...",
"@startTyping": {}, "@startTyping": {},
"doYouReallyWantToDeleteThisView": "Do you really want to delete this view?", "doYouReallyWantToDeleteThisView": "Czy na pewno chcesz usunąć ten widok?",
"@doYouReallyWantToDeleteThisView": {}, "@doYouReallyWantToDeleteThisView": {},
"deleteView": "Usuń widok ", "deleteView": "Usuń widok ",
"@deleteView": {}, "@deleteView": {},
"addedAt": "Added at", "addedAt": "Dodano",
"@addedAt": {}, "@addedAt": {},
"archiveSerialNumber": "Numer Seryjny Archiwum", "archiveSerialNumber": "Numer Seryjny Archiwum",
"@archiveSerialNumber": {}, "@archiveSerialNumber": {},
"asn": "ASN", "asn": "ASN",
"@asn": {}, "@asn": {},
"correspondent": "Correspondent", "correspondent": "Korespondent",
"@correspondent": {}, "@correspondent": {},
"createdAt": "Created at", "createdAt": "Utworzono",
"@createdAt": {}, "@createdAt": {},
"documentSuccessfullyDeleted": "Dokument pomyślnie usunięty.", "documentSuccessfullyDeleted": "Dokument pomyślnie usunięty.",
"@documentSuccessfullyDeleted": {}, "@documentSuccessfullyDeleted": {},
"assignAsn": "Assign ASN", "assignAsn": "Przypisz ASN",
"@assignAsn": {}, "@assignAsn": {},
"deleteDocumentTooltip": "Usuń", "deleteDocumentTooltip": "Usuń",
"@deleteDocumentTooltip": { "@deleteDocumentTooltip": {
@@ -95,7 +95,7 @@
"@editDocumentTooltip": { "@editDocumentTooltip": {
"description": "Tooltip shown for the edit button on details page" "description": "Tooltip shown for the edit button on details page"
}, },
"loadFullContent": "Load full content", "loadFullContent": "Załaduj pełną treść",
"@loadFullContent": {}, "@loadFullContent": {},
"noAppToDisplayPDFFilesFound": "Nie znaleziono aplikacji do wyświetlania plików PDF", "noAppToDisplayPDFFilesFound": "Nie znaleziono aplikacji do wyświetlania plików PDF",
"@noAppToDisplayPDFFilesFound": {}, "@noAppToDisplayPDFFilesFound": {},
@@ -129,17 +129,17 @@
}, },
"documentType": "Rodzaj dokumentu", "documentType": "Rodzaj dokumentu",
"@documentType": {}, "@documentType": {},
"archivedPdf": "Archived (pdf)", "archivedPdf": "Zarchiwizowany (pdf)",
"@archivedPdf": { "@archivedPdf": {
"description": "Option to chose when downloading a document" "description": "Option to chose when downloading a document"
}, },
"chooseFiletype": "Choose filetype", "chooseFiletype": "Wybierz typ pliku",
"@chooseFiletype": {}, "@chooseFiletype": {},
"original": "Original", "original": "Oryginał",
"@original": { "@original": {
"description": "Option to chose when downloading a document" "description": "Option to chose when downloading a document"
}, },
"documentSuccessfullyDownloaded": "Document successfully downloaded.", "documentSuccessfullyDownloaded": "Pobieranie dokumentu udane.",
"@documentSuccessfullyDownloaded": {}, "@documentSuccessfullyDownloaded": {},
"suggestions": "Sugestie: ", "suggestions": "Sugestie: ",
"@suggestions": {}, "@suggestions": {},
@@ -149,7 +149,7 @@
"@advanced": {}, "@advanced": {},
"apply": "Zastosuj", "apply": "Zastosuj",
"@apply": {}, "@apply": {},
"extended": "Extended", "extended": "Rozszerz",
"@extended": {}, "@extended": {},
"titleAndContent": "Tytuł i treść", "titleAndContent": "Tytuł i treść",
"@titleAndContent": {}, "@titleAndContent": {},
@@ -157,19 +157,19 @@
"@title": {}, "@title": {},
"reset": "Zresetuj", "reset": "Zresetuj",
"@reset": {}, "@reset": {},
"filterDocuments": "Filter Documents", "filterDocuments": "Filtrowanie dokumentów",
"@filterDocuments": { "@filterDocuments": {
"description": "Title of the document filter" "description": "Title of the document filter"
}, },
"originalMD5Checksum": "Original MD5-Checksum", "originalMD5Checksum": "MD5-Checksum (suma kontrolna) oryginału",
"@originalMD5Checksum": {}, "@originalMD5Checksum": {},
"mediaFilename": "Nazwa pliku", "mediaFilename": "Nazwa pliku",
"@mediaFilename": {}, "@mediaFilename": {},
"originalFileSize": "Original File Size", "originalFileSize": "Rozmiar oryginalnego pliku",
"@originalFileSize": {}, "@originalFileSize": {},
"originalMIMEType": "Original MIME-Type", "originalMIMEType": "MIME-Type oryginału",
"@originalMIMEType": {}, "@originalMIMEType": {},
"modifiedAt": "Modified at", "modifiedAt": "Zmodyfikowano",
"@modifiedAt": {}, "@modifiedAt": {},
"preview": "Podgląd", "preview": "Podgląd",
"@preview": { "@preview": {
@@ -177,7 +177,7 @@
}, },
"scanADocument": "Zeskanuj dokument", "scanADocument": "Zeskanuj dokument",
"@scanADocument": {}, "@scanADocument": {},
"noDocumentsScannedYet": "No documents scanned yet.", "noDocumentsScannedYet": "Brak zeskanowanych dokumentów.",
"@noDocumentsScannedYet": {}, "@noDocumentsScannedYet": {},
"or": "lub", "or": "lub",
"@or": { "@or": {
@@ -185,11 +185,11 @@
}, },
"deleteAllScans": "Usuń wszystkie skany", "deleteAllScans": "Usuń wszystkie skany",
"@deleteAllScans": {}, "@deleteAllScans": {},
"uploadADocumentFromThisDevice": "Upload a document from this device", "uploadADocumentFromThisDevice": "Prześlij dokument z tego urządzenia",
"@uploadADocumentFromThisDevice": { "@uploadADocumentFromThisDevice": {
"description": "Button label on scanner page" "description": "Button label on scanner page"
}, },
"noMatchesFound": "No matches found.", "noMatchesFound": "Nie znaleziono pasujących elementów.",
"@noMatchesFound": { "@noMatchesFound": {
"description": "Displayed when no documents were found in the document search." "description": "Displayed when no documents were found in the document search."
}, },
@@ -199,50 +199,50 @@
"@results": { "@results": {
"description": "Label displayed above search results in document search." "description": "Label displayed above search results in document search."
}, },
"searchDocuments": "Search documents", "searchDocuments": "Szukaj dokumentów",
"@searchDocuments": {}, "@searchDocuments": {},
"resetFilter": "Zresetuj filtr", "resetFilter": "Zresetuj filtr",
"@resetFilter": {}, "@resetFilter": {},
"lastMonth": "Last Month", "lastMonth": "Ostatni Miesiąc",
"@lastMonth": {}, "@lastMonth": {},
"last7Days": "Last 7 Days", "last7Days": "Ostatnie 7 dni",
"@last7Days": {}, "@last7Days": {},
"last3Months": "Last 3 Months", "last3Months": "Ostatnie 3 miesiące",
"@last3Months": {}, "@last3Months": {},
"lastYear": "Last Year", "lastYear": "Ostatni rok",
"@lastYear": {}, "@lastYear": {},
"search": "Szukaj", "search": "Szukaj",
"@search": {}, "@search": {},
"documentsSuccessfullyDeleted": "Dokument pomyślnie usunięty.", "documentsSuccessfullyDeleted": "Dokument pomyślnie usunięty.",
"@documentsSuccessfullyDeleted": {}, "@documentsSuccessfullyDeleted": {},
"thereSeemsToBeNothingHere": "There seems to be nothing here...", "thereSeemsToBeNothingHere": "Wygląda na to, że nic tu nie ma...",
"@thereSeemsToBeNothingHere": {}, "@thereSeemsToBeNothingHere": {},
"oops": "Ups.", "oops": "Ups.",
"@oops": {}, "@oops": {},
"newDocumentAvailable": "New document available!", "newDocumentAvailable": "Nowy dokument dostępny!",
"@newDocumentAvailable": {}, "@newDocumentAvailable": {},
"orderBy": "Sortuj według", "orderBy": "Sortuj według",
"@orderBy": {}, "@orderBy": {},
"thisActionIsIrreversibleDoYouWishToProceedAnyway": "This action is irreversible. Do you wish to proceed anyway?", "thisActionIsIrreversibleDoYouWishToProceedAnyway": "Ta czynność jest nieodwracalna. Czy mimo to chcesz kontynuować?",
"@thisActionIsIrreversibleDoYouWishToProceedAnyway": {}, "@thisActionIsIrreversibleDoYouWishToProceedAnyway": {},
"confirmDeletion": "Potwierdź usunięcie", "confirmDeletion": "Potwierdź usunięcie",
"@confirmDeletion": {}, "@confirmDeletion": {},
"areYouSureYouWantToDeleteTheFollowingDocuments": "{count, plural, one{Are you sure you want to delete the following document?} other{Are you sure you want to delete the following documents?}}", "areYouSureYouWantToDeleteTheFollowingDocuments": "{count,plural, one{Czy na pewno chcesz usunąć ten plik?} few {Czy na pewno chcesz usunąć {count} pliki?} other {Czy na pewno chcesz usunąć {count} plików?}}",
"@areYouSureYouWantToDeleteTheFollowingDocuments": { "@areYouSureYouWantToDeleteTheFollowingDocuments": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"countSelected": "{count} selected", "countSelected": "Wybrano {count}",
"@countSelected": { "@countSelected": {
"description": "Displayed in the appbar when at least one document is selected.", "description": "Displayed in the appbar when at least one document is selected.",
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"storagePath": "Storage Path", "storagePath": "Ścieżka zapisu",
"@storagePath": {}, "@storagePath": {},
"prepareDocument": "Prepare document", "prepareDocument": "Przygotuj dokument",
"@prepareDocument": {}, "@prepareDocument": {},
"tags": "Tagi", "tags": "Tagi",
"@tags": {}, "@tags": {},
@@ -250,97 +250,97 @@
"@documentSuccessfullyUpdated": {}, "@documentSuccessfullyUpdated": {},
"fileName": "Nazwa Pliku", "fileName": "Nazwa Pliku",
"@fileName": {}, "@fileName": {},
"synchronizeTitleAndFilename": "Synchronize title and filename", "synchronizeTitleAndFilename": "Synchronizuj tytuł i nazwę pliku",
"@synchronizeTitleAndFilename": {}, "@synchronizeTitleAndFilename": {},
"reload": "Odśwież", "reload": "Odśwież",
"@reload": {}, "@reload": {},
"documentSuccessfullyUploadedProcessing": "Dokument pomyślnie przesłany, przetwarzam...", "documentSuccessfullyUploadedProcessing": "Dokument pomyślnie przesłany, przetwarzam...",
"@documentSuccessfullyUploadedProcessing": {}, "@documentSuccessfullyUploadedProcessing": {},
"deleteLabelWarningText": "This label contains references to other documents. By deleting this label, all references will be removed. Continue?", "deleteLabelWarningText": "Ta etykieta zawiera odniesienia do innych dokumentów. Usuwając tę etykietę, wszystkie odniesienia zostaną usunięte. Kontynuować?",
"@deleteLabelWarningText": {}, "@deleteLabelWarningText": {},
"couldNotAcknowledgeTasks": "Could not acknowledge tasks.", "couldNotAcknowledgeTasks": "Nie udało się potwierdzić zadań.",
"@couldNotAcknowledgeTasks": {}, "@couldNotAcknowledgeTasks": {},
"authenticationFailedPleaseTryAgain": "Authentication failed, please try again.", "authenticationFailedPleaseTryAgain": "Uwierzytelnienie nie powiodło się, spróbuj ponownie.",
"@authenticationFailedPleaseTryAgain": {}, "@authenticationFailedPleaseTryAgain": {},
"anErrorOccurredWhileTryingToAutocompleteYourQuery": "An error ocurred while trying to autocomplete your query.", "anErrorOccurredWhileTryingToAutocompleteYourQuery": "Wystąpił błąd podczas próby automatycznego uzupełniania zapytania.",
"@anErrorOccurredWhileTryingToAutocompleteYourQuery": {}, "@anErrorOccurredWhileTryingToAutocompleteYourQuery": {},
"biometricAuthenticationFailed": "Biometric authentication failed.", "biometricAuthenticationFailed": "Uwierzytelnianie biometryczne nie powiodło się.",
"@biometricAuthenticationFailed": {}, "@biometricAuthenticationFailed": {},
"biometricAuthenticationNotSupported": "Biometric authentication not supported on this device.", "biometricAuthenticationNotSupported": "Uwierzytelnianie biometryczne nie jest obsługiwane na tym urządzeniu.",
"@biometricAuthenticationNotSupported": {}, "@biometricAuthenticationNotSupported": {},
"couldNotBulkEditDocuments": "Could not bulk edit documents.", "couldNotBulkEditDocuments": "Nie udało się edytować wielu dokumentów.",
"@couldNotBulkEditDocuments": {}, "@couldNotBulkEditDocuments": {},
"couldNotCreateCorrespondent": "Could not create correspondent, please try again.", "couldNotCreateCorrespondent": "Nie udało się utworzyć korespondenta, spróbuj ponownie.",
"@couldNotCreateCorrespondent": {}, "@couldNotCreateCorrespondent": {},
"couldNotLoadCorrespondents": "Could not load correspondents.", "couldNotLoadCorrespondents": "Nie udało się załadować korespondentów.",
"@couldNotLoadCorrespondents": {}, "@couldNotLoadCorrespondents": {},
"couldNotCreateSavedView": "Could not create saved view, please try again.", "couldNotCreateSavedView": "Nie udało się utworzyć zapisanego widoku, spróbuj ponownie.",
"@couldNotCreateSavedView": {}, "@couldNotCreateSavedView": {},
"couldNotDeleteSavedView": "Could not delete saved view, please try again", "couldNotDeleteSavedView": "Nie udało się usunąć zapisanego widoku, spróbuj ponownie",
"@couldNotDeleteSavedView": {}, "@couldNotDeleteSavedView": {},
"youAreCurrentlyOffline": "You are currently offline. Please make sure you are connected to the internet.", "youAreCurrentlyOffline": "Jesteś obecnie w trybie offline. Upewnij się, że jesteś połączony z Internetem.",
"@youAreCurrentlyOffline": {}, "@youAreCurrentlyOffline": {},
"couldNotAssignArchiveSerialNumber": "Could not assign archive serial number.", "couldNotAssignArchiveSerialNumber": "Nie udało się przypisać numeru seryjnego archiwum (ASN).",
"@couldNotAssignArchiveSerialNumber": {}, "@couldNotAssignArchiveSerialNumber": {},
"couldNotDeleteDocument": "Could not delete document, please try again.", "couldNotDeleteDocument": "Nie udało się usunąć dokumentu, spróbuj ponownie.",
"@couldNotDeleteDocument": {}, "@couldNotDeleteDocument": {},
"couldNotLoadDocuments": "Could not load documents, please try again.", "couldNotLoadDocuments": "Nie udało się załadować dokumentów, spróbuj ponownie.",
"@couldNotLoadDocuments": {}, "@couldNotLoadDocuments": {},
"couldNotLoadDocumentPreview": "Could not load document preview.", "couldNotLoadDocumentPreview": "Nie udało się załadować podglądu dokumentu.",
"@couldNotLoadDocumentPreview": {}, "@couldNotLoadDocumentPreview": {},
"couldNotCreateDocument": "Could not create document, please try again.", "couldNotCreateDocument": "Nie udało się utworzyć dokumentu, spróbuj ponownie.",
"@couldNotCreateDocument": {}, "@couldNotCreateDocument": {},
"couldNotLoadDocumentTypes": "Could not load document types, please try again.", "couldNotLoadDocumentTypes": "Nie udało się załadować typów dokumentów, spróbuj ponownie.",
"@couldNotLoadDocumentTypes": {}, "@couldNotLoadDocumentTypes": {},
"couldNotUpdateDocument": "Could not update document, please try again.", "couldNotUpdateDocument": "Nie udało się zmodyfikować dokumentu, spróbuj ponownie.",
"@couldNotUpdateDocument": {}, "@couldNotUpdateDocument": {},
"couldNotUploadDocument": "Could not upload document, please try again.", "couldNotUploadDocument": "Nie udało się przesłać dokumentu, spróbuj ponownie.",
"@couldNotUploadDocument": {}, "@couldNotUploadDocument": {},
"invalidCertificateOrMissingPassphrase": "Invalid certificate or missing passphrase, please try again", "invalidCertificateOrMissingPassphrase": "Certyfikat jest nieprawidłowy lub brakuje hasła, spróbuj ponownie",
"@invalidCertificateOrMissingPassphrase": {}, "@invalidCertificateOrMissingPassphrase": {},
"couldNotLoadSavedViews": "Could not load saved views.", "couldNotLoadSavedViews": "Nie udało się załadować zapisanych widoków.",
"@couldNotLoadSavedViews": {}, "@couldNotLoadSavedViews": {},
"aClientCertificateWasExpectedButNotSent": "A client certificate was expected but not sent. Please provide a valid client certificate.", "aClientCertificateWasExpectedButNotSent": "Nie otrzymano oczekiwanego certyfikatu klienta. Proszę podać prawidłowy certyfikat.",
"@aClientCertificateWasExpectedButNotSent": {}, "@aClientCertificateWasExpectedButNotSent": {},
"userIsNotAuthenticated": "User is not authenticated.", "userIsNotAuthenticated": "Użytkownik nie jest uwierzytelniony.",
"@userIsNotAuthenticated": {}, "@userIsNotAuthenticated": {},
"requestTimedOut": "The request to the server timed out.", "requestTimedOut": "Przekroczono limit czasu żądania do serwera.",
"@requestTimedOut": {}, "@requestTimedOut": {},
"anErrorOccurredRemovingTheScans": "An error occurred removing the scans.", "anErrorOccurredRemovingTheScans": "Wystąpił błąd podczas usuwania skanów.",
"@anErrorOccurredRemovingTheScans": {}, "@anErrorOccurredRemovingTheScans": {},
"couldNotReachYourPaperlessServer": "Could not reach your Paperless server, is it up and running?", "couldNotReachYourPaperlessServer": "Nie można połączyć się z Twoim serwerem Paperless, czy jest on uruchomiony i dostępny?",
"@couldNotReachYourPaperlessServer": {}, "@couldNotReachYourPaperlessServer": {},
"couldNotLoadSimilarDocuments": "Could not load similar documents.", "couldNotLoadSimilarDocuments": "Nie udało się wczytać podobnych dokumentów.",
"@couldNotLoadSimilarDocuments": {}, "@couldNotLoadSimilarDocuments": {},
"couldNotCreateStoragePath": "Could not create storage path, please try again.", "couldNotCreateStoragePath": "Nie udało się utworzyć ścieżki zapisu, spróbuj ponownie.",
"@couldNotCreateStoragePath": {}, "@couldNotCreateStoragePath": {},
"couldNotLoadStoragePaths": "Could not load storage paths.", "couldNotLoadStoragePaths": "Nie udało się załadować ścieżek zapisu.",
"@couldNotLoadStoragePaths": {}, "@couldNotLoadStoragePaths": {},
"couldNotLoadSuggestions": "Could not load suggestions.", "couldNotLoadSuggestions": "Nie udało się załadować sugestii.",
"@couldNotLoadSuggestions": {}, "@couldNotLoadSuggestions": {},
"couldNotCreateTag": "Could not create tag, please try again.", "couldNotCreateTag": "Nie udało się utworzyć taga, spróbuj ponownie.",
"@couldNotCreateTag": {}, "@couldNotCreateTag": {},
"couldNotLoadTags": "Could not load tags.", "couldNotLoadTags": "Nie udało się załadować tagów.",
"@couldNotLoadTags": {}, "@couldNotLoadTags": {},
"anUnknownErrorOccurred": "An unknown error occurred.", "anUnknownErrorOccurred": "Wystąpił nieznany błąd.",
"@anUnknownErrorOccurred": {}, "@anUnknownErrorOccurred": {},
"fileFormatNotSupported": "This file format is not supported.", "fileFormatNotSupported": "Ten format pliku nie jest obsługiwany.",
"@fileFormatNotSupported": {}, "@fileFormatNotSupported": {},
"report": "REPORT", "report": "ZGŁOSZENIE",
"@report": {}, "@report": {},
"absolute": "Absolute", "absolute": "Bezwzględna",
"@absolute": {}, "@absolute": {},
"hintYouCanAlsoSpecifyRelativeValues": "Hint: Apart from concrete dates, you can also specify a time range relative to the current date.", "hintYouCanAlsoSpecifyRelativeValues": "Wskazówka: Poza konkretnymi datami, możesz również określić zakres czasowy w stosunku do bieżącej daty.",
"@hintYouCanAlsoSpecifyRelativeValues": { "@hintYouCanAlsoSpecifyRelativeValues": {
"description": "Displayed in the extended date range picker" "description": "Displayed in the extended date range picker"
}, },
"amount": "Amount", "amount": "Ilość",
"@amount": {}, "@amount": {},
"relative": "Relative", "relative": "Względna",
"@relative": {}, "@relative": {},
"last": "Last", "last": "Ostatnie",
"@last": {}, "@last": {},
"timeUnit": "Time unit", "timeUnit": "Jednostka czasu",
"@timeUnit": {}, "@timeUnit": {},
"selectDateRange": "Wybierz zakres dat", "selectDateRange": "Wybierz zakres dat",
"@selectDateRange": {}, "@selectDateRange": {},
@@ -348,167 +348,167 @@
"@after": {}, "@after": {},
"before": "Przed", "before": "Przed",
"@before": {}, "@before": {},
"days": "{count, plural, zero{days} one{day} other{days}}", "days": "{count, plural, one{dzień} other{dni}}",
"@days": { "@days": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"lastNDays": "{count, plural, zero{} one{Yesterday} other{Last {count} days}}", "lastNDays": "{count, plural, one{Wczoraj} other{Ostatnie {count} dni}}",
"@lastNDays": { "@lastNDays": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"lastNMonths": "{count, plural, zero{} one{Last month} other{Last {count} months}}", "lastNMonths": "{count, plural, one{Ostatni miesiąc} other{Ostatnie {count} miesiące}}",
"@lastNMonths": { "@lastNMonths": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"lastNWeeks": "{count, plural, zero{} one{Last week} other{Last {count} weeks}}", "lastNWeeks": "{count, plural, one{Ostatni tydzień} other{Ostatnie {count} tygodnie}}",
"@lastNWeeks": { "@lastNWeeks": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"lastNYears": "{count, plural, zero{} one{Last year} other{Last {count} years}}", "lastNYears": "{count, plural, one {Ostatni rok} few {Ostatnie {count} lata} many {Ostatnie {count} lat} other {Ostatnie {count} lat}}",
"@lastNYears": { "@lastNYears": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"months": "{count, plural, zero{} one{month} other{months}}", "months": "{count, plural, one{Miesiąc} other{Miesiące}}",
"@months": { "@months": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"weeks": "{count, plural, zero{} one{week} other{weeks}}", "weeks": "{count, plural, one{tydzień} few {tygodnie} many {tygodnie} other{tygodnie}}",
"@weeks": { "@weeks": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"years": "{count, plural, zero{} one{year} other{years}}", "years": "{count, plural, one{rok} few {lat} many {lat} other{lat}}",
"@years": { "@years": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"gotIt": "Got it!", "gotIt": "OK!",
"@gotIt": {}, "@gotIt": {},
"cancel": "Cancel", "cancel": "Anuluj",
"@cancel": {}, "@cancel": {},
"close": "Close", "close": "Zamknij",
"@close": {}, "@close": {},
"create": "Create", "create": "Dodaj",
"@create": {}, "@create": {},
"delete": "Delete", "delete": "Usuń",
"@delete": {}, "@delete": {},
"edit": "Edit", "edit": "Edytuj",
"@edit": {}, "@edit": {},
"ok": "Ok", "ok": "Ok",
"@ok": {}, "@ok": {},
"save": "Save", "save": "Zapisz",
"@save": {}, "@save": {},
"select": "Select", "select": "Wybierz",
"@select": {}, "@select": {},
"saveChanges": "Zapisz zmiany", "saveChanges": "Zapisz zmiany",
"@saveChanges": {}, "@saveChanges": {},
"upload": "Upload", "upload": "Wyślij",
"@upload": {}, "@upload": {},
"youreOffline": "Jesteście w trybie offline.", "youreOffline": "Jesteście w trybie offline.",
"@youreOffline": {}, "@youreOffline": {},
"deleteDocument": "Delete document", "deleteDocument": "Usuń dokument",
"@deleteDocument": { "@deleteDocument": {
"description": "Used as an action label on each inbox item" "description": "Used as an action label on each inbox item"
}, },
"removeDocumentFromInbox": "Dokument usunięty ze skrzynki odbiorczej", "removeDocumentFromInbox": "Dokument usunięty ze skrzynki odbiorczej",
"@removeDocumentFromInbox": {}, "@removeDocumentFromInbox": {},
"areYouSureYouWantToMarkAllDocumentsAsSeen": "Are you sure you want to mark all documents as seen? This will perform a bulk edit operation removing all inbox tags from the documents. This action is not reversible! Are you sure you want to continue?", "areYouSureYouWantToMarkAllDocumentsAsSeen": "Czy na pewno chcesz oznaczyć wszystkie dokumenty jako przeczytane? Spowoduje to edycję wszystkich dokumentów, usuwając znaczniki skrzynki odbiorczej. Ta akcja nie jest odwracalna! Czy na pewno chcesz kontynuować?",
"@areYouSureYouWantToMarkAllDocumentsAsSeen": {}, "@areYouSureYouWantToMarkAllDocumentsAsSeen": {},
"markAllAsSeen": "Mark all as seen?", "markAllAsSeen": "Oznaczyć wszystkie jako przeczytane?",
"@markAllAsSeen": {}, "@markAllAsSeen": {},
"allSeen": "All seen", "allSeen": "Wszystkie dokumenty zostały przeczytane",
"@allSeen": {}, "@allSeen": {},
"markAsSeen": "Mark as seen", "markAsSeen": "Oznacz jako przeczytane",
"@markAsSeen": {}, "@markAsSeen": {},
"refresh": "Odświerz", "refresh": "Odświerz",
"@refresh": {}, "@refresh": {},
"youDoNotHaveUnseenDocuments": "You do not have unseen documents.", "youDoNotHaveUnseenDocuments": "Nie masz nieprzeczytanych dokumentów.",
"@youDoNotHaveUnseenDocuments": {}, "@youDoNotHaveUnseenDocuments": {},
"quickAction": "Quick Action", "quickAction": "Szybka akcja",
"@quickAction": {}, "@quickAction": {},
"suggestionSuccessfullyApplied": "Suggestion successfully applied.", "suggestionSuccessfullyApplied": "Pomyślnie zastosowano sugestię.",
"@suggestionSuccessfullyApplied": {}, "@suggestionSuccessfullyApplied": {},
"today": "Dzisiaj", "today": "Dzisiaj",
"@today": {}, "@today": {},
"undo": "Cofnij", "undo": "Cofnij",
"@undo": {}, "@undo": {},
"nUnseen": "{count} unseen", "nUnseen": "{count} nieprzeczytane",
"@nUnseen": { "@nUnseen": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"swipeLeftToMarkADocumentAsSeen": "Hint: Swipe left to mark a document as seen and remove all inbox tags from the document.", "swipeLeftToMarkADocumentAsSeen": "Wskazówka: Przesuń palcem w lewo, aby oznaczyć dokument jako przeczytany i usunąć wszystkie znaczniki skrzynki odbiorczej z dokumentu.",
"@swipeLeftToMarkADocumentAsSeen": {}, "@swipeLeftToMarkADocumentAsSeen": {},
"yesterday": "Wczoraj", "yesterday": "Wczoraj",
"@yesterday": {}, "@yesterday": {},
"anyAssigned": "Any assigned", "anyAssigned": "Przypisano etykietę",
"@anyAssigned": {}, "@anyAssigned": {},
"noItemsFound": "No items found!", "noItemsFound": "Nie znaleziono żadnych rekordów!",
"@noItemsFound": {}, "@noItemsFound": {},
"caseIrrelevant": "Case Irrelevant", "caseIrrelevant": "Nie rozróżniaj wielkich i małych liter",
"@caseIrrelevant": {}, "@caseIrrelevant": {},
"matchingAlgorithm": "Matching Algorithm", "matchingAlgorithm": "Algorytm dopasowania",
"@matchingAlgorithm": {}, "@matchingAlgorithm": {},
"match": "Match", "match": "Dopasowanie",
"@match": {}, "@match": {},
"name": "Nazwa", "name": "Nazwa",
"@name": {}, "@name": {},
"notAssigned": "Not assigned", "notAssigned": "Nie przypisano",
"@notAssigned": {}, "@notAssigned": {},
"addNewCorrespondent": "Add new correspondent", "addNewCorrespondent": "Dodaj nowego korespondenta",
"@addNewCorrespondent": {}, "@addNewCorrespondent": {},
"noCorrespondentsSetUp": "You don't seem to have any correspondents set up.", "noCorrespondentsSetUp": "Nie masz żadnych ustawionych korespondentów.",
"@noCorrespondentsSetUp": {}, "@noCorrespondentsSetUp": {},
"correspondents": "Correspondents", "correspondents": "Korespondenci",
"@correspondents": {}, "@correspondents": {},
"addNewDocumentType": "Dodaj nowy rodzaj dokumentu", "addNewDocumentType": "Dodaj nowy rodzaj dokumentu",
"@addNewDocumentType": {}, "@addNewDocumentType": {},
"noDocumentTypesSetUp": "You don't seem to have any document types set up.", "noDocumentTypesSetUp": "Nie masz skonfigurowanych typów dokumentów.",
"@noDocumentTypesSetUp": {}, "@noDocumentTypesSetUp": {},
"documentTypes": "Rodzaje dokumentów", "documentTypes": "Rodzaje dokumentów",
"@documentTypes": {}, "@documentTypes": {},
"addNewStoragePath": "Add new storage path", "addNewStoragePath": "Dodaj nową ścieżkę zapisu",
"@addNewStoragePath": {}, "@addNewStoragePath": {},
"noStoragePathsSetUp": "You don't seem to have any storage paths set up.", "noStoragePathsSetUp": "Wygląda na to, że nie masz ustawionych ścieżek zapisu.",
"@noStoragePathsSetUp": {}, "@noStoragePathsSetUp": {},
"storagePaths": "Storage Paths", "storagePaths": "Ścieżki zapisu",
"@storagePaths": {}, "@storagePaths": {},
"addNewTag": "Add new tag", "addNewTag": "Dodaj nowy tag",
"@addNewTag": {}, "@addNewTag": {},
"noTagsSetUp": "You don't seem to have any tags set up.", "noTagsSetUp": "Wygląda na to, że nie masz skonfigurowanych tagów.",
"@noTagsSetUp": {}, "@noTagsSetUp": {},
"linkedDocuments": "Linked Documents", "linkedDocuments": "Powiązane dokumenty",
"@linkedDocuments": {}, "@linkedDocuments": {},
"advancedSettings": "Advanced Settings", "advancedSettings": "Ustawienia zaawansowane",
"@advancedSettings": {}, "@advancedSettings": {},
"passphrase": "Passphrase", "passphrase": "Hasło",
"@passphrase": {}, "@passphrase": {},
"configureMutualTLSAuthentication": "Configure Mutual TLS Authentication", "configureMutualTLSAuthentication": "Skonfiguruj wzajemne uwierzytelnianie TLS",
"@configureMutualTLSAuthentication": {}, "@configureMutualTLSAuthentication": {},
"invalidCertificateFormat": "Invalid certificate format, only .pfx is allowed", "invalidCertificateFormat": "Nieprawidłowy format certyfikatu, dozwolony jest tylko .pfx",
"@invalidCertificateFormat": {}, "@invalidCertificateFormat": {},
"clientcertificate": "Client Certificate", "clientcertificate": "Certyfikat klienta",
"@clientcertificate": {}, "@clientcertificate": {},
"selectFile": "Select file...", "selectFile": "Wybierz plik...",
"@selectFile": {}, "@selectFile": {},
"continueLabel": "Kontynuuj", "continueLabel": "Kontynuuj",
"@continueLabel": {}, "@continueLabel": {},
"incorrectOrMissingCertificatePassphrase": "Incorrect or missing certificate passphrase.", "incorrectOrMissingCertificatePassphrase": "Błędne lub brakujące hasło certyfikatu.",
"@incorrectOrMissingCertificatePassphrase": {}, "@incorrectOrMissingCertificatePassphrase": {},
"connect": "Polącz", "connect": "Polącz",
"@connect": {}, "@connect": {},
@@ -516,97 +516,97 @@
"@password": {}, "@password": {},
"passwordMustNotBeEmpty": "Hasło nie może być puste.", "passwordMustNotBeEmpty": "Hasło nie może być puste.",
"@passwordMustNotBeEmpty": {}, "@passwordMustNotBeEmpty": {},
"connectionTimedOut": "Connection timed out.", "connectionTimedOut": "Upłynął czas połączenia.",
"@connectionTimedOut": {}, "@connectionTimedOut": {},
"loginPageReachabilityMissingClientCertificateText": "A client certificate was expected but not sent. Please provide a certificate.", "loginPageReachabilityMissingClientCertificateText": "Nie otrzymano oczekiwanego certyfikatu klienta. Proszę podać prawidłowy certyfikat.",
"@loginPageReachabilityMissingClientCertificateText": {}, "@loginPageReachabilityMissingClientCertificateText": {},
"couldNotEstablishConnectionToTheServer": "Could not establish a connection to the server.", "couldNotEstablishConnectionToTheServer": "Nie udało się nawiązać połączenia z serwerem.",
"@couldNotEstablishConnectionToTheServer": {}, "@couldNotEstablishConnectionToTheServer": {},
"connectionSuccessfulylEstablished": "Connection successfully established.", "connectionSuccessfulylEstablished": "Połączenie zostało ustanowione pomyślnie.",
"@connectionSuccessfulylEstablished": {}, "@connectionSuccessfulylEstablished": {},
"hostCouldNotBeResolved": "Host could not be resolved. Please check the server address and your internet connection. ", "hostCouldNotBeResolved": "Nie udało się ustalić hosta. Sprawdź adres serwera i połączenie z Internetem. ",
"@hostCouldNotBeResolved": {}, "@hostCouldNotBeResolved": {},
"serverAddress": "Adres serwera", "serverAddress": "Adres serwera",
"@serverAddress": {}, "@serverAddress": {},
"invalidAddress": "Invalid address.", "invalidAddress": "Nieprawidłowy adres.",
"@invalidAddress": {}, "@invalidAddress": {},
"serverAddressMustIncludeAScheme": "Server address must include a scheme.", "serverAddressMustIncludeAScheme": "Adres serwera musi zawierać schemat.",
"@serverAddressMustIncludeAScheme": {}, "@serverAddressMustIncludeAScheme": {},
"serverAddressMustNotBeEmpty": "Server address must not be empty.", "serverAddressMustNotBeEmpty": "Adres serwera nie może być pusty.",
"@serverAddressMustNotBeEmpty": {}, "@serverAddressMustNotBeEmpty": {},
"signIn": "Sign In", "signIn": "Zaloguj się",
"@signIn": {}, "@signIn": {},
"loginPageSignInTitle": "Sign In", "loginPageSignInTitle": "Zaloguj się",
"@loginPageSignInTitle": {}, "@loginPageSignInTitle": {},
"signInToServer": "Sign in to {serverAddress}", "signInToServer": "Zaloguj się do {serverAddress}",
"@signInToServer": { "@signInToServer": {
"placeholders": { "placeholders": {
"serverAddress": {} "serverAddress": {}
} }
}, },
"connectToPaperless": "Connect to Paperless", "connectToPaperless": "Połącz z Paperless",
"@connectToPaperless": {}, "@connectToPaperless": {},
"username": "Username", "username": "Nazwa użytkownika",
"@username": {}, "@username": {},
"usernameMustNotBeEmpty": "Username must not be empty.", "usernameMustNotBeEmpty": "Nazwa użytkownika nie może być pusta.",
"@usernameMustNotBeEmpty": {}, "@usernameMustNotBeEmpty": {},
"documentContainsAllOfTheseWords": "Document contains all of these words", "documentContainsAllOfTheseWords": "Dokument zawiera wszystkie poniższe słowa",
"@documentContainsAllOfTheseWords": {}, "@documentContainsAllOfTheseWords": {},
"all": "All", "all": "Wszystkie",
"@all": {}, "@all": {},
"documentContainsAnyOfTheseWords": "Document contains any of these words", "documentContainsAnyOfTheseWords": "Dokument zawiera którekolwiek z poniższych słów",
"@documentContainsAnyOfTheseWords": {}, "@documentContainsAnyOfTheseWords": {},
"any": "Any", "any": "Dowolny",
"@any": {}, "@any": {},
"learnMatchingAutomatically": "Learn matching automatically", "learnMatchingAutomatically": "Ucz się automatycznie dopasowywania",
"@learnMatchingAutomatically": {}, "@learnMatchingAutomatically": {},
"auto": "Auto", "auto": "Auto",
"@auto": {}, "@auto": {},
"documentContainsThisString": "Document contains this string", "documentContainsThisString": "Dokładne: Dokument zawiera ten ciąg znaków",
"@documentContainsThisString": {}, "@documentContainsThisString": {},
"exact": "Exact", "exact": "Dokładne",
"@exact": {}, "@exact": {},
"documentContainsAWordSimilarToThisWord": "Document contains a word similar to this word", "documentContainsAWordSimilarToThisWord": "Dokument zawiera słowo podobne do tego słowa",
"@documentContainsAWordSimilarToThisWord": {}, "@documentContainsAWordSimilarToThisWord": {},
"fuzzy": "Fuzzy", "fuzzy": "Przybliżone (Fuzzy)",
"@fuzzy": {}, "@fuzzy": {},
"documentMatchesThisRegularExpression": "Document matches this regular expression", "documentMatchesThisRegularExpression": "Dokument pasuje do wyrażenia regularnego",
"@documentMatchesThisRegularExpression": {}, "@documentMatchesThisRegularExpression": {},
"regularExpression": "Regular Expression", "regularExpression": "Wyrażenie regularne",
"@regularExpression": {}, "@regularExpression": {},
"anInternetConnectionCouldNotBeEstablished": "Nie można było nawiązać połączenia internetowego.", "anInternetConnectionCouldNotBeEstablished": "Nie można było nawiązać połączenia internetowego.",
"@anInternetConnectionCouldNotBeEstablished": {}, "@anInternetConnectionCouldNotBeEstablished": {},
"done": "Done", "done": "Wykonano",
"@done": {}, "@done": {},
"next": "Następne", "next": "Następne",
"@next": {}, "@next": {},
"couldNotAccessReceivedFile": "Could not access the received file. Please try to open the app before sharing.", "couldNotAccessReceivedFile": "Nie można uzyskać dostępu do otrzymanego pliku. Spróbuj otworzyć aplikację przed udostępnieniem.",
"@couldNotAccessReceivedFile": {}, "@couldNotAccessReceivedFile": {},
"newView": "New View", "newView": "Nowy widok",
"@newView": {}, "@newView": {},
"createsASavedViewBasedOnTheCurrentFilterCriteria": "Creates a new view based on the current filter criteria.", "createsASavedViewBasedOnTheCurrentFilterCriteria": "Tworzy nowy widok oparty na aktualnych kryteriach filtrowania.",
"@createsASavedViewBasedOnTheCurrentFilterCriteria": {}, "@createsASavedViewBasedOnTheCurrentFilterCriteria": {},
"createViewsToQuicklyFilterYourDocuments": "Create views to quickly filter your documents.", "createViewsToQuicklyFilterYourDocuments": "Utwórz widoki aby szybko filtrować dokumenty.",
"@createViewsToQuicklyFilterYourDocuments": {}, "@createViewsToQuicklyFilterYourDocuments": {},
"nFiltersSet": "{count, plural, zero{{count} filters set} one{{count} filter set} other{{count} filters set}}", "nFiltersSet": "{count, plural, one{{count} filtr ustawiony} few {{count} filtry ustawione} many {{count} filtry ustawione} other{{count} filtry ustawione}}",
"@nFiltersSet": { "@nFiltersSet": {
"placeholders": { "placeholders": {
"count": {} "count": {}
} }
}, },
"showInSidebar": "Show in sidebar", "showInSidebar": "Pokaż w panelu bocznym",
"@showInSidebar": {}, "@showInSidebar": {},
"showOnDashboard": "Show on dashboard", "showOnDashboard": "Pokaż na pulpicie",
"@showOnDashboard": {}, "@showOnDashboard": {},
"views": "Views", "views": "Widoki",
"@views": {}, "@views": {},
"clearAll": "Clear all", "clearAll": "Wyczyść wszystko",
"@clearAll": {}, "@clearAll": {},
"scan": "Skanuj", "scan": "Skanuj",
"@scan": {}, "@scan": {},
"previewScan": "Preview", "previewScan": "Podgląd",
"@previewScan": {}, "@previewScan": {},
"scrollToTop": "Scroll to top", "scrollToTop": "Przewiń do góry",
"@scrollToTop": {}, "@scrollToTop": {},
"paperlessServerVersion": "Wersja serwera Paperless", "paperlessServerVersion": "Wersja serwera Paperless",
"@paperlessServerVersion": {}, "@paperlessServerVersion": {},
@@ -622,9 +622,9 @@
"@languageAndVisualAppearance": {}, "@languageAndVisualAppearance": {},
"applicationSettings": "Aplikacja", "applicationSettings": "Aplikacja",
"@applicationSettings": {}, "@applicationSettings": {},
"colorSchemeHint": "Choose between a classic color scheme inspired by a traditional Paperless green or use the dynamic color scheme based on your system theme.", "colorSchemeHint": "Wybierz między klasycznym schematem kolorów zainspirowanym tradycyjnym zielonym Paperless, lub użyj dynamicznego schematu kolorów na podstawie motywu systemu.",
"@colorSchemeHint": {}, "@colorSchemeHint": {},
"colorSchemeNotSupportedWarning": "Dynamic theming is only supported for devices running Android 12 and above. Selecting the 'Dynamic' option might not have any effect depending on your OS implementation.", "colorSchemeNotSupportedWarning": "Dynamiczny motyw jest obsługiwany tylko dla urządzeń z systemem Android 12 i nowszym. Wybór opcji 'Dynamiczny' może nie mieć żadnego wpływu w zależności od implementacji systemu operacyjnego.",
"@colorSchemeNotSupportedWarning": {}, "@colorSchemeNotSupportedWarning": {},
"colors": "Kolory", "colors": "Kolory",
"@colors": {}, "@colors": {},
@@ -632,9 +632,9 @@
"@language": {}, "@language": {},
"security": "Zabezpieczenia", "security": "Zabezpieczenia",
"@security": {}, "@security": {},
"mangeFilesAndStorageSpace": "Manage files and storage space", "mangeFilesAndStorageSpace": "Zarządzaj plikami i przestrzenią dyskową",
"@mangeFilesAndStorageSpace": {}, "@mangeFilesAndStorageSpace": {},
"storage": "Storage", "storage": "Pamięć",
"@storage": {}, "@storage": {},
"dark": "Ciemny", "dark": "Ciemny",
"@dark": {}, "@dark": {},
@@ -642,9 +642,9 @@
"@light": {}, "@light": {},
"system": "System", "system": "System",
"@system": {}, "@system": {},
"ascending": "Ascending", "ascending": "Rosnąco",
"@ascending": {}, "@ascending": {},
"descending": "Descending", "descending": "Malejąco",
"@descending": {}, "@descending": {},
"storagePathDay": "dzień", "storagePathDay": "dzień",
"@storagePathDay": {}, "@storagePathDay": {},
@@ -654,130 +654,162 @@
"@storagePathYear": {}, "@storagePathYear": {},
"color": "Kolor", "color": "Kolor",
"@color": {}, "@color": {},
"filterTags": "Filter tags...", "filterTags": "Filtruj tagi...",
"@filterTags": {}, "@filterTags": {},
"inboxTag": "Tag skrzynki odbiorczej", "inboxTag": "Tag skrzynki odbiorczej",
"@inboxTag": {}, "@inboxTag": {},
"uploadInferValuesHint": "If you specify values for these fields, your paperless instance will not automatically derive a value. If you want these values to be automatically populated by your server, leave the fields blank.", "uploadInferValuesHint": "Jeśli określisz wartości dla tych pól, Twoja instancja Paperless nie będzie automatycznie ustalać ich wartości. Jeśli chcesz, aby te wartości były automatycznie wypełniane przez serwer, pozostaw puste pola.",
"@uploadInferValuesHint": {}, "@uploadInferValuesHint": {},
"useTheConfiguredBiometricFactorToAuthenticate": "Use the configured biometric factor to authenticate and unlock your documents.", "useTheConfiguredBiometricFactorToAuthenticate": "Użyj skonfigurowanego czynnika biometrycznego, aby uwierzytelnić i odblokować dokumenty.",
"@useTheConfiguredBiometricFactorToAuthenticate": {}, "@useTheConfiguredBiometricFactorToAuthenticate": {},
"verifyYourIdentity": "Verify your identity", "verifyYourIdentity": "Zweryfikuj swoją tożsamość",
"@verifyYourIdentity": {}, "@verifyYourIdentity": {},
"verifyIdentity": "Verify Identity", "verifyIdentity": "Zweryfikuj tożsamość",
"@verifyIdentity": {}, "@verifyIdentity": {},
"detailed": "Detailed", "detailed": "Widok szczegółowy",
"@detailed": {}, "@detailed": {},
"grid": "Grid", "grid": "Siatka",
"@grid": {}, "@grid": {},
"list": "List", "list": "Lista",
"@list": {}, "@list": {},
"remove": "Remove", "remove": "Usuń",
"removeQueryFromSearchHistory": "Remove query from search history?", "removeQueryFromSearchHistory": "Usunąć zapytanie z historii wyszukiwania?",
"dynamicColorScheme": "Dynamic", "dynamicColorScheme": "Dynamiczny",
"@dynamicColorScheme": {}, "@dynamicColorScheme": {},
"classicColorScheme": "Classic", "classicColorScheme": "Klasyczny",
"@classicColorScheme": {}, "@classicColorScheme": {},
"notificationDownloadComplete": "Download complete", "notificationDownloadComplete": "Pobieranie ukończone",
"@notificationDownloadComplete": { "@notificationDownloadComplete": {
"description": "Notification title when a download has been completed." "description": "Notification title when a download has been completed."
}, },
"notificationDownloadingDocument": "Downloading document", "notificationDownloadingDocument": "Pobieranie dokumentu",
"@notificationDownloadingDocument": { "@notificationDownloadingDocument": {
"description": "Notification title shown when a document download is pending" "description": "Notification title shown when a document download is pending"
}, },
"archiveSerialNumberUpdated": "Archive Serial Number updated.", "archiveSerialNumberUpdated": "Numer ASN zmodyfikowany.",
"@archiveSerialNumberUpdated": { "@archiveSerialNumberUpdated": {
"description": "Message shown when the ASN has been updated." "description": "Message shown when the ASN has been updated."
}, },
"donateCoffee": "Buy me a coffee", "donateCoffee": "Kup mi kawę",
"@donateCoffee": { "@donateCoffee": {
"description": "Label displayed in the app drawer" "description": "Label displayed in the app drawer"
}, },
"thisFieldIsRequired": "This field is required!", "thisFieldIsRequired": "To pole jest wymagane!",
"@thisFieldIsRequired": { "@thisFieldIsRequired": {
"description": "Message shown below the form field when a required field has not been filled out." "description": "Message shown below the form field when a required field has not been filled out."
}, },
"confirm": "Confirm", "confirm": "Potwierdź",
"confirmAction": "Confirm action", "confirmAction": "Zatwierdź akcje",
"@confirmAction": { "@confirmAction": {
"description": "Typically used as a title to confirm a previously selected action" "description": "Typically used as a title to confirm a previously selected action"
}, },
"areYouSureYouWantToContinue": "Are you sure you want to continue?", "areYouSureYouWantToContinue": "Czy na pewno chcesz kontynuować?",
"bulkEditTagsAddMessage": "{count, plural, one{This operation will add the tags {tags} to the selected document.} other{This operation will add the tags {tags} to {count} selected documents.}}", "bulkEditTagsAddMessage": "{count, plural, one{Ta operacja doda tagi {tags} do wybranego dokumentu} few {Ta operacja doda tagi {tags} do {count} wybranych dokumentów} many {Ta operacja doda tagi {tags} do {count} wybranych dokumentów} other{Ta operacja doda tagi {tags} do {count} wybranych dokumentów}}",
"@bulkEditTagsAddMessage": { "@bulkEditTagsAddMessage": {
"description": "Message of the confirmation dialog when bulk adding tags." "description": "Message of the confirmation dialog when bulk adding tags."
}, },
"bulkEditTagsRemoveMessage": "{count, plural, one{This operation will remove the tags {tags} from the selected document.} other{This operation will remove the tags {tags} from {count} selected documents.}}", "bulkEditTagsRemoveMessage": "{count, plural, one{Ta operacja usunie tagi {tags} z wybranego dokumentu.} other{Ta operacja usunie tagi {tags} z {count} wybranych dokumentów.}}",
"@bulkEditTagsRemoveMessage": { "@bulkEditTagsRemoveMessage": {
"description": "Message of the confirmation dialog when bulk removing tags." "description": "Message of the confirmation dialog when bulk removing tags."
}, },
"bulkEditTagsModifyMessage": "{count, plural, one{This operation will add the tags {addTags} and remove the tags {removeTags} from the selected document.} other{This operation will add the tags {addTags} and remove the tags {removeTags} from {count} selected documents.}}", "bulkEditTagsModifyMessage": "{count, plural, one{Ta operacja doda znaczniki {addTags} i usunie znaczniki {removeTags} z wybranego dokumentu.} other{Ta operacja doda tagi {addTags} i usunie tagi {removeTags} z {count} wybranych dokumentów.}}",
"@bulkEditTagsModifyMessage": { "@bulkEditTagsModifyMessage": {
"description": "Message of the confirmation dialog when both adding and removing tags." "description": "Message of the confirmation dialog when both adding and removing tags."
}, },
"bulkEditCorrespondentAssignMessage": "{count, plural, one{This operation will assign the correspondent {correspondent} to the selected document.} other{This operation will assign the correspondent {correspondent} to {count} selected documents.}}", "bulkEditCorrespondentAssignMessage": "{count, plural, one{Ta operacja przypisze korespondenta {correspondent} do wybranego dokumentu.} other{Ta operacja przypisze korespondenta {correspondent} do {count} wybranych dokumentów}}",
"bulkEditDocumentTypeAssignMessage": "{count, plural, one{This operation will assign the document type {docType} to the selected document.} other{This operation will assign the documentType {docType} to {count} selected documents.}}", "bulkEditDocumentTypeAssignMessage": "{count, plural, one{Ta operacja przypisze typ dokumentu {docType} do wybranego dokumentu.} other{Ta operacja przypisze typ dokumentu {docType} do {count} wybranych dokumentów}}",
"bulkEditStoragePathAssignMessage": "{count, plural, one{This operation will assign the storage path {path} to the selected document.} other{This operation will assign the storage path {path} to {count} selected documents.}}", "bulkEditStoragePathAssignMessage": "{count, plural, one{Ta operacja przypisze ścieżkę zapisu {path} do wybranego dokumentu.} other{Ta operacja przypisze ścieżkę zapisu {path} do {count} wybranych dokumentów}}",
"bulkEditCorrespondentRemoveMessage": "{count, plural, one{This operation will remove the correspondent from the selected document.} other{This operation will remove the correspondent from {count} selected documents.}}", "bulkEditCorrespondentRemoveMessage": "{count, plural, one{Ta operacja usunie korespondenta z wybranego dokumentu.} other{Ta operacja usunie korespondenta z {count} wybranych dokumentów}}",
"bulkEditDocumentTypeRemoveMessage": "{count, plural, one{This operation will remove the document type from the selected document.} other{This operation will remove the document type from {count} selected documents.}}", "bulkEditDocumentTypeRemoveMessage": "{count, plural, one{Ta operacja usunie typ dokumentu z wybranego dokumentu.} other{Ta operacja usunie typ dokumentu z {count} wybranych dokumentów.}}",
"bulkEditStoragePathRemoveMessage": "{count, plural, one{This operation will remove the storage path from the selected document.} other{This operation will remove the storage path from {count} selected documents.}}", "bulkEditStoragePathRemoveMessage": "{count, plural, one{Ta operacja usunie tagi z wybranego dokumentu.} other{Ta operacja usunie tagi z {count} wybranych dokumentów.}}",
"anyTag": "Any", "anyTag": "Dowolny",
"@anyTag": { "@anyTag": {
"description": "Label shown when any tag should be filtered" "description": "Label shown when any tag should be filtered"
}, },
"allTags": "All", "allTags": "Wszystkie",
"@allTags": { "@allTags": {
"description": "Label shown when a document has to be assigned to all selected tags" "description": "Label shown when a document has to be assigned to all selected tags"
}, },
"switchingAccountsPleaseWait": "Switching accounts. Please wait...", "switchingAccountsPleaseWait": "Przełączanie kont. Proszę czekać...",
"@switchingAccountsPleaseWait": { "@switchingAccountsPleaseWait": {
"description": "Message shown while switching accounts is in progress." "description": "Message shown while switching accounts is in progress."
}, },
"testConnection": "Test connection", "testConnection": "Test połączenia",
"@testConnection": { "@testConnection": {
"description": "Button label shown on login page. Allows user to test whether the server is reachable or not." "description": "Button label shown on login page. Allows user to test whether the server is reachable or not."
}, },
"accounts": "Accounts", "accounts": "Konta",
"@accounts": { "@accounts": {
"description": "Title of the account management dialog" "description": "Title of the account management dialog"
}, },
"addAccount": "Add account", "addAccount": "Dodaj konto",
"@addAccount": { "@addAccount": {
"description": "Label of add account action" "description": "Label of add account action"
}, },
"switchAccount": "Switch", "switchAccount": "Przełącz",
"@switchAccount": { "@switchAccount": {
"description": "Label for switch account action" "description": "Label for switch account action"
}, },
"logout": "Logout", "logout": "Wyloguj się",
"@logout": { "@logout": {
"description": "Generic Logout label" "description": "Generic Logout label"
}, },
"switchAccountTitle": "Switch account", "switchAccountTitle": "Zmień konto",
"@switchAccountTitle": { "@switchAccountTitle": {
"description": "Title of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not." "description": "Title of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not."
}, },
"switchToNewAccount": "Do you want to switch to the new account? You can switch back at any time.", "switchToNewAccount": "Czy chcesz przełączyć się na nowe konto? Możesz przełączyć się w dowolnym momencie.",
"@switchToNewAccount": { "@switchToNewAccount": {
"description": "Content of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not." "description": "Content of the dialog shown after adding an account, asking the user whether to switch to the newly added account or not."
}, },
"sourceCode": "Source Code", "sourceCode": "Kod źródłowy",
"findTheSourceCodeOn": "Find the source code on", "findTheSourceCodeOn": "Znajdź kod źródłowy na",
"@findTheSourceCodeOn": { "@findTheSourceCodeOn": {
"description": "Text before link to Paperless Mobile GitHub" "description": "Text before link to Paperless Mobile GitHub"
}, },
"rememberDecision": "Remember my decision", "rememberDecision": "Zapamiętaj mój wybór",
"defaultDownloadFileType": "Default Download File Type", "defaultDownloadFileType": "Domyślny typ pliku do pobrania",
"@defaultDownloadFileType": { "@defaultDownloadFileType": {
"description": "Label indicating the default filetype to download (one of archived, original and always ask)" "description": "Label indicating the default filetype to download (one of archived, original and always ask)"
}, },
"defaultShareFileType": "Default Share File Type", "defaultShareFileType": "Domyślny typ udostępnianego pliku",
"@defaultShareFileType": { "@defaultShareFileType": {
"description": "Label indicating the default filetype to share (one of archived, original and always ask)" "description": "Label indicating the default filetype to share (one of archived, original and always ask)"
}, },
"alwaysAsk": "Always ask", "alwaysAsk": "Zawsze pytaj",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Do not tag documents automatically",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "None",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Log in to existing account",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Print",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Manage permissions",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "An error occurred trying to resolve the server version.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Resolving server version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Go to login",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -779,5 +779,37 @@
"alwaysAsk": "Always ask", "alwaysAsk": "Always ask",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Do not tag documents automatically",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "None",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Log in to existing account",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Print",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Manage permissions",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "An error occurred trying to resolve the server version.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Resolving server version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Go to login",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -779,5 +779,37 @@
"alwaysAsk": "Always ask", "alwaysAsk": "Always ask",
"@alwaysAsk": { "@alwaysAsk": {
"description": "Option to choose when the app should always ask the user which filetype to use" "description": "Option to choose when the app should always ask the user which filetype to use"
},
"disableMatching": "Do not tag documents automatically",
"@disableMatching": {
"description": "One of the options for automatic tagging of documents"
},
"none": "None",
"@none": {
"description": "One of available enum values of matching algorithm for tags"
},
"logInToExistingAccount": "Log in to existing account",
"@logInToExistingAccount": {
"description": "Title shown on login page if at least one user is already known to the app."
},
"print": "Print",
"@print": {
"description": "Tooltip for print button"
},
"managePermissions": "Manage permissions",
"@managePermissions": {
"description": "Button which leads user to manage permissions page"
},
"errorRetrievingServerVersion": "An error occurred trying to resolve the server version.",
"@errorRetrievingServerVersion": {
"description": "Message shown at the bottom of the settings page when the remote server version could not be resolved."
},
"resolvingServerVersion": "Resolving server version...",
"@resolvingServerVersion": {
"description": "Message shown while the app is loading the remote server version."
},
"goToLogin": "Go to login",
"@goToLogin": {
"description": "Label of the button shown on the login page to skip logging in to existing accounts and navigate user to login page"
} }
} }

View File

@@ -278,6 +278,7 @@ class _AuthenticationWrapperState extends State<AuthenticationWrapper> {
titleString: S.of(context)!.connectToPaperless, titleString: S.of(context)!.connectToPaperless,
submitText: S.of(context)!.signIn, submitText: S.of(context)!.signIn,
onSubmit: _onLogin, onSubmit: _onLogin,
showLocalAccounts: true,
), ),
requriresLocalAuthentication: () => const VerifyIdentityPage(), requriresLocalAuthentication: () => const VerifyIdentityPage(),
authenticated: (localUserId, apiVersion) => HomeRoute( authenticated: (localUserId, apiVersion) => HomeRoute(