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",
}
]
# 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,
onChanged: (value) => setState(() => _rememberSelection = value ?? false),
title: Text(
"Remember my decision",
S.of(context)!.rememberDecision,
style: Theme.of(context).textTheme.labelMedium,
), //TODO: INTL
),
),
],
),

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.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_form_model.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/user_credentials_form_field.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/never_scrollable_scroll_behavior.dart';
@@ -23,11 +30,14 @@ class LoginPage extends StatefulWidget {
final String submitText;
final String titleString;
final bool showLocalAccounts;
const LoginPage({
Key? key,
required this.onSubmit,
required this.submitText,
required this.titleString,
this.showLocalAccounts = false,
}) : super(key: key);
@override
@@ -41,6 +51,7 @@ class _LoginPageState extends State<LoginPage> {
@override
Widget build(BuildContext context) {
final localAccounts = Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount);
return Scaffold(
resizeToAvoidBottomInset: false,
body: FormBuilder(
@@ -49,6 +60,42 @@ class _LoginPageState extends State<LoginPage> {
controller: _pageController,
scrollBehavior: NeverScrollableScrollBehavior(),
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(
titleString: widget.titleString,
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/widgets/global_settings_builder.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:provider/provider.dart';
@@ -22,6 +23,11 @@ class ManageAccountsPage extends StatelessWidget {
Widget build(BuildContext context) {
return GlobalSettingsBuilder(
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(
valueListenable: Hive.box<LocalUserAccount>(HiveBoxes.localUserAccount).listenable(),
builder: (context, box, _) {
@@ -46,16 +52,78 @@ class ManageAccountsPage extends StatelessWidget {
borderRadius: BorderRadius.circular(24),
),
children: [
_buildAccountTile(context, globalSettings.currentLoggedInUser!,
box.get(globalSettings.currentLoggedInUser!)!, globalSettings),
Card(
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(
children: [
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,
globalSettings.currentLoggedInUser!,
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)
const ListTile(
leading: Icon(Icons.admin_panel_settings),
title: Text("Manage permissions"), //TODO: INTL
ListTile(
leading: const Icon(Icons.admin_panel_settings),
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 {
final userId = await Navigator.push(
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;
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) {
if (snapshot.hasError) {
return Text(
"Something went wrong while retrieving server data.", //TODO: INTL
S.of(context)!.errorRetrievingServerVersion,
style: Theme.of(context)
.textTheme
.labelSmall
@@ -40,7 +40,7 @@ class SettingsPage extends StatelessWidget {
}
if (!snapshot.hasData) {
return Text(
"Loading server information...", //TODO: INTL
S.of(context)!.resolvingServerVersion,
style: Theme.of(context).textTheme.labelSmall,
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';
class UserAvatar extends StatelessWidget {
final String userId;
final LocalUserAccount account;
const UserAvatar({
super.key,
required this.userId,
required this.account,
});
@override
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;
return CircleAvatar(
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": {
"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",
"findTheSourceCodeOn": "Find the source code on",
"sourceCode": "Codi Font",
"findTheSourceCodeOn": "Troba el codi font a",
"@findTheSourceCodeOn": {
"description": "Text before link to Paperless Mobile GitHub"
},
"rememberDecision": "Remember my decision",
"defaultDownloadFileType": "Default Download File Type",
"rememberDecision": "Recorda la selecció",
"defaultDownloadFileType": "Tipus de Fitxer a descarregar per defecte",
"@defaultDownloadFileType": {
"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": {
"description": "Label indicating the default filetype to share (one of archived, original and always ask)"
},
"alwaysAsk": "Always ask",
"alwaysAsk": "Pregunta sempre",
"@alwaysAsk": {
"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": {
"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": {
"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": {
"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": {},
"classicColorScheme": "Classique",
"@classicColorScheme": {},
"notificationDownloadComplete": "Download complete",
"notificationDownloadComplete": "Téléchargement terminé",
"@notificationDownloadComplete": {
"description": "Notification title when a download has been completed."
},
"notificationDownloadingDocument": "Downloading document",
"notificationDownloadingDocument": "Téléchargement du document",
"@notificationDownloadingDocument": {
"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": {
"description": "Message shown when the ASN has been updated."
},
"donateCoffee": "Buy me a coffee",
"donateCoffee": "Soutenez-moi",
"@donateCoffee": {
"description": "Label displayed in the app drawer"
},
"thisFieldIsRequired": "This field is required!",
"thisFieldIsRequired": "Ce champ est obligatoire !",
"@thisFieldIsRequired": {
"description": "Message shown below the form field when a required field has not been filled out."
},
"confirm": "Confirm",
"confirmAction": "Confirm action",
"confirm": "Confirmer",
"confirmAction": "Confirmer laction",
"@confirmAction": {
"description": "Typically used as a title to confirm a previously selected action"
},
"areYouSureYouWantToContinue": "Are you sure you want to continue?",
"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.}}",
"areYouSureYouWantToContinue": "Etes-vous sûr(e) de vouloir continuer?",
"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": {
"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": {
"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": {
"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.}}",
"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.}}",
"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.}}",
"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.}}",
"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.}}",
"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.}}",
"anyTag": "Any",
"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{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{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{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{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{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": "Tous",
"@anyTag": {
"description": "Label shown when any tag should be filtered"
},
"allTags": "All",
"allTags": "Tous",
"@allTags": {
"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": {
"description": "Message shown while switching accounts is in progress."
},
"testConnection": "Test connection",
"testConnection": "Vérifier la connexion",
"@testConnection": {
"description": "Button label shown on login page. Allows user to test whether the server is reachable or not."
},
"accounts": "Accounts",
"accounts": "Comptes",
"@accounts": {
"description": "Title of the account management dialog"
},
"addAccount": "Add account",
"addAccount": "Ajouter un compte",
"@addAccount": {
"description": "Label of add account action"
},
"switchAccount": "Switch",
"switchAccount": "Basculer",
"@switchAccount": {
"description": "Label for switch account action"
},
"logout": "Logout",
"logout": "Déconnexion",
"@logout": {
"description": "Generic Logout label"
},
"switchAccountTitle": "Switch account",
"switchAccountTitle": "Changer de compte",
"@switchAccountTitle": {
"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": {
"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",
"findTheSourceCodeOn": "Find the source code on",
"sourceCode": "Code source",
"findTheSourceCodeOn": "Trouvez le code source sur",
"@findTheSourceCodeOn": {
"description": "Text before link to Paperless Mobile GitHub"
},
"rememberDecision": "Remember my decision",
"defaultDownloadFileType": "Default Download File Type",
"rememberDecision": "Se souvenir de mon choix",
"defaultDownloadFileType": "Type de fichier par défaut",
"@defaultDownloadFileType": {
"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": {
"description": "Label indicating the default filetype to share (one of archived, original and always ask)"
},
"alwaysAsk": "Always ask",
"alwaysAsk": "Toujours demander",
"@alwaysAsk": {
"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": {},
"account": "Konto",
"@account": {},
"addCorrespondent": "New Correspondent",
"addCorrespondent": "Dodaj korespondenta",
"@addCorrespondent": {
"description": "Title when adding a new correspondent"
},
@@ -17,7 +17,7 @@
"@addDocumentType": {
"description": "Title when adding a new document type"
},
"addStoragePath": "New Storage Path",
"addStoragePath": "Dodaj ścieżkę zapisu",
"@addStoragePath": {
"description": "Title when adding a new storage path"
},
@@ -43,13 +43,13 @@
"@reportABug": {},
"settings": "Ustawienia",
"@settings": {},
"authenticateOnAppStart": "Authenticate on app start",
"authenticateOnAppStart": "Uwierzytelnij przy starcie aplikacji",
"@authenticateOnAppStart": {
"description": "Description of the biometric authentication settings tile"
},
"biometricAuthentication": "Biometric authentication",
"biometricAuthentication": "Uwierzytelnianie biometryczne",
"@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": {
"placeholders": {
"mode": {}
@@ -59,29 +59,29 @@
"@documents": {},
"inbox": "Skrzynka odbiorcza",
"@inbox": {},
"labels": "Labels",
"labels": "Etykiety",
"@labels": {},
"scanner": "Scanner",
"scanner": "Skaner",
"@scanner": {},
"startTyping": "Zacznij pisać...",
"@startTyping": {},
"doYouReallyWantToDeleteThisView": "Do you really want to delete this view?",
"doYouReallyWantToDeleteThisView": "Czy na pewno chcesz usunąć ten widok?",
"@doYouReallyWantToDeleteThisView": {},
"deleteView": "Usuń widok ",
"@deleteView": {},
"addedAt": "Added at",
"addedAt": "Dodano",
"@addedAt": {},
"archiveSerialNumber": "Numer Seryjny Archiwum",
"@archiveSerialNumber": {},
"asn": "ASN",
"@asn": {},
"correspondent": "Correspondent",
"correspondent": "Korespondent",
"@correspondent": {},
"createdAt": "Created at",
"createdAt": "Utworzono",
"@createdAt": {},
"documentSuccessfullyDeleted": "Dokument pomyślnie usunięty.",
"@documentSuccessfullyDeleted": {},
"assignAsn": "Assign ASN",
"assignAsn": "Przypisz ASN",
"@assignAsn": {},
"deleteDocumentTooltip": "Usuń",
"@deleteDocumentTooltip": {
@@ -95,7 +95,7 @@
"@editDocumentTooltip": {
"description": "Tooltip shown for the edit button on details page"
},
"loadFullContent": "Load full content",
"loadFullContent": "Załaduj pełną treść",
"@loadFullContent": {},
"noAppToDisplayPDFFilesFound": "Nie znaleziono aplikacji do wyświetlania plików PDF",
"@noAppToDisplayPDFFilesFound": {},
@@ -129,17 +129,17 @@
},
"documentType": "Rodzaj dokumentu",
"@documentType": {},
"archivedPdf": "Archived (pdf)",
"archivedPdf": "Zarchiwizowany (pdf)",
"@archivedPdf": {
"description": "Option to chose when downloading a document"
},
"chooseFiletype": "Choose filetype",
"chooseFiletype": "Wybierz typ pliku",
"@chooseFiletype": {},
"original": "Original",
"original": "Oryginał",
"@original": {
"description": "Option to chose when downloading a document"
},
"documentSuccessfullyDownloaded": "Document successfully downloaded.",
"documentSuccessfullyDownloaded": "Pobieranie dokumentu udane.",
"@documentSuccessfullyDownloaded": {},
"suggestions": "Sugestie: ",
"@suggestions": {},
@@ -149,7 +149,7 @@
"@advanced": {},
"apply": "Zastosuj",
"@apply": {},
"extended": "Extended",
"extended": "Rozszerz",
"@extended": {},
"titleAndContent": "Tytuł i treść",
"@titleAndContent": {},
@@ -157,19 +157,19 @@
"@title": {},
"reset": "Zresetuj",
"@reset": {},
"filterDocuments": "Filter Documents",
"filterDocuments": "Filtrowanie dokumentów",
"@filterDocuments": {
"description": "Title of the document filter"
},
"originalMD5Checksum": "Original MD5-Checksum",
"originalMD5Checksum": "MD5-Checksum (suma kontrolna) oryginału",
"@originalMD5Checksum": {},
"mediaFilename": "Nazwa pliku",
"@mediaFilename": {},
"originalFileSize": "Original File Size",
"originalFileSize": "Rozmiar oryginalnego pliku",
"@originalFileSize": {},
"originalMIMEType": "Original MIME-Type",
"originalMIMEType": "MIME-Type oryginału",
"@originalMIMEType": {},
"modifiedAt": "Modified at",
"modifiedAt": "Zmodyfikowano",
"@modifiedAt": {},
"preview": "Podgląd",
"@preview": {
@@ -177,7 +177,7 @@
},
"scanADocument": "Zeskanuj dokument",
"@scanADocument": {},
"noDocumentsScannedYet": "No documents scanned yet.",
"noDocumentsScannedYet": "Brak zeskanowanych dokumentów.",
"@noDocumentsScannedYet": {},
"or": "lub",
"@or": {
@@ -185,11 +185,11 @@
},
"deleteAllScans": "Usuń wszystkie skany",
"@deleteAllScans": {},
"uploadADocumentFromThisDevice": "Upload a document from this device",
"uploadADocumentFromThisDevice": "Prześlij dokument z tego urządzenia",
"@uploadADocumentFromThisDevice": {
"description": "Button label on scanner page"
},
"noMatchesFound": "No matches found.",
"noMatchesFound": "Nie znaleziono pasujących elementów.",
"@noMatchesFound": {
"description": "Displayed when no documents were found in the document search."
},
@@ -199,50 +199,50 @@
"@results": {
"description": "Label displayed above search results in document search."
},
"searchDocuments": "Search documents",
"searchDocuments": "Szukaj dokumentów",
"@searchDocuments": {},
"resetFilter": "Zresetuj filtr",
"@resetFilter": {},
"lastMonth": "Last Month",
"lastMonth": "Ostatni Miesiąc",
"@lastMonth": {},
"last7Days": "Last 7 Days",
"last7Days": "Ostatnie 7 dni",
"@last7Days": {},
"last3Months": "Last 3 Months",
"last3Months": "Ostatnie 3 miesiące",
"@last3Months": {},
"lastYear": "Last Year",
"lastYear": "Ostatni rok",
"@lastYear": {},
"search": "Szukaj",
"@search": {},
"documentsSuccessfullyDeleted": "Dokument pomyślnie usunięty.",
"@documentsSuccessfullyDeleted": {},
"thereSeemsToBeNothingHere": "There seems to be nothing here...",
"thereSeemsToBeNothingHere": "Wygląda na to, że nic tu nie ma...",
"@thereSeemsToBeNothingHere": {},
"oops": "Ups.",
"@oops": {},
"newDocumentAvailable": "New document available!",
"newDocumentAvailable": "Nowy dokument dostępny!",
"@newDocumentAvailable": {},
"orderBy": "Sortuj według",
"@orderBy": {},
"thisActionIsIrreversibleDoYouWishToProceedAnyway": "This action is irreversible. Do you wish to proceed anyway?",
"thisActionIsIrreversibleDoYouWishToProceedAnyway": "Ta czynność jest nieodwracalna. Czy mimo to chcesz kontynuować?",
"@thisActionIsIrreversibleDoYouWishToProceedAnyway": {},
"confirmDeletion": "Potwierdź usunięcie",
"@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": {
"placeholders": {
"count": {}
}
},
"countSelected": "{count} selected",
"countSelected": "Wybrano {count}",
"@countSelected": {
"description": "Displayed in the appbar when at least one document is selected.",
"placeholders": {
"count": {}
}
},
"storagePath": "Storage Path",
"storagePath": "Ścieżka zapisu",
"@storagePath": {},
"prepareDocument": "Prepare document",
"prepareDocument": "Przygotuj dokument",
"@prepareDocument": {},
"tags": "Tagi",
"@tags": {},
@@ -250,97 +250,97 @@
"@documentSuccessfullyUpdated": {},
"fileName": "Nazwa Pliku",
"@fileName": {},
"synchronizeTitleAndFilename": "Synchronize title and filename",
"synchronizeTitleAndFilename": "Synchronizuj tytuł i nazwę pliku",
"@synchronizeTitleAndFilename": {},
"reload": "Odśwież",
"@reload": {},
"documentSuccessfullyUploadedProcessing": "Dokument pomyślnie przesłany, przetwarzam...",
"@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": {},
"couldNotAcknowledgeTasks": "Could not acknowledge tasks.",
"couldNotAcknowledgeTasks": "Nie udało się potwierdzić zadań.",
"@couldNotAcknowledgeTasks": {},
"authenticationFailedPleaseTryAgain": "Authentication failed, please try again.",
"authenticationFailedPleaseTryAgain": "Uwierzytelnienie nie powiodło się, spróbuj ponownie.",
"@authenticationFailedPleaseTryAgain": {},
"anErrorOccurredWhileTryingToAutocompleteYourQuery": "An error ocurred while trying to autocomplete your query.",
"anErrorOccurredWhileTryingToAutocompleteYourQuery": "Wystąpił błąd podczas próby automatycznego uzupełniania zapytania.",
"@anErrorOccurredWhileTryingToAutocompleteYourQuery": {},
"biometricAuthenticationFailed": "Biometric authentication failed.",
"biometricAuthenticationFailed": "Uwierzytelnianie biometryczne nie powiodło się.",
"@biometricAuthenticationFailed": {},
"biometricAuthenticationNotSupported": "Biometric authentication not supported on this device.",
"biometricAuthenticationNotSupported": "Uwierzytelnianie biometryczne nie jest obsługiwane na tym urządzeniu.",
"@biometricAuthenticationNotSupported": {},
"couldNotBulkEditDocuments": "Could not bulk edit documents.",
"couldNotBulkEditDocuments": "Nie udało się edytować wielu dokumentów.",
"@couldNotBulkEditDocuments": {},
"couldNotCreateCorrespondent": "Could not create correspondent, please try again.",
"couldNotCreateCorrespondent": "Nie udało się utworzyć korespondenta, spróbuj ponownie.",
"@couldNotCreateCorrespondent": {},
"couldNotLoadCorrespondents": "Could not load correspondents.",
"couldNotLoadCorrespondents": "Nie udało się załadować korespondentów.",
"@couldNotLoadCorrespondents": {},
"couldNotCreateSavedView": "Could not create saved view, please try again.",
"couldNotCreateSavedView": "Nie udało się utworzyć zapisanego widoku, spróbuj ponownie.",
"@couldNotCreateSavedView": {},
"couldNotDeleteSavedView": "Could not delete saved view, please try again",
"couldNotDeleteSavedView": "Nie udało się usunąć zapisanego widoku, spróbuj ponownie",
"@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": {},
"couldNotAssignArchiveSerialNumber": "Could not assign archive serial number.",
"couldNotAssignArchiveSerialNumber": "Nie udało się przypisać numeru seryjnego archiwum (ASN).",
"@couldNotAssignArchiveSerialNumber": {},
"couldNotDeleteDocument": "Could not delete document, please try again.",
"couldNotDeleteDocument": "Nie udało się usunąć dokumentu, spróbuj ponownie.",
"@couldNotDeleteDocument": {},
"couldNotLoadDocuments": "Could not load documents, please try again.",
"couldNotLoadDocuments": "Nie udało się załadować dokumentów, spróbuj ponownie.",
"@couldNotLoadDocuments": {},
"couldNotLoadDocumentPreview": "Could not load document preview.",
"couldNotLoadDocumentPreview": "Nie udało się załadować podglądu dokumentu.",
"@couldNotLoadDocumentPreview": {},
"couldNotCreateDocument": "Could not create document, please try again.",
"couldNotCreateDocument": "Nie udało się utworzyć dokumentu, spróbuj ponownie.",
"@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": {},
"couldNotUpdateDocument": "Could not update document, please try again.",
"couldNotUpdateDocument": "Nie udało się zmodyfikować dokumentu, spróbuj ponownie.",
"@couldNotUpdateDocument": {},
"couldNotUploadDocument": "Could not upload document, please try again.",
"couldNotUploadDocument": "Nie udało się przesłać dokumentu, spróbuj ponownie.",
"@couldNotUploadDocument": {},
"invalidCertificateOrMissingPassphrase": "Invalid certificate or missing passphrase, please try again",
"invalidCertificateOrMissingPassphrase": "Certyfikat jest nieprawidłowy lub brakuje hasła, spróbuj ponownie",
"@invalidCertificateOrMissingPassphrase": {},
"couldNotLoadSavedViews": "Could not load saved views.",
"couldNotLoadSavedViews": "Nie udało się załadować zapisanych widoków.",
"@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": {},
"userIsNotAuthenticated": "User is not authenticated.",
"userIsNotAuthenticated": "Użytkownik nie jest uwierzytelniony.",
"@userIsNotAuthenticated": {},
"requestTimedOut": "The request to the server timed out.",
"requestTimedOut": "Przekroczono limit czasu żądania do serwera.",
"@requestTimedOut": {},
"anErrorOccurredRemovingTheScans": "An error occurred removing the scans.",
"anErrorOccurredRemovingTheScans": "Wystąpił błąd podczas usuwania skanów.",
"@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": {},
"couldNotLoadSimilarDocuments": "Could not load similar documents.",
"couldNotLoadSimilarDocuments": "Nie udało się wczytać podobnych dokumentów.",
"@couldNotLoadSimilarDocuments": {},
"couldNotCreateStoragePath": "Could not create storage path, please try again.",
"couldNotCreateStoragePath": "Nie udało się utworzyć ścieżki zapisu, spróbuj ponownie.",
"@couldNotCreateStoragePath": {},
"couldNotLoadStoragePaths": "Could not load storage paths.",
"couldNotLoadStoragePaths": "Nie udało się załadować ścieżek zapisu.",
"@couldNotLoadStoragePaths": {},
"couldNotLoadSuggestions": "Could not load suggestions.",
"couldNotLoadSuggestions": "Nie udało się załadować sugestii.",
"@couldNotLoadSuggestions": {},
"couldNotCreateTag": "Could not create tag, please try again.",
"couldNotCreateTag": "Nie udało się utworzyć taga, spróbuj ponownie.",
"@couldNotCreateTag": {},
"couldNotLoadTags": "Could not load tags.",
"couldNotLoadTags": "Nie udało się załadować tagów.",
"@couldNotLoadTags": {},
"anUnknownErrorOccurred": "An unknown error occurred.",
"anUnknownErrorOccurred": "Wystąpił nieznany błąd.",
"@anUnknownErrorOccurred": {},
"fileFormatNotSupported": "This file format is not supported.",
"fileFormatNotSupported": "Ten format pliku nie jest obsługiwany.",
"@fileFormatNotSupported": {},
"report": "REPORT",
"report": "ZGŁOSZENIE",
"@report": {},
"absolute": "Absolute",
"absolute": "Bezwzględna",
"@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": {
"description": "Displayed in the extended date range picker"
},
"amount": "Amount",
"amount": "Ilość",
"@amount": {},
"relative": "Relative",
"relative": "Względna",
"@relative": {},
"last": "Last",
"last": "Ostatnie",
"@last": {},
"timeUnit": "Time unit",
"timeUnit": "Jednostka czasu",
"@timeUnit": {},
"selectDateRange": "Wybierz zakres dat",
"@selectDateRange": {},
@@ -348,167 +348,167 @@
"@after": {},
"before": "Przed",
"@before": {},
"days": "{count, plural, zero{days} one{day} other{days}}",
"days": "{count, plural, one{dzień} other{dni}}",
"@days": {
"placeholders": {
"count": {}
}
},
"lastNDays": "{count, plural, zero{} one{Yesterday} other{Last {count} days}}",
"lastNDays": "{count, plural, one{Wczoraj} other{Ostatnie {count} dni}}",
"@lastNDays": {
"placeholders": {
"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": {
"placeholders": {
"count": {}
}
},
"lastNWeeks": "{count, plural, zero{} one{Last week} other{Last {count} weeks}}",
"lastNWeeks": "{count, plural, one{Ostatni tydzień} other{Ostatnie {count} tygodnie}}",
"@lastNWeeks": {
"placeholders": {
"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": {
"placeholders": {
"count": {}
}
},
"months": "{count, plural, zero{} one{month} other{months}}",
"months": "{count, plural, one{Miesiąc} other{Miesiące}}",
"@months": {
"placeholders": {
"count": {}
}
},
"weeks": "{count, plural, zero{} one{week} other{weeks}}",
"weeks": "{count, plural, one{tydzień} few {tygodnie} many {tygodnie} other{tygodnie}}",
"@weeks": {
"placeholders": {
"count": {}
}
},
"years": "{count, plural, zero{} one{year} other{years}}",
"years": "{count, plural, one{rok} few {lat} many {lat} other{lat}}",
"@years": {
"placeholders": {
"count": {}
}
},
"gotIt": "Got it!",
"gotIt": "OK!",
"@gotIt": {},
"cancel": "Cancel",
"cancel": "Anuluj",
"@cancel": {},
"close": "Close",
"close": "Zamknij",
"@close": {},
"create": "Create",
"create": "Dodaj",
"@create": {},
"delete": "Delete",
"delete": "Usuń",
"@delete": {},
"edit": "Edit",
"edit": "Edytuj",
"@edit": {},
"ok": "Ok",
"@ok": {},
"save": "Save",
"save": "Zapisz",
"@save": {},
"select": "Select",
"select": "Wybierz",
"@select": {},
"saveChanges": "Zapisz zmiany",
"@saveChanges": {},
"upload": "Upload",
"upload": "Wyślij",
"@upload": {},
"youreOffline": "Jesteście w trybie offline.",
"@youreOffline": {},
"deleteDocument": "Delete document",
"deleteDocument": "Usuń dokument",
"@deleteDocument": {
"description": "Used as an action label on each inbox item"
},
"removeDocumentFromInbox": "Dokument usunięty ze skrzynki odbiorczej",
"@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": {},
"markAllAsSeen": "Mark all as seen?",
"markAllAsSeen": "Oznaczyć wszystkie jako przeczytane?",
"@markAllAsSeen": {},
"allSeen": "All seen",
"allSeen": "Wszystkie dokumenty zostały przeczytane",
"@allSeen": {},
"markAsSeen": "Mark as seen",
"markAsSeen": "Oznacz jako przeczytane",
"@markAsSeen": {},
"refresh": "Odświerz",
"@refresh": {},
"youDoNotHaveUnseenDocuments": "You do not have unseen documents.",
"youDoNotHaveUnseenDocuments": "Nie masz nieprzeczytanych dokumentów.",
"@youDoNotHaveUnseenDocuments": {},
"quickAction": "Quick Action",
"quickAction": "Szybka akcja",
"@quickAction": {},
"suggestionSuccessfullyApplied": "Suggestion successfully applied.",
"suggestionSuccessfullyApplied": "Pomyślnie zastosowano sugestię.",
"@suggestionSuccessfullyApplied": {},
"today": "Dzisiaj",
"@today": {},
"undo": "Cofnij",
"@undo": {},
"nUnseen": "{count} unseen",
"nUnseen": "{count} nieprzeczytane",
"@nUnseen": {
"placeholders": {
"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": {},
"yesterday": "Wczoraj",
"@yesterday": {},
"anyAssigned": "Any assigned",
"anyAssigned": "Przypisano etykietę",
"@anyAssigned": {},
"noItemsFound": "No items found!",
"noItemsFound": "Nie znaleziono żadnych rekordów!",
"@noItemsFound": {},
"caseIrrelevant": "Case Irrelevant",
"caseIrrelevant": "Nie rozróżniaj wielkich i małych liter",
"@caseIrrelevant": {},
"matchingAlgorithm": "Matching Algorithm",
"matchingAlgorithm": "Algorytm dopasowania",
"@matchingAlgorithm": {},
"match": "Match",
"match": "Dopasowanie",
"@match": {},
"name": "Nazwa",
"@name": {},
"notAssigned": "Not assigned",
"notAssigned": "Nie przypisano",
"@notAssigned": {},
"addNewCorrespondent": "Add new correspondent",
"addNewCorrespondent": "Dodaj nowego korespondenta",
"@addNewCorrespondent": {},
"noCorrespondentsSetUp": "You don't seem to have any correspondents set up.",
"noCorrespondentsSetUp": "Nie masz żadnych ustawionych korespondentów.",
"@noCorrespondentsSetUp": {},
"correspondents": "Correspondents",
"correspondents": "Korespondenci",
"@correspondents": {},
"addNewDocumentType": "Dodaj nowy rodzaj dokumentu",
"@addNewDocumentType": {},
"noDocumentTypesSetUp": "You don't seem to have any document types set up.",
"noDocumentTypesSetUp": "Nie masz skonfigurowanych typów dokumentów.",
"@noDocumentTypesSetUp": {},
"documentTypes": "Rodzaje dokumentów",
"@documentTypes": {},
"addNewStoragePath": "Add new storage path",
"addNewStoragePath": "Dodaj nową ścieżkę zapisu",
"@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": {},
"storagePaths": "Storage Paths",
"storagePaths": "Ścieżki zapisu",
"@storagePaths": {},
"addNewTag": "Add new tag",
"addNewTag": "Dodaj nowy tag",
"@addNewTag": {},
"noTagsSetUp": "You don't seem to have any tags set up.",
"noTagsSetUp": "Wygląda na to, że nie masz skonfigurowanych tagów.",
"@noTagsSetUp": {},
"linkedDocuments": "Linked Documents",
"linkedDocuments": "Powiązane dokumenty",
"@linkedDocuments": {},
"advancedSettings": "Advanced Settings",
"advancedSettings": "Ustawienia zaawansowane",
"@advancedSettings": {},
"passphrase": "Passphrase",
"passphrase": "Hasło",
"@passphrase": {},
"configureMutualTLSAuthentication": "Configure Mutual TLS Authentication",
"configureMutualTLSAuthentication": "Skonfiguruj wzajemne uwierzytelnianie TLS",
"@configureMutualTLSAuthentication": {},
"invalidCertificateFormat": "Invalid certificate format, only .pfx is allowed",
"invalidCertificateFormat": "Nieprawidłowy format certyfikatu, dozwolony jest tylko .pfx",
"@invalidCertificateFormat": {},
"clientcertificate": "Client Certificate",
"clientcertificate": "Certyfikat klienta",
"@clientcertificate": {},
"selectFile": "Select file...",
"selectFile": "Wybierz plik...",
"@selectFile": {},
"continueLabel": "Kontynuuj",
"@continueLabel": {},
"incorrectOrMissingCertificatePassphrase": "Incorrect or missing certificate passphrase.",
"incorrectOrMissingCertificatePassphrase": "Błędne lub brakujące hasło certyfikatu.",
"@incorrectOrMissingCertificatePassphrase": {},
"connect": "Polącz",
"@connect": {},
@@ -516,97 +516,97 @@
"@password": {},
"passwordMustNotBeEmpty": "Hasło nie może być puste.",
"@passwordMustNotBeEmpty": {},
"connectionTimedOut": "Connection timed out.",
"connectionTimedOut": "Upłynął czas połączenia.",
"@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": {},
"couldNotEstablishConnectionToTheServer": "Could not establish a connection to the server.",
"couldNotEstablishConnectionToTheServer": "Nie udało się nawiązać połączenia z serwerem.",
"@couldNotEstablishConnectionToTheServer": {},
"connectionSuccessfulylEstablished": "Connection successfully established.",
"connectionSuccessfulylEstablished": "Połączenie zostało ustanowione pomyślnie.",
"@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": {},
"serverAddress": "Adres serwera",
"@serverAddress": {},
"invalidAddress": "Invalid address.",
"invalidAddress": "Nieprawidłowy adres.",
"@invalidAddress": {},
"serverAddressMustIncludeAScheme": "Server address must include a scheme.",
"serverAddressMustIncludeAScheme": "Adres serwera musi zawierać schemat.",
"@serverAddressMustIncludeAScheme": {},
"serverAddressMustNotBeEmpty": "Server address must not be empty.",
"serverAddressMustNotBeEmpty": "Adres serwera nie może być pusty.",
"@serverAddressMustNotBeEmpty": {},
"signIn": "Sign In",
"signIn": "Zaloguj się",
"@signIn": {},
"loginPageSignInTitle": "Sign In",
"loginPageSignInTitle": "Zaloguj się",
"@loginPageSignInTitle": {},
"signInToServer": "Sign in to {serverAddress}",
"signInToServer": "Zaloguj się do {serverAddress}",
"@signInToServer": {
"placeholders": {
"serverAddress": {}
}
},
"connectToPaperless": "Connect to Paperless",
"connectToPaperless": "Połącz z Paperless",
"@connectToPaperless": {},
"username": "Username",
"username": "Nazwa użytkownika",
"@username": {},
"usernameMustNotBeEmpty": "Username must not be empty.",
"usernameMustNotBeEmpty": "Nazwa użytkownika nie może być pusta.",
"@usernameMustNotBeEmpty": {},
"documentContainsAllOfTheseWords": "Document contains all of these words",
"documentContainsAllOfTheseWords": "Dokument zawiera wszystkie poniższe słowa",
"@documentContainsAllOfTheseWords": {},
"all": "All",
"all": "Wszystkie",
"@all": {},
"documentContainsAnyOfTheseWords": "Document contains any of these words",
"documentContainsAnyOfTheseWords": "Dokument zawiera którekolwiek z poniższych słów",
"@documentContainsAnyOfTheseWords": {},
"any": "Any",
"any": "Dowolny",
"@any": {},
"learnMatchingAutomatically": "Learn matching automatically",
"learnMatchingAutomatically": "Ucz się automatycznie dopasowywania",
"@learnMatchingAutomatically": {},
"auto": "Auto",
"@auto": {},
"documentContainsThisString": "Document contains this string",
"documentContainsThisString": "Dokładne: Dokument zawiera ten ciąg znaków",
"@documentContainsThisString": {},
"exact": "Exact",
"exact": "Dokładne",
"@exact": {},
"documentContainsAWordSimilarToThisWord": "Document contains a word similar to this word",
"documentContainsAWordSimilarToThisWord": "Dokument zawiera słowo podobne do tego słowa",
"@documentContainsAWordSimilarToThisWord": {},
"fuzzy": "Fuzzy",
"fuzzy": "Przybliżone (Fuzzy)",
"@fuzzy": {},
"documentMatchesThisRegularExpression": "Document matches this regular expression",
"documentMatchesThisRegularExpression": "Dokument pasuje do wyrażenia regularnego",
"@documentMatchesThisRegularExpression": {},
"regularExpression": "Regular Expression",
"regularExpression": "Wyrażenie regularne",
"@regularExpression": {},
"anInternetConnectionCouldNotBeEstablished": "Nie można było nawiązać połączenia internetowego.",
"@anInternetConnectionCouldNotBeEstablished": {},
"done": "Done",
"done": "Wykonano",
"@done": {},
"next": "Następne",
"@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": {},
"newView": "New View",
"newView": "Nowy widok",
"@newView": {},
"createsASavedViewBasedOnTheCurrentFilterCriteria": "Creates a new view based on the current filter criteria.",
"createsASavedViewBasedOnTheCurrentFilterCriteria": "Tworzy nowy widok oparty na aktualnych kryteriach filtrowania.",
"@createsASavedViewBasedOnTheCurrentFilterCriteria": {},
"createViewsToQuicklyFilterYourDocuments": "Create views to quickly filter your documents.",
"createViewsToQuicklyFilterYourDocuments": "Utwórz widoki aby szybko filtrować dokumenty.",
"@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": {
"placeholders": {
"count": {}
}
},
"showInSidebar": "Show in sidebar",
"showInSidebar": "Pokaż w panelu bocznym",
"@showInSidebar": {},
"showOnDashboard": "Show on dashboard",
"showOnDashboard": "Pokaż na pulpicie",
"@showOnDashboard": {},
"views": "Views",
"views": "Widoki",
"@views": {},
"clearAll": "Clear all",
"clearAll": "Wyczyść wszystko",
"@clearAll": {},
"scan": "Skanuj",
"@scan": {},
"previewScan": "Preview",
"previewScan": "Podgląd",
"@previewScan": {},
"scrollToTop": "Scroll to top",
"scrollToTop": "Przewiń do góry",
"@scrollToTop": {},
"paperlessServerVersion": "Wersja serwera Paperless",
"@paperlessServerVersion": {},
@@ -622,9 +622,9 @@
"@languageAndVisualAppearance": {},
"applicationSettings": "Aplikacja",
"@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": {},
"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": {},
"colors": "Kolory",
"@colors": {},
@@ -632,9 +632,9 @@
"@language": {},
"security": "Zabezpieczenia",
"@security": {},
"mangeFilesAndStorageSpace": "Manage files and storage space",
"mangeFilesAndStorageSpace": "Zarządzaj plikami i przestrzenią dyskową",
"@mangeFilesAndStorageSpace": {},
"storage": "Storage",
"storage": "Pamięć",
"@storage": {},
"dark": "Ciemny",
"@dark": {},
@@ -642,9 +642,9 @@
"@light": {},
"system": "System",
"@system": {},
"ascending": "Ascending",
"ascending": "Rosnąco",
"@ascending": {},
"descending": "Descending",
"descending": "Malejąco",
"@descending": {},
"storagePathDay": "dzień",
"@storagePathDay": {},
@@ -654,130 +654,162 @@
"@storagePathYear": {},
"color": "Kolor",
"@color": {},
"filterTags": "Filter tags...",
"filterTags": "Filtruj tagi...",
"@filterTags": {},
"inboxTag": "Tag skrzynki odbiorczej",
"@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": {},
"useTheConfiguredBiometricFactorToAuthenticate": "Use the configured biometric factor to authenticate and unlock your documents.",
"useTheConfiguredBiometricFactorToAuthenticate": "Użyj skonfigurowanego czynnika biometrycznego, aby uwierzytelnić i odblokować dokumenty.",
"@useTheConfiguredBiometricFactorToAuthenticate": {},
"verifyYourIdentity": "Verify your identity",
"verifyYourIdentity": "Zweryfikuj swoją tożsamość",
"@verifyYourIdentity": {},
"verifyIdentity": "Verify Identity",
"verifyIdentity": "Zweryfikuj tożsamość",
"@verifyIdentity": {},
"detailed": "Detailed",
"detailed": "Widok szczegółowy",
"@detailed": {},
"grid": "Grid",
"grid": "Siatka",
"@grid": {},
"list": "List",
"list": "Lista",
"@list": {},
"remove": "Remove",
"removeQueryFromSearchHistory": "Remove query from search history?",
"dynamicColorScheme": "Dynamic",
"remove": "Usuń",
"removeQueryFromSearchHistory": "Usunąć zapytanie z historii wyszukiwania?",
"dynamicColorScheme": "Dynamiczny",
"@dynamicColorScheme": {},
"classicColorScheme": "Classic",
"classicColorScheme": "Klasyczny",
"@classicColorScheme": {},
"notificationDownloadComplete": "Download complete",
"notificationDownloadComplete": "Pobieranie ukończone",
"@notificationDownloadComplete": {
"description": "Notification title when a download has been completed."
},
"notificationDownloadingDocument": "Downloading document",
"notificationDownloadingDocument": "Pobieranie dokumentu",
"@notificationDownloadingDocument": {
"description": "Notification title shown when a document download is pending"
},
"archiveSerialNumberUpdated": "Archive Serial Number updated.",
"archiveSerialNumberUpdated": "Numer ASN zmodyfikowany.",
"@archiveSerialNumberUpdated": {
"description": "Message shown when the ASN has been updated."
},
"donateCoffee": "Buy me a coffee",
"donateCoffee": "Kup mi kawę",
"@donateCoffee": {
"description": "Label displayed in the app drawer"
},
"thisFieldIsRequired": "This field is required!",
"thisFieldIsRequired": "To pole jest wymagane!",
"@thisFieldIsRequired": {
"description": "Message shown below the form field when a required field has not been filled out."
},
"confirm": "Confirm",
"confirmAction": "Confirm action",
"confirm": "Potwierdź",
"confirmAction": "Zatwierdź akcje",
"@confirmAction": {
"description": "Typically used as a title to confirm a previously selected action"
},
"areYouSureYouWantToContinue": "Are you sure you want to continue?",
"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.}}",
"areYouSureYouWantToContinue": "Czy na pewno chcesz kontynuować?",
"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": {
"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": {
"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": {
"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.}}",
"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.}}",
"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.}}",
"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.}}",
"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.}}",
"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.}}",
"anyTag": "Any",
"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{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{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{Ta operacja usunie korespondenta z wybranego dokumentu.} other{Ta operacja usunie korespondenta z {count} wybranych dokumentów}}",
"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{Ta operacja usunie tagi z wybranego dokumentu.} other{Ta operacja usunie tagi z {count} wybranych dokumentów.}}",
"anyTag": "Dowolny",
"@anyTag": {
"description": "Label shown when any tag should be filtered"
},
"allTags": "All",
"allTags": "Wszystkie",
"@allTags": {
"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": {
"description": "Message shown while switching accounts is in progress."
},
"testConnection": "Test connection",
"testConnection": "Test połączenia",
"@testConnection": {
"description": "Button label shown on login page. Allows user to test whether the server is reachable or not."
},
"accounts": "Accounts",
"accounts": "Konta",
"@accounts": {
"description": "Title of the account management dialog"
},
"addAccount": "Add account",
"addAccount": "Dodaj konto",
"@addAccount": {
"description": "Label of add account action"
},
"switchAccount": "Switch",
"switchAccount": "Przełącz",
"@switchAccount": {
"description": "Label for switch account action"
},
"logout": "Logout",
"logout": "Wyloguj się",
"@logout": {
"description": "Generic Logout label"
},
"switchAccountTitle": "Switch account",
"switchAccountTitle": "Zmień konto",
"@switchAccountTitle": {
"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": {
"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",
"findTheSourceCodeOn": "Find the source code on",
"sourceCode": "Kod źródłowy",
"findTheSourceCodeOn": "Znajdź kod źródłowy na",
"@findTheSourceCodeOn": {
"description": "Text before link to Paperless Mobile GitHub"
},
"rememberDecision": "Remember my decision",
"defaultDownloadFileType": "Default Download File Type",
"rememberDecision": "Zapamiętaj mój wybór",
"defaultDownloadFileType": "Domyślny typ pliku do pobrania",
"@defaultDownloadFileType": {
"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": {
"description": "Label indicating the default filetype to share (one of archived, original and always ask)"
},
"alwaysAsk": "Always ask",
"alwaysAsk": "Zawsze pytaj",
"@alwaysAsk": {
"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": {
"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": {
"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,
submitText: S.of(context)!.signIn,
onSubmit: _onLogin,
showLocalAccounts: true,
),
requriresLocalAuthentication: () => const VerifyIdentityPage(),
authenticated: (localUserId, apiVersion) => HomeRoute(